source: spip-zone/_plugins_/spip-listes/spip-listes_1_9_3/inc/spiplistes_listes_selectionner_auteur.php @ 50563

Last change on this file since 50563 was 50563, checked in by paladin@…, 9 years ago

documentation phpdoc

  • Property svn:eol-style set to LF
  • Property svn:keywords set to LastChangedBy LastChangedDate LastChangedRevision
File size: 31.2 KB
Line 
1<?php 
2/**
3 * @version Original From SPIP-Listes-V :: Id: spiplistes_listes_forcer_abonnement.php paladin@quesaco.org
4 * @package spiplistes
5 */
6 // $LastChangedRevision: 50563 $
7 // $LastChangedBy: paladin@quesaco.org $
8 // $LastChangedDate: 2011-08-19 12:14:53 +0000 (Fri, 19 Aug 2011) $
9
10/******************************************************************************************/
11/* SPIP-Listes est un systeme de gestion de listes d'abonnes et d'envoi d'information     */
12/* par email pour SPIP. http://bloog.net/spip-listes                                      */
13/* Copyright (C) 2004 Vincent CARON  v.caron<at>laposte.net                               */
14/*                                                                                        */
15/* Ce programme est libre, vous pouvez le redistribuer et/ou le modifier selon les termes */
16/* de la Licence Publique Generale GNU publiee par la Free Software Foundation            */
17/* (version 2).                                                                           */
18/*                                                                                        */
19/* Ce programme est distribue car potentiellement utile, mais SANS AUCUNE GARANTIE,       */
20/* ni explicite ni implicite, y compris les garanties de commercialisation ou             */
21/* d'adaptation dans un but specifique. Reportez-vous a la Licence Publique Generale GNU  */
22/* pour plus de details.                                                                  */
23/*                                                                                        */
24/* Vous devez avoir recu une copie de la Licence Publique Generale GNU                    */
25/* en meme temps que ce programme ; si ce n'est pas le cas, ecrivez a la                  */
26/* Free Software Foundation,                                                              */
27/* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, Etats-Unis.                   */
28/******************************************************************************************/
29
30if (!defined('_ECRIRE_INC_VERSION')) return;
31
32//CP-20081116
33// utilise par
34// - exec/spiplistes_liste_gerer.php
35// - exec/spiplistes_abonnes_tous.php
36// - action/spiplistes_listes_abonner_auteur.php
37// - action/spiplistes_liste_des_abonnes.php
38// - action/spiplistes_changer_statut_abonne.php
39
40// selectionne les auteurs elligibles a un abonnement
41// - adresse email obligatoire
42
43define('_SPIPLISTES_LIGNES_PAR_PAGE', 10);
44define('_SPIPLISTES_SELECT_MIN_AUTEURS', 50); // nb auteurs dans le <select>
45
46/*CP-2200081116
47 * pour l'ajout abonne', il y a trois ajax boites imbriquées
48 * A - la grosse pour la liste des abonnés et le champ des elligibles
49 * B - la plus petite dans la grosse pour juste la liste des abonnés
50 * C - sous la B, le champ des elligibles
51 * Lorsqu'on ajoute un abonné, A est mis à jour
52 * Lorsqu'on change un format, B seul est mis à jour
53 * Lorsqu'on cherche un elligible, seul C est mis à jour
54 */
55define('_SPIPLISTES_ID_GROSSE_BOITE', 'grosse_boite_abonnements');
56define('_SPIPLISTES_ID_PETITE_BOITE', 'petite_boite_abonnements');
57define('_SPIPLISTES_ID_FROM_ELLIGIBL', 'form-recherche-abo-elligibles');
58
59/**
60 * Renvoie un tableau d'auteurs, du style
61 * $result['1comite'][$id_auteur] = nom
62 * + le nombre d'elligibles
63 * si $id_liste == 0, liste complete
64 * sinon, ceux non abonnes a la liste
65 *
66 * Si liste privee, uiquement redacs
67 * Si liste publique, tout le monde (sauf si deja abonne)
68 * $nb_non_abonnes = nombre d'elligibles trouves
69 * Pour recuperer le resultat :
70 *   list($non_abonnes, $nb_non_abonnes) = spiplistes_listes_auteurs_elligibles($id_liste, $statut);
71 *
72 * @version CP-20080603
73 * @param int $id_liste
74 * @param string $statut_liste
75 * @param string $faire
76 * @return array
77 */
78function spiplistes_listes_auteurs_elligibles ($id_liste, $statut_liste = '', $faire = '') {
79        $nb_auteurs = 0;
80        $auteurs_array = array();
81        if($lister_moderateurs = ($faire == 'moderer')) {
82                // recupere la liste des moderateurs
83                $ids_already = spiplistes_mod_listes_get_id_auteur($id_liste);
84                $ids_already = (isset($ids_already[$id_liste]) ? $ids_already[$id_liste] : array());
85                $sql_where[] = 'statut='.sql_quote('0minirezo');
86        }
87        else {
88                // recupere la liste des abonnes
89                $ids_already = spiplistes_listes_liste_abo_ids($id_liste);
90                // prepare la liste des non-abonnes elligibles
91                $sql_where = array("email <> ''"); // email obligatoire !
92                // si liste privee, ne prend que l'equipe de redacs
93                if($statut_liste == _SPIPLISTES_LIST_PRIVATE) {
94                        $sql_where[] = "(statut=".sql_quote('0minirezo')." OR statut=".sql_quote('1comite').")";
95                }
96        }
97        $sql_from = array("spip_auteurs");
98        // demande la liste des elligibles
99        $sql_result = sql_select("nom,id_auteur,statut", $sql_from, $sql_where, '', array('statut','nom'));
100        if(sql_count($sql_result)) {
101                while($row = sql_fetch($sql_result)) {
102                        // ne pas prendre ceux deja abonnes
103                        if(in_array($row['id_auteur'], $ids_already)) {
104                                continue;
105                        }
106                        if(!isset($auteurs_array[$row['statut']])) {
107                                $auteurs_array[$row['statut']] = array();
108                        }
109                        $auteurs_array[$row['statut']][$row['id_auteur']] = $row['nom'];
110                        $nb_auteurs++;
111                }
112        }
113        return(array($auteurs_array, $nb_auteurs));
114}
115
116/**
117 * @version CP-20080603
118 * @param $id_liste entier
119 * @param $statut_liste staut ou false
120 * @param $tri string: 'statut', 'nom', ou 'nombre' (qte)
121 * @param $debut id_auteur du premier affiche
122 * @param $script_retour string
123 * @return la boite en liste des abonnes a une liste
124 *      si $id_liste == 0, liste tous les abonnements
125 */
126function spiplistes_listes_boite_abonnes ($id_liste, $statut_liste, $tri, $debut, $script_retour) {
127
128        global $spip_lang_left, $spip_lang_right;
129       
130        $id_liste = intval($id_liste);
131        $legende_tableau = '';
132
133        // construction de la req SQL
134        $sql_select = "
135                aut.id_auteur AS id_auteur,
136                aut.statut AS statut,
137                aut.login AS login,
138                aut.nom AS nom,
139                aut.email AS email,
140                aut.url_site AS url_site,
141                fmt.`spip_listes_format` AS format,
142                UPPER(aut.nom) AS unom,
143                COUNT(lien.id_liste) as compteur";
144        $sql_from = "
145                spip_auteurs AS aut
146                LEFT JOIN spip_auteurs_listes AS lien ON aut.id_auteur=lien.id_auteur
147                LEFT JOIN spip_listes AS liste ON (lien.id_liste = liste.id_liste)
148                LEFT JOIN spip_auteurs_elargis AS fmt ON aut.id_auteur=fmt.id_auteur";
149        $sql_where = array("aut.statut <> ".sql_quote('5poubelle'));
150        if($id_liste > 0) {
151                $sql_where[] = "lien.id_liste=".sql_quote($id_liste);
152        }
153        $sql_group = 'aut.id_auteur';
154        switch ($tri) {
155                case 'statut':
156                        $sql_order = array('statut','login','unom');
157                        break;
158                case 'nombre':
159                        $sql_order = array('compteur DESC','unom');
160                        break;
161                default:
162                        $tri = 'nom';
163                        $sql_order = array('unom');
164        }
165
166        $nb_auteurs = sql_countsel('spip_auteurs');
167       
168        if($sql_result = sql_select(array('id_auteur', 'format'), 'spip_auteurs_listes'))
169        {
170                $abonnes = array();
171                while($row = sql_fetch($sql_result))
172                {
173                        if(!isset($abonnes[$row['id_auteur']])) { 
174                                $abonnes[$row['id_auteur']] = array();
175                                $nb_abonnes++; 
176                        }
177                        $abonnes[$row['id_auteur']][$row['format']]++;
178                        $abonnes[$row['format']]++;
179                }
180        }
181       
182        if(!$id_liste)
183        {
184                $legende_tableau = trim(spiplistes_str_auteurs($nb_auteurs)) 
185                . ', '
186                . _T('spiplistes:_dont_')
187                . spiplistes_str_abonnes ($nb_abonnes) 
188                ;
189                if(isset($abonnes['non']) && $abonnes['non'])
190                {
191                        $legende_tableau .= _T('spiplistes:_dont_n_sans_format_reception', array('n' => $abonnes['non']));
192                }
193                else if($nb_abonnes)
194                {
195                        $legende_tableau .= _T('spiplistes:_avec_');
196                }
197                $legende_tableau .= 
198                        ($ii = intval($abonnes['html']))
199                        ? spiplistes_str_abonnements(intval($abonnes['html'])) . _T('spiplistes:_au_format_s', array('s' => _T('spiplistes:html')))
200                        : ''
201                        ;
202                $legende_tableau .= 
203                        ($jj = intval($abonnes['texte']))
204                        ? ($ii?', ':''). spiplistes_str_abonnements(intval($abonnes['texte'])) . _T('spiplistes:_au_format_s', array('s' => _T('spiplistes:texte')))
205                        : ''
206                        ;
207                $legende_tableau .= ''
208                        . '.'
209                        ;
210        }
211       
212        $nombre_abonnes = 
213                ($id_liste > 0)
214                ? spiplistes_abonnements_compter($id_liste ? "id_liste=".sql_quote($id_liste) : "")
215                // demande inventaire complet des auteurs (liste abonnes_tous)
216                : sql_countsel("spip_auteurs")
217                ;
218
219        // reglage du debut
220        if(!$debut) {
221                // si js pas active, recupere dans l'url
222                $debut = intval(_request('debut'));
223        }
224        if ($debut > ($ii = $nombre_abonnes - _SPIPLISTES_LIGNES_PAR_PAGE)) {
225                $debut = max(0, $ii);
226        }
227       
228        $sql_result = sql_select($sql_select, $sql_from, $sql_where, $sql_group, $sql_order, $debut . ',' . _SPIPLISTES_LIGNES_PAR_PAGE);
229        if ($sql_result === false) {
230                spiplistes_sqlerror_log("listes_boite_abonnes");
231        }
232
233        $auteurs = array();
234        $les_auteurs = array();
235        while ($row = sql_fetch($sql_result)) {
236                if ($row['statut'] == '0minirezo') {
237                        $row['restreint'] = sql_count(sql_select(
238                                "*"
239                                , "spip_auteurs_rubriques"
240                                , "id_auteur=".sql_quote($row['id_auteur'])
241                                ));
242                }
243                $auteurs[] = $row;
244                $les_auteurs[] = $row['id_auteur'];
245        }
246               
247        $lettres_onglet = array();
248       
249        if($nombre_abonnes > 10) { 
250                // SELECT DISTINCT UPPER(LEFT(nom,1)) AS l, COUNT(*) AS n FROM spip_auteurs GROUP BY l ORDER BY l
251                $sql_result = sql_select(
252                        array("DISTINCT UPPER(LEFT(aut.nom,1)) AS l"
253                                , "COUNT(*) AS n")
254                        , (($id_liste > 0) ? $sql_from : 'spip_auteurs AS aut')
255                        , $sql_where 
256                        , "l"
257                        , array("l")
258                        );
259                if($result === false) {
260                                spiplistes_sqlerror_log("listes_boite_abonnes");
261                } 
262                else {
263                        $count = 0;
264                        while ($row = sql_fetch($sql_result)) {
265                                $lettres_onglet[$row['l']] = $count;
266                                $count += intval($row['n']);
267                        }
268                }
269        }
270       
271        $legende_tableau =
272                ($id_liste)
273                ? spiplistes_nb_abonnes_liste_str_get($id_liste)
274                : $legende_tableau
275                ;
276        $result = ""
277                . "<div id='"._SPIPLISTES_ID_PETITE_BOITE."'>\n"
278                . "<div class='verdana2' id='legend-abos1-propre'>"
279                . '<small>' . $legende_tableau . '</small>'
280                . "</div>\n"
281                ;
282               
283        function spiplistes_lien_ajaxsqueeze ($r_script, $r_param, $a_script, $a_param, $id_dest, $title, $html) {
284                $exec_url = generer_url_ecrire($r_script, $r_param);
285                $action_url = generer_action_auteur($a_script, $a_param);
286                $result = "<a href='" . $exec_url . "'"
287                                . " onclick=\"javascript:return AjaxSqueeze('$action_url', '$id_dest', '$exec_url', event)\""
288                                . " title='".$title."'>".$html."</a>";
289                return($result);
290        }
291
292       
293        //////////////////////////////////
294        // tableau des resultats
295        $result .= ""
296                . "<table border='0' cellpadding='3' cellspacing='0' width='100%' class='verdana1 spiplistes-abos'>\n"
297                ;
298        $colspan = 0;
299       
300        // titres du tableau (a-la-SPIP, en haut)
301        $icon_auteur = spiplistes_corrige_img_pack("<img src='"._DIR_IMG_PACK."/admin-12.gif' alt='' border='0' />");
302        $id_liste_url = ($id_liste ? "&id_liste=$id_liste" : "");
303        $result .= ""
304                . "<tr bgcolor='#DBE1C5'>"
305                //
306                // #1: statut auteur (icone)
307                . "<th width='20'>"
308                .       (
309                        ($tri=='statut')
310                        ? $icon_auteur
311                        : spiplistes_lien_ajaxsqueeze ($script_retour, "id_liste=$id_liste&tri=statut&debut=0"
312                                        , _SPIPLISTES_ACTION_LISTE_ABONNES
313                                        , $id_liste." 0 statut", _SPIPLISTES_ID_PETITE_BOITE
314                                        , _T('lien_trier_statut'), $icon_auteur)
315                        )
316                . "</th>\n"
317                ;
318                $colspan++;
319               
320                // #2: nom
321        $result .= ""
322                . "<th>"
323                .       (
324                        ($tri == '' || $tri=='nom')
325                        ? _T('info_nom')
326                        : spiplistes_lien_ajaxsqueeze ($script_retour, "id_liste=$id_liste&tri=nom&debut=0"
327                                        , _SPIPLISTES_ACTION_LISTE_ABONNES
328                                        , $id_liste." 0 nom", _SPIPLISTES_ID_PETITE_BOITE
329                                        , _T('lien_trier_nom'), _T('info_nom'))
330                        )
331                . "</th>\n";
332                $colspan++;
333               
334                // #3: contact mail
335        $result .= ""
336                . "<th>" . _T('email')
337                . "</th>\n"
338                ;
339                $colspan++;
340               
341        $result .= ""
342                // #4: site
343                .       "<th>"._T('info_site')
344                . "</th>\n";
345                $colspan++;
346               
347        $result .= ""
348                // #5: Format si abonne
349                .       "<th>"._T('spiplistes:format')
350                . "</th>\n"
351                ;
352                $colspan++;
353               
354        // si dans la page abonnes_tous, inventaire nb abonnements
355        if($id_liste == 0) {   
356                        // #6: Nombre d'abonnements     
357                        // si js inactif, $exec_url prend le relais
358                $result .= ""
359                        .       "<th>"
360                        .       (
361                                ($tri=='nombre')
362                                ? _T('spiplistes:nb_abos')
363                                : spiplistes_lien_ajaxsqueeze ($script_retour, "id_liste=$id_liste&tri=nombre&debut=0"
364                                                , _SPIPLISTES_ACTION_LISTE_ABONNES
365                                                , $id_liste." 0 nombre", _SPIPLISTES_ID_PETITE_BOITE
366                                                , _T('spiplistes:lien_trier_nombre'), _T('spiplistes:nb_abos'))
367                                )
368                        . "</th>\n"
369                        ;
370                $colspan++;
371        }
372               
373                // #7: Modifier l'abonnement
374        $result .= ""
375                .       "<th>"
376                . _T('spiplistes:modifier')
377                . "</th>\n"
378                ;
379                $colspan++;
380               
381                // #8: supprimer l'abonne'
382        $result .= ""
383                .       "<th title='"._T('spiplistes:supprimer_un_abo')."'>"
384                . _T('spiplistes:sup_')
385                . "</th>\n"
386                ;
387                $colspan++;
388               
389                // fin de la ligne de titre
390        $result .= "</tr>\n";
391       
392        // onglets de pagination (si pagination)
393        if ($nombre_abonnes > _SPIPLISTES_LIGNES_PAR_PAGE) {
394                $result .= ""
395                        . "<tr class='onglets'><td colspan='$colspan'>"
396                        ;
397                // onglets : affiche les chiffres
398                $result .= "<!-- onglets chiffres -->\n";
399                for ($j=0; $j < $nombre_abonnes; $j+=_SPIPLISTES_LIGNES_PAR_PAGE) {
400                        if ($j > 0) $result .= " | ";
401                       
402                        if ($j == $debut) {
403                                $result .= "<strong>$j</strong>";
404                        } else {
405                                // si js inactif, $exec_url prend le relais
406                                $exec_url = generer_url_ecrire($script_retour, "id_liste=$id_liste&tri=$tri&debut=$j");
407                                // sinon, ajax animera la boite des abos
408                                $action_url = generer_action_auteur(_SPIPLISTES_ACTION_LISTE_ABONNES
409                                        , $id_liste." ".$j." ".$tri);
410//                              $action_url = parametre_url($action_url, "redirect=$script_retour");
411
412                                $result .= 
413                                        "<a href='"
414                                                . parametre_url($exec_url, 'redirect', $script_retour)
415                                                . "' onclick=\"return AjaxSqueeze('$action_url', '"._SPIPLISTES_ID_PETITE_BOITE."', '$exec_url', event)\">"
416                                                . $j
417                                                . "</a>\n"
418                                                ;
419                        }
420                       
421                        if (($debut > $j)  && ($debut < $j+_SPIPLISTES_LIGNES_PAR_PAGE)) {
422                                $result .= " | <strong>$debut</strong>";
423                        }
424                }
425                $result .= ""
426                        . "</td></tr>\n"
427                        ;
428                       
429                // onglets : affichage des lettres
430                $result .= ""
431                        . "<tr class='onglets'><td colspan='$colspan'>\n"
432                        . "<!-- onglets des lettres -->\n"
433                        ;
434                foreach ($lettres_onglet as $key => $val) {
435                        // si js inactif, $exec_url prend le relais
436                        $exec_url = generer_url_ecrire($script_retour, "id_liste=$id_liste&tri=$tri&debut=$val");
437                        // sinon, ajax animera la boite des abos
438                        $action_url = generer_action_auteur(_SPIPLISTES_ACTION_LISTE_ABONNES
439                                , $id_liste." ".$val." ".$tri);
440                        $result .= 
441                                ($val == $debut)
442                                ? "<strong>$key</strong> "
443                                : "<a href='"
444                                        . parametre_url($exec_url, 'redirect', $exec_url)
445                                        . "' onclick=\"return AjaxSqueeze('$action_url', '"._SPIPLISTES_ID_PETITE_BOITE."', '$exec_url',event)\">"
446                                        . $key
447                                        . "</a>\n"
448                                ;
449                }
450                $result .= ""
451                        . "</td></tr>\n"
452                        ;
453                $result .= ""
454                        //. "<tr height='5'></tr>"
455                        ;
456        }
457       
458        //translate extra field data
459        list(,,,$trad,$val) = explode("|",_T("spiplistes:options")); 
460        $trad = explode(",",$trad);
461        $val = explode(",",$val);
462        $trad_map = array();
463        for($index_map=0;$index_map<count($val);$index_map++) {
464                $trad_map[$val[$index_map]] = $trad[$index_map];
465        }
466
467        $a_title_abo = array(
468                'html' =>  " title=\""._T('spiplistes:abonner_format_html')."\""
469                , 'texte' =>  " title=\""._T('spiplistes:abonner_format_texte')."\""
470                , 'desabo' =>  " title=\""._T('spiplistes:desabonner')."\""
471        );
472
473        $ii = 1;
474       
475        //////////////////////////////////
476        // ici commence la vraie boucle
477
478        // les auteurs (la liste)
479        foreach ($auteurs as $row) {
480                // couleur de ligne
481                $couleur_ligne = (($ii++) % 2) ? '#eee' : '#fff';
482
483                $result .= ""
484                        . "<tr style='background-color: $couleur_ligne'>"
485                        //
486                        // #1: statut auteur (icone)
487                        . "<td>"
488                        . spiplistes_bonhomme_statut($row)
489                        . "</td>\n"
490                        //
491                        // #2: nom
492                        . "<td>"
493                        . "<a href='".generer_url_ecrire(_SPIPLISTES_EXEC_ABONNE_EDIT, "id_auteur=".$row['id_auteur'])."'>".typo($row['nom']).'</a>'
494                        .       (
495                                ($connect_statut == '0minirezo' && $row['restreint'])
496                                ? " &nbsp;<small>"._T('statut_admin_restreint')."</small>"
497                                : ""
498                                )
499                        . "</td>\n"
500                        //
501                        // #3: contact mail
502                        . "<td>"
503                        .       (
504                                (strlen($row['email'])>3)
505                                ? "<a href='mailto:".$row['email']."'>"
506                                        . spiplistes_corrige_img_pack("<img src='"._DIR_IMG_PACK."m_envoi_rtl.gif' alt='' /></a>")
507                                : "<span title='"._T('spiplistes:pas_adresse_email')."'>&bull;</span>"
508                                )
509                        . "</td>\n"
510                        //
511                        // #4: site
512                        . "<td>"
513                        .       (
514                                        (strlen($row['url_site'])>3)
515                                        ? "<a href='".$row['url_site']."' class='spip_out'>"._T('lien_site')."</a>"
516                                        : "&nbsp;"
517                                )
518                        . "</td>\n"
519                        //
520                        // #5: Format si abonne
521                        . "<td>"
522                        .       (
523                                (($abo = $row['format']) && (!empty($abo)) && ($abo != 'non'))
524                                ? $trad_map[$abo]
525                                : "<span title='"._T('spiplistes:sans_abonnement')."'> - </span>"
526                                )
527                        . "</td>\n";
528
529                // si dans la page abonnes_tous, inventaire nb abonnements
530                if($id_liste == 0) {
531                        $result .= ""
532                                // #6: nombre d'abonnement
533                                . "<td>"
534                                .       (
535                                        ($row['compteur'])
536                                        ? "<span class='spiplistes-legend-stitre'>".$row['compteur']."</span>"
537                                        : ""
538                                        )
539                                . "</td>\n";
540                }
541                $result .= ""   
542                        //
543                        // #7: Modifier l'abonnement
544                        . "<td>"
545                        . "<a name='abo".$row['id_auteur']."'></a>"
546                        ;
547
548                $exec_url = generer_url_ecrire($script_retour,"id_liste=$id_liste&debut=$debut&tri=$tri");
549                $action_url = generer_action_auteur('spiplistes_changer_statut_abonne', $row['id_auteur']."-format", $exec_url);
550                $action_url_ajax = generer_action_auteur(_SPIPLISTES_ACTION_CHANGER_STATUT_ABONNE, $row['id_auteur']."-format");
551                $action_url_ajax = parametre_url($action_url_ajax, 'id_liste', $id_liste);
552                $action_url_ajax = parametre_url($action_url_ajax, 'debut', $debut);
553                $action_url_ajax = parametre_url($action_url_ajax, 'tri', $tri);
554               
555                $a_format = array('html' => "", 'texte' => "", 'non' => "");
556                foreach(array_keys($a_format) as $key) {
557                        $legend = ($key == 'non') ? 'format_aucun' : $key;
558                        $a_format[$key] = ""
559                                . "<a ".$a_title_abo[$key]." href='"
560                                        . parametre_url($action_url, 'statut', $key)
561                                        . "' onclick=\"return AjaxSqueeze('"
562                                        . parametre_url($action_url_ajax, 'statut', $key)
563                                                ."', '"._SPIPLISTES_ID_GROSSE_BOITE."', '',event)\">"
564                                        . _T('spiplistes:'.$legend)
565                                        . "</a>\n"
566                                ;               
567                }
568                $result .= ""
569                        . "&nbsp;"
570                                . $a_format[(in_array($abo, array('html','texte')) ? 'non' : 'texte')]
571                                . " | "
572                                . $a_format[(($abo == 'html') ? 'texte' : 'html')]
573                        . "</td>\n"
574                        ;
575               
576                // #8: supprimer l'abonne' de la liste (ne supprime pas dans la table auteurs)
577                $exec_url = generer_url_ecrire($script_retour,"id_liste=$id_liste&debut=$debut&tri=$tri");
578                $action_url = generer_action_auteur('spiplistes_changer_statut_abonne', $row['id_auteur']."-supprimer", $exec_url);
579                $action_url_ajax = generer_action_auteur(_SPIPLISTES_ACTION_CHANGER_STATUT_ABONNE, $row['id_auteur']."-supprimer");
580                $action_url_ajax = parametre_url($action_url_ajax, 'id_liste', $id_liste);
581                $action_url_ajax = parametre_url($action_url_ajax, 'debut', $debut);
582                $action_url_ajax = parametre_url($action_url_ajax, 'tri', $tri);
583                $action_url_ajax = parametre_url($action_url_ajax, 'script_retour', $script_retour);
584                $result .= ""
585                        . "<td class='supprimer_cet_abo'>"
586                        . "<a ".$a_title_abo[$key]." href='$action_url'"
587                        . " onclick=\"return AjaxSqueeze('"
588                                . $action_url_ajax
589                                        ."', '"._SPIPLISTES_ID_GROSSE_BOITE."', '',event)\""
590                                        . " title='"._T('spiplistes:supprimer_cet_abo')."'"
591                                        . ">"
592                                . "&nbsp;<span>"._T('spiplistes:supprimer_cet_abo')."</span>"
593                                . "</a>\n"
594                        . "</td>\n"
595                        ;
596                // fin de la ligne du tableau
597                $result .= "</tr>\n";
598        } //
599       
600        $result .= ""
601                . "</table>\n"
602                ;
603               
604        // fleche de pagination si besoin
605        $debut_suivant = $debut + _SPIPLISTES_LIGNES_PAR_PAGE;
606       
607        if (($debut_suivant < $nombre_abonnes) || ($debut > 0)) {
608               
609                $exec_url = generer_url_ecrire($script_retour, "id_liste=$id_liste&tri=$tri&debut=$debut");
610               
611                $result .= ""
612                        . "<table id='bas' width='100%' border='0'>"
613                        . "<tr bgcolor='white'><td style='text-align: $spip_lang_left'>"
614                        ;
615                if ($debut > 0) {
616                        $debut_prec = strval(max($debut - _SPIPLISTES_LIGNES_PAR_PAGE, 0));
617                        $action_url = generer_action_auteur(_SPIPLISTES_ACTION_LISTE_ABONNES
618                                , $id_liste." ".$debut_prec." ".$tri);
619                        $result .= ""
620                                . "<a href='"
621                                . parametre_url($action_url, 'redirect', $exec_url)
622                                . "' onclick=\"return AjaxSqueeze('$action_url', '"._SPIPLISTES_ID_PETITE_BOITE."', '$exec_url',event)\">"
623                                                . "&lt;&lt;&lt;"
624                                                . "</a>\n"
625                                ;
626                }
627                if($debut_suivant < $nombre_abonnes) {
628                        $action_url = generer_action_auteur(_SPIPLISTES_ACTION_LISTE_ABONNES
629                                , $id_liste." ".$debut_suivant." ".$tri);
630                        $result .= ""
631                                . "</td><td style='text-align: $spip_lang_right'>\n"
632                                . "<!-- fleche suivante -->\n"
633                                . "<a href='"
634                                . parametre_url($action_url, 'redirect', $exec_url)
635                                . "' onclick=\"return AjaxSqueeze('$action_url', '"._SPIPLISTES_ID_PETITE_BOITE."', '$exec_url',event)\">"
636                                                . "&gt;&gt;&gt;"
637                                                . "</a>\n"
638                                ;
639                }
640                $result .= ""
641                        . "</td></tr>\n"
642                        . "</table>\n"
643                        ;
644        }
645       
646        $result .= ""
647                . "</div>\n" // end _SPIPLISTES_ID_PETITE_BOITE
648                ;
649               
650        return($result);
651}
652
653/**
654 * Met en forme le resultat de spiplistes_listes_auteurs_elligibles()
655 * retourne liste des elligibles sous forme de select, selecteur_spip ou recherche
656 * si trop nombreux.
657 *
658 * @version CP-20080603
659 */
660function spiplistes_listes_selectionner_elligibles (
661        $non_abonnes
662        , $nb_non_abonnes
663        , $id_liste
664        , $tri
665        , $script_action
666        , $script_exec
667        , $id_grosse_boite
668        , $args_action = ''
669        , $retour_ajax = false
670) {
671        static $bouton_id;
672        $bouton_id++;
673        $type_ajout = ($script_action == _SPIPLISTES_ACTION_MOD_GERER) ? "mod" : "abo";
674       
675        // si retour de formulaire, les vars sont dans le $_POST
676        $cherche_auteur = trim(urldecode(_request('cherche_auteur')));
677        $icone_loupe = trim(urldecode(_request('icone_loupe')));
678        if(empty($icone_loupe)) {
679                // En ajax, find_in_path() ne trouve pas le chemin correct.
680                // Oblige' de le noter au premier appel
681                // et le transmettre dans le form.
682                $icone_loupe = find_in_path('images/loupe.png');
683        }
684        foreach(array('id_grosse_boite', 'script_exec', 'script_action') as $key) {
685                if(empty($$key)) {
686                        $$key = urldecode(_request($key));
687                }
688        }
689
690        $select_abo = "";
691        $btn_ajouter = ""
692                . "<span><input type='submit' value='"._T('bouton_ajouter')."' "
693                . " onclick=\"return AjaxSqueeze(this.form, '$id_grosse_boite')\" "
694                . " class='fondo' id='btn_ajouter_id_".$type_ajout."'/></span>\n"
695                ;
696        if(empty($args_action)) {
697                $args_action = "id_liste=$id_liste";
698        }
699        $action = generer_action_auteur($script_action, $args_action);
700        $exec = generer_url_ecrire($script_exec, $args_action);
701       
702        // retour de formulaire ?
703        if(!empty($cherche_auteur) && $id_liste) {
704
705                $statut_liste = spiplistes_listes_liste_statut($id_liste);
706               
707                $nb_elligibles = 0;
708                $sql_from = "spip_auteurs AS a";
709                $sql_where = array(
710                        "a.nom LIKE '%$cherche_auteur%'"
711                        , "LENGTH(a.email)"
712                        , "(statut=".sql_quote('0minirezo')." OR statut=".sql_quote('1comite')
713                                // si pas une liste privée, complète le where
714                                . (($statut_liste != _SPIPLISTES_LIST_PRIVATE) ? " OR statut=".sql_quote('6forum') : "")
715                                . ")"
716                        , "NOT EXISTS (SELECT NULL FROM spip_auteurs_listes AS l WHERE l.id_auteur = a.id_auteur AND l.id_liste = ".sql_quote($id_liste).")"
717                        );
718                /*
719                 * la requete ci-dessus en + clair
720                 *//*
721                $sql_query = "SELECT id_auteur,nom,statut FROM spip_auteurs AS a
722                        WHERE nom LIKE '%$cherche_auteur%'
723                                AND LENGTH(a.email)
724                                AND (statut='0minirezo' OR statut='1comite' OR statut='6forum')
725                                AND NOT EXISTS (SELECT NULL FROM spip_auteurs_listes AS l WHERE l.id_auteur = a.id_auteur AND l.id_liste = $id_liste)";
726                */
727               
728                // demande la liste des elligibles recherches
729                $sql_result = sql_select("id_auteur,nom,statut", $sql_from, $sql_where, '', array('statut','nom'));
730
731                if($sql_result) {
732                        $elligibles = array();
733                        while($row = spip_fetch_array($sql_result)) {
734                                if(!isset($elligibles[$row['statut']])) {
735                                        $elligibles[$row['statut']] = array();
736                                }
737                                $elligibles[$row['statut']][$row['id_auteur']] = $row['nom'];
738                                $nb_elligibles++;
739                        }
740                        $select_abo = spiplistes_elligibles_select ($elligibles, $nb_elligibles, $type_ajout) . $btn_ajouter;
741                }
742                else {
743                        spiplistes_sqlerror_log("listes_selectionner_elligibles");
744                }
745               
746        }
747       
748        if(empty($select_abo) && ($nb_non_abonnes <= _SPIPLISTES_SELECT_MIN_AUTEURS)) {
749                $select_abo = spiplistes_elligibles_select ($non_abonnes, $nb_non_abonnes, $type_ajout) . $btn_ajouter;
750        }
751        // au dela de _SPIPLISTES_SELECT_MIN_AUTEURS, afficher la boite de recherche.
752        else {
753                  $select_abo = ""
754                        . "<div>"
755                        . "<label id='spiplistes_l_recherche'>"
756                        // en ajax, http_img_pack() ne retrouve pas son petit
757                        //. http_img_pack("loupe.png", _T('info_rechercher'), "width='26' height='20'")
758                        . "<img src='$icone_loupe' alt='"._T('info_rechercher')."' width='26' height='20' />"
759                        . "<input type='text' name='cherche_auteur' id='in_cherche_auteur' class='fondl' value='' size='20' style='margin:0 4px' />\n"
760                        . "</label>\n"
761                        . "<span><input type='submit' value='"._T('bouton_chercher')."' "
762                                . " id='btn_chercher_id' name='spiplistes_bouton_chercher'"
763                                // recherche ne rafraichit que ce formulaire
764                                . " onclick=\"return AjaxSqueeze(this.form, '"._SPIPLISTES_ID_FROM_ELLIGIBL."$bouton_id')\" "
765                                . " class='fondo' /></span>\n"
766                        . "</div>"
767                        . $select_abo
768                        ;
769        } 
770       
771        $result = ""
772                // si retour ajax, ne pas ajouter le conteneur dans le conteneur ;-)
773                . (($retour_ajax) ? "" : "<div id='"._SPIPLISTES_ID_FROM_ELLIGIBL."$bouton_id'>\n")
774                . "<form style='margin:0px; border:0px' action='$action' method='post'>\n"
775                . "<div id='boite_selection_elligibles_$bouton_id' style='padding:0;margin:0.5em 0 0'>\n"
776                . $select_abo
777                . "</div>\n"
778                . "<input name='arg' type='hidden' value='$id_liste' />\n"
779                . "<input name='action' type='hidden' value='".$script_action."' />\n"
780                . "<input name='redirect' type='hidden' value='".$exec."' />\n"
781                . "<input name='id_liste' type='hidden' value='$id_liste' />\n"
782                . "<input name='tri' type='hidden' value='$tri' />\n"
783                . "<input name='script_action' type='hidden' value='$script_action' />\n"
784                . "<input name='script_exec' type='hidden' value='$script_exec' />\n"
785                . "<input name='id_grosse_boite' type='hidden' value='$id_grosse_boite' />\n"
786                . "<input name='icone_loupe' type='hidden' value='$icone_loupe' />\n"
787                . "</form>\n"
788                . (($retour_ajax) ? "" : "</div>\n")
789                ;
790       
791        return($result);
792}
793
794/**
795 * Renvoie le code HTML pour un sélecteur d'elligibles.
796 *   Un elligible est un auteur qui peut être abonné à une liste
797 *   ou un modérateur.
798 *
799 * @todo vérifier compatibiliét optgroup
800 * @param array $elligibles
801 * @param int $nb_elligibles
802 * @param string $type_ajout
803 * @return string
804 */
805function spiplistes_elligibles_select ($elligibles, $nb_elligibles, $type_ajout = 'abo') {
806        $t_statut = array(
807                  '0minirezo' => _T('info_administrateurs')
808                , '1comite' => _T('info_redacteurs')
809                , '6forum' => _T('info_visiteurs')
810                , '6visiteur' => _T('info_visiteurs')
811        );
812        $legend = ($type_ajout == 'abo') ? 'abon_ajouter' : 'ajouter_un_moderateur';
813        /**
814         * Si un seul, activer plutot la selection par la souris
815         * onchange n'est pas transmis si un seul 'option'
816         */
817        $onevent = ($nb_elligibles == 1) ? "onmousedown" : "onchange";
818        $select_abo = ""
819                . "<span class='verdana1 ajout_legend'>".ucfirst(_T('spiplistes:'.$legend))." : </span>\n"
820                . "<select id='sel_ajouter_id_".$type_ajout."' name='ajouter_id_".$type_ajout."' size='1' class='fondl' style='width:150px;' $onevent=\"$js\">\n";
821        foreach($elligibles as $key => $values) {
822                $select_abo .= "<optgroup label=\"".$t_statut[$key]."\" style='background-color: $couleur_claire;'>\n";
823                foreach($values as $id => $nom) {
824                        $select_abo .= "<option value='$id'>$nom</option>\n";
825                }
826                $select_abo .= "</optgroup>\n";
827        }
828        $select_abo .= ""
829                . "</select>\n"
830                ;
831        return($select_abo);
832}
833
834/**
835 * La boite complete (abonnes et elligibles) enveloppee pour ajax
836 *
837 * @version CP20080603
838 * @param int $id_liste
839 * @param string $statut_liste
840 * @param string $tri
841 * @param int $debut
842 * @param string $script_retour
843 * @return string
844 */
845function spiplistes_listes_boite_abonnements ($id_liste, $statut_liste, $tri, $debut, $script_retour) {
846
847        $boite_abonnements = ""
848                . "<div id='" . _SPIPLISTES_ID_GROSSE_BOITE . "' class='verdana1'>\n"
849                . spiplistes_listes_boite_abonnes($id_liste, $statut_liste, $tri, $debut, $script_retour)
850                . spiplistes_listes_boite_elligibles ($id_liste, $statut_liste, $tri, $debut)
851                . "</div>\n"
852                ;
853        return($boite_abonnements);
854}
855
856/**
857 * Boite construction des elligibles. Appelee aussi via action/ajax
858 *
859 * @param int $id_liste
860 * @param string $statut_liste
861 * @param string $tri
862 * @param int $debut
863 * @version CP-20081117
864 * @return string
865 */
866function spiplistes_listes_boite_elligibles ($id_liste, $statut_liste, $tri, $debut) {
867       
868        $result = '';
869       
870        // proposer les elligibles si id_liste (liste_gerer)
871        if($id_liste > 0) {
872                list($elligibles, $nb_elligibles) = spiplistes_listes_auteurs_elligibles($id_liste, $statut_liste);
873                if($nb_elligibles > 0) {
874                        $result = spiplistes_listes_selectionner_elligibles(
875                                $elligibles
876                                , $nb_elligibles
877                                , $id_liste
878                                , $tri
879                                , _SPIPLISTES_ACTION_ABONNER_AUTEUR
880                                , _SPIPLISTES_EXEC_LISTE_GERER
881                                , _SPIPLISTES_ID_GROSSE_BOITE
882                        );
883                }
884        }
885        return($result);
886}
887
888
889/**
890 * Boite des moderateurs
891 *
892 * @version CP-20080610
893 * @param int $id_liste
894 * @param string $script_retour
895 * @param string $id_conteneur
896 * @return string
897 */
898function spiplistes_listes_boite_moderateurs ($id_liste, $script_retour, $id_conteneur) 
899{
900        $boite_moderateurs = "";
901        $sql_result = sql_select(
902                "a.id_auteur,a.statut,a.nom"
903                , array(
904                        "spip_auteurs AS a"
905                        , "spip_auteurs_mod_listes AS m"
906                )
907                , array(
908                        "a.id_auteur=m.id_auteur"
909                        , "m.id_liste=".sql_quote($id_liste)
910                )
911        );
912        $ii = 1;
913        $faire = 'supprimer';
914        while($row = sql_fetch($sql_result)) {
915                $id_auteur = $row['id_auteur'];
916                $exec_url = generer_url_ecrire($script_retour, "id_liste=$id_liste&id_auteur=$id_auteur&faire=$faire");
917                $action_url = generer_action_auteur(_SPIPLISTES_ACTION_MOD_GERER, "$id_liste $id_auteur $faire");
918                $couleur_ligne = (($ii++) % 2) ? '#eee' : '#fff';
919                $boite_moderateurs .= ""
920                        . "<li style='background-color: $couleur_ligne'>\n"
921                        . "<span class='statut-nom'>".spiplistes_bonhomme_statut($row)
922                                . "<span class='nom'>&nbsp;".$row['nom'] . "</span>\n"
923                        . "</span>\n"
924                        . "<a class='supprim' href='"
925                                                . parametre_url($exec_url, 'redirect', $exec_url)
926                                                . "' onclick=\"return AjaxSqueeze('$action_url','$id_conteneur','$exec_url',event)\">"
927                                                . _T('spiplistes:sup_mod')
928                                                . "</a>\n"
929                        . "</li>\n"
930                        ;
931        }
932        if(strlen($boite_moderateurs))
933        {
934                $boite_moderateurs = ""
935                        . "<ul class='liste-moderateurs'>\n"
936                        . $boite_moderateurs
937                        . "</ul>\n"
938                        ;
939       
940        }
941        // demande la liste des elligibles
942        list($elligibles, $nb_elligibles) = spiplistes_listes_auteurs_elligibles($id_liste, $statut_liste, "moderer");
943        if($nb_elligibles > 0) {
944                $boite_moderateurs .= spiplistes_listes_selectionner_elligibles(
945                        $elligibles
946                        , $nb_elligibles
947                        , $id_liste
948                        , 'nom'
949                        , _SPIPLISTES_ACTION_MOD_GERER
950                        , $script_retour
951                        , 'grosse_boite_moderateurs'
952                        , "$id_liste 0 ajouter"
953                        );
954        }
955        $boite_moderateurs = ""
956                . "<div id='grosse_boite_moderateurs' class='verdana1' style='width:100%;height:auto'>\n"
957                . $boite_moderateurs
958                . "</div>\n"
959                ;
960        return($boite_moderateurs);
961} //
962
963/**
964 * {@link spiplistes_corrige_img_pack}
965 */
966function spiplistes_bonhomme_statut ($row) {
967        return(spiplistes_corrige_img_pack(bonhomme_statut($row)));
968}
969
970/**
971 * Lorsqu'appele par ?action (ajax), perd la position
972 * corrige le lien relatif
973 *
974 * @param string $img
975 * @return string
976 */
977function spiplistes_corrige_img_pack ($img) {
978        if(preg_match(",^<img src='dist/images,", $img)) {
979                $img = preg_replace(",^<img src='dist/images,", "<img src='../dist/images", $img);
980        }
981        return($img);
982}
983
Note: See TracBrowser for help on using the repository browser.