source: spip-zone/_squelettes_/escal/trunk/escal_fonctions.php @ 112680

Last change on this file since 112680 was 112680, checked in by arnaud.berard@…, 2 years ago

Ajout d'une fonction

fonction install_contenus

  • créer une rubrique "Rubrique cachée"
  • créer un article "Edito" et un article "Accès direct"
  • associer le mot-clé "invisible" à cette rubrique
  • associer le mot-clé "edito" à l'article "Edito"
  • associer le mot-clé "acces-direct" à l'article "Accès direct"

Appelée lors de la phase d'installation d'escale

@todo passer les titre des objets en chaines de langues

+z

File size: 32.4 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'=> _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
292function 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 */
351function 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
374function 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// fonction install_contenus
389// - créer une rubrique "Rubrique cachée"
390// - créer un article "Edito" et un article "Accès direct"
391// - associer le mot-clé "invisible" à cette rubrique
392// - associer le mot-clé "edito" à l'article "Edito"
393// - associer le mot-clé "acces-direct" à l'article "Accès direct"
394function install_contenus(){
395    include_spip('action/editer_objet');
396    include_spip('action/editer_liens');
397    // créer une rubrique "Rubrique cachée"
398    $rubrique_contenu = array(
399      'titre'=>'Rubrique cachée'
400    );
401    $id_rubrique = objet_inserer('rubrique',null,$rubrique_contenu);
402    // créer dans cette rubrique, un article "Edito"
403    $article_edito_contenu = array(
404      'titre'=>'Article Édito'
405    );
406    $article_edito = objet_inserer('article',$id_rubrique,$article_edito_contenu);
407    objet_modifier('article',$article_edito,array('statut'=>'publie'));
408    // un article "Accès direct"
409    $article_acces_direct_contenu = array(
410      'titre'=>'Accès direct'
411    );
412    $article_acces_direct = objet_inserer('article',$id_rubrique,$article_acces_direct_contenu);
413    objet_modifier('article',$article_acces_direct,array('statut'=>'publie'));
414
415    // Ajout des liaisons
416    // recupérer l'id_mot invisible
417    $id_mot_invisible = sql_getfetsel("id_mot","spip_mots","titre='invisible'");
418    if($id_mot_invisible){
419      objet_associer(array('mot'=>$id_mot_invisible),array('rubrique'=>$id_rubrique));
420    }
421    // recupérer l'id_mot edito
422    $id_mot_edito = sql_getfetsel("id_mot","spip_mots","titre='edito'");
423    if($id_mot_edito){
424      objet_associer(array('mot'=>$id_mot_edito),array('article'=>$article_edito));
425    }
426    // recupérer l'id_mot acces-direct
427    $id_mot_acces_direct = sql_getfetsel("id_mot","spip_mots","titre='acces-direct'");
428    if($id_mot_acces_direct){
429      objet_associer(array('mot'=>$id_mot_acces_direct),array('article'=>$article_acces_direct));
430    }
431
432    // spip_log("Rubrique: $id_rubrique, Acces direct: $article_acces_direct",'Escal');
433
434}
435
436
437// =======================================================================================================================================
438   // pour gerer les classes des differents liens dans les articles
439   // Un grand merci a l'auteur : bobof
440// =======================================================================================================================================
441if (!function_exists('inc_lien')){
442function inc_lien($lien, $texte='', $class='', $title='', $hlang='', $rel='', $connect='')
443{
444        $mode = ($texte AND $class) ? 'url' : 'tout';
445        $lien = calculer_url($lien, $texte, $mode, $connect);
446        if ($mode === 'tout') {
447                $texte = $lien['titre'];
448                if (!$class AND isset($lien['class'])) $class = $lien['class'];
449                $lang = isset($lien['lang']) ?$lien['lang'] : '';
450                $lien = $lien['url'];
451        }
452        if (substr($lien,0,1) == '#')  # spip_ancre pour liens de type ->#ancre
453                $class = 'spip_ancre';
454        elseif (preg_match('/^\s*spip.php\?page\=/', $lien)) # spip_in pour liens de type ->rubXX, ->artXX, ->breXX et ->spip.php?page=XYZ
455                $class = "spip_in";
456        elseif (preg_match('/^\s*mailto:/',$lien)) # spip_mail pour liens de type ->mailto:
457                $class = "spip_mail";
458        elseif (preg_match(',s*('._SITE.'),Ui', $lien)) # spip_site pour liens de type ->http://mon_site.tld/repertoire/fichier.html
459                $class = "spip_site";
460        elseif (preg_match(',('._DOMAINE_SITE.'),Ui', $lien)) # spip_dom pour liens de type ->http://www.domaine.tld ou ->http://sous-domaine.domaine.tld
461                $class = "spip_dom";
462        elseif (preg_match('/^<html>/',$lien)) # spip_url, spip_out pour les autres cas de figures
463                $class = "spip_url spip_out";
464        elseif (!$class) $class = "spip_out"; # spip_out pour les liens externes
465return inc_lien_dist($lien, $texte, $class, $title, $hlang, $rel, $connect);
466}
467}
468// balises issues da la contrib  "Balises de comptage" de Franck
469// http://contrib.spip.net/Balises-de-comptage
470// =======================================================================================================================================
471// balise #TOTAL_VISITES
472// =======================================================================================================================================
473function vst_total_visites() {
474        $query = "SELECT SUM(visites) AS total_abs FROM spip_visites";
475        $result = spip_query($query);
476        if ($row = spip_fetch_array($result))
477                { return $row['total_abs']; }
478        else { return "0";}
479}
480function balise_TOTAL_VISITES($p) {
481        $p->code = "vst_total_visites()";
482        $p->statut = 'php';
483        return $p;
484}
485// =======================================================================================================================================
486// balise #NBPAGES_VISITEES
487// =======================================================================================================================================
488function vst_total_pages_visitees() {
489        $query = "SELECT SUM(visites) AS nbPages FROM spip_visites_articles";
490        $result = spip_query($query);
491        if ($row = spip_fetch_array($result))
492                { return $row['nbPages']; }
493        else { return "0";}
494}
495function balise_NBPAGES_VISITEES($p) {
496        $p->code = "vst_total_pages_visitees()";
497        $p->statut = 'php';
498        return $p;
499}
500
501// =======================================================================================================================================
502// balise #MOY_VISITES
503// =======================================================================================================================================
504function moyenne_visites_par_jour() {
505// calcul de la moyenne de visites
506// Période d'analyse couverte (nb de jours avant aujourd'hui)
507$periode = lire_config('escal/config/periodevisites', '365') ;
508
509// Sur tout le site, nombre de visites pendant la période
510$query="SELECT UNIX_TIMESTAMP(date) AS date_unix, visites FROM spip_visites ".
511                "WHERE 1 AND date > DATE_SUB(NOW(),INTERVAL $periode DAY) ORDER BY date";
512        $result=spip_query($query);
513        $i=0 ;
514        $total_absolu=0;
515        while ($row = spip_fetch_array($result)) {
516                $total_absolu = $total_absolu + $row['visites'];
517                $i++;
518        }
519// Nombre moyen de visites par jour sur la période
520        $moyenne =  round($total_absolu / $periode );
521        return $moyenne;
522}
523function balise_MOY_VISITES($p) {
524        $p->code = "moyenne_visites_par_jour()";
525        $p->statut = 'php';
526        return $p;
527}
528// =======================================================================================================================================
529// fonction pour l'affichage du nombre de visiteurs connectes
530// =======================================================================================================================================
531// issue du plugin "Nombre de visiteurs connectées"
532// http://contrib.spip.net/Nombres-de-visiteurs-connectes
533// corrections par Vincent de la liste Spip
534function escal_visiteurs_connectes_compter(){
535         return count(preg_files(_DIR_TMP.'visites/','.'));
536     }
537
538// =======================================================================================================================================
539// Balise : #JOUR_MAX_VISITES & #VAL_MAX_VISITES
540// =======================================================================================================================================
541
542  function generer_jour_val_max_visites($arg) {
543        $qv = spip_query("SELECT MAX(visites) as maxvi FROM spip_visites");
544        $rv = spip_fetch_array($qv);
545        $valmaxi = $rv['maxvi'];
546
547        if($arg=="date") {
548                $qd = spip_query("SELECT date FROM spip_visites WHERE visites = $valmaxi");
549                $rd = spip_fetch_array($qd);
550                $jourmaxi = $rd['date'];
551        }
552        if($arg=="date") { $a = $jourmaxi; }
553        if($arg=="val") { $a = $valmaxi; }
554        return $a;
555}
556function balise_JOUR_MAX_VISITES($p) {
557        $arg="date";
558        $p->code = "generer_jour_val_max_visites($arg)";
559        $p->interdire_scripts = false;
560        return $p;
561}
562function balise_VAL_MAX_VISITES($p) {
563        $arg="val";
564        $p->code = "generer_jour_val_max_visites($arg)";
565        $p->interdire_scripts = false;
566        return $p;
567}
568
569// =======================================================================================================================================
570// fonction pour les citations du pied de page
571// =======================================================================================================================================
572
573function citations($txt){
574$BDDArray = $txt;// Lecture de l'article
575$BDDArray = explode('<p>', $BDDArray); // couper à la  rencontre un p
576$BDDArray = array_map('rtrim', $BDDArray); // Suppression des fins de lignes de chaque élément
577$BDDArray = array_filter($BDDArray); // Suppression de TOUTES les entrées vides
578
579$citation = $BDDArray[array_rand($BDDArray)]; // une phrase au hasard dans le tableau
580if(strlen($citation)<200) //on ne veut pas dépasser 200 caractères
581return strip_tags($citation); //on vire les tags html
582else citations($txt);
583}
584
585/*   +----------------------------------+
586 *    Nom du Filtre :    tuer les lettres!
587 *   +----------------------------------+
588 *    Date : lundi 11 mai 2005
589 *    Auteur :  Posted by cerdic
590 *   +-------------------------------------+
591 *    Fonctions de ce filtre :
592 *   remplacement des caractères accentués
593 *    exemple trouvé là:
594 *    http://be.php.net/manual/fr/function.strtr.php#52098
595 *   +-------------------------------------+
596 *
597*/
598
599
600function lettre1($texte) {
601        $texte = $texte{0}; // première lettre
602                $texte =
603strtr($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");
604        $texte = strtr($texte,
605array("\xC4"=>"Ae", "\xC6"=>"AE", "\xD6"=>"Oe", "\xDC"=>"Ue", "\xDE"=>"TH", "\xDF"=>"ss", "\xE4"=>"ae", "\xE6"=>"ae", "\xF6"=>"oe", "\xFC"=>"ue", "\xFE"=>"th"));
606        $texte = strtoupper($texte); // tout en majuscules
607        return $texte;
608}
609// =======================================================================================================================================
610// Ajout de  nofollow sur les liens (pas mal à utiliser  sur les commentaires pour éviter le spam)
611// =======================================================================================================================================
612
613function nofollow($texte){
614   $texte=str_replace("<a href","<a rel='nofollow' href",$texte);
615   return $texte;
616}
617
618// =======================================================================================================================================
619// paramètres pour le plugin diapo
620// =======================================================================================================================================
621
622//nombre de vignettes par page
623$GLOBALS['diapo_vignettes']=15;
624
625//largeur et hauteur maxi des vignettes :
626$GLOBALS['diapo_vignette']=60;
627
628//largeur maxi de la grande image avec vignettes en haut :
629$GLOBALS['diapo_grand']=400;
630
631//largeur maxi de la grande image avec vignettes sur les côtés:
632$GLOBALS['diapo_petit']=300;
633//hauteur maxi de la grande image avec vignettes sur les côtés :
634$GLOBALS['diapo_petit_h']=300;
635
636//diaporama : temps de pause en millisecondes :
637$GLOBALS['diapo_temps']=3000;
638
639
640
641// =======================================================================================================================================
642// fonction couperpropre
643// =======================================================================================================================================
644
645/*
646* Coupe une chaine en gardant le formatage HTML
647* @param string $text Texte a couper
648* @param integer $length Longueur a garder
649* @param string $ending Caracteres a ajouter a la fin
650* @param boolean $exact Coupure exacte
651* @return string
652*/
653
654function couperpropre($text, $length, $ending = '...', $exact = false) {
655if(strlen(preg_replace('/<.*?>/', '', $text)) <= $length) {
656        return $text;
657}
658        preg_match_all('/(<.+?>)?([^<>]*)/is', $text, $matches, PREG_SET_ORDER);
659        $total_length = 0;
660        $arr_elements = array();
661        $truncate = '';
662foreach($matches as $element) {
663if(!empty($element[1])) {
664if(preg_match('/^<\s*.+?\/\s*>$/s', $element[1])) {
665}
666else if(preg_match('/^<\s*\/([^\s]+?)\s*>$/s', $element[1], $element2)) {
667        $pos = array_search($element2[1], $arr_elements);
668if($pos !== false) {
669        unset($arr_elements[$pos]);
670}
671}
672else if(preg_match('/^<\s*([^\s>!]+).*?>$/s', $element[1], $element2)) {
673        array_unshift($arr_elements,    strtolower($element2[1]));
674}
675        $truncate .= $element[1];
676}
677$content_length = strlen(preg_replace('/(&[a-z] {
678        1,6
679}
680        ;
681        |&#[0-9]+;
682        )/i', ' ', $element[2]));
683if($total_length >= $length) {
684        break;
685}
686elseif ($total_length+$content_length > $length) {
687        $left = $total_length>$length?$total_length-$length: $length-$total_length;
688        $entities_length = 0;
689if(preg_match_all('/&[a-z] {
690        1,6
691}
692        ;
693        |&#[0-9]+;
694/i', $element[2], $element3, PREG_OFFSET_CAPTURE)) {
695foreach($element3[0] as $entity) {
696if($entity[1]+1-$entities_length <= $left) {
697        $left--;
698        $entities_length += strlen($entity[0]);
699}
700        else break;
701}
702}
703        $truncate .= substr($element[2], 0, $left+$entities_length);
704        break;
705}
706else {
707        $truncate .= $element[2];
708        $total_length += $content_length;
709}
710}
711if(!$exact) {
712        $spacepos = strrpos($truncate, ' ');
713if(isset($spacepos)) {
714        $truncate = substr($truncate, 0, $spacepos);
715}
716}
717        $truncate .= $ending;
718foreach($arr_elements as $element) {
719        $truncate .= '</' . $element . '>';
720}
721        return $truncate;
722}
723
724// =======================================================================================================================================
725// traitement json
726// =======================================================================================================================================
727
728if (!function_exists('json_decode')) {
729    function json_decode($content, $assoc=false) {
730        require_once 'classes/JSON.php';
731        if ($assoc) {
732            $json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
733        }
734        else {
735            $json = new Services_JSON;
736        }
737        return $json->decode($content);
738    }
739}
740
741if (!function_exists('json_encode')) {
742    function json_encode($content) {
743        require_once 'classes/JSON.php';
744        $json = new Services_JSON;
745        return $json->encode($content);
746    }
747}
748
749
750
751/*######
752#
753# Filtre SPIP 'decouper_en_XD_parties'
754# 4 Alexandra By Apsulis
755# 14 janvier 2007
756#
757# OBJET :
758# -------
759# Pour decouper un contenu texte en X parties egale avec cesure mot entier.
760# Retourne la partie Y demandee.
761#
762# USAGE :
763# -------
764# Dans le squelette :
765# [(#TEXTE*|decouper_en_XD_parties{X,Y}|propre)]
766#
767# Dans le fichier mes_fonctions.php (a ranger par exemple dans votre dossier de squelettes) :
768# placer la fonction qui suit depuis "function decouper"... jusqu'a "return $partie_isolee; }"
769#
770#
771# Remarque :
772# ----------
773# - Fonctionne avec n'importe quel contenu texte : #INTRO, #TEXTE, #DESCRIPTIF, #PS, etc...
774# - Pour remplir X colonnes, dans le cadre d'une boucle (ou pas, vous faites ce que vous voulez),
775# utiliser X fois le filtre en changeant la partie Y demandee.
776#
777#######*/
778
779
780
781function decouper_en_XD_parties($texte,$nb_parties,$partie_a_retourner){
782
783        /* On traite les erreurs positives et negatives au cas ou */
784        if($partie_a_retourner > $nb_parties){
785                $partie_a_retourner = $nb_parties;
786        }
787        if($partie_a_retourner == 0){
788                $partie_a_retourner = 1;
789        }
790
791
792//var_dump($nb_parties);
793        $longueur = strlen($texte);                                                                 // Longueur totale de la chaine de caractere
794        $partie = $longueur/$nb_parties;                                        // Taille en caracteres d'une partie
795        $decoupe = str_word_count($texte, 2, '.&<|>');                        // On decoupe le texte par mot pour savoir a quels mots couper les parties
796
797//print_r(str_word_count($texte, 2, '.&'));
798
799        $mots_cesure[0] = 0;                                                                                        // Premiere borne = 0
800        $j = 1;
801
802
803                        while($j < $nb_parties){                                                                        // On recherche la fin du dernier mot de la partie pour ne pas le couper (=cesure)
804                $i = $partie*($j);                                                                                        // On debute la recherche a partie, et ensuite on incremente de la taille d'une partie pour trouver le mot suivant
805                while(!isset($decoupe[$i])){                                                // On part du caractere ou on devrait couper,
806                        $i++;                                                                                                                                        // et on avance jusqu'a trouver la fin du mot
807                }
808        /*###
809        # CORRECTIF par Pierre
810        # Pour eviter de couper les colonnes au milieu d'une ligne (par exemple une ligne de un ou deux mots)
811        # La coupure se fait  la fin d'une phrase, aprs le point.
812        # (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.
813        ###*/
814                while(!preg_match('`\.$`',"$decoupe[$i]")){   //tant que le mot ne se termine pas par un point...
815                        $i++;                                                                                                                                                                //incrementation d'un caractere
816                        while(!isset($decoupe[$i])){
817                        $i++;
818                        }
819                }
820                $i++;
821                        while(!isset($decoupe[$i])){
822                        $i++;
823                        }
824        //echo $decoupe[$i];
825
826        /*### FIN DU CORRECTIF ###*/
827
828
829                $mots_cesure[$j] = $i;                                                                        // On range la valeur en caractere du mot clef pour la cesure
830                $j++;                                                                                                                                                // On passe a la partie suivante
831        }
832        $mots_cesure[$j] = $longueur;                                                        // Derniere borne = fin du texte
833
834        // On isole la partie qu'on renvoi pour affichage par SPIP
835        $partie_isolee = substr($texte, $mots_cesure[$partie_a_retourner-1], $mots_cesure[$partie_a_retourner]-$mots_cesure[$partie_a_retourner-1]);
836
837        return propre($partie_isolee);
838}
839?>
Note: See TracBrowser for help on using the repository browser.