1 | <?php |
---|
2 | |
---|
3 | /** |
---|
4 | * Plugin Escal |
---|
5 | * Licence GNU/GPL |
---|
6 | */ |
---|
7 | |
---|
8 | if (!defined('_ECRIRE_INC_VERSION')) return; |
---|
9 | |
---|
10 | // ======================================================================================================================================= |
---|
11 | // Paramétrage à l'installation d'Escal |
---|
12 | // Merci à Arnaud Bérard pour son aide précieuse |
---|
13 | // ======================================================================================================================================= |
---|
14 | |
---|
15 | /** |
---|
16 | * escal_configuration() |
---|
17 | * teste et configure certaines options de spip pour escal |
---|
18 | * penser à incrementer la valeur de schema dans paquet.xml et celle de $maj dans escal_administrations.php en cas de mise à jour des mots cles |
---|
19 | */ |
---|
20 | |
---|
21 | |
---|
22 | function escal_configuration(){ |
---|
23 | include_spip('inc/config'); |
---|
24 | |
---|
25 | // active l'utilsation des mots clefs |
---|
26 | $articles_mots = lire_config('articles_mots'); |
---|
27 | if($articles_mots == 'non') |
---|
28 | ecrire_meta('articles_mots','oui'); |
---|
29 | |
---|
30 | // activation du descriptif sur les rubriques et article |
---|
31 | if(lire_config('rubriques_descriptif') == 'non') |
---|
32 | ecrire_meta('rubriques_descriptif','oui') ; |
---|
33 | if(lire_config('articles_descriptif') == 'non') |
---|
34 | ecrire_meta('articles_descriptif','oui') ; |
---|
35 | } |
---|
36 | |
---|
37 | |
---|
38 | // Description du shema de groupes et mots |
---|
39 | function shema_escal(){ |
---|
40 | $schema = array( |
---|
41 | 'groupes' => array( |
---|
42 | array( // creation du groupe affichage |
---|
43 | 'titre'=>'affichage', |
---|
44 | 'descriptif'=> _T('escal:groupe_affichage'), |
---|
45 | 'tables_liees'=>'articles,rubriques,syndic', |
---|
46 | 'minirezo'=>'oui', |
---|
47 | 'comite'=>'oui' |
---|
48 | ), |
---|
49 | array( // creation du groupe Agenda_couleur |
---|
50 | 'titre'=>'Agenda_couleur', |
---|
51 | 'descriptif'=> _T('escal:groupe_agenda_couleur'), |
---|
52 | 'tables_liees'=>'evenements', |
---|
53 | 'minirezo'=>'oui', |
---|
54 | 'comite'=>'oui' |
---|
55 | ) |
---|
56 | ), |
---|
57 | 'mots'=> array( |
---|
58 | // Agenda_couleur |
---|
59 | array( |
---|
60 | 'titre'=>'Noir', |
---|
61 | 'descriptif'=>'#000000', |
---|
62 | 'type'=>'Agenda_couleur' |
---|
63 | ), |
---|
64 | array( |
---|
65 | 'titre'=>'Rouge', |
---|
66 | 'descriptif'=>'red', |
---|
67 | 'type'=>'Agenda_couleur' |
---|
68 | ), |
---|
69 | array( |
---|
70 | 'titre'=>'Vert', |
---|
71 | 'descriptif'=>'green', |
---|
72 | 'type'=>'Agenda_couleur' |
---|
73 | ), |
---|
74 | array( |
---|
75 | 'titre'=>'Violet', |
---|
76 | 'descriptif'=>'#FF00FF', |
---|
77 | 'type'=>'Agenda_couleur' |
---|
78 | ), |
---|
79 | array( |
---|
80 | 'titre'=>'Marron', |
---|
81 | 'descriptif'=>'#7F3D00', |
---|
82 | 'type'=>'Agenda_couleur' |
---|
83 | ), |
---|
84 | // affichage |
---|
85 | array( |
---|
86 | 'titre'=>'acces-direct', |
---|
87 | 'descriptif'=> _T('escal:mot_acces_direct'), |
---|
88 | 'type'=>'affichage' |
---|
89 | ), |
---|
90 | array( |
---|
91 | 'titre'=>'accueil', |
---|
92 | 'descriptif'=> _T('escal:mot_accueil'), |
---|
93 | 'type'=>'affichage' |
---|
94 | ), |
---|
95 | array( |
---|
96 | 'titre'=> 'actus', |
---|
97 | 'descriptif'=> _T('escal:mot_actus'), |
---|
98 | 'type'=>'affichage' |
---|
99 | ), |
---|
100 | array( |
---|
101 | 'titre'=>'agenda', |
---|
102 | 'descriptif'=> _T('escal:mot_agenda'), |
---|
103 | 'type'=>'affichage' |
---|
104 | ), |
---|
105 | array( |
---|
106 | 'titre'=>'annonce', |
---|
107 | 'descriptif'=> _T('escal:mot_annonce'), |
---|
108 | 'type'=>'affichage' |
---|
109 | ), |
---|
110 | array( |
---|
111 | 'titre'=>'annonce-defilant', |
---|
112 | 'descriptif'=> _T('escal:mot_annonce_defilant'), |
---|
113 | 'type'=>'affichage' |
---|
114 | ), |
---|
115 | array( |
---|
116 | 'titre'=>'annuaire', |
---|
117 | 'descriptif'=> _T('escal:mot_annuaire'), |
---|
118 | 'type'=>'affichage' |
---|
119 | ), |
---|
120 | array( |
---|
121 | 'titre'=>'archive', |
---|
122 | 'descriptif'=> _T('escal:mot_archive'), |
---|
123 | 'type'=>'affichage' |
---|
124 | ), |
---|
125 | array( |
---|
126 | 'titre'=>'articles-de-rubrique', |
---|
127 | 'descriptif'=> _T('escal:mot_articles_rubrique'), |
---|
128 | 'type'=>'affichage' |
---|
129 | ), |
---|
130 | array( |
---|
131 | 'titre'=>'article-libre1', |
---|
132 | 'descriptif'=> _T('escal:mot_article_libre1'), |
---|
133 | 'type'=>'affichage' |
---|
134 | ), |
---|
135 | array( |
---|
136 | 'titre'=>'article-libre2', |
---|
137 | 'descriptif'=> _T('escal:mot_article_libre2'), |
---|
138 | 'type'=>'affichage' |
---|
139 | ), |
---|
140 | array( |
---|
141 | 'titre'=>'article-libre3', |
---|
142 | 'descriptif'=> _T('escal:mot_article_libre3'), |
---|
143 | 'type'=>'affichage' |
---|
144 | ), |
---|
145 | array( |
---|
146 | 'titre'=>'article-libre4', |
---|
147 | 'descriptif'=> _T('escal:mot_article_libre4'), |
---|
148 | 'type'=>'affichage' |
---|
149 | ), |
---|
150 | array( |
---|
151 | 'titre'=>'article-libre5', |
---|
152 | 'descriptif'=> _T('escal:mot_article_libre5'), |
---|
153 | 'type'=>'affichage' |
---|
154 | ), |
---|
155 | array( |
---|
156 | 'titre'=>'article-sans-date', |
---|
157 | 'descriptif'=> _T('escal:mot_article_sans_date'), |
---|
158 | 'type'=>'affichage' |
---|
159 | ), |
---|
160 | array( |
---|
161 | 'titre'=>'chrono', |
---|
162 | 'descriptif'=> _T('escal:mot_chrono'), |
---|
163 | 'type'=>'affichage' |
---|
164 | ), |
---|
165 | array( |
---|
166 | 'titre'=>'citations', |
---|
167 | 'descriptif'=> _T('escal:mot_citations'), |
---|
168 | 'type'=>'affichage' |
---|
169 | ), |
---|
170 | array( |
---|
171 | 'titre'=>'edito', |
---|
172 | 'descriptif'=> _T('escal:mot_edito'), |
---|
173 | 'type'=>'affichage' |
---|
174 | ), |
---|
175 | array( |
---|
176 | 'titre'=>'favori', |
---|
177 | 'descriptif'=> _T('escal:mot_favori'), |
---|
178 | 'type'=>'affichage' |
---|
179 | ), |
---|
180 | array( |
---|
181 | 'titre'=>'forum', |
---|
182 | 'descriptif'=> _T('escal:mot_forum'), |
---|
183 | 'type'=>'affichage' |
---|
184 | ), |
---|
185 | array( |
---|
186 | 'titre'=>'invisible', |
---|
187 | 'descriptif'=> _T('escal:mot_invisible'), |
---|
188 | 'type'=>'affichage' |
---|
189 | ), |
---|
190 | array( |
---|
191 | 'titre'=>'mon-article', |
---|
192 | 'descriptif'=> _T('escal:mot_mon_article'), |
---|
193 | 'type'=>'affichage' |
---|
194 | ), |
---|
195 | array( |
---|
196 | 'titre'=>'mon-article2', |
---|
197 | 'descriptif'=> _T('escal:mot_mon_article2'), |
---|
198 | 'type'=>'affichage' |
---|
199 | ), |
---|
200 | array( |
---|
201 | 'titre'=>'mon-article3', |
---|
202 | 'descriptif'=> _T('escal:mot_mon_article3'), |
---|
203 | 'type'=>'affichage' |
---|
204 | ), |
---|
205 | array( |
---|
206 | 'titre'=>'pas-a-decouvrir', |
---|
207 | 'descriptif'=> _T('escal:mot_pas_decouvrir'), |
---|
208 | 'type'=>'affichage' |
---|
209 | ), |
---|
210 | array( |
---|
211 | 'titre'=>'pas-a-la-une', |
---|
212 | 'descriptif'=> _T('escal:mot_pas_une'), |
---|
213 | 'type'=>'affichage' |
---|
214 | ), |
---|
215 | array( |
---|
216 | 'titre'=>'pas-au-menu', |
---|
217 | 'descriptif'=> _T('escal:mot_pas_menu'), |
---|
218 | 'type'=>'affichage' |
---|
219 | ), |
---|
220 | array( |
---|
221 | 'titre'=>'pas-au-menu-vertical', |
---|
222 | 'descriptif'=> _T('escal:mot_pas_menu_vertical'), |
---|
223 | 'type'=>'affichage' |
---|
224 | ), |
---|
225 | array( |
---|
226 | 'titre'=>'pas-au-plan', |
---|
227 | 'descriptif'=> _T('escal:mot_pas_plan'), |
---|
228 | 'type'=>'affichage' |
---|
229 | ), |
---|
230 | array( |
---|
231 | 'titre'=>'photo-une', |
---|
232 | 'descriptif'=> _T('escal:mot_photo_une'), |
---|
233 | 'type'=>'affichage' |
---|
234 | ), |
---|
235 | array( |
---|
236 | 'titre'=>'pleinepage', |
---|
237 | 'descriptif'=> _T('escal:mot_pleine_page'), |
---|
238 | 'type'=>'affichage' |
---|
239 | ), |
---|
240 | array( |
---|
241 | 'titre'=>'RubriqueOnglet', |
---|
242 | 'descriptif'=> _T('escal:mot_rubrique_onglet'), |
---|
243 | 'type'=>'affichage' |
---|
244 | ), |
---|
245 | array( |
---|
246 | 'titre'=>'RubriqueOnglet2', |
---|
247 | 'descriptif'=> _T('escal:mot_rubrique_onglet2'), |
---|
248 | 'type'=>'affichage' |
---|
249 | ), |
---|
250 | array( |
---|
251 | 'titre'=>'RubriqueOnglet3', |
---|
252 | 'descriptif'=> _T('escal:mot_rubrique_onglet3'), |
---|
253 | 'type'=>'affichage' |
---|
254 | ), |
---|
255 | array( |
---|
256 | 'titre'=>'RubriqueOnglet4', |
---|
257 | 'descriptif'=> _T('escal:mot_rubrique_onglet4'), |
---|
258 | 'type'=>'affichage' |
---|
259 | ), |
---|
260 | array( |
---|
261 | 'titre'=>'RubriqueOnglet5', |
---|
262 | 'descriptif'=> _T('escal:mot_rubrique_onglet5'), |
---|
263 | 'type'=>'affichage' |
---|
264 | ), |
---|
265 | array( |
---|
266 | 'titre'=>'site-exclu', |
---|
267 | 'descriptif'=> _T('escal:mot_site_exclu'), |
---|
268 | 'type'=>'affichage' |
---|
269 | ), |
---|
270 | array( |
---|
271 | 'titre'=>'special', |
---|
272 | 'descriptif'=> _T('escal:mot_special'), |
---|
273 | 'type'=>'affichage' |
---|
274 | ), |
---|
275 | array( |
---|
276 | 'titre'=>'texte2colonnes', |
---|
277 | 'descriptif'=> _T('escal:mot_texte2colonnes'), |
---|
278 | 'type'=>'affichage' |
---|
279 | ), |
---|
280 | array( |
---|
281 | 'titre'=>'video-une', |
---|
282 | 'descriptif'=> _T('escal:mot_video_une'), |
---|
283 | 'type'=>'affichage' |
---|
284 | ) |
---|
285 | ) |
---|
286 | ); |
---|
287 | |
---|
288 | return $schema; |
---|
289 | } |
---|
290 | |
---|
291 | // Fonction de mise a jour du schema |
---|
292 | function update_groupe_mots(){ |
---|
293 | include_spip('action/editer_objet'); |
---|
294 | |
---|
295 | // chargement du array des groupe et mots |
---|
296 | $schema = shema_escal(); |
---|
297 | |
---|
298 | // en qu'elle version de escal est on ? |
---|
299 | // si on a une meta escal_base_version, c'est qu'on est sur une version avec instalation auto |
---|
300 | $meta = lire_config('escal_base_version'); |
---|
301 | |
---|
302 | // si la meta est présente |
---|
303 | if($meta!=''){ |
---|
304 | // Maj des groupes |
---|
305 | for ($i= 0 , $nbr_grp = count($schema['groupes']) ; $i < $nbr_grp ; ++$i){ |
---|
306 | // test si le groupe existe |
---|
307 | $grp_titre = $schema['groupes'][$i]['titre']; |
---|
308 | $id_grp = sql_getfetsel("id_groupe","spip_groupes_mots","titre='$grp_titre'"); |
---|
309 | // si pas d'id retournée on inssère |
---|
310 | if($id_grp!=''){ |
---|
311 | //echo "Update le groupe existe déja : ".$id_grp."=> ".$grp_titre."\n"; |
---|
312 | sql_updateq('spip_groupes_mots', $schema['groupes'][$i], "id_groupe='$id_grp'"); |
---|
313 | }//sinon on met a jour |
---|
314 | else{ |
---|
315 | //echo "Insert Le groupe n'éxiste pas => ".$grp_titre."\n"; |
---|
316 | $id = sql_insertq('spip_groupes_mots',$schema['groupes'][$i]); |
---|
317 | } |
---|
318 | |
---|
319 | } |
---|
320 | |
---|
321 | //Maj des mots : on boucle sur le tableau mots |
---|
322 | for ($i= 0 , $nbr_mot = count($schema['mots']) ; $i < $nbr_mot ; ++$i){ |
---|
323 | // test la présence du mot sur le champ titre |
---|
324 | $titre = $schema['mots'][$i]['titre']; |
---|
325 | $id_mot = sql_getfetsel("id_mot","spip_mots","titre='$titre'"); |
---|
326 | // le titre du mot est déjà présent |
---|
327 | if($id_mot!=''){ |
---|
328 | // echo "Update le mot clef existe déja : ".$id_mot."=> ".$titre."\n"; |
---|
329 | $test = sql_updateq('spip_mots', $schema['mots'][$i], "titre='$titre'"); |
---|
330 | objet_modifier('mot',$id_mot,$schema['mots'][$i]); |
---|
331 | }else{ |
---|
332 | // echo "Insert Le mot clef n'éxiste pas => ".$titre."\n"; |
---|
333 | // on extrait du array le groupe dont dépend le mot |
---|
334 | $grp_titre = $schema['mots'][$i]['type']; |
---|
335 | $id_grp = sql_getfetsel("id_groupe","spip_groupes_mots","titre='$grp_titre'"); |
---|
336 | $id_mot = objet_inserer('mot',$id_grp); |
---|
337 | objet_modifier('mot',$id_mot,$schema['mots'][$i]); |
---|
338 | } |
---|
339 | } |
---|
340 | }//si pas de meta_base on est sur une install plus ancienne |
---|
341 | else{ |
---|
342 | // on verra plus tard ;-) |
---|
343 | } |
---|
344 | } |
---|
345 | |
---|
346 | |
---|
347 | /* |
---|
348 | * function install_groupe_mot |
---|
349 | * installe les groupes de mots techniques et leurs mots clefs |
---|
350 | */ |
---|
351 | function install_groupe_mots() { |
---|
352 | include_spip('action/editer_objet'); |
---|
353 | // chargement du array des groupe et mots |
---|
354 | $schema = shema_escal(); |
---|
355 | // installation des groupes |
---|
356 | for ($i= 0 , $nbr_mot = count($schema['groupes']) ; $i < $nbr_mot ; ++$i){ |
---|
357 | $id = sql_insertq('spip_groupes_mots',$schema['groupes'][$i]); |
---|
358 | } |
---|
359 | |
---|
360 | // installation des mots |
---|
361 | for ($i= 0 , $nbr_mot = count($schema['mots']) ; $i < $nbr_mot ; ++$i){ |
---|
362 | // on extrait du array le groupe dont dépend le mot |
---|
363 | $grp_titre = $schema['mots'][$i]['type']; |
---|
364 | $id_grp = sql_getfetsel("id_groupe","spip_groupes_mots","titre='$grp_titre'"); |
---|
365 | if($id_grp!=''){ |
---|
366 | $id_mot = objet_inserer('mot',$id_grp); |
---|
367 | objet_modifier('mot',$id_mot,$schema['mots'][$i]); |
---|
368 | } |
---|
369 | } |
---|
370 | |
---|
371 | } |
---|
372 | |
---|
373 | // Fonction de désinstalation des groupes et mots de Escal |
---|
374 | function uninstal_escal(){ |
---|
375 | // chargement du array des groupe et mots |
---|
376 | $schema = shema_escal(); |
---|
377 | $id_grp = array(); |
---|
378 | // recuperer les id des groupes |
---|
379 | for ($i= 0 , $nbr_mot = count($schema['groupes']) ; $i < $nbr_mot ; ++$i){ |
---|
380 | $grp_titre = $schema['groupes'][$i]['titre']; |
---|
381 | $id_grp = sql_getfetsel("id_groupe","spip_groupes_mots","titre='$grp_titre'"); |
---|
382 | // désinstaller les mots correspondant a ce groupe |
---|
383 | sql_delete("spip_mots","id_groupe='$id_grp'"); |
---|
384 | sql_delete("spip_groupes_mots","id_groupe='$id_grp'"); |
---|
385 | } |
---|
386 | } |
---|
387 | |
---|
388 | // ======================================================================================================================================= |
---|
389 | // pour gerer les classes des differents liens dans les articles |
---|
390 | // Un grand merci a l'auteur : bobof |
---|
391 | // ======================================================================================================================================= |
---|
392 | if (!function_exists('inc_lien')){ |
---|
393 | function inc_lien($lien, $texte='', $class='', $title='', $hlang='', $rel='', $connect='') |
---|
394 | { |
---|
395 | $mode = ($texte AND $class) ? 'url' : 'tout'; |
---|
396 | $lien = calculer_url($lien, $texte, $mode, $connect); |
---|
397 | if ($mode === 'tout') { |
---|
398 | $texte = $lien['titre']; |
---|
399 | if (!$class AND isset($lien['class'])) $class = $lien['class']; |
---|
400 | $lang = isset($lien['lang']) ?$lien['lang'] : ''; |
---|
401 | $lien = $lien['url']; |
---|
402 | } |
---|
403 | if (substr($lien,0,1) == '#') # spip_ancre pour liens de type ->#ancre |
---|
404 | $class = 'spip_ancre'; |
---|
405 | elseif (preg_match('/^\s*spip.php\?page\=/', $lien)) # spip_in pour liens de type ->rubXX, ->artXX, ->breXX et ->spip.php?page=XYZ |
---|
406 | $class = "spip_in"; |
---|
407 | elseif (preg_match('/^\s*mailto:/',$lien)) # spip_mail pour liens de type ->mailto: |
---|
408 | $class = "spip_mail"; |
---|
409 | elseif (preg_match(',s*('._SITE.'),Ui', $lien)) # spip_site pour liens de type ->http://mon_site.tld/repertoire/fichier.html |
---|
410 | $class = "spip_site"; |
---|
411 | elseif (preg_match(',('._DOMAINE_SITE.'),Ui', $lien)) # spip_dom pour liens de type ->http://www.domaine.tld ou ->http://sous-domaine.domaine.tld |
---|
412 | $class = "spip_dom"; |
---|
413 | elseif (preg_match('/^<html>/',$lien)) # spip_url, spip_out pour les autres cas de figures |
---|
414 | $class = "spip_url spip_out"; |
---|
415 | elseif (!$class) $class = "spip_out"; # spip_out pour les liens externes |
---|
416 | return inc_lien_dist($lien, $texte, $class, $title, $hlang, $rel, $connect); |
---|
417 | } |
---|
418 | } |
---|
419 | // balises issues da la contrib "Balises de comptage" de Franck |
---|
420 | // http://contrib.spip.net/Balises-de-comptage |
---|
421 | // ======================================================================================================================================= |
---|
422 | // balise #TOTAL_VISITES |
---|
423 | // ======================================================================================================================================= |
---|
424 | function vst_total_visites() { |
---|
425 | $query = "SELECT SUM(visites) AS total_abs FROM spip_visites"; |
---|
426 | $result = spip_query($query); |
---|
427 | if ($row = spip_fetch_array($result)) |
---|
428 | { return $row['total_abs']; } |
---|
429 | else { return "0";} |
---|
430 | } |
---|
431 | function balise_TOTAL_VISITES($p) { |
---|
432 | $p->code = "vst_total_visites()"; |
---|
433 | $p->statut = 'php'; |
---|
434 | return $p; |
---|
435 | } |
---|
436 | // ======================================================================================================================================= |
---|
437 | // balise #NBPAGES_VISITEES |
---|
438 | // ======================================================================================================================================= |
---|
439 | function vst_total_pages_visitees() { |
---|
440 | $query = "SELECT SUM(visites) AS nbPages FROM spip_visites_articles"; |
---|
441 | $result = spip_query($query); |
---|
442 | if ($row = spip_fetch_array($result)) |
---|
443 | { return $row['nbPages']; } |
---|
444 | else { return "0";} |
---|
445 | } |
---|
446 | function balise_NBPAGES_VISITEES($p) { |
---|
447 | $p->code = "vst_total_pages_visitees()"; |
---|
448 | $p->statut = 'php'; |
---|
449 | return $p; |
---|
450 | } |
---|
451 | |
---|
452 | // ======================================================================================================================================= |
---|
453 | // balise #MOY_VISITES |
---|
454 | // ======================================================================================================================================= |
---|
455 | function moyenne_visites_par_jour() { |
---|
456 | // calcul de la moyenne de visites |
---|
457 | // Période d'analyse couverte (nb de jours avant aujourd'hui) |
---|
458 | $periode = lire_config('escal/config/periodevisites', '365') ; |
---|
459 | |
---|
460 | // Sur tout le site, nombre de visites pendant la période |
---|
461 | $query="SELECT UNIX_TIMESTAMP(date) AS date_unix, visites FROM spip_visites ". |
---|
462 | "WHERE 1 AND date > DATE_SUB(NOW(),INTERVAL $periode DAY) ORDER BY date"; |
---|
463 | $result=spip_query($query); |
---|
464 | $i=0 ; |
---|
465 | $total_absolu=0; |
---|
466 | while ($row = spip_fetch_array($result)) { |
---|
467 | $total_absolu = $total_absolu + $row['visites']; |
---|
468 | $i++; |
---|
469 | } |
---|
470 | // Nombre moyen de visites par jour sur la période |
---|
471 | $moyenne = round($total_absolu / $periode ); |
---|
472 | return $moyenne; |
---|
473 | } |
---|
474 | function balise_MOY_VISITES($p) { |
---|
475 | $p->code = "moyenne_visites_par_jour()"; |
---|
476 | $p->statut = 'php'; |
---|
477 | return $p; |
---|
478 | } |
---|
479 | // ======================================================================================================================================= |
---|
480 | // fonction pour l'affichage du nombre de visiteurs connectes |
---|
481 | // ======================================================================================================================================= |
---|
482 | // issue du plugin "Nombre de visiteurs connectées" |
---|
483 | // http://contrib.spip.net/Nombres-de-visiteurs-connectes |
---|
484 | // corrections par Vincent de la liste Spip |
---|
485 | function escal_visiteurs_connectes_compter(){ |
---|
486 | return count(preg_files(_DIR_TMP.'visites/','.')); |
---|
487 | } |
---|
488 | |
---|
489 | // ======================================================================================================================================= |
---|
490 | // Balise : #JOUR_MAX_VISITES & #VAL_MAX_VISITES |
---|
491 | // ======================================================================================================================================= |
---|
492 | |
---|
493 | function generer_jour_val_max_visites($arg) { |
---|
494 | $qv = spip_query("SELECT MAX(visites) as maxvi FROM spip_visites"); |
---|
495 | $rv = spip_fetch_array($qv); |
---|
496 | $valmaxi = $rv['maxvi']; |
---|
497 | |
---|
498 | if($arg=="date") { |
---|
499 | $qd = spip_query("SELECT date FROM spip_visites WHERE visites = $valmaxi"); |
---|
500 | $rd = spip_fetch_array($qd); |
---|
501 | $jourmaxi = $rd['date']; |
---|
502 | } |
---|
503 | if($arg=="date") { $a = $jourmaxi; } |
---|
504 | if($arg=="val") { $a = $valmaxi; } |
---|
505 | return $a; |
---|
506 | } |
---|
507 | function balise_JOUR_MAX_VISITES($p) { |
---|
508 | $arg="date"; |
---|
509 | $p->code = "generer_jour_val_max_visites($arg)"; |
---|
510 | $p->interdire_scripts = false; |
---|
511 | return $p; |
---|
512 | } |
---|
513 | function balise_VAL_MAX_VISITES($p) { |
---|
514 | $arg="val"; |
---|
515 | $p->code = "generer_jour_val_max_visites($arg)"; |
---|
516 | $p->interdire_scripts = false; |
---|
517 | return $p; |
---|
518 | } |
---|
519 | |
---|
520 | // ======================================================================================================================================= |
---|
521 | // fonction pour les citations du pied de page |
---|
522 | // ======================================================================================================================================= |
---|
523 | |
---|
524 | function citations($txt){ |
---|
525 | $BDDArray = $txt;// Lecture de l'article |
---|
526 | $BDDArray = explode('<p>', $BDDArray); // couper à la rencontre un p |
---|
527 | $BDDArray = array_map('rtrim', $BDDArray); // Suppression des fins de lignes de chaque élément |
---|
528 | $BDDArray = array_filter($BDDArray); // Suppression de TOUTES les entrées vides |
---|
529 | |
---|
530 | $citation = $BDDArray[array_rand($BDDArray)]; // une phrase au hasard dans le tableau |
---|
531 | if(strlen($citation)<200) //on ne veut pas dépasser 200 caractères |
---|
532 | return strip_tags($citation); //on vire les tags html |
---|
533 | else citations($txt); |
---|
534 | } |
---|
535 | |
---|
536 | /* +----------------------------------+ |
---|
537 | * Nom du Filtre : tuer les lettres! |
---|
538 | * +----------------------------------+ |
---|
539 | * Date : lundi 11 mai 2005 |
---|
540 | * Auteur : Posted by cerdic |
---|
541 | * +-------------------------------------+ |
---|
542 | * Fonctions de ce filtre : |
---|
543 | * remplacement des caractères accentués |
---|
544 | * exemple trouvé là: |
---|
545 | * http://be.php.net/manual/fr/function.strtr.php#52098 |
---|
546 | * +-------------------------------------+ |
---|
547 | * |
---|
548 | */ |
---|
549 | |
---|
550 | |
---|
551 | function lettre1($texte) { |
---|
552 | $texte = $texte{0}; // première lettre |
---|
553 | $texte = |
---|
554 | strtr($texte, "\xA1\xAA\xBA\xBF\xC0\xC1\xC2\xC3\xC5\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD8\xD9\xDA\xDB\xDD\xE0\xE1\xE2\xE3\xE5\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF8\xF9\xFA\xFB\xFD\xFF", "!ao?AAAAACEEEEIIIIDNOOOOOUUUYaaaaaceeeeiiiidnooooouuuyy"); |
---|
555 | $texte = strtr($texte, |
---|
556 | array("\xC4"=>"Ae", "\xC6"=>"AE", "\xD6"=>"Oe", "\xDC"=>"Ue", "\xDE"=>"TH", "\xDF"=>"ss", "\xE4"=>"ae", "\xE6"=>"ae", "\xF6"=>"oe", "\xFC"=>"ue", "\xFE"=>"th")); |
---|
557 | $texte = strtoupper($texte); // tout en majuscules |
---|
558 | return $texte; |
---|
559 | } |
---|
560 | // ======================================================================================================================================= |
---|
561 | // Ajout de nofollow sur les liens (pas mal à utiliser sur les commentaires pour éviter le spam) |
---|
562 | // ======================================================================================================================================= |
---|
563 | |
---|
564 | function nofollow($texte){ |
---|
565 | $texte=str_replace("<a href","<a rel='nofollow' href",$texte); |
---|
566 | return $texte; |
---|
567 | } |
---|
568 | |
---|
569 | // ======================================================================================================================================= |
---|
570 | // paramètres pour le plugin diapo |
---|
571 | // ======================================================================================================================================= |
---|
572 | |
---|
573 | //nombre de vignettes par page |
---|
574 | $GLOBALS['diapo_vignettes']=15; |
---|
575 | |
---|
576 | //largeur et hauteur maxi des vignettes : |
---|
577 | $GLOBALS['diapo_vignette']=60; |
---|
578 | |
---|
579 | //largeur maxi de la grande image avec vignettes en haut : |
---|
580 | $GLOBALS['diapo_grand']=400; |
---|
581 | |
---|
582 | //largeur maxi de la grande image avec vignettes sur les côtés: |
---|
583 | $GLOBALS['diapo_petit']=300; |
---|
584 | //hauteur maxi de la grande image avec vignettes sur les côtés : |
---|
585 | $GLOBALS['diapo_petit_h']=300; |
---|
586 | |
---|
587 | //diaporama : temps de pause en millisecondes : |
---|
588 | $GLOBALS['diapo_temps']=3000; |
---|
589 | |
---|
590 | |
---|
591 | |
---|
592 | // ======================================================================================================================================= |
---|
593 | // fonction couperpropre |
---|
594 | // ======================================================================================================================================= |
---|
595 | |
---|
596 | /* |
---|
597 | * Coupe une chaine en gardant le formatage HTML |
---|
598 | * @param string $text Texte a couper |
---|
599 | * @param integer $length Longueur a garder |
---|
600 | * @param string $ending Caracteres a ajouter a la fin |
---|
601 | * @param boolean $exact Coupure exacte |
---|
602 | * @return string |
---|
603 | */ |
---|
604 | |
---|
605 | function couperpropre($text, $length, $ending = '...', $exact = false) { |
---|
606 | if(strlen(preg_replace('/<.*?>/', '', $text)) <= $length) { |
---|
607 | return $text; |
---|
608 | } |
---|
609 | preg_match_all('/(<.+?>)?([^<>]*)/is', $text, $matches, PREG_SET_ORDER); |
---|
610 | $total_length = 0; |
---|
611 | $arr_elements = array(); |
---|
612 | $truncate = ''; |
---|
613 | foreach($matches as $element) { |
---|
614 | if(!empty($element[1])) { |
---|
615 | if(preg_match('/^<\s*.+?\/\s*>$/s', $element[1])) { |
---|
616 | } |
---|
617 | else if(preg_match('/^<\s*\/([^\s]+?)\s*>$/s', $element[1], $element2)) { |
---|
618 | $pos = array_search($element2[1], $arr_elements); |
---|
619 | if($pos !== false) { |
---|
620 | unset($arr_elements[$pos]); |
---|
621 | } |
---|
622 | } |
---|
623 | else if(preg_match('/^<\s*([^\s>!]+).*?>$/s', $element[1], $element2)) { |
---|
624 | array_unshift($arr_elements, strtolower($element2[1])); |
---|
625 | } |
---|
626 | $truncate .= $element[1]; |
---|
627 | } |
---|
628 | $content_length = strlen(preg_replace('/(&[a-z] { |
---|
629 | 1,6 |
---|
630 | } |
---|
631 | ; |
---|
632 | |&#[0-9]+; |
---|
633 | )/i', ' ', $element[2])); |
---|
634 | if($total_length >= $length) { |
---|
635 | break; |
---|
636 | } |
---|
637 | elseif ($total_length+$content_length > $length) { |
---|
638 | $left = $total_length>$length?$total_length-$length: $length-$total_length; |
---|
639 | $entities_length = 0; |
---|
640 | if(preg_match_all('/&[a-z] { |
---|
641 | 1,6 |
---|
642 | } |
---|
643 | ; |
---|
644 | |&#[0-9]+; |
---|
645 | /i', $element[2], $element3, PREG_OFFSET_CAPTURE)) { |
---|
646 | foreach($element3[0] as $entity) { |
---|
647 | if($entity[1]+1-$entities_length <= $left) { |
---|
648 | $left--; |
---|
649 | $entities_length += strlen($entity[0]); |
---|
650 | } |
---|
651 | else break; |
---|
652 | } |
---|
653 | } |
---|
654 | $truncate .= substr($element[2], 0, $left+$entities_length); |
---|
655 | break; |
---|
656 | } |
---|
657 | else { |
---|
658 | $truncate .= $element[2]; |
---|
659 | $total_length += $content_length; |
---|
660 | } |
---|
661 | } |
---|
662 | if(!$exact) { |
---|
663 | $spacepos = strrpos($truncate, ' '); |
---|
664 | if(isset($spacepos)) { |
---|
665 | $truncate = substr($truncate, 0, $spacepos); |
---|
666 | } |
---|
667 | } |
---|
668 | $truncate .= $ending; |
---|
669 | foreach($arr_elements as $element) { |
---|
670 | $truncate .= '</' . $element . '>'; |
---|
671 | } |
---|
672 | return $truncate; |
---|
673 | } |
---|
674 | |
---|
675 | // ======================================================================================================================================= |
---|
676 | // traitement json |
---|
677 | // ======================================================================================================================================= |
---|
678 | |
---|
679 | if (!function_exists('json_decode')) { |
---|
680 | function json_decode($content, $assoc=false) { |
---|
681 | require_once 'classes/JSON.php'; |
---|
682 | if ($assoc) { |
---|
683 | $json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE); |
---|
684 | } |
---|
685 | else { |
---|
686 | $json = new Services_JSON; |
---|
687 | } |
---|
688 | return $json->decode($content); |
---|
689 | } |
---|
690 | } |
---|
691 | |
---|
692 | if (!function_exists('json_encode')) { |
---|
693 | function json_encode($content) { |
---|
694 | require_once 'classes/JSON.php'; |
---|
695 | $json = new Services_JSON; |
---|
696 | return $json->encode($content); |
---|
697 | } |
---|
698 | } |
---|
699 | |
---|
700 | |
---|
701 | |
---|
702 | /*###### |
---|
703 | # |
---|
704 | # Filtre SPIP 'decouper_en_XD_parties' |
---|
705 | # 4 Alexandra By Apsulis |
---|
706 | # 14 janvier 2007 |
---|
707 | # |
---|
708 | # OBJET : |
---|
709 | # ------- |
---|
710 | # Pour decouper un contenu texte en X parties egale avec cesure mot entier. |
---|
711 | # Retourne la partie Y demandee. |
---|
712 | # |
---|
713 | # USAGE : |
---|
714 | # ------- |
---|
715 | # Dans le squelette : |
---|
716 | # [(#TEXTE*|decouper_en_XD_parties{X,Y}|propre)] |
---|
717 | # |
---|
718 | # Dans le fichier mes_fonctions.php (a ranger par exemple dans votre dossier de squelettes) : |
---|
719 | # placer la fonction qui suit depuis "function decouper"... jusqu'a "return $partie_isolee; }" |
---|
720 | # |
---|
721 | # |
---|
722 | # Remarque : |
---|
723 | # ---------- |
---|
724 | # - Fonctionne avec n'importe quel contenu texte : #INTRO, #TEXTE, #DESCRIPTIF, #PS, etc... |
---|
725 | # - Pour remplir X colonnes, dans le cadre d'une boucle (ou pas, vous faites ce que vous voulez), |
---|
726 | # utiliser X fois le filtre en changeant la partie Y demandee. |
---|
727 | # |
---|
728 | #######*/ |
---|
729 | |
---|
730 | |
---|
731 | |
---|
732 | function decouper_en_XD_parties($texte,$nb_parties,$partie_a_retourner){ |
---|
733 | |
---|
734 | /* On traite les erreurs positives et negatives au cas ou */ |
---|
735 | if($partie_a_retourner > $nb_parties){ |
---|
736 | $partie_a_retourner = $nb_parties; |
---|
737 | } |
---|
738 | if($partie_a_retourner == 0){ |
---|
739 | $partie_a_retourner = 1; |
---|
740 | } |
---|
741 | |
---|
742 | |
---|
743 | //var_dump($nb_parties); |
---|
744 | $longueur = strlen($texte); // Longueur totale de la chaine de caractere |
---|
745 | $partie = $longueur/$nb_parties; // Taille en caracteres d'une partie |
---|
746 | $decoupe = str_word_count($texte, 2, '.&<|>'); // On decoupe le texte par mot pour savoir a quels mots couper les parties |
---|
747 | |
---|
748 | //print_r(str_word_count($texte, 2, '.&')); |
---|
749 | |
---|
750 | $mots_cesure[0] = 0; // Premiere borne = 0 |
---|
751 | $j = 1; |
---|
752 | |
---|
753 | |
---|
754 | while($j < $nb_parties){ // On recherche la fin du dernier mot de la partie pour ne pas le couper (=cesure) |
---|
755 | $i = $partie*($j); // On debute la recherche a partie, et ensuite on incremente de la taille d'une partie pour trouver le mot suivant |
---|
756 | while(!isset($decoupe[$i])){ // On part du caractere ou on devrait couper, |
---|
757 | $i++; // et on avance jusqu'a trouver la fin du mot |
---|
758 | } |
---|
759 | /*### |
---|
760 | # CORRECTIF par Pierre |
---|
761 | # Pour eviter de couper les colonnes au milieu d'une ligne (par exemple une ligne de un ou deux mots) |
---|
762 | # La coupure se fait la fin d'une phrase, aprs le point. |
---|
763 | # (ligne 49)"$decoupe = str_word_count($texte, 2, '.&');" ici le troisime parametre est l'ensemble des caracteres autorises dans un mot dont le point ce qui permet la coupure. |
---|
764 | ###*/ |
---|
765 | while(!preg_match('`\.$`',"$decoupe[$i]")){ //tant que le mot ne se termine pas par un point... |
---|
766 | $i++; //incrementation d'un caractere |
---|
767 | while(!isset($decoupe[$i])){ |
---|
768 | $i++; |
---|
769 | } |
---|
770 | } |
---|
771 | $i++; |
---|
772 | while(!isset($decoupe[$i])){ |
---|
773 | $i++; |
---|
774 | } |
---|
775 | //echo $decoupe[$i]; |
---|
776 | |
---|
777 | /*### FIN DU CORRECTIF ###*/ |
---|
778 | |
---|
779 | |
---|
780 | $mots_cesure[$j] = $i; // On range la valeur en caractere du mot clef pour la cesure |
---|
781 | $j++; // On passe a la partie suivante |
---|
782 | } |
---|
783 | $mots_cesure[$j] = $longueur; // Derniere borne = fin du texte |
---|
784 | |
---|
785 | // On isole la partie qu'on renvoi pour affichage par SPIP |
---|
786 | $partie_isolee = substr($texte, $mots_cesure[$partie_a_retourner-1], $mots_cesure[$partie_a_retourner]-$mots_cesure[$partie_a_retourner-1]); |
---|
787 | |
---|
788 | return propre($partie_isolee); |
---|
789 | } |
---|
790 | ?> |
---|