source: spip-zone/_plugins_/acs/inc/acs_editer_admins.php @ 48965

Last change on this file since 48965 was 48965, checked in by webmaster@…, 10 years ago

ACS:

  • liste des widgets en partie privée : classement des composants en deux blocs: cadres et éléments.
  • suppression de exec/acs_page_source.php (devenu inutile).
  • formulaire administration enrichi d'un accès direct à l'édition de la page et du bouton inclusions.
  • choix du positionnement du formulaire administration de SPIP.
  • passage en ajax du bloc de configuration d'ACS (Onglet Administration).
  • nouvelle option de configuration : Désactiver le cache de SPIP.
  • nouvelle aide contextuelle
  • restauration du fonctionnement de controleurs/var.php suite au passage des controleurs en objets.


Cat :

  • évolution de l'usage de la balise #ACS_CHEMIN (dans tous les fichiers où elle est utilisée)
  • Carte: correction bug sur affichage des sous-rubriques géoreferencées. Correction d'un bug sur les popups ombrées introduit par le changement de comportement de la balise #ACS_CHEMIN.
  • Fond/entete: filtre textebrut sur le titre des pages.
  • Keys: nouvelles variables arrondi de bordure et ombre.
File size: 15.9 KB
Line 
1<?php
2#              ACS
3#          (Plugin Spip)
4#     http://acs.geomaticien.org
5#
6# Copyright Daniel FAIVRE, 2007-2011
7# Copyleft: licence GPL - Cf. LICENCES.txt
8
9// from spip 1.9.2.c, 1.9.2d
10
11if (!defined("_ECRIRE_INC_VERSION")) return;
12
13include_spip('inc/presentation');
14include_spip('inc/actions');
15include_spip('inc/acs_groups');
16
17// L'ajout d'un admin se fait par mini-navigateur dans la fourchette:
18define('_SPIP_SELECT_MIN_ADMINS', 10); // en dessous: balise Select
19define('_SPIP_SELECT_MAX_ADMINS', 100); // au-dessus: saisie + return
20
21if (!is_callable('sql_count')) { // spip < 1.9.3
22  function sql_count($res) {
23    return spip_num_rows($res);
24  }
25}
26if (!is_callable('sql_fetch')) { // spip < 1.9.3
27  function sql_fetch($res) {
28    return spip_fetch_array($res);
29  }
30}
31
32function acs_ajax_action_greffe($div, $id, $res) {
33  global $spip_version_code;
34
35  if($spip_version_code >= 1.93)
36    return ajax_action_greffe("acs_editer_admins", $id, $res);
37  else
38    return ajax_action_greffe("acs_editer_admins-$id", $res);
39}
40
41function acs_bloc_depliable($flag, $id, $contenu) {
42  if (is_callable('debut_block_depliable')) {
43    return debut_block_depliable($flag, $id).$contenu.fin_block();
44  }
45  else { // spip < 1.9.3
46    return ($flag === 'ajax' ? debut_block_visible("admins$type$id") : debut_block_invisible("admins$type$id")).
47    $contenu.
48    fin_block();
49  }
50}
51function acs_bouton_bloc_depliable($titre_boite, $flag, $id) {
52  if (is_callable('bouton_block_depliable')) {
53    $r = bouton_block_depliable($titre_boite, $flag ?($flag === 'ajax'):1, $id);
54  }
55  else { // spip < 1.9.3
56    $r = (!$flag
57       ? ''
58       : (($flag === 'ajax')
59      ? bouton_block_visible("admins$type$id")
60      : bouton_block_invisible("admins$type$id")))
61  . $titre_boite;
62  }
63  return '<div style="text-align:'.$GLOBALS['spip_lang_left'].'">'.$r.'</div>';
64}
65
66
67
68// doc: acs_editer_admins($type, $id, $flag_editable, $cherche_auteur, $ids, $titre_boite = NULL, $script_edit_objet = NULL)
69// (ça ressemble à http://doc.spip.org/@inc_editer_auteurs_dist)
70// $id est l'id de l'objet à éditer. pour ACS, c'est sans importance puisque l'objet est ACS lui-même
71// Cette usine à gaz spip-ajax sert seulement à affecter à ACS_ADMINS la liste des admins ACS autorisés ...
72function inc_acs_editer_admins($type, $id, $flag, $cherche_auteur, $ids, $titre_boite = NULL, $script_edit_objet = NULL,  $icon="auteur-24.gif") {
73        global $options;
74
75  acs_log("inc_acs_editer_admins($type, $id, $flag, $cherche_auteur, $ids, $titre_boite, $script_edit_objet)");
76
77        $arg_ajax = "&id_{$type}=$id";
78        if ($script_edit_objet===NULL) $script_edit_objet = $type.'s';
79        if ($titre_boite===NULL)
80                $titre_boite = _T('texte_auteurs'). aide("artauteurs");
81        else
82                $arg_ajax.= "&titre=".urlencode($titre_boite);
83        $aff_les_admins = afficher_admins_objet($type, $id, $flag, "", $script_edit_objet, $arg_ajax);
84
85        //if ($flag AND $options == 'avancees') {
86                $futurs = ajouter_admins_objet($type, $id, "",$script_edit_objet, $arg_ajax);
87        //} else $futurs = '';
88
89        return editer_admins_objet($type, $id, $flag, $cherche_auteur, $ids, $aff_les_admins, $futurs, $titre_boite,$script_edit_objet, $arg_ajax, $icon, $extras);
90}
91
92// http://doc.spip.org/@editer_admins_objet
93function editer_admins_objet($type, $id, $flag, $cherche_auteur, $ids, $les_auteurs, $futurs, $titre_boite, $script_edit_objet, $arg_ajax, $icon)
94{
95        global $spip_lang_left, $spip_lang_right, $options;
96
97  acs_log("inc_acs_editer_admins_objet($type, $id, $flag, cherche_auteur, $ids, les_auteurs, futurs, $titre_boite, $script_edit_objet, $arg_ajax)");
98
99//
100// Ajouter un admin
101
102        if ($flag)
103                $res = $futurs;
104        else
105                $res = '';
106
107  $bouton = acs_bouton_bloc_depliable($titre_boite, $flag, "admins$type$id");
108  if ($id > 0){
109    $formpages = '<form name="acs_pages_'.$id.'" action="?exec=acs" method="post"><input type="hidden" name="onglet" value="adm"><input type="hidden" name="changer_pages" value="oui"><input type="hidden" name="group" value="'.$id.'"><table style="width:100%;" cellpadding="2px"><tr style="vertical-align: top;"><td style="width: 20%; text-align:'.$GLOBALS['spip_lang_right'].'">'._T('acs:locked_pages').' : </td><td style="width:75%"> <input name="pages" type="text" class="formc" value="'.acs_pages($id).'" style="width:100%" /> </td><td style="text-align:'.$GLOBALS['spip_lang_right'].'"> <input type="submit"  name="'._T('bouton_valider').
110        '" value="'._T('bouton_valider').'" class="fondo"> </td></tr></table></form>';
111  }
112  else
113    $formpages = _T('acs:locked_pages').' : '.implode(', ', $GLOBALS['ACS_ENFER']);
114
115  $formpages = '<div>'.$formpages.'</div>';
116        $res = '<div style="text-align:'.$GLOBALS['spip_lang_left'].'">'
117        .debut_cadre_enfonce($icon, true, "", $bouton)
118        .$les_auteurs
119  .acs_bloc_depliable(($flag === 'ajax'), "admins$type$id", $formpages.$res)
120        .fin_cadre_enfonce(true)
121  .'</div>';
122
123        return acs_ajax_action_greffe("acs_editer_admins", $id, $res);
124}
125
126// http://doc.spip.org/@determiner_admins_objet
127function determiner_admins_objet($type, $id, $cond='', $limit='')
128{
129        $les_auteurs = array();
130        if (!preg_match(',^[a-z]*$,',$type)) return $les_auteurs;
131
132  if ($id == 0) {
133    // Add author 1 as default ACS admin
134    if (!isset($GLOBALS['meta']['ACS_ADMINS']) || !$GLOBALS['meta']['ACS_ADMINS']) {
135      ecrire_meta('ACS_ADMINS', '1');
136      ecrire_metas();
137    }
138    $ids = $GLOBALS['meta']['ACS_ADMINS'];
139  }
140  else {
141    $ids = implode(',',acs_members(acs_grid($id)));
142  }
143
144        if ($ids) $result = spip_query("SELECT id_auteur FROM spip_auteurs WHERE id_auteur IN ($ids) and statut='0minirezo'"
145        . ($cond ? " AND $cond" : '')
146        . ($limit? " LIMIT $limit": '')
147        );
148
149        return $result;
150}
151// http://doc.spip.org/@determiner_non_auteurs
152function determiner_non_admins($type, $id, $cond_les_auteurs, $order)
153{
154        $cond = '';
155        $res = determiner_admins_objet($type, $id, $cond_les_auteurs);
156        if (sql_count($res)<200){ // probleme de performance au dela, on ne filtre plus
157                while ($row = sql_fetch($res))
158                        $cond .= ",".$row['id_auteur'];
159        }
160        if (strlen($cond))
161                $cond = "id_auteur NOT IN (" . substr($cond,1) . ') AND ';
162        return spip_query("SELECT id_auteur, nom, email, statut FROM spip_auteurs WHERE $cond statut='0minirezo'");
163}
164
165// http://doc.spip.org/@afficher_admins_objet
166function afficher_admins_objet($type, $id, $flag_editable, $cond_les_auteurs, $script_edit, $arg_ajax)
167{
168        global $connect_statut, $options,$connect_id_auteur, $spip_display;
169
170  acs_log("inc/acs_editer_admins: afficher_admins_objet(type=$type, id=$id, flag_editable=$flag_editable, cond_les_auteurs=$cond_les_auteurs, script_edit=$script_edit, arg_ajax=$arg_ajax)");
171
172        $les_auteurs = array();
173        if (!preg_match(',^[a-z]*$,',$type)) return $les_auteurs;
174
175        $result = determiner_admins_objet($type,$id,$cond_les_auteurs);
176        $cpt = sql_count($result);
177
178  if (!defined('_TRANCHES'))
179    define('_TRANCHES', 10); // Compat 2.0
180   
181        $tmp_var = "acs_editer_admins-$id";
182        $nb_aff = floor(1.5 * _TRANCHES);
183        if ($cpt > $nb_aff) {
184                $nb_aff = _TRANCHES;
185                $tranches = afficher_tranches_requete($cpt, $tmp_var, generer_url_ecrire('acs_editer_admins',$arg_ajax), $nb_aff);
186        } else $tranches = '';
187
188        $deb_aff = _request($tmp_var);
189        $deb_aff = ($deb_aff !== NULL ? intval($deb_aff) : 0);
190
191        $limit = (($deb_aff < 0) ? '' : "$deb_aff, $nb_aff");
192        $result = determiner_admins_objet($type,$id,$cond_les_auteurs,$limit);
193
194        // charger ici meme si ps d'auteurs
195        // car inc_formater_auteur peut aussi redefinir determiner_non_auteurs qui sert plus loin
196        if (!$formater_auteur = charger_fonction("formater_auteur_$type", 'inc',true))
197                $formater_auteur = charger_fonction('formater_auteur', 'inc');
198
199        if (!sql_count($result)) return '';
200
201        $table = array();
202
203        while ($row = sql_fetch($result)) {
204                $id_auteur = $row['id_auteur'];
205                $vals = $formater_auteur($id_auteur);
206
207    $gr = ($id == 0) ? _T('acs:acs') : acs_grid($id);
208                if ($flag_editable AND ($connect_id_auteur != $id_auteur OR $connect_statut == '0minirezo')) {
209                        $vals[] =  ajax_action_auteur('acs_editer_admins', "$id,$type,-$id_auteur", $script_edit, "id_{$type}=$id", ((($id_auteur != 1) || ($id > 0)) ? array(_T('acs:lien_retirer_admin')."&nbsp;".$gr."&nbsp;".http_img_pack('croix-rouge.gif', "X", " class='puce' style='vertical-align: bottom;'")): array() ),$arg_ajax);
210                } else  $vals[] = "";
211                $table[] = $vals;
212        }
213
214        $largeurs = array('14', '', '', '', '', '');
215        $styles = array('arial11', 'arial2', 'arial11', 'arial11', 'arial11', 'arial1');
216
217        $t = afficher_liste($largeurs, $table, $styles);
218        if ($spip_display != 4)
219          $t = $tranches
220                . "<table width='100%' cellpadding='3' cellspacing='0' border='0'>"
221            . $t
222            . "</table>";
223        return "<div class='liste'>$t</div>\n";
224}
225
226
227// http://doc.spip.org/@ajouter_auteurs_objet
228function ajouter_admins_objet($type, $id, $cond_les_auteurs,$script_edit, $arg_ajax)
229{
230        if (!$determiner_non_admins = charger_fonction('determiner_non_admins'.$type,'inc',true))
231                $determiner_non_admins = 'determiner_non_admins';
232        $query = $determiner_non_admins($type, $id, $cond_les_auteurs, "statut, nom");
233
234        if (!$num = sql_count($query)) return '';
235
236        $js = "findObj_forcer('valider_ajouter_admin_$id').style.visibility='visible';";
237
238        $text = "<span class='verdana1'><b>"
239        . _T('titre_cadre_ajouter_auteur')
240        . "</b></span>\n"; // spip translation : less to do ;-)
241
242  $sel = '';
243        if ($num <= _SPIP_SELECT_MIN_ADMINS){
244                $sel .= "$text<select name='nouv_admin_$id' size='1' style='width:150px;' class='fondl' onchange=\"$js\">" .
245                   objet_admin_select($query) .
246                   "</select>";
247                $clic = _T('bouton_ajouter');
248        } else if  ((_SPIP_AJAX < 1) OR ($num >= _SPIP_SELECT_MAX_ADMINS)) {
249      $sel .= "$text <input type='text' name='cherche_admin' onclick=\"$js\" class='fondl' value='' size='20' />";
250                  $clic = _T('bouton_chercher');
251        } else {
252            $sel .= selecteur_admin_ajax($type, $id, $js, $text);
253            $clic = _T('bouton_ajouter');
254        }
255
256        return ajax_action_post('acs_editer_admins', "$id,$type", $script_edit, "id_{$type}=$id", $sel, $clic, 'class="fondo visible_au_chargement" id="valider_ajouter_admin_'.$id.'" style="float:right"', "", $arg_ajax);
257}
258
259if (!is_callable('afficher_tranches_requete')) {
260  // http://doc.spip.org/@afficher_tranches_requete from Spip 1.9.2d (Deleted from 2.0)
261  function afficher_tranches_requete($num_rows, $tmp_var, $url='', $nb_aff = 10, $old_arg=NULL) {
262    static $ancre = 0;
263    global $browser_name, $spip_lang_right, $spip_display;
264    if ($old_arg!==NULL){ // eviter de casser la compat des vieux appels $cols_span ayant disparu ...
265      $tmp_var = $url;    $url = $nb_aff; $nb_aff=$old_arg;
266    }
267 
268    $deb_aff = intval(_request($tmp_var));
269    $ancre++;
270    $self = self();
271    $ie_style = ($browser_name == "MSIE") ? "height:1%" : '';
272 
273    $texte = "\n<div style='position: relative;$ie_style; background-color: #dddddd; border-bottom: 1px solid #444444; padding: 2px;' class='arial1' id='a$ancre'>";
274    $on ='';
275 
276    for ($i = 0; $i < $num_rows; $i += $nb_aff){
277      $deb = $i + 1;
278      $fin = $i + $nb_aff;
279      if ($fin > $num_rows) $fin = $num_rows;
280      if ($deb > 1) $texte .= " |\n";
281      if ($deb_aff + 1 >= $deb AND $deb_aff + 1 <= $fin) {
282        $texte .= "<b>$deb</b>";
283      }
284      else {
285        $script = parametre_url($self, $tmp_var, $deb-1);
286        if ($url) {
287          $on = "\nonclick=\"return charger_id_url('"
288          . $url
289          . "&amp;"
290          . $tmp_var
291          . '='
292          . ($deb-1)
293          . "','"
294          . $tmp_var
295          . '\');"';
296        }
297        $texte .= "<a href=\"$script#a$ancre\"$on>$deb</a>";
298      }
299    }
300 
301    $style = " class='arial2' style='border-bottom: 1px solid #444444; position: absolute; top: 1px; $spip_lang_right: 15px;'";
302 
303    $script = parametre_url($self, $tmp_var, -1);
304    if ($url) {
305          $on = "\nonclick=\"return charger_id_url('"
306          . $url
307          . "&amp;"
308          . $tmp_var
309          . "=-1','"
310          . $tmp_var
311          . '\');"';
312    }
313    $l = htmlentities(_T('lien_tout_afficher'));
314    $texte .= "<a$style\nhref=\"$script#a$ancre\"$on><img\nsrc='". _DIR_IMG_PACK . "plus.gif' title=\"$l\" alt=\"$l\" /></a>";
315 
316 
317    $texte .= "</div>\n";
318 
319    return $texte;
320  }
321  // http://doc.spip.org/@afficher_liste
322  function afficher_liste($largeurs, $table, $styles = '') {
323    global $spip_display;
324 
325    if (!is_array($table)) return "";
326 
327    if ($spip_display != 4) {
328      $res = '';
329      foreach ($table as $t) {
330        $res .= afficher_liste_display_neq4($largeurs, $t, $styles);
331      }
332    } else {
333      $res = "\n<ul style='text-align: $spip_lang_left; background-color: white;'>";
334      foreach ($table as $t) {
335        $res .= afficher_liste_display_eq4($largeurs, $t, $styles);
336      }
337      $res .= "\n</ul>";
338    }
339 
340    return $res;
341  }
342 
343  // http://doc.spip.org/@afficher_liste_display_neq4
344  function afficher_liste_display_neq4($largeurs, $t, $styles = '') {
345    global $spip_lang_left,$browser_name;
346    if (!is_array($t) or !count($t)) return "";
347 
348    $evt = (preg_match(",msie,i", $browser_name) ? " onmouseover=\"changeclass(this,'tr_liste_over');\" onmouseout=\"changeclass(this,'tr_liste');\"" :'');
349 
350    reset($largeurs);
351    if ($styles) reset($styles);
352    $res ='';
353    while (list(, $texte) = each($t)) {
354      $style = $largeur = "";
355      list(, $largeur) = each($largeurs);
356      if ($styles) list(, $style) = each($styles);
357      if (!trim($texte)) $texte .= "&nbsp;";
358      $res .= "\n<td" .
359        ($largeur ? (" style='width: $largeur" ."px;'") : '') .
360        ($style ? " class=\"$style\"" : '') .
361        ">" . lignes_longues($texte) . "\n</td>";
362    }
363 
364    return "\n<tr class='tr_liste'$evt>$res</tr>";
365  }
366 
367  // http://doc.spip.org/@afficher_liste_display_eq4
368  function afficher_liste_display_eq4($largeurs, $t, $styles = '') {
369    global $spip_lang_left;
370    if (!is_array($t) or !count($t)) return "";
371 
372    $res = "\n<li>";
373    reset($largeurs);
374    if ($styles) reset($styles);
375    while (list(, $texte) = each($t)) {
376      $style = $largeur = "";
377      list(, $largeur) = each($largeurs);
378      if (!$largeur) $res .= $texte." ";
379    }
380    $res .= "</li>\n";
381    return $res;
382  }
383}
384// http://doc.spip.org/@objet_auteur_select
385function objet_admin_select($result)
386{
387        global $couleur_claire, $connect_statut ;
388
389        $statut_old = $premiere_old = $res = '';
390
391        while ($row = spip_fetch_array($result)) {
392                $id_auteur = $row["id_auteur"];
393                $nom = $row["nom"];
394                $email = $row["email"];
395                $statut = $row["statut"];
396
397                $statut=str_replace("0minirezo", _T('info_administrateurs'), $statut);
398                $statut=str_replace("1comite", _T('info_redacteurs'), $statut);
399                $statut=str_replace("6visiteur", _T('info_visiteurs'), $statut);
400
401                $premiere = strtoupper(substr(trim($nom), 0, 1));
402
403                if ($connect_statut != '0minirezo')
404                        if ($p = strpos($email, '@'))
405                                  $email = substr($email, 0, $p).'@...';
406                if ($email)
407                        $email = " ($email)";
408
409                if ($statut != $statut_old) {
410                        $res .= "\n<option value=\"x\" />";
411                        $res .= "\n<option value=\"x\" style='background-color: $couleur_claire;'> $statut</option>";
412                }
413
414                if ($premiere != $premiere_old AND ($statut != _T('info_administrateurs') OR !$premiere_old))
415                        $res .= "\n<option value=\"x\" />";
416
417                $res .= "\n<option value=\"$id_auteur\">&nbsp;&nbsp;&nbsp;&nbsp;" . supprimer_tags(couper(typo("$nom$email"), 40)) . '</option>';
418                $statut_old = $statut;
419                $premiere_old = $premiere;
420        }
421
422        return $res;
423}
424
425// http://doc.spip.org/@selecteur_auteur_ajax
426function selecteur_admin_ajax($type, $id, $js, $text)
427{
428  include_spip('inc/chercher_rubrique');
429  $url = generer_url_ecrire('acs_selectionner_admin', "admid=$id");
430  acs_log("inc/acs_editer_admins selecteur_admin_ajax($type, $id, $js, $text)");
431 
432  // doc spip: construire_selecteur($url, $js, $idom, $name, $init='', $id=0)
433  // construit un bloc comportant une icone clicable avec image animee a cote
434  // pour charger en Ajax du code a mettre sous cette icone.
435  // Attention: changer le onclick si on change le code Html.
436  // (la fonction JS charger_node ignore l'attribut id qui ne sert en fait pas;
437  // getElement en mode Ajax est trop couteux).
438  return $text . construire_selecteur($url, $js, 'selection_admin_'.$id, 'nouv_admin_'.$id, ' type="hidden"', $id);
439}
440
441?>
Note: See TracBrowser for help on using the repository browser.