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

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

suite des index de lang pour SPIP 3 (fin)

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