[ Index ]
 

Code source de SPIP 1.9.2c

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/ecrire/action/ -> editer_auteur.php (source)

   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  ?>


Généré le : Wed Nov 21 10:20:27 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics