Просмотр исходного кода

Evolution #122: Tags ajouté par l'utilisateurs: nouvelle approche

bastien 12 лет назад
Родитель
Сommit
982611f74b

+ 7 - 0
app/Resources/translations/userui.fr.yml Просмотреть файл

@@ -34,6 +34,13 @@ tags:
34 34
   search:
35 35
     message_found:  "Tags correspondant à \"%string%\":"
36 36
     display_more:   Afficher les autres résultats
37
+  add:
38
+    title:          Ajouter un nouveau tag
39
+    text:           Ce tag n'est pas encore connu de Muzi.ch, mais vous pouvez proposer son ajout. Cependant sa validation sera soumise a l'équipe de modération du site.
40
+    argument:       "Vous pouvez argumenter votre demande:"
41
+    inputs:
42
+      cancel:       Annuler
43
+      submit:       Faire la demande
37 44
            
38 45
 filter:
39 46
   network: "Résultats de "

+ 4 - 0
src/Muzich/AdminBundle/Resources/views/Moderate/tags.html.twig Просмотреть файл

@@ -33,6 +33,10 @@
33 33
             
34 34
         </form>
35 35
           
36
+        <p>
37
+          {{ tag.arguments }}
38
+        </p>
39
+          
36 40
       </li>
37 41
     {% endfor %}
38 42
   </ul>

+ 3 - 1
src/Muzich/CoreBundle/Controller/CoreController.php Просмотреть файл

@@ -354,7 +354,7 @@ class CoreController extends Controller
354 354
   /**
355 355
    * Ajout d'un tag en base.
356 356
    */
357
-  public function addTagAction($name)
357
+  public function addTagAction($name, $arguments = null)
358 358
   {
359 359
     if ($this->getUser() == 'anon.')
360 360
     {
@@ -404,6 +404,7 @@ class CoreController extends Controller
404 404
         $privatesids[] = (string)$this->getUserId();
405 405
       }
406 406
       $tag->setPrivateids(json_encode($privatesids));
407
+      $tag->setArguments($tag->getArguments(). " ****" . $this->getUser()->getName()."****: " .$arguments);
407 408
       
408 409
       $this->getDoctrine()->getEntityManager()->persist($tag);
409 410
       $this->getDoctrine()->getEntityManager()->flush();
@@ -421,6 +422,7 @@ class CoreController extends Controller
421 422
       $tag->setName(ucfirst(strtolower($name)));
422 423
       $tag->setTomoderate(true);
423 424
       $tag->setPrivateids(json_encode(array((string)$this->getUserId())));
425
+      $tag->setArguments(" ****" . $this->getUser()->getName()."****: " .$arguments);
424 426
       
425 427
       $this->getDoctrine()->getEntityManager()->persist($tag);
426 428
       $this->getDoctrine()->getEntityManager()->flush();

+ 21 - 1
src/Muzich/CoreBundle/Entity/Tag.php Просмотреть файл

@@ -86,7 +86,16 @@ class Tag
86 86
    * @ORM\Column(type="text", nullable=true)
87 87
    * @var type string
88 88
    */
89
-  protected $privateids = "";
89
+  protected $privateids;
90
+  
91
+  /**
92
+   * Lorsque le tag est a modérer on stocke ici les argumentations pour 
93
+   * l'ajout du tag.
94
+   * 
95
+   * @ORM\Column(type="text", nullable=true)
96
+   * @var type string
97
+   */
98
+  protected $arguments;
90 99
   
91 100
   /**
92 101
    * 
@@ -221,4 +230,15 @@ class Tag
221 230
   {
222 231
     return $this->privateids;
223 232
   }
233
+  
234
+  public function getArguments()
235
+  {
236
+    return $this->arguments;
237
+  }
238
+  
239
+  public function setArguments($arguments)
240
+  {
241
+    $this->arguments = $arguments;
242
+  }
243
+  
224 244
 }

+ 4 - 0
src/Muzich/CoreBundle/Resources/config/routing.yml Просмотреть файл

@@ -48,6 +48,10 @@ ajax_add_tag:
48 48
   pattern: /ajax/add-tag/{name}
49 49
   defaults: { _controller: MuzichCoreBundle:Core:addTag, name: null }
50 50
   
51
+ajax_add_tag_arguments:
52
+  pattern: /ajax/add-tag/{name}/{arguments}
53
+  defaults: { _controller: MuzichCoreBundle:Core:addTag, name: null, arguments: null }
54
+  
51 55
 
52 56
 ####
53 57
 

+ 5 - 0
src/Muzich/CoreBundle/Resources/views/layout.html.twig Просмотреть файл

@@ -28,6 +28,11 @@
28 28
     string_follow_following = "{{ 'user.following'|trans({}, 'users') }}";
29 29
     string_follow_follow = "{{ 'user.follow'|trans({}, 'users') }}";
30 30
     string_tag_prompt_input_help = "{{ 'tags.inputtext.help'|trans({}, 'userui') }}";
31
+    string_tag_add_title = "{{ 'tags.add.title'|trans({}, 'userui') }}";
32
+    string_tag_add_text = "{{ 'tags.add.text'|trans({}, 'userui') }}";
33
+    string_tag_add_argument = "{{ 'tags.add.argument'|trans({}, 'userui') }}";
34
+    string_tag_add_inputs_cancel = "{{ 'tags.add.inputs.cancel'|trans({}, 'userui') }}";
35
+    string_tag_add_inputs_submit = "{{ 'tags.add.inputs.submit'|trans({}, 'userui') }}";
31 36
     
32 37
     url_index = "{{ path('index') }}";
33 38
     url_search_tag = "{{ path('search_tag') }}";

+ 86 - 1
web/bundles/muzichcore/css/main.css Просмотреть файл

@@ -822,4 +822,89 @@ ul#favorite_tags li
822 822
 a.more
823 823
 {
824 824
   margin-top: 5px;
825
-}
825
+}
826
+
827
+
828
+
829
+/*  POPIN BLOCK  */
830
+
831
+
832
+#fade { /*--Masque opaque noir de fond--*/
833
+	display: none; /*--masqué par défaut--*/
834
+	background: #000;
835
+	position: fixed; left: 0; top: 0;
836
+	width: 100%; height: 100%;
837
+	opacity: .80;
838
+	z-index: 9999;
839
+}
840
+.popin_block{
841
+	background: #fff;
842
+	padding: 10px;
843
+	border: 10px solid #ddd;
844
+	float: left;
845
+	font-size: 1.2em;
846
+	position: fixed;
847
+	top: 50%; left: 50%;
848
+	z-index: 99999;
849
+	/*--Les différentes définitions de Box Shadow en CSS3--*/
850
+	-webkit-box-shadow: 0px 0px 20px #000;
851
+	-moz-box-shadow: 0px 0px 20px #000;
852
+	box-shadow: 0px 0px 20px #000;
853
+	/*--Coins arrondis en CSS3--*/
854
+	-webkit-border-radius: 10px;
855
+	-moz-border-radius: 10px;
856
+	border-radius: 10px;
857
+}
858
+
859
+.popin_block h2
860
+{
861
+  margin-top: 0px;
862
+  margin-bottom: 0px;
863
+}
864
+
865
+.popin_block p
866
+{
867
+  margin-top: 5px;
868
+  margin-bottom: 2px;
869
+}
870
+
871
+.popin_block div.tag
872
+{
873
+  text-align: center;
874
+}
875
+
876
+.popin_block div.inputs
877
+{
878
+  text-align: center;
879
+}
880
+
881
+.popin_block div.tag ul
882
+{
883
+  margin-left: auto;
884
+  margin-right: auto;
885
+  margin-top: 5px;
886
+  margin-bottom: 5px;
887
+}
888
+
889
+.popin_block div.inputs input
890
+{
891
+  margin: 3px;
892
+}
893
+
894
+.popin_block textarea
895
+{
896
+  width: 100%;
897
+  height: 60px;
898
+}
899
+
900
+img.btn_close {
901
+	float: right;
902
+	margin: -55px -55px 0 0;
903
+}
904
+/*--Gérer la position fixed pour IE6--*/
905
+* html #fade {
906
+position: absolute;
907
+}
908
+* html .popup_block {
909
+position: absolute;
910
+}

+ 94 - 26
web/bundles/muzichcore/js/muzich.js Просмотреть файл

@@ -787,41 +787,109 @@ $(document).ready(function(){
787 787
             // Si le tag ne semble pas connu en base
788 788
             if (!data.same_found)
789 789
             {
790
+              // Cette variable nous permettra de stocker le lien nouveau tag
791
+              link_add_tag = null;
792
+              
790 793
               li_tag = 
791
-                $('<li>').append(
794
+                $('<li>').addClass('new').append(
792 795
                   $('<a>').attr('href','#new#'+$.trim(input.val()))
793 796
                   // qui réagit quand on clique dessus
794 797
                   .click(function(e){
795
-                    // On récupère le nom du tag
796
-                    name = $(this).attr('href').substr(1,$(this).attr('href').length);
797
-                    name = name.substr(strpos(name, '#')+1, name.length);
798 798
                     
799
-                    $(this).parent('li').parent('ul').parent('div').find('img.tag_loader').show();
799
+                    // Effet fade-in du fond opaque
800
+                    $('body').append($('<div>').attr('id', 'fade')); 
801
+                    //Apparition du fond - .css({'filter' : 'alpha(opacity=80)'}) pour corriger les bogues de IE
802
+                    $('#fade').css({'filter' : 'alpha(opacity=80)'}).fadeIn();
803
+                    
804
+                    // On met le lien cliqué dans la variabke prévu
805
+                    link_add_tag = $(this);
806
+                    
807
+                    // En premier lieux on fait apparaître la fenêtre de confirmation
808
+                    popup = $('<div>')
809
+                    .attr('id', 'add_tag')
810
+                    .addClass('popin_block')
811
+                    .css('width', '400px')
812
+                      //.append($('<h2>').append(string_tag_add_title))
813
+                      .append($('<div>').addClass('tag')
814
+                        .append($('<ul>')
815
+                          .append($('<li>').addClass('button')
816
+                            .append($(this).text()))))
817
+                      .append($('<p>').append(string_tag_add_text))
818
+                      .append($('<p>').append(string_tag_add_argument))
819
+                      .append($('<textarea>').attr('name', 'argument'))
820
+                      .append($('<div>').addClass('inputs')
821
+                        .append($('<input>')
822
+                          .attr('type', 'button')
823
+                          .attr('value', string_tag_add_inputs_cancel)
824
+                          .addClass('button')
825
+                          .click(function(){
826
+                            $('#fade').fadeOut(1000, function(){$('#fade').remove();});
827
+                            $('#add_tag').remove();
828
+                            
829
+                            return false;
830
+                          })
831
+                        )
832
+                        .append($('<input>')
833
+                          .attr('type', 'button')
834
+                          .attr('value', string_tag_add_inputs_submit)
835
+                          .addClass('button')
836
+                          .click(function(){
837
+                            
838
+                            var arguments = $('#add_tag textarea').val();
839
+                            
840
+                            $('#fade').fadeOut(400, function(){$('#fade').remove();});
841
+                            $('#add_tag').remove();
842
+                            
843
+                            // On récupère le nom du tag
844
+                            name = link_add_tag.attr('href').substr(1,link_add_tag.attr('href').length);
845
+                            name = name.substr(strpos(name, '#')+1, name.length);
800 846
 
801
-                    // La on fait l'ajout en base en tant que nouveau tag
802
-                    $.getJSON(url_add_tag+'/'+name, function(response){
803
-      
804
-                      if (response.status == 'mustbeconnected')
805
-                      {
806
-                        $(location).attr('href', url_index);
807
-                      }
808
-                      
809
-                      tag_id   = response.tag_id;
810
-                      tag_name = response.tag_name;
811
-                      
812
-                      $('input#tags_selected_tag_'+form_name).val(tag_id);
813
-                      inputTag.val(tag_name);
814
-                      // Et on execute l'évènement selectTag de l'input
815
-                      inputTag.trigger("selectTag");
816
-                      // On cache la liste puisque le choix vient d'être fait
817
-                      divtags.hide();
818
-                      inputTag.val(tag_text_help); 
819
-                      
820
-                      $(this).parent('li').parent('ul').parent('div').find('img.tag_loader').hide();
821
-                    });
847
+                            link_add_tag.parent('li').parent('ul').parent('div').find('img.tag_loader').show();
822 848
 
849
+                            // La on fait l'ajout en base en tant que nouveau tag
850
+                            $.getJSON(url_add_tag+'/'+name+'/'+arguments, function(response){
851
+
852
+                              if (response.status == 'mustbeconnected')
853
+                              {
854
+                                $(location).attr('href', url_index);
855
+                              }
856
+
857
+                              tag_id   = response.tag_id;
858
+                              tag_name = response.tag_name;
859
+
860
+                              $('input#tags_selected_tag_'+form_name).val(tag_id);
861
+                              inputTag.val(tag_name);
862
+                              // Et on execute l'évènement selectTag de l'input
863
+                              inputTag.trigger("selectTag");
864
+                              // On cache la liste puisque le choix vient d'être fait
865
+                              divtags.hide();
866
+                              inputTag.val(tag_text_help); 
867
+
868
+                              link_add_tag.parent('li').parent('ul').parent('div').find('img.tag_loader').hide();
869
+                            });
870
+                            
871
+                            return false;
872
+                          })
873
+                        )
874
+                      )
875
+                    ;
876
+                    
877
+                    // Il faut ajouter le popup au dom avant de le positionner en css
878
+                    // Sinon la valeur height n'est pas encore calculable
879
+                    $('body').prepend(popup);
880
+                    
881
+                    //Récupération du margin, qui permettra de centrer la fenêtre - on ajuste de 80px en conformité avec le CSS
882
+                    var popMargTop = (popup.height() + 50) / 2;
883
+                    var popMargLeft = (popup.width() + 50) / 2;
884
+                    
885
+                    //On affecte le margin
886
+                    $(popup).css({
887
+                      'margin-top' : -popMargTop,
888
+                      'margin-left' : -popMargLeft
889
+                    });
823 890
                     
824 891
                     return false;
892
+                    
825 893
                   })
826 894
                   .append($.trim(input.val()))
827 895
               );