Quellcode durchsuchen

Merge branch 'feature/v0.8/addelement' into master/v0.8

Sevajol Bastien vor 12 Jahren
Ursprung
Commit
3ed51e0025

+ 1 - 0
app/Resources/translations/navigationui.fr.yml Datei anzeigen

@@ -23,6 +23,7 @@ home:
23 23
   add_element:          Ajouter un élément
24 24
   add_element_box:
25 25
     close:              Fermer
26
+  check_url:            Ajouter
26 27
   
27 28
 group:
28 29
   add_element:          Ajouter un élément dans ce groupe

+ 4 - 2
app/Resources/translations/userui.fr.yml Datei anzeigen

@@ -78,15 +78,17 @@ filter:
78 78
   tag_strict:       Chaques tag doit être trouvé
79 79
   
80 80
 element_add:
81
+  prop_tags:
82
+    text:     "Proposition de tags:"
81 83
   url:
82
-    name:     Lien
84
+    name:     http://
83 85
     help:     |
84 86
               Copier ici le lien internet (http://) pointant sur la ressource 
85 87
               que vous souhaitez partager.
86 88
   need_tags:
87 89
     name:     Demander de l'aide pour tagger votre partage
88 90
   name:
89
-    name:     Nom
91
+    name:     Titre de la piste - Artiste
90 92
     
91 93
   added_to_group:
92 94
     sentence:       |

+ 3 - 0
app/Resources/translations/validators.fr.yml Datei anzeigen

@@ -33,6 +33,9 @@ error:
33 33
       notblank:          Vous devez saisir un nom
34 34
       toshort:           Le nom est trop court
35 35
       tolong:            Le nom est trop long
36
+  url:
37
+    invalid:             L'adresse fournie est invalide
38
+  
36 39
       
37 40
 registration:
38 41
   token:

+ 83 - 0
src/Muzich/CoreBundle/Controller/ElementController.php Datei anzeigen

@@ -8,6 +8,7 @@ use Muzich\CoreBundle\Propagator\EventElement;
8 8
 use Muzich\CoreBundle\Entity\ElementTagsProposition;
9 9
 use Symfony\Component\HttpFoundation\Request;
10 10
 use Muzich\CoreBundle\Entity\Element;
11
+use Muzich\CoreBundle\Util\TagLike;
11 12
 
12 13
 class ElementController extends Controller
13 14
 {
@@ -871,4 +872,86 @@ class ElementController extends Controller
871 872
     ));
872 873
   }
873 874
   
875
+  protected function findTagsWithProposeds($tags)
876
+  {
877
+    $tag_like = new TagLike($this->getDoctrine());
878
+    $tags_with_likes = array();
879
+    foreach ($tags as $tag_name)
880
+    {
881
+      // On va determiner si on connais ces tags
882
+      $tag_like_tag = $tag_like->getSimilarTags($tag_name, $this->getUserId());
883
+      
884
+      // Premièrement: Si on a trouvé des équivalents en base
885
+      if (array_key_exists('tags', $tag_like_tag))
886
+      {
887
+        if (count($tag_like_tag['tags']))
888
+        {
889
+          // Deuxièmement: Si nos algorythmes on déterminés qu'on l'a en base
890
+          if ($tag_like_tag['same_found'])
891
+          {
892
+            // A ce moment là on le considère comme "bon"
893
+            // Et on prend le premier
894
+            $tags_with_likes[] = array(
895
+              'original_name' => $tag_name,
896
+              'like_found'    => true,
897
+              'like'          => $tag_like_tag['tags'][0]
898
+            );
899
+          }
900
+          // On considère ce tag comme inconnu, l'utilisateur peut toute fois 
901
+          // l'ajouté a notre base.
902
+          else
903
+          {
904
+            $tags_with_likes[] = array(
905
+              'original_name' => $tag_name,
906
+              'like_found'    => false,
907
+              'like'          => array()
908
+            );
909
+          }
910
+        }
911
+      }
912
+    }
913
+    
914
+    return $tags_with_likes;
915
+  }
916
+  
917
+  public function getDatasApiAction(Request $request)
918
+  {
919
+    if (($response = $this->mustBeConnected(true)))
920
+    {
921
+      return $response;
922
+    }
923
+    
924
+    // On vérifie la tête de l'url quand même
925
+    if (filter_var($request->get('url'), FILTER_VALIDATE_URL) === false)
926
+    {
927
+      return $this->jsonResponse(array(
928
+        'status' => 'error',
929
+        'errors' => array(
930
+          $this->trans('error.url.invalid', array(), 'validators')
931
+        )
932
+      ));
933
+    }
934
+    
935
+    // On construit l'élèment qui va nous permettre de travailler avec l'api
936
+    $element = new Element();
937
+    $element->setUrl($request->get('url'));
938
+    
939
+    $factory = new ElementManager($element, $this->getEntityManager(), $this->container);
940
+    $factory->proceedFill($this->getUser());
941
+    
942
+    // On gère les tags proposés
943
+    $tags_propositions = array();
944
+    if (count($tags = $element->getProposedTags()))
945
+    {
946
+      $tags_propositions = $this->findTagsWithProposeds($tags);
947
+    }
948
+    
949
+    return $this->jsonResponse(array(
950
+      'status' => 'success',
951
+      'name'   => $element->getProposedName(),
952
+      'tags'   => $tags_propositions,
953
+      'thumb'  => $element->getThumbnailUrl() 
954
+    ));
955
+  }
956
+  
874 957
 }

+ 26 - 0
src/Muzich/CoreBundle/Entity/Element.php Datei anzeigen

@@ -903,4 +903,30 @@ class Element
903 903
     return false;
904 904
   }
905 905
   
906
+  public function getProposedName()
907
+  {
908
+    if (($title = $this->getData(self::DATA_TITLE)))
909
+    {
910
+      if (($artist = $this->getData(self::DATA_ARTIST)))
911
+      {
912
+        $artist = ' - '.$artist;
913
+      }
914
+      return $title.$artist;
915
+    }
916
+    return null;
917
+  }
918
+  
919
+  /**
920
+   *
921
+   * @return type 
922
+   */
923
+  public function getProposedTags()
924
+  {
925
+    if (count($tags = $this->getData(self::DATA_TAGS)))
926
+    {
927
+      return $tags;
928
+    }
929
+    return array();
930
+  }
931
+  
906 932
 }

+ 2 - 2
src/Muzich/CoreBundle/Factory/Elements/Jamendocom.php Datei anzeigen

@@ -63,7 +63,7 @@ class Jamendocom extends ElementFactory
63 63
     {
64 64
       case 'album':
65 65
         $api_url = "http://api.jamendo.com/get2/"
66
-          ."id+name+url+image+artist_name+artist_url/album/jsonpretty/?album_id=".$ref_id;
66
+          ."id+name+url+image+artist_name+artist_url/album/json/?album_id=".$ref_id;
67 67
         $api_tag_url = "http://api.jamendo.com/get2/name+weight/tag/json/album_tag/?album_id=".$ref_id;
68 68
       break;
69 69
     
@@ -83,7 +83,7 @@ class Jamendocom extends ElementFactory
83 83
       );
84 84
       curl_setopt_array( $ch, $options );
85 85
       $result = json_decode(curl_exec($ch), true);
86
-            
86
+      
87 87
       if (count($result))
88 88
       {
89 89
         // Thumb

+ 7 - 1
src/Muzich/CoreBundle/Resources/config/routing.yml Datei anzeigen

@@ -155,4 +155,10 @@ teapot:
155 155
   pattern: /what/are/you
156 156
   defaults: { _controller: MuzichCoreBundle:Info:teapot }
157 157
   
158
-  
158
+#
159
+
160
+element_retrieve_api_datas:
161
+  pattern: /ajax/element/get/datas/api
162
+  defaults: { _controller: MuzichCoreBundle:Element:getDatasApi }
163
+  requirements:
164
+    method:  POST

+ 59 - 18
src/Muzich/CoreBundle/Resources/views/Element/form.add.html.twig Datei anzeigen

@@ -2,30 +2,71 @@
2 2
 
3 3
 {{ form_errors(form) }}
4 4
 
5
-<span class="help">{{ 'element_add.url.help'|trans({}, 'userui') }}</span>
5
+<div id="form_add_first_part">
6 6
 
7
-<div class="field">
8
-  {{ form_errors(form.url) }}
9
-  {{ form_label(form.url, 'element_add.url.name'|trans({}, 'userui')) }}
10
-  {{ form_widget(form.url) }}
11
-</div>
7
+  <span class="help">{{ 'element_add.url.help'|trans({}, 'userui') }}</span>
8
+
9
+  <div class="field fom_add_url">
10
+    {{ form_errors(form.url) }}
11
+    {{ form_widget(form.url, { 'attr': {
12
+      'placeholder': 'element_add.url.name'|trans({}, 'userui')},
13
+      'type': 'URL'
14
+    }) }}
15
+
16
+    <a href="#" id="form_add_check_url" class="button">
17
+      {{ 'home.check_url'|trans({}, 'navigationui') }}
18
+    </a>
12 19
 
13
-<div class="field">
14
-  {{ form_errors(form.name) }}
15
-  {{ form_label(form.name, 'element_add.name.name'|trans({}, 'userui')) }}
16
-  {{ form_widget(form.name) }}
20
+  </div>
21
+    
17 22
 </div>
18 23
 
19
-  {% include "MuzichCoreBundle:Tag:tagsPrompt.html.twig" with { 
20
-    'form_name'     : form_name
21
-  } %}
24
+<div id="form_add_second_part" style="display: none;">
25
+  
26
+  <table>
27
+    <tr>
28
+      <td style="vertical-align: top;">
29
+        <div id="form_add_thumb">
30
+          <img src="{{ asset('bundles/muzichcore/img/nothumb.png') }}" />
31
+        </div>
32
+      </td>
33
+      <td style="vertical-align: top;">
34
+        <div class="field fom_add_name">
35
+          {{ form_errors(form.name) }}
36
+          {{ form_widget(form.name, { 'attr': {'placeholder': 'element_add.name.name'|trans({}, 'userui')} }) }}
37
+        </div>
22 38
 
23
-  {{ form_widget(form.tags, { 'attr': {'class': 'tagBox_tags_ids'} }) }}
39
+          <p id="form_add_prop_tags_text" style="display: none;">
40
+            {{ 'element_add.prop_tags.text'|trans({}, 'userui') }}
41
+          </p>
42
+          <ul id="form_add_prop_tags" style="display: none;"></ul>
24 43
 
25
-<div class="field">
26
-  {{ form_errors(form.need_tags) }}
27
-  {{ form_widget(form.need_tags) }}
28
-  {{ form_label(form.need_tags, 'element_add.need_tags.name'|trans({}, 'userui')) }}
44
+          {% include "MuzichCoreBundle:Tag:tagsPrompt.html.twig" with { 
45
+            'form_name'     : form_name
46
+          } %}
47
+
48
+          {{ form_widget(form.tags, { 'attr': {'class': 'tagBox_tags_ids'} }) }}
49
+
50
+        <div class="field">
51
+          {{ form_errors(form.need_tags) }}
52
+          {{ form_widget(form.need_tags) }}
53
+          {{ form_label(form.need_tags, 'element_add.need_tags.name'|trans({}, 'userui')) }}
54
+        </div>
55
+      </td>
56
+    </tr>
57
+  </table>
58
+  
59
+  
60
+  
61
+  
62
+  
63
+    
64
+  <input type="submit" value="Partager cette ressource" />
65
+    
29 66
 </div>
30 67
 
68
+    <img id="form_add_loader" class="tag_loader" style="display: none;" 
69
+      src="{{ asset('/bundles/muzichcore/img/ajax-loader.gif') }}" alt="loading" 
70
+    />
71
+
31 72
 {{ form_row(form._token) }}

+ 3 - 4
src/Muzich/CoreBundle/Resources/views/Tag/tagsPrompt.html.twig Datei anzeigen

@@ -11,9 +11,9 @@
11 11
     {% endif %}
12 12
   {% endif %}
13 13
   
14
-   <input class="tags_prompt_list" name="tags" value=""> 
14
+   <input class="tags_prompt_list" name="tags" value="" /> 
15 15
    <input id="tags_selected_tag_{{ form_name }}" type="hidden" value="" />
16
-   <input class="tag_text_help" type="hidden" value="{{ 'tags.inputtext.help'|trans({}, 'userui') }}"/>
16
+   
17 17
    <div id="search_tag_{{ form_name }}" class="search_tag_list" style="display: none;">
18 18
      <span class="info"></span>
19 19
      <div class="tag_loader_div">
@@ -46,8 +46,7 @@
46 46
   // garde la valeur de l'input)
47 47
   $(document).ready(function(){
48 48
     $('div#tags_prompt_{{ form_name }} ul.tagbox li.input input[type="text"]')
49
-      .val(string_tag_prompt_input_help)
50
-    ;
49
+      .attr('placeholder', "{{ 'tags.inputtext.help'|trans({}, 'userui') }}");
51 50
   });
52 51
   
53 52
   // On détruit la variable taginit

+ 6 - 2
src/Muzich/CoreBundle/Resources/views/layout.html.twig Datei anzeigen

@@ -16,7 +16,11 @@
16 16
 	<link href="{{ asset('bundles/muzichcore/css/base.css') }}" rel="stylesheet" media="screen" type="text/css" />
17 17
 	<link href="{{ asset('bundles/muzichcore/css/main.css') }}" rel="stylesheet" media="screen" type="text/css" />
18 18
   {% block css %}{% endblock %}
19
-	<script src="{{ asset('js/jquery-1.6.4.min.js') }}" type="text/javascript"></script>
19
+  {% if  app.environment != 'prod' %}  
20
+	<script src="{{ asset('js/jquery-1.8.2.dev.js') }}" type="text/javascript"></script>
21
+  {% else %}
22
+	<script src="{{ asset('js/jquery-1.8.2.prod.js') }}" type="text/javascript"></script>
23
+  {% endif %}
20 24
   <script src="{{ asset('js/jquery-ui-1.8.7.min.js') }}" type="text/javascript"></script>
21 25
 	<script src="{{ asset('bundles/muzichcore/js/muzich.js') }}" type="text/javascript"></script>
22 26
   <script src="{{ asset('js/tags/jquery.autoGrowInput.js') }}" type="text/javascript"></script>
@@ -28,7 +32,6 @@
28 32
     string_follow_stop = "{{ 'user.stop_follow'|trans({}, 'users') }}";
29 33
     string_follow_following = "{{ 'user.following'|trans({}, 'users') }}";
30 34
     string_follow_follow = "{{ 'user.follow'|trans({}, 'users') }}";
31
-    string_tag_prompt_input_help = "{{ 'tags.inputtext.help'|trans({}, 'userui') }}";
32 35
     string_tag_add_title = "{{ 'tags.add.title'|trans({}, 'userui') }}";
33 36
     string_tag_add_text = "{{ 'tags.add.text'|trans({}, 'userui') }}";
34 37
     string_tag_add_argument = "{{ 'tags.add.argument'|trans({}, 'userui') }}";
@@ -63,6 +66,7 @@
63 66
     url_element_new_count = "{{ path('element_new_count') }}";
64 67
     url_element_new_get = "{{ path('element_new_get') }}";
65 68
     url_global_search = "{{ path('global_search') }}";
69
+    url_datas_api = "{{ path('element_retrieve_api_datas') }}";
66 70
     
67 71
     url_img_ajax_loader = "{{ asset('/bundles/muzichcore/img/ajax-loader.gif') }}";
68 72
   </script>

+ 61 - 0
src/Muzich/CoreBundle/Tests/Controller/ElementControllerTest.php Datei anzeigen

@@ -1296,4 +1296,65 @@ class ElementControllerTest extends FunctionalTest
1296 1296
     
1297 1297
   }
1298 1298
   
1299
+  public function testDatasApi()
1300
+  {
1301
+    $this->client = self::createClient();
1302
+    $this->connectUser('joelle', 'toor');
1303
+    
1304
+    $joelle = $this->getUser();
1305
+    $url = $this->generateUrl('element_retrieve_api_datas');
1306
+    
1307
+    $crawler = $this->client->request(
1308
+      'POST', 
1309
+      $url, 
1310
+      array(
1311
+        'url' => 'http://www.jamendo.com/fr/album/30661'
1312
+      ), 
1313
+      array(), 
1314
+      array('HTTP_X-Requested-With' => 'XMLHttpRequest')
1315
+    );
1316
+    
1317
+    $this->isResponseSuccess();
1318
+    
1319
+    $response = json_decode($this->client->getResponse()->getContent(), true);
1320
+    $this->assertEquals(array(
1321
+    'status' => 'success',
1322
+    'name' => 'ZwaNe 01 - Ptit lutin',
1323
+    'tags' => array(
1324
+      0 => array(
1325
+        'original_name' => 'Basse',
1326
+        'like_found' => false,
1327
+        'like' => array()
1328
+      ),
1329
+      1 => array(
1330
+        'original_name' => 'Batterie',
1331
+        'like_found' => true,
1332
+        'like' => array(
1333
+          'name' => 'Batterie',
1334
+          'id' => '495',
1335
+          'slug' => 'batterie',
1336
+        )
1337
+      ),
1338
+      2 => array(
1339
+        'original_name' => 'Hardtek',
1340
+        'like_found' => true,
1341
+        'like' => array(
1342
+          'name' => 'Hardtek',
1343
+          'id' => '174',
1344
+          'slug' => 'hardtek',
1345
+        )
1346
+      ),
1347
+      3 => array(
1348
+        'original_name' => 'Tek',
1349
+        'like_found' => false,
1350
+        'like' => array()
1351
+      ),
1352
+    ),
1353
+    'thumb' => 'http://imgjam.com/albums/s30/30661/covers/1.100.jpg'
1354
+    ), $response);
1355
+    
1356
+    
1357
+    
1358
+  }
1359
+  
1299 1360
 }

+ 25 - 4
src/Muzich/HomeBundle/Resources/views/Home/index.html.twig Datei anzeigen

@@ -4,6 +4,7 @@
4 4
 
5 5
 {% block content %}
6 6
 
7
+  {#
7 8
   <div id="element_add_box" style="display: none;">
8 9
     
9 10
     <a href="#" id="element_add_close_link" class="button">
@@ -21,6 +22,30 @@
21 22
       <img class="tag_loader" style="display: none;" src="{{ asset('/bundles/muzichcore/img/ajax-loader.gif') }}" alt="loading" />
22 23
     </form>
23 24
   </div>
25
+  #}
26
+
27
+
28
+
29
+  <div id="element_add_box" style="display: none;">    
30
+    
31
+    <a href="#" id="element_add_close_link" class="button">
32
+      &lt;&lt; {{ 'home.add_element_box.close'|trans({}, 'navigationui') }}
33
+    </a>
34
+    
35
+    <form novalidate name="{{ add_form_name }}" action="{{ path('element_add') }}" method="post" {{ form_enctype(add_form) }}>
36
+
37
+      {% include "MuzichCoreBundle:Element:form.add.html.twig" with { 
38
+        'form'          : add_form, 
39
+        'form_name'     : add_form_name
40
+      } %}
41
+
42
+    </form>
43
+  </div>
44
+
45
+
46
+  <a href="#" id="element_add_link" class="button">
47
+    {{ 'home.add_element'|trans({}, 'navigationui') }} &gt;&gt;
48
+  </a>
24 49
 
25 50
   <div id="added_element_to_group" style="display: none;">
26 51
     <img class="loader" style="display: none;" src="{{ asset('/bundles/muzichcore/img/ajax-loader.gif') }}" alt="loading" />
@@ -35,10 +60,6 @@
35 60
     </p>
36 61
   </div>
37 62
 
38
-  <a href="#" id="element_add_link" class="button">
39
-    {{ 'home.add_element'|trans({}, 'navigationui') }} &gt;&gt;
40
-  </a>
41
-
42 63
   <form name="{{ search_form_name }}" action="{{ path('search_elements') }}" method="post" {{ form_enctype(search_form) }}>
43 64
 
44 65
     {% include "MuzichCoreBundle:SearchElement:form.html.twig" with { 

+ 8 - 1
web/bundles/muzichcore/css/main.css Datei anzeigen

@@ -996,13 +996,20 @@ div.display_more_elements
996 996
   text-align: center;
997 997
 }
998 998
 
999
-input#element_add_url, input#element_add_name
999
+input#element_add_url
1000 1000
 {
1001 1001
   width: 70%;
1002 1002
   font-size: 110%;
1003 1003
   font-weight: bold;
1004 1004
 }
1005 1005
 
1006
+input#element_add_name
1007
+{
1008
+  width: 100%;
1009
+  font-size: 110%;
1010
+  font-weight: bold;
1011
+}
1012
+
1006 1013
 label#element_add_url, label#element_add_name
1007 1014
 {
1008 1015
   

+ 287 - 138
web/bundles/muzichcore/js/muzich.js Datei anzeigen

@@ -217,9 +217,7 @@ function remove_tags(form_name)
217 217
   //tagsAddeds[form_name] = new Array();
218 218
   $('form[name="'+form_name+'"] ul.tagbox li.tag').remove();
219 219
   $('form[name="'+form_name+'"] input.tagBox_tags_ids').val('');
220
-  $('div#tags_prompt_'+form_name+' ul.tagbox li.input input[type="text"]')
221
-    .val(string_tag_prompt_input_help)
222
-  ;
220
+  
223 221
 }
224 222
 
225 223
 $(document).ready(function(){
@@ -687,7 +685,6 @@ $(document).ready(function(){
687 685
   ////////////////// TAG PROMPT ///////////////
688 686
  
689 687
   var ajax_query_timestamp = null;
690
-  var tag_text_help = $('input.tag_text_help').val();
691 688
  
692 689
   // Les deux clicks ci-dessous permettent de faire disparaitre
693 690
   // la div de tags lorsque l'on clique ailleurs
@@ -706,7 +703,7 @@ $(document).ready(function(){
706 703
   function autocomplete_tag(input, form_name)
707 704
   {
708 705
     // Il doit y avoir au moin un caractère
709
-    if ((input.val().length > 0) && (input.val() != string_tag_prompt_input_help)) 
706
+    if (input.val().length > 0) 
710 707
     {
711 708
 
712 709
       // on met en variable l'input
@@ -808,7 +805,8 @@ $(document).ready(function(){
808 805
                       inputTag.trigger("selectTag");
809 806
                       // On cache la liste puisque le choix vient d'être fait
810 807
                       divtags.hide();
811
-                      inputTag.val(tag_text_help); 
808
+                      // On vide le champs de saisie du tag
809
+                      $('input.form-default-value-processed').val('');
812 810
                       return false;
813 811
                     })
814 812
                     .append(t_string)
@@ -851,128 +849,15 @@ $(document).ready(function(){
851 849
             // Si le tag ne semble pas connu en base
852 850
             if (!data.same_found)
853 851
             {
854
-              // Cette variable nous permettra de stocker le lien nouveau tag
855
-              var link_add_tag = null;
856
-              
857 852
               li_tag = 
858 853
                 $('<li>').addClass('new').append(
859 854
                   $('<a>').attr('href','#new#'+$.trim(input.val()))
860 855
                   // qui réagit quand on clique dessus
861
-                  .click(function(e){
862
-                    
863
-                    // Effet fade-in du fond opaque
864
-                    $('body').append($('<div>').attr('id', 'fade')); 
865
-                    //Apparition du fond - .css({'filter' : 'alpha(opacity=80)'}) pour corriger les bogues de IE
866
-                    $('#fade').css({'filter' : 'alpha(opacity=80)'}).fadeIn();
867
-                    
868
-                    // On met le lien cliqué dans la variabke prévu
869
-                    link_add_tag = $(this);
870
-                    
871
-                    // En premier lieux on fait apparaître la fenêtre de confirmation
872
-                    var popup = $('<div>')
873
-                    .attr('id', 'add_tag')
874
-                    .addClass('popin_block')
875
-                    .css('width', '400px')
876
-                      //.append($('<h2>').append(string_tag_add_title))
877
-                   .append($('<form>')
878
-                     .attr('action', url_add_tag)
879
-                     .attr('method', 'post')
880
-                     .attr('name', 'add_tag')
881
-                     .ajaxForm(function(response) {
882
-                       /*
883
-                        *
884
-                        */
885
-
886
-                        if (response.status == 'mustbeconnected')
887
-                        {
888
-                          $(location).attr('href', url_index);
889
-                        }
890
-
891
-                        if (response.status == 'success')
892
-                        {
893
-                          var tag_id   = response.tag_id;
894
-                          var tag_name = response.tag_name;
895
-
896
-                          $('input#tags_selected_tag_'+form_name).val(tag_id);
897
-                          inputTag.val(tag_name);
898
-                          // Et on execute l'évènement selectTag de l'input
899
-                          inputTag.trigger("selectTag");
900
-                          // On cache la liste puisque le choix vient d'être fait
901
-                          divtags.hide();
902
-                          inputTag.val(tag_text_help); 
903
-
904
-                          link_add_tag.parents('div.search_tag_list').find('img.tag_loader').hide();
905
-
906
-                          $('#fade').fadeOut(400, function(){$('#fade').remove();});
907
-                          $('#add_tag').remove();
908
-                        }
909
-                        
910
-                        if (response.status == 'error')
911
-                        {
912
-                          $('form[name="add_tag"]').find('ul.error_list').remove();
913
-                          var ul_errors = $('<ul>').addClass('error_list');
914
-
915
-                          for (i in response.errors)
916
-                          {
917
-                            ul_errors.append($('<li>').append(response.errors[i]));
918
-                          }
919
-
920
-                          $('form[name="add_tag"]').prepend(ul_errors);
921
-                        }
922
-                        
923
-                        return false;
924
-                     })
925
-                     
926
-                      .append($('<div>').addClass('tag')
927
-                        .append($('<ul>')
928
-                          .append($('<li>').addClass('button')
929
-                            .append($(this).text()))))
930
-                      .append($('<p>').append(string_tag_add_text))
931
-                      .append($('<p>').append(string_tag_add_argument))
932
-                      .append($('<textarea>').attr('name', 'argument'))
933
-                      .append($('<div>').addClass('inputs')
934
-                        .append($('<input>')
935
-                          .attr('type', 'button')
936
-                          .attr('value', string_tag_add_inputs_cancel)
937
-                          .addClass('button')
938
-                          .click(function(){
939
-                            $('#fade').fadeOut(1000, function(){$('#fade').remove();});
940
-                            $('#add_tag').remove();
941
-                            
942
-                            return false;
943
-                          })
944
-                        )
945
-                        .append($('<input>')
946
-                          .attr('type', 'submit')
947
-                          .attr('value', string_tag_add_inputs_submit)
948
-                          .addClass('button')
949
-                          .click(function(){
950
-                            
951
-                            link_add_tag.parents('div.search_tag_list').find('img.tag_loader').show();
952
-                          
953
-                          })
954
-                        )
955
-                        .append($('<input>').attr('type', 'hidden').attr('name', 'tag_name').val($(this).text()))
956
-                      ))
957
-                    ;
958
-                    
959
-                    // Il faut ajouter le popup au dom avant de le positionner en css
960
-                    // Sinon la valeur height n'est pas encore calculable
961
-                    $('body').prepend(popup);
962
-                    
963
-                    //Récupération du margin, qui permettra de centrer la fenêtre - on ajuste de 80px en conformité avec le CSS
964
-                    var popMargTop = (popup.height() + 50) / 2;
965
-                    var popMargLeft = (popup.width() + 50) / 2;
966
-                    
967
-                    //On affecte le margin
968
-                    $(popup).css({
969
-                      'margin-top' : -popMargTop,
970
-                      'margin-left' : -popMargLeft
971
-                    });
972
-                    
973
-                    return false;
974
-                    
975
-                  })
856
+                  .click({
857
+                    inputTag: inputTag,
858
+                    form_name: form_name,
859
+                    divtags: divtags
860
+                  }, event_click_new_tag_proposition)
976 861
                   .append($.trim(input.val()))
977 862
               );
978 863
               search_tag_list.append(li_tag);
@@ -991,7 +876,124 @@ $(document).ready(function(){
991 876
       
992 877
     }
993 878
   }
879
+  
880
+  function event_click_new_tag_proposition(event)
881
+  {
882
+    form_add_open_dialog_for_new_tag($(event.target), event.data.inputTag, event.data.form_name, event.data.divtags);
883
+  }
994 884
  
885
+  function form_add_open_dialog_for_new_tag(link_add_tag, inputTag, form_name, divtags)
886
+  {       
887
+    
888
+    
889
+    // Effet fade-in du fond opaque
890
+    $('body').append($('<div>').attr('id', 'fade')); 
891
+    //Apparition du fond - .css({'filter' : 'alpha(opacity=80)'}) pour corriger les bogues de IE
892
+    $('#fade').css({'filter' : 'alpha(opacity=80)'}).fadeIn();
893
+    
894
+    // En premier lieux on fait apparaître la fenêtre de confirmation
895
+    var popup = $('<div>')
896
+    .attr('id', 'add_tag')
897
+    .addClass('popin_block')
898
+    .css('width', '400px')
899
+      //.append($('<h2>').append(string_tag_add_title))
900
+    .append($('<form>')
901
+      .attr('action', url_add_tag)
902
+      .attr('method', 'post')
903
+      .attr('name', 'add_tag')
904
+      .ajaxForm(function(response) {
905
+        /*
906
+        *
907
+        */
908
+
909
+        if (response.status == 'mustbeconnected')
910
+        {
911
+          $(location).attr('href', url_index);
912
+        }
913
+
914
+        if (response.status == 'success')
915
+        {
916
+          var tag_id   = response.tag_id;
917
+          var tag_name = response.tag_name;
918
+
919
+          $('input#tags_selected_tag_'+form_name).val(tag_id);
920
+          inputTag.val(tag_name);
921
+          // Et on execute l'évènement selectTag de l'input
922
+          inputTag.trigger("selectTag");
923
+          // On cache la liste puisque le choix vient d'être fait
924
+          divtags.hide();
925
+
926
+          link_add_tag.parents('div.search_tag_list').find('img.tag_loader').hide();
927
+
928
+          $('#fade').fadeOut(400, function(){$('#fade').remove();});
929
+          $('#add_tag').remove();
930
+        }
931
+
932
+        if (response.status == 'error')
933
+        {
934
+          $('form[name="add_tag"]').find('ul.error_list').remove();
935
+          var ul_errors = $('<ul>').addClass('error_list');
936
+
937
+          for (i in response.errors)
938
+          {
939
+            ul_errors.append($('<li>').append(response.errors[i]));
940
+          }
941
+
942
+          $('form[name="add_tag"]').prepend(ul_errors);
943
+        }
944
+
945
+        return false;
946
+      })
947
+
948
+      .append($('<div>').addClass('tag')
949
+        .append($('<ul>')
950
+          .append($('<li>').addClass('button')
951
+            .append(link_add_tag.text()))))
952
+      .append($('<p>').append(string_tag_add_text))
953
+      .append($('<p>').append(string_tag_add_argument))
954
+      .append($('<textarea>').attr('name', 'argument'))
955
+      .append($('<div>').addClass('inputs')
956
+        .append($('<input>')
957
+          .attr('type', 'button')
958
+          .attr('value', string_tag_add_inputs_cancel)
959
+          .addClass('button')
960
+          .click(function(){
961
+            $('#fade').fadeOut(1000, function(){$('#fade').remove();});
962
+            $('#add_tag').remove();
963
+
964
+            return false;
965
+          })
966
+        )
967
+        .append($('<input>')
968
+          .attr('type', 'submit')
969
+          .attr('value', string_tag_add_inputs_submit)
970
+          .addClass('button')
971
+          .click(function(){
972
+
973
+            link_add_tag.parents('div.search_tag_list').find('img.tag_loader').show();
974
+
975
+          })
976
+        )
977
+        .append($('<input>').attr('type', 'hidden').attr('name', 'tag_name').val(link_add_tag.text()))
978
+      ))
979
+    ;
980
+
981
+    // Il faut ajouter le popup au dom avant de le positionner en css
982
+    // Sinon la valeur height n'est pas encore calculable
983
+    $('body').prepend(popup);
984
+
985
+    //Récupération du margin, qui permettra de centrer la fenêtre - on ajuste de 80px en conformité avec le CSS
986
+    var popMargTop = (popup.height() + 50) / 2;
987
+    var popMargLeft = (popup.width() + 50) / 2;
988
+
989
+    //On affecte le margin
990
+    $(popup).css({
991
+      'margin-top' : -popMargTop,
992
+      'margin-left' : -popMargLeft
993
+    });
994
+
995
+    return false;
996
+  }
995 997
  
996 998
   var last_keypress = 0;
997 999
   
@@ -1055,7 +1057,6 @@ $(document).ready(function(){
1055 1057
     return false;
1056 1058
   });
1057 1059
   
1058
-  $('ul.tagbox li.input input[type="text"]').val(tag_text_help);
1059 1060
   $('ul.tagbox li.input input[type="text"]').formDefaults();
1060 1061
  
1061 1062
   ////////////////// FIN TAG PROMPT ///////////////
@@ -1131,22 +1132,156 @@ $(document).ready(function(){
1131 1132
         $('a#element_add_link').show();
1132 1133
       }
1133 1134
       
1135
+      form_add_hide_errors();
1136
+      
1137
+      return true;
1134 1138
     }
1135 1139
     else if (response.status == 'error')
1136 1140
     {
1137
-      $('form[name="add"]').find('ul.error_list').remove();
1138
-      var ul_errors = $('<ul>').addClass('error_list');
1139
-      
1140
-      for (i in response.errors)
1141
-      {
1142
-        ul_errors.append($('<li>').append(response.errors[i]));
1143
-      }
1144
-      
1145
-      $('form[name="add"]').prepend(ul_errors);
1141
+      form_add_display_errors(response.errors);
1142
+      $('#form_add_loader').hide();
1143
+      return false;
1146 1144
     }
1145
+    
1146
+    return false;
1147
+  }
1148
+  
1149
+  function form_add_hide_errors()
1150
+  {
1151
+    $('form[name="add"]').find('ul.error_list').remove();
1147 1152
   }
1153
+  
1154
+  // Affichage des erreurs lors de laprocédure d'ajout d'un élément
1155
+  function form_add_display_errors(errors)
1156
+  {
1157
+    $('form[name="add"]').find('ul.error_list').remove();
1158
+    var ul_errors = $('<ul>').addClass('error_list');
1148 1159
 
1149
-  // Ajout d'un element #ajouter
1160
+    for (i in errors)
1161
+    {
1162
+      ul_errors.append($('<li>').append(errors[i]));
1163
+    }
1164
+    
1165
+    $('form[name="add"]').prepend(ul_errors);
1166
+  }
1167
+
1168
+  // Ajout d'un element #ajouter (première partie)
1169
+  
1170
+  // Click sur "ajouter" (l'url)
1171
+  $('a#form_add_check_url').click(function(){
1172
+    
1173
+    // On fait tourner notre gif loader
1174
+    $('img#form_add_loader').show();
1175
+    
1176
+    $.ajax({
1177
+      type: 'POST',
1178
+      url: url_datas_api,
1179
+      data: {'url':$('input#element_add_url').val()},
1180
+      success: function(response){
1181
+        
1182
+        if (response.status == 'mustbeconnected')
1183
+        {
1184
+          $(location).attr('href', url_index);
1185
+        }
1186
+
1187
+        if (response.status == 'success')
1188
+        {
1189
+          // On cache notre gif loader.
1190
+          $('img#form_add_loader').hide();
1191
+          
1192
+          // On commence par renseigner les champs si on a du concret
1193
+          // name
1194
+          if (response.name)
1195
+          {
1196
+            $('input#element_add_name').val(response.name);
1197
+          }
1198
+          
1199
+          // thumb
1200
+          $('div#form_add_thumb img').attr('src', '/bundles/muzichcore/img/nothumb.png');
1201
+          if (response.thumb)
1202
+          {
1203
+            $('div#form_add_thumb img').attr('src', response.thumb);
1204
+          }
1205
+          
1206
+          // Proposition de tags
1207
+          if (response.tags)
1208
+          {
1209
+            $('ul#form_add_prop_tags li').remove();
1210
+            $('ul#form_add_prop_tags').show();
1211
+            $('ul#form_add_prop_tags_text').show();
1212
+            
1213
+            for (tags_index = 0; tags_index < response.tags.length; tags_index++)
1214
+            {
1215
+              var tag = response.tags[tags_index];
1216
+              var tag_id = '';
1217
+              var tag_name = tag.original_name;
1218
+              // Si il y a des équivalent en base.
1219
+              if (tag.like_found)
1220
+              {
1221
+                tag_id = tag.like.id;
1222
+                tag_name = tag.like.name;
1223
+              }
1224
+                
1225
+              // On aura plus qu'a vérifie le href pour savoir si c'est une demande d'ajout de tags =)
1226
+              $('ul#form_add_prop_tags').append(
1227
+                '<li>'+
1228
+                  '<a href="#'+tag_id+'" class="form_add_prop_tag">'+
1229
+                    tag_name+
1230
+                  '</a>'+
1231
+                '</li>'
1232
+              );
1233
+            }
1234
+          }
1235
+          
1236
+          // On a plus qu'a afficher les champs
1237
+          $('div#form_add_second_part').slideDown();
1238
+          $('div#form_add_first_part').slideUp();
1239
+          form_add_hide_errors();
1240
+        }
1241
+        else if (response.status == 'error')
1242
+        {
1243
+          form_add_display_errors(response.errors);
1244
+          $('#form_add_loader').hide();
1245
+          return false;
1246
+        }
1247
+      },
1248
+      dataType: 'json'
1249
+    });
1250
+    
1251
+  });
1252
+  
1253
+  /*
1254
+   * Formulaire d'ajout: click sur proposition de tags du a une api
1255
+   */
1256
+  
1257
+  $('a.form_add_prop_tag').live('click', function(){
1258
+    
1259
+    var form_name = "add";
1260
+    var tag_id = str_replace('#', '', $(this).attr('href'));
1261
+    var input_tag = $("div.tags_prompt ul.tagbox li.input input");
1262
+    
1263
+    // Si on connait le tag id (pas un nouveau tag donc)
1264
+    if (tag_id)
1265
+    {
1266
+      $('input#tags_selected_tag_'+form_name).val(tag_id);
1267
+      input_tag.val($(this).text());
1268
+      // Et on execute l'évènement selectTag de l'input
1269
+      input_tag.trigger("selectTag");
1270
+    }
1271
+    else
1272
+    {
1273
+      // Cette var sert a rien ici, mais c'est la refactorisation qui
1274
+      //  pose problmeme (corrigeable cela dit)
1275
+      var divtags = $("#search_tag_"+form_name);
1276
+      form_add_open_dialog_for_new_tag($(this), input_tag, form_name, divtags);
1277
+    }
1278
+    
1279
+    // On nettoie le champs de saisie des tags
1280
+    $('input.form-default-value-processed').val('');
1281
+    
1282
+  });
1283
+  
1284
+  // #ajouter ajouter un élément (envoi du formulaire)
1150 1285
   $('form[name="add"] input[type="submit"]').live('click', function(){
1151 1286
     $('form[name="add"]').find('img.tag_loader').show();
1152 1287
   });
@@ -1157,13 +1292,27 @@ $(document).ready(function(){
1157 1292
     }
1158 1293
     
1159 1294
     $('form[name="add"] img.tag_loader').hide();
1160
-    element_add_proceed_json_response(response);
1295
+    
1296
+    if (element_add_proceed_json_response(response))
1297
+    { 
1298
+      form_add_reinit();
1299
+    }
1300
+
1161 1301
     
1162 1302
     return false;
1163 1303
   });
1164 1304
   
1165
-  // Check périodique 
1166
-  // TODO.
1305
+  
1306
+  function form_add_reinit()
1307
+  {
1308
+    $('div#element_add_box').slideUp();
1309
+    $('div#form_add_first_part').show();
1310
+    $('div#form_add_second_part').hide();
1311
+    $('ul#form_add_prop_tags').hide();
1312
+    $('ul#form_add_prop_tags_text').hide();
1313
+    $('input#element_add_url').val('');
1314
+    $('input#element_add_name').val('');
1315
+  }
1167 1316
 
1168 1317
  /////////////////////
1169 1318
  var tags_ids_for_filter = new Array();

+ 10 - 0
web/bundles/muzichhome/js/home.js Datei anzeigen

@@ -13,6 +13,16 @@ $(document).ready(function(){
13 13
      $('#element_add_box').slideUp("slow");
14 14
      $('#element_add_link').show();
15 15
      $('form[name="search"]').slideDown();
16
+     //form_add_reinit();
17
+     // copie du contenu de la fonction ci dessus, arrive pas a l'appeler ... huh
18
+     $('div#element_add_box').slideUp();
19
+    $('div#form_add_first_part').show();
20
+    $('div#form_add_second_part').hide();
21
+    $('ul#form_add_prop_tags').hide();
22
+    $('ul#form_add_prop_tags_text').hide();
23
+    $('input#element_add_url').val('');
24
+    $('input#element_add_name').val('');
25
+     
16 26
      return false;
17 27
    }); 
18 28
    

Datei-Diff unterdrückt, da er zu groß ist
+ 9440 - 0
web/js/jquery-1.8.2.dev.js


Datei-Diff unterdrückt, da er zu groß ist
+ 2 - 0
web/js/jquery-1.8.2.prod.js


+ 0 - 3
web/js/tags/jquery.tagBox.js Datei anzeigen

@@ -145,9 +145,6 @@
145 145
              
146 146
           }
147 147
           
148
-          $('div#tags_prompt_'+form_name+' ul.tagbox li.input input[type="text"]')
149
-            .val(string_tag_prompt_input_help)
150
-          ;
151 148
         },
152 149
         removeTag : function(index, id, form_name) {
153 150