[SPIP] +2.1.12
[velocampus/web/www.git] / www / ecrire / inc / instituer_auteur.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2011 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 if (!defined('_ECRIRE_INC_VERSION')) return;
14
15 include_spip('inc/actions');
16 include_spip('inc/texte');
17 include_spip('inc/layer');
18 include_spip('inc/presentation');
19 include_spip('inc/autoriser');
20
21
22 // affiche le statut de l'auteur dans l'espace prive
23 // les admins voient et peuvent modifier les droits d'un auteur
24 // les admins restreints les voient mais
25 // ne peuvent les utiliser que pour mettre un auteur a la poubelle
26
27 // http://doc.spip.org/@inc_instituer_auteur_dist
28 function inc_instituer_auteur_dist($auteur, $modif = true) {
29
30 if (!$id_auteur = intval($auteur['id_auteur'])) {
31 $statut = _STATUT_AUTEUR_CREATION;
32 } else
33 $statut = $auteur['statut'];
34
35 $ancre = "instituer_auteur-" . intval($id_auteur);
36
37 $menu = $modif ? choix_statut_auteur($statut, $id_auteur, "$ancre-aff"):traduire_statut_auteur($auteur['statut']);
38 if (!$menu) return '';
39
40 $label = $modif?'label':'b';
41 $res = "<$label>" . _T('info_statut_auteur')."</$label> " . $menu;
42
43 if ($modif)
44 $res .= editer_choix_webmestre($auteur);
45 else
46 $res .= afficher_webmestre($auteur);
47
48 // Prepare le bloc des rubriques pour les admins eventuellement restreints ;
49 // si l'auteur n'est pas '0minirezo', on le cache, pour pouvoir le reveler
50 // en jquery lorsque le menu de statut change
51 $vis = in_array($statut, explode(',', _STATUT_AUTEUR_RUBRIQUE))
52 ? ''
53 : " style='display: none'";
54
55 if ($menu_restreints = choix_rubriques_admin_restreint($auteur, $modif))
56 $res .= "<div class='instituer_auteur' "
57 . ($modif?"id='$ancre-aff'":'') // seul le bloc en modification necessite un id
58 . "$vis>"
59 . $menu_restreints
60 . "</div>";
61
62 return $res;
63 }
64
65
66 function afficher_webmestre($auteur){
67 if (autoriser('webmestre','',0,$auteur['id_auteur']))
68 return "<p>"._T("info_admin_webmestre")."</p>";
69 return "";
70 }
71
72 function editer_choix_webmestre($auteur){
73 $res = "";
74 $style = "";
75 if (!autoriser('modifier', 'auteur', $auteur['id_auteur'],
76 null, array('webmestre' => '?'))){
77 $res = afficher_webmestre($auteur);
78 }
79 else {
80 $res = "<input type='checkbox' class='checkbox' name='webmestre' id='webmestre' value='oui'"
81 . ($auteur['webmestre']=='oui'?" checked='checked'":"")
82 . " />"
83 . "<label for='webmestre'>"
84 . _T("info_admin_statuer_webmestre")
85 . "</label>";
86
87 $res .= "<input type='hidden' name='saisie_webmestre' value='1' />";
88 // visible ou pas ?
89 if ($auteur['statut']!='0minirezo')
90 $style=" style='display:none;'";
91 }
92 return "<div class='choix' id='choix-webmestre'$style>$res</div>";
93 }
94
95 // http://doc.spip.org/@traduire_statut_auteur
96 function traduire_statut_auteur($statut){
97 $recom = array(
98 "info_administrateurs" => 'item_administrateur_2',
99 "info_redacteurs" => 'intem_redacteur',
100 "info_visiteurs" => 'item_visiteur',
101 "5poubelle" => 'texte_statut_poubelle', // bouh
102 );
103 if (isset($recom[$statut]))
104 return _T($recom[$statut]);
105
106 // retrouver directement par le statut sinon
107 if ($t = array_search($statut, $GLOBALS['liste_des_statuts'])){
108 if (isset($recom[$t]))
109 return _T($recom[$t]);
110 return _T($t);
111 }
112
113 return '';
114 }
115
116 // Menu de choix d'un statut d'auteur
117 // http://doc.spip.org/@choix_statut_auteur
118 function choix_statut_auteur($statut, $id_auteur, $ancre) {
119
120 // Le menu doit-il etre actif ?
121 if (!autoriser('modifier', 'auteur', $id_auteur,
122 null, array('statut' => '?')))
123 return '';
124
125 // A-t-on le droit de promouvoir cet auteur comme admin
126 // et y a-t-il des visiteurs ?
127
128 $droits = $GLOBALS['liste_des_statuts'];
129
130 if (!autoriser('modifier', 'auteur', $id_auteur,
131 null, array('statut' => '0minirezo')))
132 unset($droits["info_administrateurs"]);
133
134 if (!avoir_visiteurs() AND $statut!==$droits['info_visiteurs'])
135 unset($droits['info_visiteurs']);
136
137 $menu = '';
138 foreach($droits as $k => $v) {
139 if (($v != '5poubelle') && ($k = traduire_statut_auteur($v)))
140 $menu .= mySel($v, $statut, $k);
141 }
142
143 // Chercher les statuts non standards
144 $l = $GLOBALS['liste_des_statuts'];
145 $l[]= 'nouveau';
146 $q = sql_allfetsel("statut", 'spip_auteurs', sql_in('statut', $l, 'NOT'), "statut");
147
148 $hstatut = htmlentities($statut);
149 foreach ($q as $r) {
150 $nom = htmlentities($r['statut']);
151 $t = traduire_statut_auteur($nom);
152 $t = !$t ? (_T('info_statut_auteur_autre') . ' ' . $nom) : $t;
153 $menu .= mySel($nom, $hstatut, $t);
154 }
155
156 // Ajouter l'option "nouveau" si l'auteur n'est pas confirme
157 if ($statut == 'nouveau')
158 $menu .= mySel('nouveau',$statut,_T('info_statut_auteur_a_confirmer'));
159
160 $statut_rubrique = str_replace(',', '|', _STATUT_AUTEUR_RUBRIQUE);
161 return "<select class='select' name='statut' id='statut' size='1'
162 onchange=\"(this.options[this.selectedIndex].value.match(/^($statut_rubrique)\$/))?jQuery('#$ancre:hidden').slideDown():jQuery('#$ancre:visible').slideUp();"
163 . "(this.options[this.selectedIndex].value=='0minirezo')?jQuery('#choix-webmestre:hidden').slideDown():jQuery('#choix-webmestre:visible').slideUp();\">"
164 . $menu
165 . "\n<option" .
166 mySel("5poubelle",$statut) .
167 " class='danger'>&gt; "
168 ._T('texte_statut_poubelle') .
169 '</option>'
170 . "</select>\n";
171 }
172
173 // http://doc.spip.org/@afficher_rubriques_admin_restreintes
174 function afficher_rubriques_admin_restreintes($auteur, $modif = true){
175 global $spip_lang;
176
177 $id_auteur = intval($auteur['id_auteur']);
178
179 $result = sql_select("rubriques.id_rubrique, " . sql_multi ("titre", $spip_lang) . "", "spip_auteurs_rubriques AS lien LEFT JOIN spip_rubriques AS rubriques ON lien.id_rubrique=rubriques.id_rubrique", "lien.id_auteur=$id_auteur", "", "multi");
180
181 $menu = $restreint = '';
182 // L'autorisation de modifier les rubriques restreintes
183 // est egale a l'autorisation de passer en admin
184 $modif &= autoriser('modifier', 'auteur', $id_auteur, null, array('statut' => '0minirezo'));
185 while ($row_admin = sql_fetch($result)) {
186 $id_rubrique = $row_admin["id_rubrique"];
187 $h = generer_url_ecrire('naviguer', "id_rubrique=$id_rubrique");
188 $restreint .= "\n<li id='rubrest_$id_rubrique'>"
189 . ($modif
190 ? "<input type='checkbox' checked='checked' name='restreintes[]' value='$id_rubrique' />\n"
191 : ''
192 )
193 . "<a href='$h'>"
194 . typo($row_admin["multi"])
195 . "</a>"
196 . '</li>';
197 }
198
199 if (!$restreint) {
200 $phrase = _T('info_admin_gere_toutes_rubriques')."\n";
201 } else {
202
203 $menu = "<ul id='liste_rubriques_restreintes' style='list-style-image: url("
204 . chemin_image("rubrique-12.gif")
205 . ")'>"
206 . $restreint
207 . "</ul>\n";
208
209 // Il faut un element zero pour montrer qu'on a l'interface
210 // sinon il est impossible de deslectionner toutes les rubriques
211 if ($modif)
212 $menu .= "<input type='hidden' name='restreintes[]' value='0' />\n";
213 $phrase = _T('info_admin_gere_rubriques');
214 }
215
216 if ($auteur['statut'] != '0minirezo')
217 $phrase = '';
218
219 return "<p>$phrase</p>\n$menu";
220 }
221
222 // http://doc.spip.org/@choix_rubriques_admin_restreint
223 function choix_rubriques_admin_restreint($auteur, $modif=true) {
224 global $spip_lang;
225
226 $id_auteur = intval($auteur['id_auteur']);
227 $res = afficher_rubriques_admin_restreintes($auteur, $modif);
228
229 // Ajouter une rubrique a un administrateur restreint
230 if ($modif
231 AND autoriser('modifier', 'auteur', $id_auteur, NULL, array('restreintes' => true))
232 AND $chercher_rubrique = charger_fonction('chercher_rubrique', 'inc')
233 AND $a = $chercher_rubrique(0, 'auteur', false)) {
234
235 $label = $restreint
236 ? _T('info_ajouter_rubrique')
237 : _T('info_restreindre_rubrique');
238
239 $res .= debut_block_depliable(true,"statut$id_auteur")
240 . "\n<div id='ajax_rubrique' class='arial1'>\n"
241 . "<b>"
242 . $label
243 . "</b>"
244 . "\n<input name='id_auteur' value='"
245 . $id_auteur
246 . "' type='hidden' />"
247 . $a
248 . "</div>\n"
249
250 // onchange = pour le menu
251 // l'evenement doit etre provoque a la main par le selecteur ajax
252 . "<script type='text/javascript'><!--
253 jQuery('#id_parent')
254 .bind('change', function(){
255 var id_parent = this.value;
256 var titre = jQuery('#titreparent').attr('value') || this.options[this.selectedIndex].text;
257 // Ajouter la rubrique selectionnee au formulaire,
258 // sous la forme d'un input name='rubriques[]'
259 var el = '<input type=\'checkbox\' checked=\'checked\' name=\'restreintes[]\' value=\''+id_parent+'\' /> ' + '<a href=\'?exec=naviguer&amp;id_rubrique='+id_parent+'\'>'+titre+'</a>';
260 if (jQuery('#rubrest_'+id_parent).size() == 0) {
261 jQuery('#liste_rubriques_restreintes')
262 .append('<li id=\'rubrest_'+id_parent+'\'>'+el+'</li>');
263 }
264 }); //--></script>\n"
265
266 . fin_block();
267 }
268
269 return $res;
270 }
271
272
273 ?>