[SPIP] ~maj v2.1.25-->2.1.26
[velocampus/web/www.git] / www / plugins / auto / jquery_ui / jqueryui_pipelines.php
1 <?php
2
3 if (!defined("_ECRIRE_INC_VERSION")) return;
4
5 function jqueryui_jquery_plugins($plugins){
6 $config = @unserialize($GLOBALS['meta']['jqueryui']);
7
8 if (!is_array($config) OR !is_array($config['plugins'])) {
9 $config['plugins'] = array();
10 $ecrire_meta = 'oui';
11 }
12
13 $config['plugins'] = array_unique(array_merge(sinon(pipeline('jqueryui_forcer'),array()),$config['plugins']));
14
15 /**
16 * Gestion des dépendances inter plugins
17 */
18 $dependance_core = array(
19 'jquery.ui.mouse',
20 'jquery.ui.widget',
21 'jquery.ui.datepicker'
22 );
23
24 /**
25 * Dépendances à widget
26 * Si un autre plugin est dépendant d'un de ceux là, on ne les ajoute pas
27 */
28 $dependance_widget = array(
29 'jquery.ui.mouse',
30 'jquery.ui.accordion',
31 'jquery.ui.autocomplete',
32 'jquery.ui.button',
33 'jquery.ui.dialog',
34 'jquery.ui.tabs',
35 'jquery.ui.progressbar'
36 );
37
38 $dependance_mouse = array(
39 'jquery.ui.draggable',
40 'jquery.ui.droppable',
41 'jquery.ui.resizable',
42 'jquery.ui.selectable',
43 'jquery.ui.sortable',
44 'jquery.ui.slider'
45 );
46
47 $dependance_position = array(
48 'jquery.ui.autocomplete',
49 'jquery.ui.dialog',
50 );
51
52 $dependance_draggable = array(
53 'jquery.ui.droppable'
54 );
55
56 $dependance_effects = array(
57 'jquery.effects.blind',
58 'jquery.effects.bounce',
59 'jquery.effects.clip',
60 'jquery.effects.drop',
61 'jquery.effects.explode',
62 'jquery.effects.fold',
63 'jquery.effects.highlight',
64 'jquery.effects.pulsate',
65 'jquery.effects.scale',
66 'jquery.effects.shake',
67 'jquery.effects.slide',
68 'jquery.effects.transfer'
69 );
70
71 /**
72 * Vérification des dépendances
73 * Ici on ajoute quand même le plugin en question et on supprime les doublons via array_unique
74 * Pour éviter le cas où un pipeline demanderait un plugin dans le mauvais sens de la dépendance par exemple
75 *
76 * On commence par le bas de l'échelle :
77 * - draggable
78 * - position
79 * - mouse
80 * - widget
81 * - core
82 * - effects
83 */
84 if(count($intersect = array_intersect($config['plugins'],$dependance_draggable)) > 0){
85 $keys = array_keys($intersect);
86 array_splice($config['plugins'],$keys[0], 0, "jquery.ui.draggable");
87 }
88 if(count($intersect = array_intersect($config['plugins'],$dependance_position)) > 0){
89 $keys = array_keys($intersect);
90 array_splice($config['plugins'],$keys[0], 0, "jquery.ui.position");
91 }
92 if(count($intersect = array_intersect($config['plugins'],$dependance_mouse)) > 0){
93 $keys = array_keys($intersect);
94 array_splice($config['plugins'],$keys[0], 0, "jquery.ui.mouse");
95 }
96 if(count($intersect = array_intersect($config['plugins'],$dependance_widget)) > 0){
97 $keys = array_keys($intersect);
98 array_splice($config['plugins'],$keys[0], 0, "jquery.ui.widget");
99 }
100 if(count($intersect = array_intersect($config['plugins'],$dependance_core)) > 0){
101 $keys = array_keys($intersect);
102 array_splice($config['plugins'],$keys[0], 0, "jquery.ui.core");
103 }
104 if(count($intersect = array_intersect($config['plugins'],$dependance_effects)) > 0){
105 $keys = array_keys($intersect);
106 array_splice($config['plugins'],$keys[0], 0, "jquery.effects.core");
107 }
108 $config['plugins'] = array_unique($config['plugins']);
109 foreach ($config['plugins'] as $val) {
110 $plugins[] = _DIR_JQUERYUI_JS.$val.".js";
111 }
112
113 // si pas de config en base, on enregistre les scripts issu du pipeline jqueryui_forcer + leurs dépendances
114 if ($ecrire_meta == 'oui') {
115 include_spip('inc/meta');
116 ecrire_meta('jqueryui',serialize($config));
117 }
118
119 return $plugins;
120 }
121
122 /**
123 * jqueryui_insert_head : ajout des CSS de jQuery-UI pour les pages publiques et privées
124 * avec gestion du theme et des UI utilises
125 *
126 * @param: $flux
127 * @return: $flux
128 */
129 function jqueryui_insert_head($flux) {
130 $config = @unserialize($GLOBALS['meta']['jqueryui']);
131
132 // recuperer le repertoire du theme
133 $theme = 'base/';
134 if (isset($config['theme']) AND $config['theme'] != '')
135 $theme = $config['theme'].'/';
136 if ($theme == 'no_css/' && !defined('_JQUERYUI_FORCER_CSS'))
137 return $flux;
138
139 // ajouter core tout le temps et en debut de tableau, array_unique supprimera les occurrences suivantes
140 array_unshift($config['plugins'],'jquery.ui.core');
141
142 // recuperer la liste des plugins jquery actives ou issus du pipeline jqueryui_forcer
143 // Attention, l'ordre du merge est important, le css du core doit est charge avant le reste
144 $config['plugins'] = array_unique(array_merge($config['plugins'],sinon(pipeline('jqueryui_forcer'),array())));
145
146 // ajouter theme si necessaire
147 if (!in_array('jquery.ui.theme', $config['plugins']))
148 $config['plugins'][] = 'jquery.ui.theme';
149
150 // les CSS correspondantes aux plugins
151 $Tjquery_css = array(
152 'jquery.ui.accordion',
153 'jquery.ui.autocomplete',
154 'jquery.ui.button',
155 'jquery.ui.core',
156 'jquery.ui.datepicker',
157 'jquery.ui.dialog',
158 'jquery.ui.progressbar',
159 'jquery.ui.resizable',
160 'jquery.ui.selectable',
161 'jquery.ui.slider',
162 'jquery.ui.tabs',
163 'jquery.ui.theme'
164 );
165
166 // appeler les CSS necessaires
167 foreach ($config['plugins'] as $plug) {
168 if (in_array($plug, $Tjquery_css)) {
169 $flux .= "<link rel='stylesheet' type='text/css' media='all' href='".find_in_path(_DIR_JQUERYUI_CSS.$theme.$plug.'.css')."' />\n";
170 }
171 }
172
173 return $flux;
174 }
175
176 ?>