squellete2
[aidenligne_francais_universite.git] / ecrire / action / editer_auteur.php
CommitLineData
c495c100
P
1<?php
2
3/***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2007 *
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
13if (!defined("_ECRIRE_INC_VERSION")) return;
14
15include_spip('inc/filtres');
16include_spip('inc/acces');
17include_spip('base/abstract_sql');
18
19// http://doc.spip.org/@action_editer_auteur_dist
20function action_editer_auteur_dist() {
21 $securiser_action = charger_fonction('securiser_action', 'inc');
22 $arg = $securiser_action();
23
24 if (!preg_match(",^(\d+)$,", $arg, $r)) {
25 $r = "action_editer_auteur_dist $arg pas compris";
26 spip_log($r);
27 } else {
28 $url = action_legender_auteur_post($r);
29 redirige_par_entete($url);
30 }
31}
32
33// http://doc.spip.org/@action_legender_auteur_post
34function action_legender_auteur_post($r) {
35 global $auteur_session;
36
37 $bio = _request('bio');
38 $champs_extra = _request('champs_extra');
39 $email = _request('email');
40 $new_login = _request('new_login');
41 $new_pass = _request('new_pass');
42 $new_pass2 = _request('new_pass2');
43 $nom_site_auteur = _request('nom_site_auteur');
44 $perso_activer_imessage = _request('perso_activer_imessage');
45 $pgp = _request('pgp');
46 $redirect = _request('redirect');
47 $statut = _request('statut');
48 $url_site = _request('url_site');
49
50 $echec = array();
51
52
53 list($tout, $id_auteur, $ajouter_id_article,$x,$s) = $r;
54//
55// si id_auteur est hors table, c'est une creation sinon une modif
56//
57 $auteur = array();
58 if ($id_auteur) {
59 $auteur = spip_fetch_array(spip_query("SELECT * FROM spip_auteurs WHERE id_auteur=$id_auteur"));
60 }
61 if (!$auteur) {
62 $id_auteur = 0;
63 $source = 'spip';
64 $statut = '1comite'; // statut par defaut
65 if ($s) {
66 if (ereg("^(0minirezo|1comite|5poubelle|6forum)$",$s))
67 $statut = $s;
68 else spip_log("action_legender_auteur_dist: statut $s incompris");
69 }
70 }
71
72 $acces = ($id_auteur == $auteur_session['id_auteur']) ? true : " a voir ";
73 $auteur['nom'] = corriger_caracteres(_request('nom'));
74
75 // login et mot de passe
76 $modif_login = false;
77 $old_login = $auteur['login'];
78
79 if (isset($new_login)
80 AND ($new_login<>$old_login)
81 AND ($auteur['source'] == 'spip' OR !$GLOBALS['ldap_present'])) {
82 if (admin_general($auteur_session)) {
83 $acces = true;
84 if ($new_login) {
85 if (strlen($new_login) < 4)
86 $echec[]= 'info_login_trop_court';
87 else {
88 $n = spip_fetch_array(spip_query("SELECT COUNT(*) AS n FROM spip_auteurs WHERE login=" . _q($new_login) . " AND id_auteur!=$id_auteur AND statut!='5poubelle'"));
89 if ($n['n'])
90 $echec[]= 'info_login_existant';
91 else if ($new_login != $old_login) {
92 $modif_login = true;
93 $auteur['login'] = $new_login;
94 }
95 }
96 }
97 // suppression du login
98 else {
99 $auteur['login'] = '';
100 $modif_login = true;
101 }
102 }
103 }
104
105 // changement de pass, a securiser en jaja ?
106
107 if ($new_pass AND ($statut != '5poubelle') AND $auteur['login'] AND $auteur['source'] == 'spip') {
108 if (is_string($acces))
109 $acces = admin_general($auteur_session);
110 if ($acces) {
111 if ($new_pass != $new_pass2)
112 $echec[]= 'info_passes_identiques';
113 else if ($new_pass AND strlen($new_pass) < 6)
114 $echec[]= 'info_passe_trop_court';
115 else {
116 $modif_login = true;
117 $auteur['new_pass'] = $new_pass;
118 }
119 }
120 }
121
122 if ($modif_login AND ($auteur['id_auteur']<>$auteur_session['id_auteur'])) {
123 // supprimer les sessions de cet auteur
124 $session = charger_fonction('session', 'inc');
125 $session($auteur['id_auteur']);
126 }
127
128 // seuls les admins peuvent modifier le mail
129 // les admins restreints ne peuvent modifier celui des autres admins
130
131 if (is_string(_request('email')) AND $auteur_session['statut'] == '0minirezo') {
132 if (!($ok = ($statut <> '0minirezo'))) {
133 if (is_string($acces))
134 $acces = admin_general($auteur_session);
135 }
136
137 if ($ok OR $acces) {
138 $email = trim($email);
139 if ($email !='' AND !email_valide($email))
140 $echec[]= 'info_email_invalide';
141 $auteur['email'] = $email;
142 }
143 }
144
145 if ($auteur_session['id_auteur'] == $id_auteur) {
146 if ($perso_activer_imessage) {
147 spip_query("UPDATE spip_auteurs SET imessage='$perso_activer_imessage' WHERE id_auteur=$id_auteur");
148 $auteur['imessage'] = $perso_activer_imessage;
149 }
150 }
151
152 // variables sans probleme
153 $auteur['bio'] = corriger_caracteres($bio);
154 $auteur['pgp'] = corriger_caracteres($pgp);
155 $auteur['nom_site'] = corriger_caracteres($nom_site_auteur); // attention mix avec $nom_site_spip ;(
156 $auteur['url_site'] = vider_url($url_site, false);
157
158 if ($new_pass) {
159 $htpass = generer_htpass($new_pass);
160 $alea_actuel = creer_uniqid();
161 $alea_futur = creer_uniqid();
162 $pass = md5($alea_actuel.$new_pass);
163 $query_pass = " pass='$pass', htpass='$htpass', alea_actuel='$alea_actuel', alea_futur='$alea_futur', ";
164 if ($auteur['id_auteur'])
165 effacer_low_sec($auteur['id_auteur']);
166 } else
167 $query_pass = '';
168
169 // recoller les champs du extra
170 if ($GLOBALS['champs_extra']) {
171 include_spip('inc/extra');
172 $extra = extra_recup_saisie("auteurs");
173 } else
174 $extra = '';
175
176 // l'entrer dans la base
177 if (!$echec) {
178 if (!$auteur['id_auteur']) { // creation si pas d'id
179 $auteur['id_auteur'] = $id_auteur = spip_abstract_insert("spip_auteurs", "(nom,statut)", "('temp','" . $statut . "')");
180
181 // recuperer l'eventuel logo charge avant la creation
182 $id_hack = 0 - $GLOBALS['auteur_session']['id_auteur'];
183 $chercher_logo = charger_fonction('chercher_logo', 'inc');
184 if (list($logo) = $chercher_logo($id_hack, 'id_auteur', 'on'))
185 rename($logo, str_replace($id_hack, $id_auteur, $logo));
186 if (list($logo) = $chercher_logo($id_hack, 'id_auteur', 'off'))
187 rename($logo, str_replace($id_hack, $id_auteur, $logo));
188 }
189
190 spip_query("UPDATE spip_auteurs SET $query_pass nom=" . _q($auteur['nom']) . ", login=" . _q($auteur['login']) . ", bio=" . _q($auteur['bio']) . ", email=" . _q($auteur['email']) . ", nom_site=" . _q($auteur['nom_site']) . ", url_site=" . _q($auteur['url_site']) . ", pgp=" . _q($auteur['pgp']) . (!$extra ? '' : (", extra = " . _q($extra) . "")) . " WHERE id_auteur=".$auteur['id_auteur']);
191 }
192
193
194 //
195 // Modifications de statut
196 //
197 // TODO : autorisations correspondantes !
198 //
199 if ($statut = _request('statut')
200 AND autoriser('modifier', 'auteur', $id_auteur, $qui = null,
201 $opt = array('statut'=>$statut))) {
202 if (!ereg("^(0minirezo|1comite|5poubelle|6forum)$",$statut)) {
203 spip_log("action_instituer_auteur_dist: $statut incompris pour $id_auteur");
204 } else {
205 spip_query("UPDATE spip_auteurs SET statut="._q($statut) . " WHERE id_auteur=" . _q($id_auteur));
206 }
207 }
208
209 // Rubriques restreintes
210 $restreintes = _request('restreintes');
211 if ($id_parent = intval(_request('id_parent'))) {
212 if (is_array($restreintes))
213 $restreintes[] = $id_parent;
214 else
215 $restreintes = array($id_parent);
216 }
217 if (is_array($restreintes)
218 AND autoriser('modifier', 'auteur', $id_auteur, $qui = null,
219 $opt = array('restreint'=>$restreintes))) {
220 include_spip('base/abstract_sql');
221 spip_query("DELETE FROM spip_auteurs_rubriques WHERE id_auteur="._q($id_auteur));
222 foreach (array_unique($restreintes) as $id_rub)
223 if ($id_rub = intval($id_rub)) // si '0' on ignore
224 spip_abstract_insert('spip_auteurs_rubriques', "(id_auteur,id_rubrique)", "($id_auteur,$id_rub)");
225 }
226
227
228 // Lier a un article
229 if ($id_article = intval(_request('lier_id_article'))
230 AND autoriser('modifier', 'article', $id_article)
231 ) {
232 spip_query("INSERT spip_auteurs_articles (id_article,id_auteur) VALUES ($id_article,$id_auteur)");
233 }
234
235 // Si on modifie la fiche auteur, reindexer
236 if ($GLOBALS['meta']['activer_moteur'] == 'oui') {
237 include_spip("inc/indexation");
238 marquer_indexer('spip_auteurs', $id_auteur);
239 }
240 // ..et mettre a jour les fichiers .htpasswd et .htpasswd-admin
241 ecrire_acces();
242
243 $echec = $echec ? '&echec=' . join('@@@', $echec) : '';
244
245 $redirect = rawurldecode($redirect);
246
247 if ($echec) {
248 // revenir au formulaire de saisie
249 $ret = !$redirect
250 ? ''
251 : ('&redirect=' . rawurlencode($redirect));
252
253 return generer_url_ecrire('auteur_infos',
254 "id_auteur=$id_auteur$echec$ret",'&');
255 } else {
256 // modif: renvoyer le resultat ou a nouveau le formulaire si erreur
257 if (!$redirect)
258 $redirect = generer_url_ecrire("auteur_infos", "id_auteur=$id_auteur", '&', true);
259
260 return $redirect;
261 }
262}
263
264// http://doc.spip.org/@admin_general
265function admin_general($session)
266{
267 static $ok;
268 if (!isset($ok)) {
269 include_spip('inc/auth');
270 $ok = ($session['statut']=='0minirezo')
271 AND !spip_num_rows(spip_query("SELECT id_rubrique FROM spip_auteurs_rubriques WHERE id_auteur=" .$session['id_auteur'] ." AND id_rubrique!='0' LIMIT 1"));
272 }
273
274 return $ok;
275}
276
277
278?>