source: spip-zone/_plugins_/spip-listes/trunk/inc/spiplistes_api_presentation.php @ 84132

Last change on this file since 84132 was 84132, checked in by arthemis78@…, 6 years ago
  • Correction de bugs : recherches abonnées
  • Correction ergonomie : modification du css + affichage (mode verbeux)
  • Property svn:eol-style set to LF
  • Property svn:keywords set to LastChangedBy LastChangedDate LastChangedRevision
File size: 35.7 KB
Line 
1<?php
2/**
3 * Fonctions d'affichage et de presentation dans l'espace prive
4 *
5 * @package spiplistes
6 */
7 // $LastChangedRevision: 84132 $
8 // $LastChangedBy: arthemis78@free.fr $
9 // $LastChangedDate: 2014-08-10 16:09:53 +0000 (Sun, 10 Aug 2014) $
10
11/******************************************************************************************/
12/* SPIP-Listes est un systeme de gestion de listes d'abonnes et d'envoi d'information     */
13/* par email pour SPIP. http://bloog.net/spip-listes                                      */
14/* Copyright (C) 2004 Vincent CARON  v.caron<at>laposte.net                               */
15/*                                                                                        */
16/* Ce programme est libre, vous pouvez le redistribuer et/ou le modifier selon les termes */
17/* de la Licence Publique Generale GNU publiee par la Free Software Foundation            */
18/* (version 2).                                                                           */
19/*                                                                                        */
20/* Ce programme est distribue car potentiellement utile, mais SANS AUCUNE GARANTIE,       */
21/* ni explicite ni implicite, y compris les garanties de commercialisation ou             */
22/* d'adaptation dans un but specifique. Reportez-vous a la Licence Publique Generale GNU  */
23/* pour plus de details.                                                                  */
24/*                                                                                        */
25/* Vous devez avoir recu une copie de la Licence Publique Generale GNU                    */
26/* en meme temps que ce programme ; si ce n'est pas le cas, ecrivez a la                  */
27/* Free Software Foundation,                                                              */
28/* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, Etats-Unis.                   */
29/******************************************************************************************/
30
31if (!defined("_ECRIRE_INC_VERSION")) return;
32
33include_spip('inc/presentation');
34include_spip('inc/spiplistes_api_journal');
35
36/**
37 * Retourne la puce qui va bien
38 * @return string|null
39 */
40function spiplistes_bullet_titre_liste ($type, $statut, $id=false, $return=false) {
41        $result = $img = $taille = "";
42        switch($type) {
43                case 'puce':
44                        $taille = "width='9' height='9'";
45                        break;
46        }
47        $img = spiplistes_items_get_item($type, $statut);
48        $alt = spiplistes_items_get_item('alt', $statut);
49        if($img) {
50                $result = "<img src='$img' alt='".$alt."' ".(!empty($id) ? "id='$id'" : "")." $taille border='0' />\n";
51        }
52        if($return) return($result);
53        else echo($result);
54}
55
56/**
57 * Renvoie un element de definition courriers/listes
58 * (icone, puce, alternate text, etc.)
59 * voir spiplistes_mes_options, tableau $spiplistes_items
60 * @global array $spiplistes_items
61 * @return string|null
62 */
63function spiplistes_items_get_item($item, $statut) {
64        $spiplistes_items=get_spiplistes_items();
65       
66        if(isset($spiplistes_items[$statut]) 
67                && isset($spiplistes_items[$statut][$item])
68        ) {
69                return ($spiplistes_items[$statut][$item]);
70        }
71        else {
72                return($spiplistes_items['default'][$item]);
73        }
74}
75
76/**
77 * @return string
78 */
79function spiplistes_gros_titre ($titre, $logo='', $return = false) {
80
81        $aff = ($return === false);
82        $size = 24;
83        if (preg_match("/-([0-9]{1,3})[.](gif|png)$/i",$logo,$match))
84                $size = $match[1];
85        $icone = http_img_pack($logo, $alt, "width='$size' height='$size'");
86       
87        $r = gros_titre($titre, $icone, $aff);
88        if($return) return($r);
89}
90
91/**
92 * @version CP:20080322
93 * @param string $statut
94 * @return string
95 */
96function spiplistes_get_icone_auteur ($statut) {
97        switch($statut) {
98                case "0minirezo":
99                        $logo = "redacteurs-admin-24.gif"; // jolie cravate
100                        break;
101                case "5poubelle":
102                        $logo = "redacteurs-poubelle-24.gif";
103                        break;
104                default:
105                        $logo = "redacteurs-24.gif";
106                        break;
107        }
108        return($logo);
109}
110
111/**
112 * Bouton Valider pour les formulaires en /exec/
113 * @version CP-20080323
114 * @param string $name
115 * @param string $value
116 * @param bool $reset
117 * @global string $spip_lang_right
118 * @staticvar string $submit_value Titre du bouton
119 * @staticvar string $reset_value Titre lien reset
120 * @return string
121 */
122function spiplistes_form_bouton_valider ($name, $value = "", $reset = false) {
123        global $spip_lang_right;
124        static $submit_value, $reset_value;
125        if(!$submit_value) { 
126                $submit_value = _T('bouton_valider');
127        }
128        if(!$reset_value) { 
129                $reset_value = _T('spiplistes:retablir');
130        }
131        $value = (!empty($value) ? $value : $submit_value);
132        $reset = 
133                $reset
134                ? "<input type='reset' name='reset_".$name."' value=\"".$reset_value."\" class='fondo' />\n"
135                : ""
136                ;
137        $result = ""
138                . "<div class='verdana2' style='margin-top:1ex;text-align:$spip_lang_right;'>\n"
139                . $reset
140                . "<input type='submit' id='$name' name='$name' value='".$value."' class='fondo' />\n"
141                . "</div>\n"
142                ;
143        return($result);
144}
145
146/**
147 * Debut de formulaire HTML
148 * @version CP-20080323
149 * @param string $action
150 * @param bool $return Retourne value si FALSE, sinon echo ()
151 * @param string $post
152 * @return string|null
153 */
154function spiplistes_form_debut ($action = '#', $return = false, $method = 'post') {
155        $result = "<form action='".$action."' method='$method'>\n";
156        if($return) return($result);
157        else echo($result);
158}
159
160/**
161 * Fin de formulaire HTML
162 * @version CP-20080323
163 * @param bool $return Retourne value si FALSE, sinon echo ()
164 * @return string|null
165 */
166function spiplistes_form_fin ($return = false) {
167        $result = "</form>\n";
168        if($return) return($result);
169        else echo($result);
170}
171
172/**
173 * Debut de fieldset de formulaire HTML
174 * @version CP-20080323
175 * @param string $legend
176 * @param bool $return Retourne value si FALSE, sinon echo ()
177 * @return string|null
178 */
179function spiplistes_form_fieldset_debut ($legend = "", $return = false) {
180        if(!empty($legend)) {
181                $legend = "<legend style='padding:0 1ex;'>".$legend."</legend>\n";
182        }
183        $result = "<fieldset class='verdana2'>".$legend;
184        if($return) return($result);
185        else echo($result);
186}
187
188/**
189 * Fin de fieldset de formulaire HTML
190 * @version CP-20080323
191 * @param bool $return Retourne value si FALSE, sinon echo ()
192 * @return string|null
193 */
194function spiplistes_form_fieldset_fin ($return = false) {
195        $result = "</fieldset>\n";
196        if($return) return($result);
197        else echo($result);
198}
199
200/**
201 * @version CP-20080323
202 * @param string $description
203 * @param bool $return Retourne value si FALSE, sinon echo ()
204 * @return string|null
205 */
206function spiplistes_form_description ($description, $return = false) {
207        $result = spiplistes_form_message($description, $return);
208        if($return) return($result);
209}
210
211/**
212 * @version CP-20080323
213 * @param string $description
214 * @param bool $return Retourne value si FALSE, sinon echo ()
215 * @return string|null
216 */
217function spiplistes_form_description_alert ($description, $return = false) {
218        $result = spiplistes_form_message($description, $return, "message-alerte");
219        if($return) return($result);
220}
221
222/**
223 * @version CP-20080323
224 * @param string $message
225 * @param bool $return Retourne value si FALSE, sinon echo ()
226 * @param string $class
227 * @return string|null
228 */
229function spiplistes_form_message ($message, $return = false, $class = '') {
230        $result = "";
231        if(!empty($message)) {
232                $result = "<p class='verdana2 $class'>".$message."</p>\n";
233        }
234        if($return) return($result);
235        else echo($result);
236}
237
238/**
239 * Retourne un element HTML
240 *
241 * @param string $name
242 * @param string $value
243 * @param string $label
244 * @param bool $checked si case a cocher cochee
245 * @param bool $return Imprimer si TRUE (utilise echo())
246 * @param bool $div Envelopper le resultat si TRUE
247 * @version CP-20080502
248 * @return string|null
249*/
250function spiplistes_form_input_item ($type, $name, $value, $label, $checked, $return = false, $div = true, $id = false) {
251        $result = ""
252                . "<label class='verdana2'>"
253                . "<input type='$type' id='".($id ? $id : $name)."' name='$name' value='$value' ".($checked ? "checked='checked'" : "")."/>"
254                . $label
255                . "</label>\n"
256                ;
257        if($div) {
258                $result = "<div>\n".$result."</div>\n";
259        }
260        if($return) return($result);
261        else echo($result);
262}
263
264/**
265 * Retourne un element HTML case a cocher
266 *
267 * {@link spiplistes_form_input_item()}
268 * @param string $name
269 * @param string $value
270 * @param string $label
271 * @param bool $checked case a cocher cochee
272 * @param bool $return Imprimer si TRUE (utilise echo())
273 * @param bool $div Envelopper le resultat si TRUE
274 * @version CP-20080323
275 * @return string|null
276*/
277function spiplistes_form_input_checkbox ($name, $value, $label, $checked, $return = false, $div = true) {
278        $result = spiplistes_form_input_item('checkbox', $name, $value, $label, $checked, $return, $div);
279        if($return) return($result);
280}
281
282/**
283 * @version CP-20080502
284 * @param string $name
285 * @param string $value
286 * @param string $label
287 * @param bool $checked
288 * @param bool $return Retourne value si FALSE, sinon echo ()
289 * @param bool $div
290 * @return string|null
291 */
292function spiplistes_form_input_radio ($name, $value, $label, $checked, $return = false, $div = true) {
293        static $id;
294        $id++;
295        $result = spiplistes_form_input_item('radio', $name, $value, $label, $checked, $return, $div, $name."_".$id);
296        if($return) return($result);
297}
298
299
300/**
301 * @version SPIP-Listes-V: CP:20070923
302 */
303function spiplistes_boite_raccourcis ($return = false) {
304        // initialise les options
305        foreach(array(
306                        'opt_console_debug'
307        ) as $key) {
308                $$key = spiplistes_pref_lire($key);
309        }
310       
311    return recuperer_fond("prive/inclure/boite_raccourcis", array('opt_console_debug' => $opt_console_debug, 'ip_serveur' => $_SERVER['SERVER_ADDR']));
312
313}
314
315
316function spiplistes_boite_info_spiplistes($return=false) {
317        $result = ""
318                // colonne gauche boite info
319                . "<br />"
320                . boite_ouvrir("",'info')
321                . _T('spiplistes:_aide')
322                . boite_fermer()
323                ;
324        if($return) return($result);
325        else echo($result);
326}
327
328// Pour construire des menu avec SELECTED
329// http://doc.spip.org/@mySel
330function mySel($varaut,$variable, $option = NULL) {
331        $res = ' value="'.$varaut.'"' . (($variable==$varaut) ? ' selected="selected"' : '');
332
333        return  (!isset($option) ? $res : "<option$res>$option</option>\n");
334}
335
336
337
338
339//CP-20080508
340function spiplistes_bouton_block_depliable ($titre = "", $deplie = true, $nom_block = "", $icone = "") {
341        if(empty($titre)) {
342                $titre = _T("info_sans_titre");
343        }
344        include_spip('inc/layer');
345        $result = bouton_block_depliable($titre, $deplie, $nom_block);
346        return($result);
347}
348
349// construit la boite de selection patrons (CP-20071012)
350function spiplistes_boite_selection_patrons ($patron="", $return=false
351                                                , $chemin="patrons/", $select_nom="patron"
352                                                , $size_select=10, $width='34ex') {
353        global $couleur_claire;
354        $result = "";
355        // va chercher la liste des patrons
356        $liste_patrons = spiplistes_liste_des_patrons ($chemin);
357        // boite de selection du patron
358        $result  .= "<select style='width:$width;'  name='". $select_nom . "' class='verdana1' size='" . $size_select . "'>\n";
359        // par defaut, selectionne le premier
360        $selected = (empty($title_selected) ? "selected='selected'" : ""); 
361        foreach($liste_patrons as $titre_option) {
362                $selected =
363                        ($titre_option == $patron)
364                        ? " selected='selected' style='background:$couleur_claire;' "
365                        : ""
366                        ;
367                $result .= "<option $selected value='" . $titre_option . "'>" . $titre_option . "</option>\n";
368                if (!empty($selected)) {
369                        $selected = "";
370                }
371        }
372        $result  .= "</select>\n";
373
374        if($return) return($result);
375        else echo($result);
376}
377
378// boite information avec juste titre et id
379// A placer dans cadre gauche (ex.: exec/spiplistes_listes)
380// si $id_objet (par exemple: 'id_auteur') va chercher le logo de l'objet
381function spiplistes_boite_info_id ($titre, $id, $return = true, $id_objet = false) {
382        global $spip_display;
383        $result = "";
384        if($id) {
385                $logo = "";
386                if($id_objet && ($spip_display != 4)) {
387                        include_spip("inc/iconifier");
388                        $chercher_logo = charger_fonction('chercher_logo', 'inc');
389                        if ($logo = $chercher_logo($id, $id_objet, 'on')) {
390                                list($img, $clic) = decrire_logo($id_objet,'on',$id, 170, 170, $logo, $texteon, $script);
391                                $logo = "<div style='text-align: center;margin:1em 0;'>$img</div>";
392                        }
393                        else {
394                                $logo = "";
395                        }
396                }
397                $result = 
398                        debut_boite_info(true)
399                        . "\n<div style='font-weight: bold; text-align: center; text-transform: uppercase;' class='verdana1 spip_xx-small'>"
400                        .  $titre
401                        . "<br /><span class='spip_xx-large'>"
402                        . $id
403                        . "</span></div>"
404                        . $logo
405                        . fin_boite_info(true)
406                        . "<br />"
407                ;
408        }
409        if($return) return($result);
410        else echo($result);
411}
412
413// renvoie liste des patrons en excluant les sous-versions (texte, lang) (CP-20071012)
414function spiplistes_liste_des_patrons ($chemin) {
415        $liste_patrons = find_all_in_path($chemin, "[.]html$");
416        $result = array();
417        foreach($liste_patrons as $key => $value) {
418                if (
419                        !preg_match("=\.[a-z][a-z]\.html$=", $value)
420                        && !preg_match("=_texte\.html$=", $value)
421                        && !preg_match("=_texte\.[a-z][a-z]\.html$=", $value)
422                        ) {
423                        $result[] = basename($value, ".html");
424                }
425        }
426        sort($result);
427        return($result);
428}
429
430// complete les dates chiffres (jour, heure, etc.)
431// de retour du formulaire pour les dates et renvoie une date formatee correcte
432function spiplistes_formate_date_form($annee, $mois, $jour, $heure, $minute) {
433        if(!empty($jour) && !empty($mois) && !empty($annee) && (intval($heure) >= 0) && (intval($minute) >= 0)) {
434                foreach(array('mois', 'jour', 'heure', 'minute') as $k) {
435                        if($$k < 10) {
436                                $$k = str_pad($$k, 2, "0", STR_PAD_LEFT);
437                        }
438                }
439                return($annee."-".$mois."-".$jour." ".$heure.":".$minute.":00");
440        }
441        return(false);
442}
443
444// Petit formulaire dans la boite autocron (CP-20071018)
445function spiplistes_boite_autocron_form($titre, $option, $value) {
446        $connect_id_auteur = intval($GLOBALS['connect_id_auteur']);
447       
448        $result = "";
449        // n'apparait que si super_admin et pas sur la page de config (doublon de form)
450        if(autoriser('webmestre','','',$connect_id_auteur)) {
451                if(_request('exec')!=_SPIPLISTES_EXEC_CONFIGURE) {
452                        $result = ""
453                                . "<!-- bouton annulation option -->\n"
454                                . "<form id='id_form_$option' method='post' action='".generer_url_ecrire(_SPIPLISTES_EXEC_COURRIERS_LISTE)."'"
455                                        . " style='margin:0.5em 0;text-align:center;'>\n"
456                                . "<input type='hidden' name='$option' id='id_$option' value='$value' />\n"
457                                . "<label for='id_$option' style='display:none;'>$titre option</label>\n"
458                                . "<input type='submit' name='Submit' value='$titre' id='Submit' class='fondo' />\n"
459                                . "</form>\n"
460                                ;
461                }
462                else {
463                        $result = ""
464                                . "<p class='verdana2'>"._T('spiplistes:utilisez_formulaire_ci_contre')."</p>\n"
465                                ;
466                }
467        }
468        return($result);
469}
470
471// Petite boite info pour l'autocron (CP-20071018)
472function spiplistes_boite_autocron_info ($icone = "", $return = false, $titre_boite = '', $bouton = "", $texte = "", $nom_option = "", $icone_alerte = false) {
473        $result = ""
474                . "<div class='spip-alert'>\n"
475                . debut_cadre_couleur_foncee($icone, true, '', $titre_boite)
476                . ($icone_alerte ? "<div style='text-align:center;'><img alt='' src='$icone_alerte' /></div>" : "")
477                . ($texte ? "<p class='verdana2' style='margin:0;'>$texte</p>\n" : "")
478                . ($bouton ? spiplistes_boite_autocron_form($bouton, $nom_option, 'non') : "")
479                . fin_cadre_couleur(true)
480                . "</div>\n"
481                ;
482        if($return) return($result);
483        else echo($result);
484}
485
486/*
487 * boite info sur les simulation et les envois en cours
488 * @return la boite autocron, chaine html
489 */
490function spiplistes_boite_autocron () { 
491
492        //nombre de processus d'envoi simultanes
493        if (!defined('_SPIP_LISTE_SEND_THREADS')) {
494                define('_SPIP_LISTE_SEND_THREADS', 1);
495        }
496       
497        $connect_id_auteur = intval($GLOBALS['connect_id_auteur']);
498       
499        // initialise les options
500        foreach(array(
501                'opt_suspendre_trieuse'
502                , 'opt_suspendre_meleuse'
503                , 'opt_simuler_envoi'
504                ) as $key) {
505                $$key = spiplistes_pref_lire($key);
506        }
507
508        $result = "";
509       
510        // Informe sur l'etat de la trieuse
511        if($opt_suspendre_trieuse == 'oui') {
512                if(_request('opt_suspendre_trieuse')=='non') {
513                        if(autoriser('webmestre','','',$connect_id_auteur)) {
514                                spiplistes_ecrire_key_in_serialized_meta ('opt_suspendre_trieuse', $opt_suspendre_trieuse = 'non', _SPIPLISTES_META_PREFERENCES);
515                                //spiplistes_ecrire_metas();
516                                $result .= "<p class='verdana2' style='margin-bottom:1em;'>"._T('spiplistes:trieuse_reactivee')."</p>\n";
517                        }
518                }
519                else {
520                        $result .= spiplistes_boite_autocron_info("stock_timer.gif", true
521                                , _T('spiplistes:trieuse_suspendue'), _T('bouton_annuler')
522                                , _T('spiplistes:trieuse_suspendue_info'), 'opt_suspendre_trieuse', _DIR_IMG_PACK."warning-24.gif"
523                                );
524                }
525        }
526       
527        // Informe sur l'etat de la meleuse
528        if($opt_suspendre_meleuse == 'oui') {
529                if(_request('opt_suspendre_meleuse')=='non') {
530                        if(autoriser('webmestre','','',$connect_id_auteur)) {
531                                spiplistes_ecrire_key_in_serialized_meta ('opt_suspendre_meleuse', $opt_suspendre_meleuse = 'non', _SPIPLISTES_META_PREFERENCES);
532                                //spiplistes_ecrire_metas();
533                                $result .= "<p class='verdana2' style='margin-bottom:1em;'>"._T('spiplistes:meleuse_reactivee')."</p>\n";
534                        }
535                }
536                else {
537                        $result .= spiplistes_boite_autocron_info("courriers_envoyer-24.png", true
538                                , _T('spiplistes:meleuse_suspendue'), _T('bouton_annuler')
539                                , _T('spiplistes:meleuse_suspendue_info'), 'opt_suspendre_meleuse', _DIR_IMG_PACK."warning-24.gif"
540                                );
541                }
542        }
543       
544        // Informe si mode simulation en cours
545        if($opt_simuler_envoi == 'oui') {
546                if(_request('opt_simuler_envoi')=='non') {
547                        if(autoriser('webmestre','','',$connect_id_auteur)) {
548                                spiplistes_ecrire_key_in_serialized_meta ('opt_simuler_envoi', $opt_simuler_envoi = 'non', _SPIPLISTES_META_PREFERENCES);
549                                //spiplistes_ecrire_metas();
550                                $result .= "<p class='verdana2' style='margin-bottom:1em;'>"._T('spiplistes:simulation_desactive')."</p>\n";
551                        }
552                }
553                else {
554                        $result .= spiplistes_boite_autocron_info("courriers_envoyer-24.png", true
555                                , _T('spiplistes:mode_simulation'), _T('bouton_annuler')
556                                , _T('spiplistes:mode_simulation_info'), 'opt_simuler_envoi', _DIR_IMG_PACK."warning-24.gif"
557                                );
558                }
559        }
560       
561        include_spip('genie/spiplistes_cron');
562        $time = time();
563        $time = cron_spiplistes_cron($time);
564
565        if($time > 0) { 
566                // le CRON n'a rien a faire. Pas de boite autocron
567                return($result);
568        }
569
570        $nb_etiquettes = spiplistes_courriers_en_queue_compter("etat=".sql_quote(''));
571        $nb_total_abonnes = spiplistes_courriers_total_abonnes();
572
573        if(($nb_etiquettes > 0) && ($nb_total_abonnes > 0)) {
574                $result .= ""
575                        . "<br />"
576                        . debut_boite_info(true)
577                        . "<div style='font-weight:bold;text-align:center'>"._T('spiplistes:envoi_en_cours')."</div>"
578                        . "<div style='padding : 10px;text-align:center'><img alt='' src='"."courriers_distribution-48.gif' /></div>"
579                        . "<div id='meleuse'>"
580                        .       (
581                                        ($nb_total_abonnes)
582                                        ?       ""
583                                                . "<p align='center' id='envoi_statut'>"._T('spiplistes:envoi_en_cours')." "
584                                                . "<strong id='envois_restants'>$nb_etiquettes</strong>/<span id='envois_total'>$nb_total_abonnes</span> "
585                                                . "(<span id='envois_restant_pourcent'>"
586                                                . round($nb_etiquettes / $nb_total_abonnes * 100)."</span>%)</p>"
587                                        :       ""
588                                )
589                        // message si simulation d'envoi       
590                        .       (
591                                        ($opt_simuler_envoi == 'oui') 
592                                        ? "<div style='color:white;background-color:red;text-align:center;line-height:1.4em;'>"._T('spiplistes:mode_simulation')."</div>\n" 
593                                : ""
594                                )
595                        ;
596               
597                $href = generer_action_auteur('spiplistes_envoi_lot','envoyer');
598
599                for ($i = 0; $i < _SPIP_LISTE_SEND_THREADS; $i++) {
600                        $result .= "<span id='proc$i' class='processus' name='$href'></span>";
601                }
602                $result .= ""
603                        . "<a href='".generer_url_ecrire(_SPIPLISTES_EXEC_COURRIERS_LISTE)."' id='redirect_after'></a>"
604                        . "</div>"
605                        . "<script><!--
606                var target = $('#envois_restants');
607                var total = $('#envois_total').html();
608                var target_pc = $('#envois_restant_pourcent');
609                function redirect_fin(){
610                        redirect = $('#redirect_after');
611                        if (redirect.length>0){
612                                href = redirect.attr('href');
613                                setTimeout('document.location.href = \"'+href+'\"',0);
614                        }
615                }
616                jQuery.fn.runProcessus = function(url) {
617                        var proc = this;
618                        var href = url;
619                        $(target).load(url,function(data){
620                                restant = $(target).html();
621                                pourcent = Math.round(restant/total*100);
622                                $(target_pc).html(pourcent);
623                                if (Math.round(restant)>0)
624                                        $(proc).runProcessus(href);
625                                else
626                                        redirect_fin();
627                        });
628                }
629                $('span.processus').each(function(){
630                        var href = $(this).attr('name');
631                        $(this).html(ajax_image_searching).runProcessus(href);
632                        //run_processus($(this).attr('id'));
633                });
634                //-->
635                </script>"
636                        . "<p class='verdana2'>"._T('spiplistes:texte_boite_en_cours')."</p>" 
637                        . fin_boite_info(true)
638                        ;
639        }
640        return($result);
641}
642
643// adapte de abomailman ()
644// MaZiaR - NetAktiv
645// tech@netaktiv.com
646
647
648// CP-20080528
649// Renvoie l'arborescence des rubriques
650function spiplistes_arbo_rubriques ($id_rubrique = 0, $ran = 0) {
651       
652        // une seule rqt pour recuperer toutes les rubriques
653        $sql_result = sql_select("id_rubrique,id_parent,titre", "spip_rubriques");
654        $rubriques_array = array();
655        // empile les rubriques
656        while($row = sql_fetch($sql_result)) {
657                $rubriques_array[] = array(
658                        'id_rubrique' => intval($row['id_rubrique'])
659                        , 'id_parent' => intval($row['id_parent'])
660                        , 'titre' => supprimer_numero(typo($row['titre']))
661                );
662        }
663        // renvoie la liste sous forme de option de select (html)
664        return(
665                "<!-- liste des rubriques -->\n"
666                . spiplistes_arbo_rubriques_sub($rubriques_array)
667        );
668}
669
670// sous-fonction de spiplistes_arbo_rubriques()
671// recursive
672function spiplistes_arbo_rubriques_sub ($rubriques_array, $id_parent = 0, $ran = 0) {
673        $result = "";
674        $marge =
675                ($ran)
676                ? "&nbsp;&nbsp;&nbsp;|".str_repeat("--", $ran)
677                : "&bull;"
678                ;
679        foreach($rubriques_array as $rubrique) {
680                if($rubrique['id_parent'] == $id_parent) {
681                        $result .= ""
682                                . "<option value='" . $rubrique['id_rubrique'] . "'>" . $marge . "&nbsp;" . $rubrique['titre'] . "</option>\n"
683                                . spiplistes_arbo_rubriques_sub($rubriques_array, $rubrique['id_rubrique'], $ran + 1)
684                                ;
685                }
686        }
687        return($result);
688}
689
690// Nombre d'abonnes a une liste, chaine html
691function spiplistes_nb_abonnes_liste_str_get ($id_liste, $nb_abos = false, $html = false, $texte = false) {
692        if($nb_abos === false) {
693                list($nb_abos, $html, $texte) = spiplistes_listes_nb_abonnes_compter($id_liste, true);
694        } 
695        $absents = $nb_abos - ($html + $texte);
696        $result =
697                ($nb_abos)
698                ?       ""
699                        . spiplistes_singulier_pluriel_str_get($nb_abos, _T('spiplistes:nb_abonnes_sing'), _T('spiplistes:nb_abonnes_plur')) 
700                        .       (
701                                $absents 
702                                ? _T('spiplistes:_dont_n_sans_format_reception', array('n' => $absents))
703                                : ""
704                                )
705                : _T('spiplistes:sans_abonne')
706                ;
707        return ($result);
708}
709
710/**
711 * Nombre de destinataires d'une liste, chaine html
712 * @version CP-20081126
713 * @param int $nb
714 * @return string
715 */
716function spiplistes_nb_destinataire_str_get ($nb) {
717        $result = ($nb > 0)
718                        ? spiplistes_singulier_pluriel_str_get(
719                                $nb
720                                , _T('spiplistes:nb_destinataire_sing')
721                                , _T('spiplistes:nb_destinataire_plur')
722                                )
723                        : _T('spiplistes:aucun_destinataire')
724                        ;
725        return($result);
726}
727
728/**
729 * Nombre de listes, chaine html
730 * @version CP-20081126
731 * @param int $nb
732 * @return string
733 */
734function spiplistes_nb_listes_str_get ($nb) {
735        if(!$nb) return ("");
736        $result = 
737                ($nb == 1)
738                ? _T('spiplistes:1_liste', array('n' => $nb))
739                : _T('spiplistes:n_listes', array('n' => $nb))
740                ;
741        return($result);
742}
743
744/**
745 * Nombre de moderateurs d'une liste, chaine html
746 * @version CP-20080610
747 * @param int|bool $nb
748 * @return string
749 */
750function spiplistes_nb_moderateurs_liste_str_get ($nb) {
751        $result = ""
752                . "("
753                .       (
754                        ($nb)
755                        ? spiplistes_singulier_pluriel_str_get(
756                                $nb
757                                , _T('spiplistes:nb_moderateur_sing'), _T('spiplistes:nb_moderateur_plur')) 
758                        : _T('spiplistes:sans_moderateur')
759                        )
760                . ")"
761                ;
762        return ($result);
763}
764
765/**
766 * @version CP-20080510
767 * @param string $titre
768 * @return string
769 */
770function spiplistes_titre_boite_info ($titre = "") {
771        global $spip_display, $spip_lang_left;
772        $result =
773                (!empty($titre))
774                ?
775                        "<h3 style='padding-$spip_lang_left:3px;text-align:$spip_lang_left;border-bottom:1px solid #444;margin:0;' class='verdana2'>"
776                        . $titre
777                        . "</h3>\n"
778                : ""
779                ;
780        return($result);
781}
782
783/**
784 * termine page si la donnee n'existe pas dans la base
785 * @param bool $return
786 * @return string
787 */
788function spiplistes_terminer_page_donnee_manquante ($return = true) {
789        spiplistes_terminer_page_message (_T('spiplistes:pas_de_donnees'), $return);
790}
791
792/**
793 * termine la page (en affichant message ou retour)
794 * @param string $message
795 * @return string
796 */
797function spiplistes_terminer_page_message ($message) {
798        $result = '<p>'.$message.'</p>'.PHP_EOL;
799        if($return) return($result);
800        else echo($result);
801}
802
803/**
804 * termine la page (a employer quand droits insuffisants)
805 * @param bool $return
806 * @return string
807 */
808function spiplistes_terminer_page_non_autorisee ($return = true) {
809        spiplistes_terminer_page_message (_T('avis_non_acces_page'), $return);
810}
811
812/**
813 * @param string $id
814 * @return string
815 */
816function spiplistes_debut_block_visible ($id="") {
817        if(!function_exists('debut_block_visible')) {
818                include_spip('inc/layer');
819                return(debut_block_depliable(true,$id));
820        }
821        return(debut_block_visible($id));
822}
823
824/**
825 * @param string $id
826 * @return string
827 */
828function spiplistes_debut_block_invisible ($id="") {
829        if(!function_exists('debut_block_invisible')) {
830                include_spip('inc/layer');
831                return debut_block_depliable(false,$id);
832        }
833        return(debut_block_invisible($id));
834}
835
836/**
837 * Renvoie tableau de listes valides avec nb abonnes
838 * du style :
839 *   array(
840 *     array(
841 *       $id_liste
842 *       , $titre  // titre de la liste
843 *       , $nb_abos
844 *     )
845 *   , ...
846 *   )
847 * @version CP-20080430
848 * @return array|null
849 */
850function spiplistes_listes_lister_abos () {
851        $sql_select = array('l.id_liste', 'l.titre', 'COUNT(a.id_auteur) AS nb_abos');
852        $sql_from = "spip_listes as l LEFT JOIN spip_auteurs_listes AS a ON l.id_liste=a.id_liste";
853        $sql_where = "l.statut=".implode(" OR l.statut=", array_map("sql_quote", explode(";", _SPIPLISTES_LISTES_STATUTS_OK)));
854        $sql_group = 'l.id_liste';
855        if($sql_result = sql_select($sql_select, $sql_from, $sql_where, $sql_group)) {
856                $result = array();
857                while($row = sql_fetch($sql_result)) {
858                        $result[] = $row;
859                }
860                return($result);
861        }
862        return(NULL);
863}
864
865/**
866 * CP-20081112
867 * deux fonctions issues de fmp3
868 * - fmp3_envelopper_script()
869 * - fmp3_compacter_script()
870 *
871 * enveloppe un script javascript pour insertion dans le code de la page
872 */
873function spiplistes_envelopper_script ($source, $format) {
874        $source = trim($source);
875        if(!empty($source)) {
876                switch($format) {
877                        case 'css':
878                                $source = "\n<style type='text/css'>\n<!--\n" 
879                                        . $source
880                                        . "\n-->\n</style>";
881                                break;
882                        case 'js':
883                                $source = "\n<script type='text/javascript'>\n//<![CDATA[\n" 
884                                        . $source
885                                        . "\n//]]>\n</script>";
886                                break;
887                        default:
888                                $source = "\n\n<!-- erreur envelopper: format inconnu [$format] -->\n\n";
889                }
890        }
891        return($source);
892} // end spiplistes_envelopper_script()
893
894/**
895 * Complement des deux 'compacte'. supprimer les espaces en trop.
896 *
897 * @return string
898 */ 
899function spiplistes_compacter_script ($source, $format) {
900        $source = trim($source);
901        if(!empty($source)) {
902                $source = compacte($source, $format);
903                $source = preg_replace(",/\*.*\*/,Ums","",$source); // pas de commentaires
904                $source = preg_replace('=[[:space:]]+=', ' ', $source); // reduire les espaces
905        }
906        return($source);
907} // end spiplistes_compacter_script()
908
909/**
910 * Donne les infos systemes du plugin.
911 *
912 * @return string
913 */ 
914function spiplistes_plugin_get_infos($plug) {
915        if(version_compare($GLOBALS['spip_version_code'],'15375','>=')) {
916                $get_infos = charger_fonction('get_infos','plugins');
917                $infos = $get_infos($plug);
918        }
919        else {
920                $infos = plugin_get_infos($plug);
921        }
922        return($infos);
923}
924
925/**
926 * Petite signature du plugin
927 *
928 * Signature affichee en bas de formulaire en espace prive.
929 * @param $prefix string prefix du plugin
930 * @param $html bool si true, renvoyer le resultat au format html
931 * @param $verifier_svn si true
932 * @return string petite signature de plugin (version plugin, version base, version jquery)
933 */
934function spiplistes_html_signature ($prefix, $html = true, $verifier_svn = false) {
935       
936        $info = spiplistes_plugin_get_infos(spiplistes_get_meta_dir($prefix));
937        $nom = typo($info['nom']);
938        $version = typo($info['version']);
939        //$base_version = typo($info['version_base']); // cache ?
940        $base_version = spiplistes_current_version_base_get($prefix);
941        $svnrevision = spiplistes_current_svnrevision_get($prefix, $verifier_svn);
942        $revision = "";
943       
944        if($html) {
945                $version = (($version) ? " <span style='color:gray;'>".$version : "")
946                        . (($svnrevision) ? "-".$svnrevision : "")
947                        . "</span>"
948                        ;
949                $base_version = (($base_version) ? " <span style='color:#66c;'>&lt;".$base_version."&gt;</span>" : "");
950        }
951        $result = ''
952                . $nom
953                . ' ' . $version
954                . ' ' . $base_version
955                ;
956        if($html) {
957                $result = "<p class='verdana1 spip_xx-small' style='font-weight:bold;'>$result\n"
958                . "<script type='text/javascript'>\n"
959                . "//<![CDATA[\n"
960                . "document.write(' <span style=\'color:green\'>jQuery ' + jQuery.fn.jquery + '</span>')"
961                . "//]]>\n"
962                . "</script>\n"
963                . "<noscript>\n"
964                . "<span style='color:red'>" . _T('spiplistes:jquery_inactif') . "</span>"
965                . "</noscript>\n"
966                . "</p>\n";
967        }
968        return($result);
969} // end spiplistes_html_signature()
970
971/**
972 * Le numero de revision svn
973 * @param $prefix prefix du plugin
974 * @param $s si true, va chercher le numero dans le repertoire du plugin
975 * @return string
976 */
977function spiplistes_current_svnrevision_get ($prefix, $verifier_svn) {
978        static $svn_revision = false;
979        if(!empty($prefix)) {
980                // lire directement dans plugin.xml (eviter le cache ?)
981                $dir_plugin = _DIR_PLUGINS.spiplistes_get_meta_dir($prefix);
982                // cherche si sur version svn
983                if(!$result = version_svn_courante($dir_plugin)) {
984                        // mefiance: il faut que svn/entries soit a jour (svn update sur le poste de travail/serveur !)
985                        // si pas de svn/entries, lire l'attribut dans plugin.xml
986                        $file = $dir_plugin."/paquet.xml";
987                        $result = spiplistes_svn_revision_read($file);
988                }
989                if($verifier_svn && !$svn_revision) {
990                        // verifier les fichiers inclus (gourmand et peut-etre trompeur si fichier fantome ?)
991                        // ne verifier que sur deux niveaux (PLUGIN_ROOT et ses repertoires directs, pas en dessous)
992                        define("_PGL_SVN_LIRE_EXTENSIONS", "css|html|js|php|xml");
993                        $script_files = array();
994                        if(is_dir($dir_plugin) && ($dh = opendir($dir_plugin))) {
995                                while (($file = readdir($dh)) !== false) {
996                                        if($file[0] == ".") continue;
997                                        if(is_dir($dir_plugin_sub = $dir_plugin."/".$file) && ($dh_s = opendir($dir_plugin_sub))) {
998                                                while (($file = readdir($dh_s)) !== false) {
999                                                        if($file[0] == ".") continue;
1000                                                        if(preg_match('=\.('._PGL_SVN_LIRE_EXTENSIONS.')$=i', $file)) {
1001                                                                $script_files[] = $dir_plugin_sub."/".$file;
1002                                                        }
1003                                                }
1004                                                closedir($dh_s);
1005                                        }
1006                                        else if(preg_match('=\.('._PGL_SVN_LIRE_EXTENSIONS.')$=i', $file)) {
1007                                                $script_files[] = $dir_plugin."/".$file;
1008                                        }
1009                                }
1010                                closedir($dh);
1011                        }
1012                        foreach($script_files as $file) {
1013                                if(!$ii = spiplistes_svn_revision_read ($file)) {       continue; }
1014                                $result = max($ii, $result);
1015                        }
1016                }
1017                if(!empty($result) && (intval($result) > 0)) return($result);
1018        }
1019        return(false);
1020} // end spiplistes_current_svnrevision_get()
1021
1022/**
1023 * lire le fichier, en esperant trouver le mot cle svn dans les $buf_size premiers caracteres
1024 * @return le numero de revision svn
1025 * @param $filename
1026 * @param $buf_size
1027 */
1028function spiplistes_svn_revision_read ($filename, $buf_size = 2048) {
1029        if($fh = fopen($filename, "rb")) {
1030                $buf = fread($fh, $buf_size);
1031                fclose($fh);
1032                if($buf = strstr($buf, "$"."LastChanged"."Revision:")) {
1033                        $revision = preg_replace('=^\$LastChanged'.'Revision: ([0-9]+) \$.*$=s', '${1}', $buf, 1);
1034                        if(strval(intval($revision)) == $revision) { 
1035                                return($revision);
1036                        }
1037                }
1038        }
1039        return (false);
1040} // end spiplistes_svn_revision_read()
1041
1042/**
1043 * @return Renvoie ou affiche une boite d'alerte
1044 */
1045function spiplistes_boite_alerte ($message, $return = false) {
1046        $result = ""
1047                . debut_boite_alerte()
1048                .  http_img_pack("warning.gif", _T('info_avertissement'), 
1049                                 "style='width:48px;height:48px;float:right;margin:5px;'")
1050                . "<span class='message-alerte'>$message</span>\n"
1051                . fin_boite_alerte()
1052                . "\n<br />"
1053                ;
1054        if($return) return($result);
1055        else echo($result);
1056}
1057
1058 /**
1059  * Un petit bloc info sur le plugin
1060  * @param string $prefix
1061  * @return string
1062  */
1063function spiplistes_boite_meta_info ($prefix) {
1064        include_spip('inc/meta');
1065        $result = false;
1066        if(!empty($prefix)) {
1067                $meta_info = spiplistes_get_meta_infos($prefix); // dir et version
1068                $info = spiplistes_plugin_get_infos($meta_info['dir']);
1069                $icon = 
1070                        (isset($info['icon']))
1071                        ? "<div "
1072                                . " style='width:64px;height:64px;"
1073                                        . "margin:0 auto 1em;"
1074                                        . "background: url(". _DIR_PLUGINS.$meta_info['dir']."/".trim($info['icon']).") no-repeat center center;overflow: hidden;'"
1075                                . " title='Logotype plugin $prefix'>"
1076                                . "</div>\n"
1077                        : ""
1078                        ;
1079                if(isset($info['etat']) && $info['etat']) {
1080                        if($info['etat'] == 'stable') {
1081                        // en version stable, ne sort plus les infos de debug
1082                                foreach(array('description','lien','auteur') as $key) {
1083                                        if(isset($info[$key]) && !isset($meta_info[$key])) {
1084                                                $meta_info[$key] = $info[$key];
1085                                        }
1086                                }
1087                                $result .= spiplistes_boite_meta_info_liste($meta_info, true) // nom, etat, dir, version, description, lien, auteur
1088                                        ;
1089                        }
1090                        else {
1091                        // un peu plus d'info en mode test et dev
1092                                $result .= 
1093                                        spiplistes_boite_meta_info_liste($meta_info, true) // nom, etat, dir, version
1094                                        . spiplistes_boite_meta_info_liste($info, ($info['etat']=='dev'))  // et tout ce qu'on a en magasin
1095                                        ;
1096                }
1097                }
1098                if(!empty($result)) {
1099                        $result = ""
1100                                . debut_cadre_relief('plugin-24.gif', true, '', _T($prefix.':'.$prefix))
1101                                . $icon
1102                                . $result
1103                                . fin_cadre_relief(true)
1104                                ;
1105                }
1106        }
1107        return($result);
1108} // spiplistes_boite_meta_info()
1109
1110/**
1111 * Petite boite info pour la page de configuration du plugin
1112 *
1113 * Apparait sur la gauche de la page. Affiche infos de configuration.
1114 * @param array $array
1115 * @param bool $recursive
1116 * @global string $spip_lang_left
1117 * @return string
1118 */
1119function spiplistes_boite_meta_info_liste($array, $recursive = false) {
1120        global $spip_lang_left;
1121        $result = '';
1122        if(is_array($array)) {
1123               
1124                $eviter = array(
1125                        'version' // inutile. deja affiche' en bas de page
1126                        , 'version_base' // idem
1127                        , 'nom' // deja en titre de boite
1128                        , 'filemtime', 'icon', 'prefix' // sans interet
1129                       
1130                );
1131               
1132                foreach($array as $key => $value) { 
1133                        if(!in_array($key, $eviter)) {
1134                                $sub_result = '';
1135                                if(is_array($value)) {
1136                                        if($recursive) {
1137                                                $sub_result = spiplistes_boite_meta_info_liste($value);
1138                                        }
1139                                }
1140                                else {
1141                                        $sub_result = propre($value);
1142                                }
1143                                if(!empty($sub_result)) {
1144                                        $result .= "<li><span style='font-weight:bold;'>$key</span> : $sub_result</li>\n";
1145                                }
1146                        }
1147                }
1148                if(!empty($result)) {
1149                        $result = "<ul style='margin:0;padding:0 1ex;list-style: none;text-align: $spip_lang_left;' class='verdana2 meta-info-liste'>$result</ul>";
1150                }
1151        }
1152        return($result);
1153}
1154
1155/**
1156 * Petit bouton aide a placer a droite du titre de bloc
1157 * @param string $fichier_exec_aide
1158 * @param string $aide
1159 * @param bool $return
1160 * @return string|null
1161 */
1162function spiplistes_plugin_aide ($fichier_exec_aide, $aide='', $return=true) {
1163        include_spip('inc/minipres');
1164        include_spip('inc/aider');
1165        global $spip_lang
1166                , $spip_lang_rtl
1167                , $spip_display
1168                ;
1169        if (!$aide || $spip_display == 4) return;
1170       
1171        $t = _T('titre_image_aide');
1172        $result = ""
1173        . "\n&nbsp;&nbsp;<a class='aide'\nhref='"
1174        . generer_url_ecrire($fichier_exec_aide, "var_lang=$spip_lang")
1175        . (
1176                (!empty($aide)) 
1177                ? "#$aide" 
1178                : ""
1179                )
1180        . "'"
1181        . " onclick=\"javascript:window.open(this.href,'spip_aide', 'scrollbars=yes, resizable=yes, width=740, height=580'); return false;\">\n"
1182        . http_img_pack(
1183                "aide".aide_lang_dir($spip_lang,$spip_lang_rtl).".gif"
1184                , _T('info_image_aide')
1185                , " title=\"$t\" class='aide'"
1186                )
1187        . "</a>"
1188        ;
1189       
1190        if($return) return($result);
1191        else echo($result);
1192} // spiplistes_plugin_aide()
1193
1194/**
1195 * @param string $date 
1196 * @return string date, chaine html
1197 */
1198function spiplistes_affdate ($date) {
1199        $result = "";
1200        if($date) {
1201                $proch = round((strtotime($date) - time()) / _SPIPLISTES_TIME_1_DAY);
1202                $result =
1203                        (
1204                        ($proch > 1)
1205                        ? affdate_jourcourt($date)
1206                        : "<strong>"._T($proch ? 'date_demain' : 'date_aujourdhui')."</strong>"
1207                        )
1208                        . "<br />".heures_minutes($date)
1209                        ;
1210        }
1211        return($result);
1212}
Note: See TracBrowser for help on using the repository browser.