[ Index ] |
|
Code source de SPIP 1.9.2c |
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 13 if (!defined("_ECRIRE_INC_VERSION")) return; 14 15 include_spip('inc/filtres'); 16 include_spip('inc/acces'); 17 include_spip('base/abstract_sql'); 18 19 // http://doc.spip.org/@action_editer_auteur_dist 20 function 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 34 function 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 265 function 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 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Wed Nov 21 10:20:27 2007 | par Balluche grâce à PHPXref 0.7 |
![]() |