Преглед на файлове

Evolution #196: Liste de lecture

Sevajol Bastien преди 12 години
родител
ревизия
c7e60bb9e1

+ 3 - 1
app/Resources/translations/elements.fr.yml Целия файл

@@ -89,7 +89,9 @@ elements:
89 89
     more:
90 90
       noelements:       Pas d'autres éléments
91 91
   autoplay:
92
-    launch:             Créer une liste de lecture avec ces paramètres
92
+    launch:             Lecture automatique
93
+    noelements:
94
+      text:             Aucun partage a lire
93 95
       
94 96
 show:
95 97
   user:

+ 41 - 0
src/Muzich/CoreBundle/Controller/ElementController.php Целия файл

@@ -10,6 +10,7 @@ use Symfony\Component\HttpFoundation\Request;
10 10
 use Muzich\CoreBundle\Entity\Element;
11 11
 use Muzich\CoreBundle\Util\TagLike;
12 12
 use Muzich\CoreBundle\Entity\User;
13
+use Muzich\CoreBundle\lib\AutoplayManager;
13 14
 
14 15
 class ElementController extends Controller
15 16
 {
@@ -985,4 +986,44 @@ class ElementController extends Controller
985 986
     ));
986 987
   }
987 988
   
989
+  /**
990
+   * Retourne les données permettant de faire une playlist
991
+   * 
992
+   * @param Request $request 
993
+   * @param "filter"|"show"|"favorites" $type
994
+   * @param ~ $data
995
+   */
996
+  public function getDatasAutoplayAction(Request $request, $type, $data)
997
+  {
998
+    if (($response = $this->mustBeConnected(true)))
999
+    {
1000
+      return $response;
1001
+    }
1002
+    
1003
+    $elements = array();
1004
+    $elements_json = array();
1005
+    
1006
+    if ($type == 'filter')
1007
+    {
1008
+      // Pour cette option on utilise le dernier filtre appliqué
1009
+      $search_object = $this->getElementSearcher();
1010
+      $search_object->update(array(
1011
+        'count' => $this->container->getParameter('autoplay_max_elements')
1012
+      ));
1013
+      $elements = $search_object->getElements($this->getDoctrine(), $this->getUserId());
1014
+    }
1015
+    
1016
+    if (count($elements))
1017
+    {
1018
+      // On récupère les élements
1019
+      $autoplaym = new AutoplayManager($elements, $this->container);
1020
+      $elements_json = $autoplaym->getList();
1021
+    }
1022
+    
1023
+    return $this->jsonResponse(array(
1024
+      'status'    => 'success',
1025
+      'data'      => $elements_json
1026
+    ));
1027
+  }
1028
+  
988 1029
 }

+ 4 - 1
src/Muzich/CoreBundle/Resources/config/routing.yml Целия файл

@@ -159,7 +159,10 @@ teapot:
159 159
 element_retrieve_api_datas:
160 160
   pattern: /ajax/element/get/datas/api
161 161
   defaults: { _controller: MuzichCoreBundle:Element:getDatasApi }
162
-  requirements:
162
+    
163
+elements_get_filter_data_autoplay:
164
+  pattern: /ajax/elements/get/datas/autoplay/{type}/{data}
165
+  defaults: { _controller: MuzichCoreBundle:Element:getDatasAutoplay, data: null }
163 166
     
164 167
 element_show_need_tags:
165 168
   pattern: /need-tags

+ 2 - 1
src/Muzich/CoreBundle/Resources/views/layout.html.twig Целия файл

@@ -82,7 +82,7 @@
82 82
   
83 83
   <div id="autoplay" class="popin_block" style="display: none;">
84 84
     <a href="javascript:void(0);" id="autoplay_close" >
85
-      <img src="{{ asset('/bundles/muzichcore/img/1328276855_list-remove.png') }}" alt="close" />
85
+      <img src="{{ asset('/bundles/muzichcore/img/1353498913_window-close.png') }}" alt="close" />
86 86
     </a>
87 87
     <div id="autoplay_controls">
88 88
       
@@ -100,6 +100,7 @@
100 100
       <div id="autoplay_player"></div>
101 101
     </div>
102 102
     <img id="autoplay_loader" src="{{ asset('/bundles/muzichcore/img/ajax-loader.gif') }}" alt="loader" />
103
+    <p id="autoplay_noelements_text" style="display: none;">{{ 'elements.autoplay.noelements.text'|trans({}, 'elements') }}</p>
103 104
   </div>
104 105
     
105 106
   {% include "MuzichCoreBundle:Language:languages.html.twig" %}

+ 11 - 4
src/Muzich/CoreBundle/lib/AutoplayManager.php Целия файл

@@ -18,14 +18,21 @@ class AutoplayManager
18 18
   
19 19
   /**
20 20
    *
21
+   * @var Container 
22
+   */
23
+  protected $container;
24
+  
25
+  /**
26
+   *
21 27
    * @param array $elements 
22 28
    */
23
-  public function __construct($elements)
29
+  public function __construct($elements, $container)
24 30
   {
25 31
     $this->elements = $elements;
32
+    $this->container = $container;
26 33
   }
27 34
   
28
-  public function getListJSON()
35
+  public function getList()
29 36
   {
30 37
     $list = array();
31 38
     
@@ -37,7 +44,7 @@ class AutoplayManager
37 44
         // Et le site doit être pris en charge pour le autoplay
38 45
         in_array(
39 46
           ($element_type = $element->getType()), 
40
-          $this->container->getParameter('dailymotion_player_width')
47
+          $this->container->getParameter('autoplay_sites_enabled')
41 48
         )
42 49
       )
43 50
       
@@ -49,7 +56,7 @@ class AutoplayManager
49 56
       );
50 57
     }
51 58
     
52
-    return json_encode($list);
59
+    return $list;
53 60
   }
54 61
   
55 62
 }

+ 9 - 5
src/Muzich/HomeBundle/Resources/views/Home/index.html.twig Целия файл

@@ -90,13 +90,17 @@
90 90
     } %}
91 91
     
92 92
     <input class="main button" type="submit" value="{{ 'filter.submit'|trans({}, 'userui') }}"/>
93
-    
94
-    <a href="javascript:void(0);" class="button" id="autoplay_launch">
95
-      {{ 'elements.autoplay.launch'|trans({}, 'elements') }}
96
-    </a>
97
-    
93
+        
98 94
   </form>
99 95
 
96
+  
97
+  <a href="{{ path('elements_get_filter_data_autoplay', {
98
+    'type' : 'filter'
99
+  }) }}" class="button" id="autoplay_launch" 
100
+     title="{{ 'elements.autoplay.launch'|trans({}, 'elements') }}" >
101
+    <img src="{{ asset('/bundles/muzichcore/img/1353494305_player_play.png') }}" alt="" />
102
+  </a>
103
+
100 104
   <div class="display_more_elements" style="display: none;">
101 105
     <span></span>
102 106
   </div>

+ 8 - 2
web/bundles/muzichcore/css/main.css Целия файл

@@ -1308,6 +1308,12 @@ span#add_url_title
1308 1308
   font-size: 15px;
1309 1309
 }
1310 1310
 
1311
+a#autoplay_launch
1312
+{
1313
+  float: right;
1314
+  margin-top: -25px;
1315
+}
1316
+
1311 1317
 div#autoplay.popin_block
1312 1318
 {
1313 1319
   width: 500px;
@@ -1341,6 +1347,6 @@ a#autoplay_close
1341 1347
 {
1342 1348
   float: right;
1343 1349
   text-decoration: none;
1344
-  margin-top: -27px;
1345
-  margin-right: -27px;
1350
+  margin-top: -32px;
1351
+  margin-right: -32px;
1346 1352
 }

BIN
web/bundles/muzichcore/img/1353494305_player_play.png Целия файл


BIN
web/bundles/muzichcore/img/1353498913_window-close.png Целия файл


+ 60 - 23
web/bundles/muzichcore/js/autoplay.js Целия файл

@@ -5,47 +5,72 @@ $(document).ready(function(){
5 5
    * Section commune
6 6
    */
7 7
   
8
+  // Liste de données pour la lecture
8 9
   var autoplay_list = new Array;
10
+  // object player
9 11
   var autoplay_player = null;
12
+  // identifiant de la division du lecteur
10 13
   var autoplay_player_div_id = "autoplay_player";
14
+  // identifiant du lecteur
11 15
   var autoplay_player_id     = "autoplay_player_id";
16
+  // étape de lecture, on commence naturellement a 0
12 17
   var autoplay_step = 0;
13 18
   
19
+  // En cas de click sur un bouton de lecture
14 20
   $('a#autoplay_launch').click(function(){
15 21
     
16
-    // on fake l'ajax pour les tests
17
-    
18
-    var firdtvidz = new Array;
19
-    firdtvidz['element_ref_id'] = 'tq4DjQK7nsM';
20
-    firdtvidz['element_type']   = 'youtu.be';
21
-    firdtvidz['element_id']     = '99989';
22
-    firdtvidz['element_name']   = 'Ed Cox - La fanfare des teuffeurs (Hardcordian)';
23
-    
24
-    var secondvidz = new Array;
25
-    secondvidz['element_ref_id'] = 'bIAFB4vRdGw';
26
-    secondvidz['element_type']   = 'youtube.com';
27
-    secondvidz['element_id']     = '2345';
28
-    secondvidz['element_name']   = 'Babylon Pression - Des Tasers et des Pauvres';
29
-    
30
-    autoplay_list[0] = firdtvidz;
31
-    autoplay_list[1] = secondvidz;
32
-  
22
+    // On ouvre la boite de dialogue pendant la demande ajax
33 23
     open_popin_dialog('autoplay');
34
-    autoplay_run(0);
24
+    $('img#autoplay_loader').show();
25
+    
26
+    $.getJSON($(this).attr('href'), function(response) {
27
+      if (response.status == 'mustbeconnected')
28
+      {
29
+        $(location).attr('href', url_index);
30
+      }
31
+      
32
+      if (response.status == 'success')
33
+      {
34
+        // On récupère la liste d'élèments
35
+        autoplay_list = response.data;
36
+        autoplay_run(0);
37
+      }
38
+      
39
+    });
40
+    return false;
35 41
   });
36 42
   
43
+  // Lancement de l'élèment suivant
37 44
   function autoplay_run(step)
38 45
   {
46
+    // En premier lieu on réinitialise le lecteur en détruisant le dom qui a
47
+    // pu être créé par la lecture précedente.
39 48
     $('div#'+autoplay_player_div_id+'_container').html('<div id="'+autoplay_player_div_id+'"></div>');
49
+    $('#autoplay_noelements_text').hide();
50
+    
51
+    if (autoplay_list.length)
52
+    {
53
+    
54
+      if (array_key_exists(step, autoplay_list))
55
+      {
56
+        // Youtube case
57
+        if (autoplay_list[step].element_type == 'youtube.com' || autoplay_list[step].element_type == 'youtu.be')
58
+        {
59
+          $('img#autoplay_loader').show();
60
+          $('div#autoplay_title').text(autoplay_list[step].element_name);
61
+          youtube_create_player(autoplay_list[step].element_ref_id);
62
+        }
63
+      }
40 64
     
41
-    if (autoplay_list[step].element_type == 'youtube.com' || autoplay_list[step].element_type == 'youtu.be')
65
+    }
66
+    else
42 67
     {
43
-      $('img#autoplay_loader').show();
44
-      $('div#autoplay_title').text(autoplay_list[step].element_name);
45
-      youtube_create_player(autoplay_list[step].element_ref_id);
68
+      $('#autoplay_noelements_text').show();
69
+      $('img#autoplay_loader').hide();
46 70
     }
47 71
   }
48 72
   
73
+  // Avancer d'un élelement dans la liste
49 74
   function autoplay_next()
50 75
   {
51 76
     autoplay_step++;
@@ -59,6 +84,7 @@ $(document).ready(function(){
59 84
     }
60 85
   }
61 86
   
87
+  // Reculer d'un élement dans la liste
62 88
   function autoplay_previous()
63 89
   {
64 90
     autoplay_step--;
@@ -72,12 +98,18 @@ $(document).ready(function(){
72 98
     }
73 99
   }
74 100
   
75
-  
101
+  // bouton précedent
76 102
   $('a#autoplay_previous').click(function(){ autoplay_previous(); });
103
+  // bouton suivant
77 104
   $('a#autoplay_next').click(function(){ autoplay_next(); });
105
+  // Fermeture de la lecture auto
78 106
   $('a#autoplay_close').click(function(){
107
+    // Fond gris
79 108
     $('#fade').fadeOut(1000, function(){$('#fade').remove();});
109
+    // On cache le lecteur
80 110
     $('#autoplay').hide();
111
+    // On vide le dom du lecteur
112
+    $('div#'+autoplay_player_div_id+'_container').html('<div id="'+autoplay_player_div_id+'"></div>');
81 113
   });
82 114
    
83 115
   
@@ -85,6 +117,7 @@ $(document).ready(function(){
85 117
    * Fonction youtube.com et youtu.be
86 118
    */
87 119
     
120
+  // Création du lecteur FLASH youtube
88 121
   function youtube_create_player(ref_id)
89 122
   {
90 123
     var playerapiid = "ytplayerapiid";
@@ -103,6 +136,7 @@ $(document).ready(function(){
103 136
     );
104 137
   }
105 138
   
139
+  // Fonction appelé par l'ActionScript (flash) du lecteur youtube quand il est prêt
106 140
   window.onYouTubePlayerReady = function()
107 141
   {
108 142
     autoplay_player = document.getElementById(autoplay_player_id);
@@ -111,14 +145,17 @@ $(document).ready(function(){
111 145
     youtube_play();
112 146
   }
113 147
   
148
+  // Fonction appelé par le lecteur youtube quand il change d'état
114 149
   window.youtube_StateChange = function(newState)
115 150
   {
151
+    // Lorsque la lecture est terminé
116 152
     if (newState === 0)
117 153
     {
118 154
       autoplay_next();
119 155
     }
120 156
   }
121 157
 
158
+  // Lecture
122 159
   function youtube_play()
123 160
   {
124 161
     if (autoplay_player)

+ 0 - 2
web/bundles/muzichcore/js/muzich.js Целия файл

@@ -2391,6 +2391,4 @@ $(document).ready(function(){
2391 2391
         top: '20%'
2392 2392
       });
2393 2393
     $('#'+object_id).show();
2394
-    
2395
-    console.debug('width: '+$('#'+object_id).width());
2396 2394
   }