source: spip-zone/_squelettes_/escal/branche_V3/escal_fonctions.php @ 95190

Last change on this file since 95190 was 95190, checked in by jcvilleneuve@…, 4 years ago

EscalV3 : modification complète du javascript pour les objets défilants et adaptation des noisettes concernées pour un défilement plus propre + traitement json

File size: 28.0 KB
Line 
1<?php
2
3/**
4 * Plugin Escal
5 * Licence GNU/GPL
6 */
7
8if (!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
22function 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
39function shema_escal(){
40    $schema = array(
41        'groupes' => array(
42            array(  // creation du groupe affichage
43                'titre'=>'affichage',
44                'descriptif'=>'Groupe de mots-cl&eacute;s techniques utilis&eacute;s dans Escal',
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'=>'Groupe de mots-cl&eacute;s pour la couleur des &eacute;v&egrave;nements de l\'agenda dans Escal',
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'=>'pour choisir l&rsquo;article qui sera affich&eacute; dans le bloc "Acc&egrave;s direct" (noisette inc-acces_direct)',
88                'type'=>'affichage'
89            ),
90            array(
91                'titre'=>'accueil',
92                'descriptif'=>'pour choisir l&rsquo;article affich&eacute; en onglet d&rsquo;accueil (noisette inc-accueil)',
93                'type'=>'affichage'
94            ),           
95            array(
96                'titre'=>'actus',
97                'descriptif'=>'pour choisir les articles qui seront affich&eacute;s dans le bloc "Actus" (noisette inc-actus)',
98                'type'=>'affichage'
99            ),
100            array(
101                'titre'=>'agenda',
102                'descriptif'=>'pour choisir les articles ou la ou les rubriques dont les articles seront affich&eacute;s dans l&rsquo;agenda',
103                'type'=>'affichage'
104            ),           
105            array(
106                'titre'=>'annonce',
107                'descriptif'=>'pour choisir l&rsquo;article dont le texte sera affich&eacute; dans le bloc "Annonce" de la page d&rsquo;accueil (noisette inc-annonce)',
108                'type'=>'affichage'
109            ),
110            array(
111                'titre'=>'annonce-defilant',
112                'descriptif'=>'pour choisir les articles dont le texte sera affich&eacute; dans le bloc "Annonces d&eacute;filantes" de la page d&rsquo;accueil (noisette inc-annonce_defilant)',
113                'type'=>'affichage'
114            ),           
115            array(
116                'titre'=>'annuaire',
117                'descriptif'=>'pour choisir l&rsquo;article qui sera utilis&eacute; par la page annuaire.html',
118                'type'=>'affichage'
119            ),
120            array(
121                'titre'=>'archive',
122                'descriptif'=>'pour choisir la rubrique dont un article pris au hasard sera affich&eacute; dans l\'onglet "Article archive" de la page d\'accueil',
123                'type'=>'affichage'
124            ),
125            array(
126                'titre'=>'article-libre1',
127                'descriptif'=>'pour choisir l\'article dont le contenu sera affich&eacute; dans la noisette "Article libre 1"',
128                'type'=>'affichage'
129            ),
130            array(
131                'titre'=>'article-libre2',
132                'descriptif'=>'pour choisir l\'article dont le contenu sera affich&eacute; dans la noisette "Article libre 2"',
133                'type'=>'affichage'
134            ),
135            array(
136                'titre'=>'article-libre3',
137                'descriptif'=>'pour choisir l\'article dont le contenu sera affich&eacute; dans la noisette "Article libre 3"',
138                'type'=>'affichage'
139            ),
140            array(
141                'titre'=>'article-libre4',
142                'descriptif'=>'pour choisir l\'article dont le contenu sera affich&eacute; dans la noisette "Article libre 4"',
143                'type'=>'affichage'
144            ),
145            array(
146                'titre'=>'article-libre5',
147                'descriptif'=>'pour choisir l\'article dont le contenu sera affich&eacute; dans la noisette "Article libre 5"',
148                'type'=>'affichage'
149            ),
150            array(
151                'titre'=>'article-sans-date',
152                'descriptif'=>'pour supprimer l\'affichage des dates de publication et de modification d\'un article ',
153                'type'=>'affichage'
154            ),
155            array(
156                'titre'=>'chrono',
157                'descriptif'=>'pour afficher les articles d&rsquo;une rubrique dans les menus en ordre ant&eacute;chronologique, comportement non transmis aux rubriques-filles',
158                'type'=>'affichage'
159            ),
160            array(
161                'titre'=>'citations',
162                'descriptif'=>'pour choisir l&rsquo;article qui servira de r&eacute;servoir pour les citations dans le pied de page',
163                'type'=>'affichage'
164            ),                       
165            array(
166                'titre'=>'edito',
167                'descriptif'=>'pour choisir l&rsquo;article qui sera affich&eacute; dans le bloc "Edito" (noisette inc-edito)',
168                'type'=>'affichage'
169            ),           
170            array(
171                'titre'=>'favori',
172                'descriptif'=>'pour choisir les sites dont les vignettes seront affich&eacute;es dans le bloc "Sites favoris" (noisette inc-sites_favoris.html)',
173                'type'=>'affichage'
174            ),           
175            array(
176                'titre'=>'forum',
177                'descriptif'=>'pour choisir le secteur qui sera utilis&eacute; pour le forum du site',
178                'type'=>'affichage'
179            ),
180            array(
181                'titre'=>'mon-article',
182                'descriptif'=>'pour choisir un article qui sera affich&eacute; dans un onglet du bloc central de la page d&rsquo;accueil',
183                'type'=>'affichage'
184            ),
185            array(
186                'titre'=>'mon-article2',
187                'descriptif'=>'pour choisir un 2e article qui sera affich&eacute; dans un onglet du bloc central de la page d&rsquo;accueil',
188                'type'=>'affichage'
189            ),
190            array(
191                'titre'=>'mon-article3',
192                'descriptif'=>'pour choisir un 3e article qui sera affich&eacute; dans un onglet du bloc central de la page d&rsquo;accueil',
193                'type'=>'affichage'
194            ),
195            array(
196                'titre'=>'pas-a-decouvrir',
197                'descriptif'=>'pour choisir les rubriques et les articles &agrave; exclure de l&rsquo;affichage dans la noisette "A decouvrir" si on choisit "dans tout le site" (inc-decouvrir-articles-sites.html)',
198                'type'=>'affichage'
199            ),
200            array(
201                'titre'=>'pas-a-la-une',
202                'descriptif'=>'pour ne pas afficher une rubrique (et ses articles) ou des articles dans le bloc "les derniers articles ..." de la page d&rsquo;accueil',
203                'type'=>'affichage'
204            ),
205            array(
206                'titre'=>'pas-au-menu',
207                'descriptif'=>'pour ne pas afficher une rubrique ou un article dans le menu horizontal',
208                'type'=>'affichage'
209            ),
210            array(
211                'titre'=>'pas-au-menu-vertical',
212                'descriptif'=>'Modification dans le descriptif !! pour ne pas afficher une rubrique ou un article dans les menus verticaux',
213                'type'=>'affichage'
214            ),
215            array(
216                'titre'=>'pas-au-plan',
217                'descriptif'=>'pour ne pas afficher une rubrique (et ses articles) ou des articles dans le bloc "Plan du site" de la page d&rsquo;accueil',
218                'type'=>'affichage'
219            ),
220            array(
221                'titre'=>'photo-une',
222                'descriptif'=>'pour choisir les articles dont les images seront affich&eacute;es dans le bloc "Quelques images au hasard" (noisette inc-photos)',
223                'type'=>'affichage'
224            ),
225            array(
226                'titre'=>'pleinepage',
227                'descriptif'=>'pour choisir les articles qui seront affich&eacute;s en pleine page sans aucun bloc lat&eacute;ral',
228                'type'=>'affichage'
229            ),
230            array(
231                'titre'=>'RubriqueOnglet',
232                'descriptif'=>'pour choisir une rubrique qui sera affich&eacute;e dans les onglets en page d&rsquo;accueil',
233                'type'=>'affichage'
234            ),
235            array(
236                'titre'=>'RubriqueOnglet2',
237                'descriptif'=>'pour choisir une deuxi&egrave;me rubrique qui sera affich&eacute;e dans les onglets en page d&rsquo;accueil',
238                'type'=>'affichage'
239            ),
240            array(
241                'titre'=>'site-exclu',
242                'descriptif'=>'pour exclure des sites dans le bloc "Sur le web" (noisette inc-sites.html)',
243                'type'=>'affichage'
244            ),
245            array(
246                'titre'=>'special',
247                'descriptif'=>'pour choisir la rubrique et/ou les articles qui seront affich&eacute;s dans le bloc &agrave; personnaliser (noisette inc-perso.html)',
248                'type'=>'affichage'
249            ),           
250            array(
251                'titre'=>'video-une',
252                'descriptif'=>'pour choisir les articles dont les vid&eacute;os seront affich&eacute;es dans le bloc "Vid&eacute;o" (noisette inc-video_accueil)',
253                'type'=>'affichage'
254            )           
255        )
256    );
257   
258    return $schema;
259}
260
261// Fonction de mise a jour du schema
262function update_groupe_mots(){
263    include_spip('action/editer_objet');
264   
265    // chargement du array des groupe et mots
266    $schema = shema_escal();
267   
268    // en qu'elle version de escal est on ?
269    // si on a une meta escal_base_version, c'est qu'on est sur une version avec instalation auto
270    $meta = lire_config('escal_base_version');
271   
272    // si la meta est présente
273    if($meta!=''){
274        // Maj des groupes
275        for ($i= 0 , $nbr_grp = count($schema['groupes']) ; $i < $nbr_grp ; ++$i){
276            // test si le groupe existe
277            $grp_titre = $schema['groupes'][$i]['titre'];
278            $id_grp = sql_getfetsel("id_groupe","spip_groupes_mots","titre='$grp_titre'");
279            // si pas d'id retournée on inssère
280            if($id_grp!=''){
281                //echo "Update le groupe existe déja : ".$id_grp."=> ".$grp_titre."\n";
282                sql_updateq('spip_groupes_mots', $schema['groupes'][$i], "id_groupe='$id_grp'");
283            }//sinon on met a jour
284            else{
285                //echo "Insert Le groupe n'éxiste pas => ".$grp_titre."\n";
286                $id = sql_insertq('spip_groupes_mots',$schema['groupes'][$i]);
287            }
288           
289        }   
290       
291        //Maj des mots : on boucle sur le tableau mots
292        for ($i= 0 , $nbr_mot = count($schema['mots']) ; $i < $nbr_mot ; ++$i){
293            // test la présence du mot sur le champ titre
294            $titre = $schema['mots'][$i]['titre'];
295            $id_mot = sql_getfetsel("id_mot","spip_mots","titre='$titre'");
296            // le titre du mot est déjà présent
297            if($id_mot!=''){
298                // echo "Update le mot clef existe déja : ".$id_mot."=> ".$titre."\n";
299                $test = sql_updateq('spip_mots', $schema['mots'][$i], "titre='$titre'");
300                objet_modifier('mot',$id_mot,$schema['mots'][$i]);
301            }else{
302                // echo "Insert Le mot clef n'éxiste pas => ".$titre."\n";
303                // on extrait du array le groupe dont dépend le mot
304                $grp_titre = $schema['mots'][$i]['type'];
305                $id_grp = sql_getfetsel("id_groupe","spip_groupes_mots","titre='$grp_titre'");
306                $id_mot = objet_inserer('mot',$id_grp);
307                objet_modifier('mot',$id_mot,$schema['mots'][$i]);
308            }
309        }
310    }//si pas de meta_base on est sur une install plus ancienne
311    else{
312       // on verra plus tard ;-)
313    }
314}
315
316
317/*
318 * function install_groupe_mot
319 * installe les groupes de mots techniques et leurs mots clefs
320 */
321function install_groupe_mots() {
322    include_spip('action/editer_objet');
323    // chargement du array des groupe et mots
324    $schema = shema_escal();
325    // installation des groupes
326    for ($i= 0 , $nbr_mot = count($schema['groupes']) ; $i < $nbr_mot ; ++$i){
327        $id = sql_insertq('spip_groupes_mots',$schema['groupes'][$i]);
328    }
329   
330    // installation des mots
331    for ($i= 0 , $nbr_mot = count($schema['mots']) ; $i < $nbr_mot ; ++$i){
332        // on extrait du array le groupe dont dépend le mot
333        $grp_titre = $schema['mots'][$i]['type'];
334        $id_grp = sql_getfetsel("id_groupe","spip_groupes_mots","titre='$grp_titre'");
335        if($id_grp!=''){
336           $id_mot = objet_inserer('mot',$id_grp);
337            objet_modifier('mot',$id_mot,$schema['mots'][$i]);
338        }
339    }
340   
341}
342
343// Fonction de désinstalation des groupes et mots de Escal
344function uninstal_escal(){
345    // chargement du array des groupe et mots
346    $schema = shema_escal();
347    $id_grp = array();
348    // recuperer les id des groupes
349    for ($i= 0 , $nbr_mot = count($schema['groupes']) ; $i < $nbr_mot ; ++$i){
350        $grp_titre = $schema['groupes'][$i]['titre'];
351        $id_grp = sql_getfetsel("id_groupe","spip_groupes_mots","titre='$grp_titre'");
352        // désinstaller les mots correspondant a ce groupe
353        sql_delete("spip_mots","id_groupe='$id_grp'");
354        sql_delete("spip_groupes_mots","id_groupe='$id_grp'");
355    }
356}
357
358// =======================================================================================================================================
359   // pour gerer les classes des differents liens dans les articles
360   // Un grand merci a l'auteur : bobof
361// =======================================================================================================================================
362if (!function_exists('inc_lien')){
363function inc_lien($lien, $texte='', $class='', $title='', $hlang='', $rel='', $connect='')
364{
365        $mode = ($texte AND $class) ? 'url' : 'tout';
366        $lien = calculer_url($lien, $texte, $mode, $connect);
367        if ($mode === 'tout') {
368                $texte = $lien['titre'];
369                if (!$class AND isset($lien['class'])) $class = $lien['class'];
370                $lang = isset($lien['lang']) ?$lien['lang'] : '';
371                $lien = $lien['url'];
372        }
373        if (substr($lien,0,1) == '#')  # spip_ancre pour liens de type ->#ancre
374                $class = 'spip_ancre';
375        elseif (preg_match('/^\s*spip.php\?page\=/', $lien)) # spip_in pour liens de type ->rubXX, ->artXX, ->breXX et ->spip.php?page=XYZ
376                $class = "spip_in";
377        elseif (preg_match('/^\s*mailto:/',$lien)) # spip_mail pour liens de type ->mailto:
378                $class = "spip_mail";
379        elseif (preg_match(',s*('._SITE.'),Ui', $lien)) # spip_site pour liens de type ->http://mon_site.tld/repertoire/fichier.html
380                $class = "spip_site";
381        elseif (preg_match(',('._DOMAINE_SITE.'),Ui', $lien)) # spip_dom pour liens de type ->http://www.domaine.tld ou ->http://sous-domaine.domaine.tld
382                $class = "spip_dom";
383        elseif (preg_match('/^<html>/',$lien)) # spip_url, spip_out pour les autres cas de figures
384                $class = "spip_url spip_out";
385        elseif (!$class) $class = "spip_out"; # spip_out pour les liens externes
386return inc_lien_dist($lien, $texte, $class, $title, $hlang, $rel, $connect);
387}
388}
389// balises issues da la contrib  "Balises de comptage" de Franck
390// http://contrib.spip.net/Balises-de-comptage
391// =======================================================================================================================================
392// balise #TOTAL_VISITES
393// =======================================================================================================================================
394function vst_total_visites() {
395        $query = "SELECT SUM(visites) AS total_abs FROM spip_visites";
396        $result = spip_query($query);
397        if ($row = spip_fetch_array($result))
398                { return $row['total_abs']; }
399        else { return "0";}
400}
401function balise_TOTAL_VISITES($p) {
402        $p->code = "vst_total_visites()";
403        $p->statut = 'php';
404        return $p;
405}
406// =======================================================================================================================================
407// balise #NBPAGES_VISITEES
408// =======================================================================================================================================
409function vst_total_pages_visitees() {
410        $query = "SELECT SUM(visites) AS nbPages FROM spip_visites_articles";
411        $result = spip_query($query);
412        if ($row = spip_fetch_array($result))
413                { return $row['nbPages']; }
414        else { return "0";}
415}
416function balise_NBPAGES_VISITEES($p) {
417        $p->code = "vst_total_pages_visitees()";
418        $p->statut = 'php';
419        return $p;
420}
421
422// =======================================================================================================================================
423// balise #MOY_VISITES
424// =======================================================================================================================================
425function moyenne_visites_par_jour() {
426// calcul de la moyenne de visites
427// Période d'analyse couverte (nb de jours avant aujourd'hui)
428$periode = lire_config('escal/config/periodevisites', '365') ;
429
430// Sur tout le site, nombre de visites pendant la période
431$query="SELECT UNIX_TIMESTAMP(date) AS date_unix, visites FROM spip_visites ".
432                "WHERE 1 AND date > DATE_SUB(NOW(),INTERVAL $periode DAY) ORDER BY date";
433        $result=spip_query($query);
434        $i=0 ;
435        $total_absolu=0;
436        while ($row = spip_fetch_array($result)) {
437                $total_absolu = $total_absolu + $row['visites'];
438                $i++;
439        }
440// Nombre moyen de visites par jour sur la période
441        $moyenne =  round($total_absolu / $periode );
442        return $moyenne;
443}
444function balise_MOY_VISITES($p) {
445        $p->code = "moyenne_visites_par_jour()";
446        $p->statut = 'php';
447        return $p;
448}
449// =======================================================================================================================================
450// fonction pour l'affichage du nombre de visiteurs connectes
451// =======================================================================================================================================
452// issue du plugin "Nombre de visiteurs connectées"
453// http://contrib.spip.net/Nombres-de-visiteurs-connectes
454// corrections par Vincent de la liste Spip
455function escal_visiteurs_connectes_compter(){
456         return count(preg_files(_DIR_TMP.'visites/','.'));
457     }
458
459// =======================================================================================================================================
460// Balise : #JOUR_MAX_VISITES & #VAL_MAX_VISITES
461// =======================================================================================================================================
462
463  function generer_jour_val_max_visites($arg) {
464        $qv = spip_query("SELECT MAX(visites) as maxvi FROM spip_visites");
465        $rv = spip_fetch_array($qv);
466        $valmaxi = $rv['maxvi'];
467
468        if($arg=="date") {
469                $qd = spip_query("SELECT date FROM spip_visites WHERE visites = $valmaxi");
470                $rd = spip_fetch_array($qd);
471                $jourmaxi = $rd['date'];
472        }
473        if($arg=="date") { $a = $jourmaxi; }
474        if($arg=="val") { $a = $valmaxi; }
475        return $a;
476}
477function balise_JOUR_MAX_VISITES($p) {
478        $arg="date";
479        $p->code = "generer_jour_val_max_visites($arg)";
480        $p->interdire_scripts = false;
481        return $p;
482}
483function balise_VAL_MAX_VISITES($p) {
484        $arg="val";
485        $p->code = "generer_jour_val_max_visites($arg)";
486        $p->interdire_scripts = false;
487        return $p;
488}
489
490// =======================================================================================================================================
491// fonction pour les citations du pied de page
492// =======================================================================================================================================
493
494function citations($txt){
495$BDDArray = $txt;// Lecture de l'article
496$BDDArray = explode('<p>', $BDDArray); // couper à la  rencontre un p
497$BDDArray = array_map('rtrim', $BDDArray); // Suppression des fins de lignes de chaque élément
498$BDDArray = array_filter($BDDArray); // Suppression de TOUTES les entrées vides
499
500$citation = $BDDArray[array_rand($BDDArray)]; // une phrase au hasard dans le tableau
501if(strlen($citation)<200) //on ne veut pas dépasser 200 caractères
502return strip_tags($citation); //on vire les tags html
503else citations($txt);
504}
505
506/*   +----------------------------------+
507 *    Nom du Filtre :    tuer les lettres!
508 *   +----------------------------------+
509 *    Date : lundi 11 mai 2005
510 *    Auteur :  Posted by cerdic
511 *   +-------------------------------------+
512 *    Fonctions de ce filtre :
513 *   remplacement des caractères accentués
514 *    exemple trouvé là:
515 *    http://be.php.net/manual/fr/function.strtr.php#52098
516 *   +-------------------------------------+
517 * 
518*/
519
520
521function lettre1($texte) {
522        $texte = $texte{0}; // première lettre
523                $texte = 
524strtr($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");
525        $texte = strtr($texte, 
526array("\xC4"=>"Ae", "\xC6"=>"AE", "\xD6"=>"Oe", "\xDC"=>"Ue", "\xDE"=>"TH", "\xDF"=>"ss", "\xE4"=>"ae", "\xE6"=>"ae", "\xF6"=>"oe", "\xFC"=>"ue", "\xFE"=>"th"));
527        $texte = strtoupper($texte); // tout en majuscules
528        return $texte;
529}
530// =======================================================================================================================================
531// Ajout de  nofollow sur les liens (pas mal à utiliser  sur les commentaires pour éviter le spam)
532// =======================================================================================================================================
533
534function nofollow($texte){
535   $texte=str_replace("<a href","<a rel='nofollow' href",$texte);
536   return $texte;
537}
538
539// =======================================================================================================================================
540// paramètres pour le plugin diapo
541// =======================================================================================================================================
542
543//nombre de vignettes par page
544$GLOBALS['diapo_vignettes']=15;
545
546//largeur et hauteur maxi des vignettes :
547$GLOBALS['diapo_vignette']=60;
548
549//largeur maxi de la grande image avec vignettes en haut :
550$GLOBALS['diapo_grand']=400;
551
552//largeur maxi de la grande image avec vignettes sur les côtés:
553$GLOBALS['diapo_petit']=300; 
554//hauteur maxi de la grande image avec vignettes sur les côtés :
555$GLOBALS['diapo_petit_h']=300;
556
557//diaporama : temps de pause en millisecondes :
558$GLOBALS['diapo_temps']=3000;
559
560
561
562// =======================================================================================================================================
563// fonction couperpropre
564// =======================================================================================================================================
565
566/*
567* Coupe une chaine en gardant le formatage HTML
568* @param string $text Texte a couper
569* @param integer $length Longueur a garder
570* @param string $ending Caracteres a ajouter a la fin
571* @param boolean $exact Coupure exacte
572* @return string
573*/
574
575function couperpropre($text, $length, $ending = '...', $exact = false) {
576if(strlen(preg_replace('/<.*?>/', '', $text)) <= $length) {
577        return $text;
578}
579        preg_match_all('/(<.+?>)?([^<>]*)/is', $text, $matches, PREG_SET_ORDER);
580        $total_length = 0;
581        $arr_elements = array();
582        $truncate = '';
583foreach($matches as $element) {
584if(!empty($element[1])) {
585if(preg_match('/^<\s*.+?\/\s*>$/s', $element[1])) {
586}
587else if(preg_match('/^<\s*\/([^\s]+?)\s*>$/s', $element[1], $element2)) {
588        $pos = array_search($element2[1], $arr_elements);
589if($pos !== false) {
590        unset($arr_elements[$pos]);
591}
592}
593else if(preg_match('/^<\s*([^\s>!]+).*?>$/s', $element[1], $element2)) {
594        array_unshift($arr_elements,    strtolower($element2[1]));
595}
596        $truncate .= $element[1];
597}
598$content_length = strlen(preg_replace('/(&[a-z] {
599        1,6
600}
601        ;
602        |&#[0-9]+;
603        )/i', ' ', $element[2]));
604if($total_length >= $length) {
605        break;
606}
607elseif ($total_length+$content_length > $length) {
608        $left = $total_length>$length?$total_length-$length: $length-$total_length;
609        $entities_length = 0;
610if(preg_match_all('/&[a-z] {
611        1,6
612}
613        ;
614        |&#[0-9]+;
615/i', $element[2], $element3, PREG_OFFSET_CAPTURE)) {
616foreach($element3[0] as $entity) {
617if($entity[1]+1-$entities_length <= $left) {
618        $left--;
619        $entities_length += strlen($entity[0]);
620}
621        else break;
622}
623}
624        $truncate .= substr($element[2], 0, $left+$entities_length);
625        break;
626}
627else {
628        $truncate .= $element[2];
629        $total_length += $content_length;
630}
631}
632if(!$exact) {
633        $spacepos = strrpos($truncate, ' ');
634if(isset($spacepos)) {
635        $truncate = substr($truncate, 0, $spacepos);
636}
637}
638        $truncate .= $ending;
639foreach($arr_elements as $element) {
640        $truncate .= '</' . $element . '>';
641}
642        return $truncate;
643}
644
645// =======================================================================================================================================
646// traitement json
647// =======================================================================================================================================
648
649if (!function_exists('json_decode')) {
650    function json_decode($content, $assoc=false) {
651        require_once 'classes/JSON.php';
652        if ($assoc) {
653            $json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
654        }
655        else {
656            $json = new Services_JSON;
657        }
658        return $json->decode($content);
659    }
660}
661 
662if (!function_exists('json_encode')) {
663    function json_encode($content) {
664        require_once 'classes/JSON.php';
665        $json = new Services_JSON;
666        return $json->encode($content);
667    }
668}
669?>
Note: See TracBrowser for help on using the repository browser.