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

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

corrections de pagination pour inc-calendrier_art.html + correction de fonction pour la gestion des class des liens

File size: 19.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*/
19
20function escal_configuration(){
21    include_spip('inc/config');
22   
23    // active l'utilsation des mots clefs
24    $articles_mots = lire_config('articles_mots');
25    if($articles_mots == 'non')
26        ecrire_meta('articles_mots','oui');
27 
28}
29
30
31// Description du shema de groupes et mots
32function shema_escal(){
33    $schema = array(
34        'groupes' => array(
35            array(
36                'titre'=>'affichage',
37                'descriptif'=>'Groupe de mots-cl&eacute;s techniques utilis&eacute;s dans Escal',
38                'tables_liees'=>'articles,rubriques,syndic',
39                'minirezo'=>'oui',
40                'comite'=>'oui'
41            )   
42        ),
43        'mots'=> array(
44            array(
45                'titre'=>'pas-au-menu',
46                'descriptif'=>'pour ne pas afficher une rubrique ou un article dans le menu horizontal',
47                'type'=>'affichage'
48                ),
49            array(
50                'titre'=>'pas-au-menu-vertical',
51                'descriptif'=>'Modification dans le descriptif !! pour ne pas afficher une rubrique ou un article dans les menus verticaux',
52                'type'=>'affichage'
53            ),
54            array(
55                'titre'=>'chrono',
56                'descriptif'=>'pour afficher les articles d&rsquo;une rubrique dans les menus en ordre ant&eacute;chronologique, comportement non transmis aux rubriques-filles',
57                'type'=>'affichage'
58            ),
59            array(
60                'titre'=>'pas-a-la-une',
61                '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',
62                'type'=>'affichage'
63                ),
64            array(
65                'titre'=>'pas-au-plan',
66                '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',
67                'type'=>'affichage'
68            ),
69            array(
70                'titre'=>'edito',
71                'descriptif'=>'pour choisir l&rsquo;article qui sera affich&eacute; dans le bloc "Edito" (noisette inc-edito)',
72                'type'=>'affichage'
73            ),
74            array(
75                'titre'=>'accueil',
76                'descriptif'=>'pour choisir l&rsquo;article affich&eacute; en onglet d&rsquo;accueil (noisette inc-accueil)',
77                'type'=>'affichage'
78            ),
79            array(
80                'titre'=>'acces-direct',
81                'descriptif'=>'pour choisir l&rsquo;article qui sera affich&eacute; dans le bloc "Acc&egrave;s direct" (noisette inc-acces_direct)',
82                'type'=>'affichage'
83            ),
84            array(
85                'titre'=>'annonce',
86                '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)',
87                'type'=>'affichage'
88            ),
89            array(
90                'titre'=>'annonce-defilant',
91                '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)',
92                'type'=>'affichage'
93            ),
94            array(
95                'titre'=>'agenda',
96                'descriptif'=>'pour choisir les articles ou la ou les rubriques dont les articles seront affich&eacute;s dans l&rsquo;agenda',
97                'type'=>'affichage'
98            ),
99            array(
100                'titre'=>'actus',
101                'descriptif'=>'pour choisir les articles qui seront affich&eacute;s dans le bloc "Actus" (noisette inc-actus)',
102                'type'=>'affichage'
103            ),
104            array(
105                'titre'=>'photo-une',
106                'descriptif'=>'pour choisir les articles dont les images seront affich&eacute;es dans le bloc "Quelques images au hasard" (noisette inc-photos)',
107                'type'=>'affichage'
108            ),
109            array(
110                'titre'=>'video-une',
111                'descriptif'=>'pour choisir les articles dont les vid&eacute;os seront affich&eacute;es dans le bloc "Vid&eacute;o" (noisette inc-video_accueil)',
112                'type'=>'affichage'
113            ),
114            array(
115                'titre'=>'favori',
116                'descriptif'=>'pour choisir les sites dont les vignettes seront affich&eacute;es dans le bloc "Sites favoris" (noisette inc-sites_favoris.html)',
117                'type'=>'affichage'
118            ),
119            array(
120                'titre'=>'site-exclu',
121                'descriptif'=>'pour exclure des sites dans le bloc "Sur le web" (noisette inc-sites.html)',
122                'type'=>'affichage'
123            ),
124            array(
125                'titre'=>'forum',
126                'descriptif'=>'pour choisir le secteur qui sera utilis&eacute; pour le forum du site',
127                'type'=>'affichage'
128            ),
129            array(
130                'titre'=>'annuaire',
131                'descriptif'=>'pour choisir l&rsquo;article qui sera utilis&eacute; par la page annuaire.html',
132                'type'=>'affichage'
133            ),
134            array(
135                'titre'=>'RubriqueOnglet',
136                'descriptif'=>'pour choisir la rubrique qui sera affich&eacute;e dans les onglets en page d&rsquo;accueil',
137                'type'=>'affichage'
138            ),
139            array(
140                'titre'=>'citations',
141                'descriptif'=>'pour choisir l&rsquo;article qui servira de r&eacute;servoir pour les citations dans le pied de page',
142                'type'=>'affichage'
143            ),
144            array(
145                'titre'=>'mon-article',
146                'descriptif'=>'pour choisir l&rsquo;article qui sera affich&eacute; dans un onglet du bloc central de la page d&rsquo;accueil',
147                'type'=>'affichage'
148            ),
149            array(
150                'titre'=>'special',
151                'descriptif'=>'pour choisir la rubrique et/ou les articles qui seront affich&eacute;s dans le bloc &agrave; personnaliser (noisette inc-perso.html)',
152                'type'=>'affichage'
153            ),
154            array(
155                'titre'=>'pas-a-decouvrir',
156                '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)',
157                'type'=>'affichage'
158            )
159           
160        )
161    );
162   
163    return $schema;
164}
165
166// Fonction de mise a jour du schema
167function update_groupe_mots(){
168    include_spip('action/editer_objet');
169   
170    // chargement du array des groupe et mots
171    $schema = shema_escal();
172   
173    // en qu'elle version de escal est on ?
174    // si on a une meta escal_base_version, c'est qu'on est sur une version avec instalation auto
175    $meta = lire_config('escal_base_version');
176   
177    // si la meta est présente
178    if($meta!=''){
179        // Maj des groupes
180        for ($i= 0 , $nbr_grp = count($schema['groupes']) ; $i < $nbr_grp ; ++$i){
181            // test si le groupe existe
182            $grp_titre = $schema['groupes'][$i]['titre'];
183            $id_grp = sql_getfetsel("id_groupe","spip_groupes_mots","titre='$grp_titre'");
184            // si pas d'id retournée on inssère
185            if($id_grp!=''){
186                //echo "Update le groupe existe déja : ".$id_grp."=> ".$grp_titre."\n";
187                sql_updateq('spip_groupes_mots', $schema['groupes'][$i], "id_groupe='$id_grp'");
188            }//sinon on met a jour
189            else{
190                //echo "Insert Le groupe n'éxiste pas => ".$grp_titre."\n";
191                $id = sql_insertq('spip_groupes_mots',$schema['groupes'][$i]);
192            }
193           
194        }   
195       
196        //Maj des mots : on boucle sur le tableau mots
197        for ($i= 0 , $nbr_mot = count($schema['mots']) ; $i < $nbr_mot ; ++$i){
198            // test la présence du mot sur le champ titre
199            $titre = $schema['mots'][$i]['titre'];
200            $id_mot = sql_getfetsel("id_mot","spip_mots","titre='$titre'");
201            // le titre du mot est déjà présent
202            if($id_mot!=''){
203                // echo "Update le mot clef existe déja : ".$id_mot."=> ".$titre."\n";
204                $test = sql_updateq('spip_mots', $schema['mots'][$i], "titre='$titre'");
205                objet_modifier('mot',$id_mot,$schema['mots'][$i]);
206            }else{
207                // echo "Insert Le mot clef n'éxiste pas => ".$titre."\n";
208                // on extrait du array le groupe dont dépend le mot
209                $grp_titre = $schema['mots'][$i]['type'];
210                $id_grp = sql_getfetsel("id_groupe","spip_groupes_mots","titre='$grp_titre'");
211                $id_mot = objet_inserer('mot',$id_grp);
212                objet_modifier('mot',$id_mot,$schema['mots'][$i]);
213            }
214        }
215    }//si pas de meta_base on est sur une install plus ancienne
216    else{
217       // on verra plus tard ;-)
218    }
219}
220
221
222/*
223 * function install_groupe_mot
224 * installe les groupes de mots techniques et leurs mots clefs
225 */
226function install_groupe_mots() {
227    include_spip('action/editer_objet');
228    // chargement du array des groupe et mots
229    $schema = shema_escal();
230    // installation des groupes
231    for ($i= 0 , $nbr_mot = count($schema['groupes']) ; $i < $nbr_mot ; ++$i){
232        $id = sql_insertq('spip_groupes_mots',$schema['groupes'][$i]);
233    }
234   
235    // installation des mots
236    for ($i= 0 , $nbr_mot = count($schema['mots']) ; $i < $nbr_mot ; ++$i){
237        // on extrait du array le groupe dont dépend le mot
238        $grp_titre = $schema['mots'][$i]['type'];
239        $id_grp = sql_getfetsel("id_groupe","spip_groupes_mots","titre='$grp_titre'");
240        if($id_grp!=''){
241           $id_mot = objet_inserer('mot',$id_grp);
242            objet_modifier('mot',$id_mot,$schema['mots'][$i]);
243        }
244    }
245   
246}
247
248// Fonction de désinstalation des groupes et mots de Escal
249function uninstal_escal(){
250    // chargement du array des groupe et mots
251    $schema = shema_escal();
252    $id_grp = array();
253    // recuperer les id des groupes
254    for ($i= 0 , $nbr_mot = count($schema['groupes']) ; $i < $nbr_mot ; ++$i){
255        $grp_titre = $schema['groupes'][$i]['titre'];
256        $id_grp = sql_getfetsel("id_groupe","spip_groupes_mots","titre='$grp_titre'");
257        // désinstaller les mots correspondant a ce groupe
258        sql_delete("spip_mots","id_groupe='$id_grp'");
259        sql_delete("spip_groupes_mots","id_groupe='$id_grp'");
260    }
261}
262
263// =======================================================================================================================================
264   // pour gerer les classes des differents liens dans les articles
265   // Un grand merci a l'auteur : bobof
266// =======================================================================================================================================
267if (!function_exists('inc_lien')){
268function inc_lien($lien, $texte='', $class='', $title='', $hlang='', $rel='', $connect='')
269{
270        $mode = ($texte AND $class) ? 'url' : 'tout';
271        $lien = calculer_url($lien, $texte, $mode, $connect);
272        if ($mode === 'tout') {
273                $texte = $lien['titre'];
274                if (!$class AND isset($lien['class'])) $class = $lien['class'];
275                $lang = isset($lien['lang']) ?$lien['lang'] : '';
276                $lien = $lien['url'];
277        }
278        if (substr($lien,0,1) == '#')  # spip_ancre pour liens de type ->#ancre
279                $class = 'spip_ancre';
280        elseif (preg_match('/^\s*spip.php\?page\=/', $lien)) # spip_in pour liens de type ->rubXX, ->artXX, ->breXX et ->spip.php?page=XYZ
281                $class = "spip_in";
282        elseif (preg_match('/^\s*mailto:/',$lien)) # spip_mail pour liens de type ->mailto:
283                $class = "spip_mail";
284        elseif (preg_match(',s*('._SITE.'),Ui', $lien)) # spip_site pour liens de type ->http://mon_site.tld/repertoire/fichier.html
285                $class = "spip_site";
286        elseif (preg_match(',('._DOMAINE_SITE.'),Ui', $lien)) # spip_dom pour liens de type ->http://www.domaine.tld ou ->http://sous-domaine.domaine.tld
287                $class = "spip_dom";
288        elseif (preg_match('/^<html>/',$lien)) # spip_url, spip_out pour les autres cas de figures
289                $class = "spip_url spip_out";
290        elseif (!$class) $class = "spip_out"; # spip_out pour les liens externes
291return inc_lien_dist($lien, $texte, $class, $title, $hlang, $rel, $connect);
292}
293}
294// balises issues da la contrib  "Balises de comptage" de Franck
295// http://www.spip-contrib.net/Balises-de-comptage
296// =======================================================================================================================================
297// balise #TOTAL_VISITES
298// =======================================================================================================================================
299function vst_total_visites() {
300        $query = "SELECT SUM(visites) AS total_abs FROM spip_visites";
301        $result = spip_query($query);
302        if ($row = spip_fetch_array($result))
303                { return $row['total_abs']; }
304        else { return "0";}
305}
306function balise_TOTAL_VISITES($p) {
307        $p->code = "vst_total_visites()";
308        $p->statut = 'php';
309        return $p;
310}
311// =======================================================================================================================================
312// balise #NBPAGES_VISITEES
313// =======================================================================================================================================
314function vst_total_pages_visitees() {
315        $query = "SELECT SUM(visites) AS nbPages FROM spip_visites_articles";
316        $result = spip_query($query);
317        if ($row = spip_fetch_array($result))
318                { return $row['nbPages']; }
319        else { return "0";}
320}
321function balise_NBPAGES_VISITEES($p) {
322        $p->code = "vst_total_pages_visitees()";
323        $p->statut = 'php';
324        return $p;
325}
326
327// =======================================================================================================================================
328// balise #MOY_VISITES
329// =======================================================================================================================================
330function moyenne_visites_par_jour() {
331// calcul de la moyenne de visites
332// Période d'analyse couverte (nb de jours avant aujourd'hui)
333$periode = lire_config('escal/config/periodevisites', '365') ;
334
335// Sur tout le site, nombre de visites pendant la période
336$query="SELECT UNIX_TIMESTAMP(date) AS date_unix, visites FROM spip_visites ".
337                "WHERE 1 AND date > DATE_SUB(NOW(),INTERVAL $periode DAY) ORDER BY date";
338        $result=spip_query($query);
339        $i=0 ;
340        $total_absolu=0;
341        while ($row = spip_fetch_array($result)) {
342                $total_absolu = $total_absolu + $row['visites'];
343                $i++;
344        }
345// Nombre moyen de visites par jour sur la période
346        $moyenne =  round($total_absolu / $periode );
347        return $moyenne;
348}
349function balise_MOY_VISITES($p) {
350        $p->code = "moyenne_visites_par_jour()";
351        $p->statut = 'php';
352        return $p;
353}
354// =======================================================================================================================================
355// fonction pour l'affichage du nombre de visiteurs connectes
356// =======================================================================================================================================
357// issue du plugin "Nombre de visiteurs connectées"
358// http://www.spip-contrib.net/Nombres-de-visiteurs-connectes
359// corrections par Vincent de la liste Spip
360function escal_visiteurs_connectes_compter(){
361         return count(preg_files(_DIR_TMP.'visites/','.'));
362     }
363
364// =======================================================================================================================================
365// Balise : #JOUR_MAX_VISITES & #VAL_MAX_VISITES
366// =======================================================================================================================================
367
368  function generer_jour_val_max_visites($arg) {
369        $qv = spip_query("SELECT MAX(visites) as maxvi FROM spip_visites");
370        $rv = spip_fetch_array($qv);
371        $valmaxi = $rv['maxvi'];
372
373        if($arg=="date") {
374                $qd = spip_query("SELECT date FROM spip_visites WHERE visites = $valmaxi");
375                $rd = spip_fetch_array($qd);
376                $jourmaxi = $rd['date'];
377        }
378        if($arg=="date") { $a = $jourmaxi; }
379        if($arg=="val") { $a = $valmaxi; }
380        return $a;
381}
382function balise_JOUR_MAX_VISITES($p) {
383        $arg="date";
384        $p->code = "generer_jour_val_max_visites($arg)";
385        $p->interdire_scripts = false;
386        return $p;
387}
388function balise_VAL_MAX_VISITES($p) {
389        $arg="val";
390        $p->code = "generer_jour_val_max_visites($arg)";
391        $p->interdire_scripts = false;
392        return $p;
393}
394
395// =======================================================================================================================================
396// fonction pour les citations du pied de page
397// =======================================================================================================================================
398
399function citations($txt){
400$BDDArray = $txt;// Lecture de l'article
401$BDDArray = explode('<p>', $BDDArray); // couper à la  rencontre un p
402$BDDArray = array_map('rtrim', $BDDArray); // Suppression des fins de lignes de chaque élément
403$BDDArray = array_filter($BDDArray); // Suppression de TOUTES les entrées vides
404
405$citation = $BDDArray[array_rand($BDDArray)]; // une phrase au hasard dans le tableau
406if(strlen($citation)<200) //on ne veut pas dépasser 200 caractères
407return strip_tags($citation); //on vire les tags html
408else citations($txt);
409}
410
411// =======================================================================================================================================
412// Ajout de  nofollow sur les liens (pas mal à utiliser  sur les commentaires pour éviter le spam)
413// =======================================================================================================================================
414
415function nofollow($texte){
416   $texte=str_replace("<a href","<a rel='nofollow' href",$texte);
417   return $texte;
418}
419
420// =======================================================================================================================================
421// paramètres pour le plugin diapo
422// =======================================================================================================================================
423
424//nombre de vignettes par page
425$GLOBALS['diapo_vignettes']=15;
426
427//largeur et hauteur maxi des vignettes :
428$GLOBALS['diapo_vignette']=60;
429
430//largeur maxi de la grande image avec vignettes en haut :
431$GLOBALS['diapo_grand']=400;
432
433//largeur maxi de la grande image avec vignettes sur les côtés:
434$GLOBALS['diapo_petit']=300;
435//hauteur maxi de la grande image avec vignettes sur les côtés :
436$GLOBALS['diapo_petit_h']=300;
437
438//diaporama : temps de pause en millisecondes :
439$GLOBALS['diapo_temps']=3000;
440
441
442
443
444?>
Note: See TracBrowser for help on using the repository browser.