[ Index ]
 

Code source de SPIP 1.9.2c

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/ecrire/balise/ -> formulaire_inscription.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;    #securite
  14  
  15  include_spip('base/abstract_sql');
  16  
  17  // Balise independante du contexte
  18  
  19  // http://doc.spip.org/@balise_FORMULAIRE_INSCRIPTION
  20  function balise_FORMULAIRE_INSCRIPTION ($p) {
  21  
  22      return calculer_balise_dynamique($p, 'FORMULAIRE_INSCRIPTION', array());
  23  }
  24  
  25  // args[0] peut valoir "redac" ou "forum" 
  26  // args[1] indique la rubrique eventuelle de proposition
  27  // args[2] indique le focus eventuel
  28  // [(#FORMULAIRE_INSCRIPTION{nom_inscription, #ID_RUBRIQUE})]
  29  
  30  // http://doc.spip.org/@balise_FORMULAIRE_INSCRIPTION_stat
  31  function balise_FORMULAIRE_INSCRIPTION_stat($args, $filtres) {
  32      list($mode, $id, $focus) = $args;
  33      //initialiser_mode_inscription
  34      if(!$mode) $mode = $GLOBALS['meta']['accepter_inscriptions'] == 'oui' ? 'redac' : ''; 
  35      if (!test_mode_inscription($mode))
  36          return '';
  37      else return array($mode, $focus, $id);
  38  }
  39  
  40  // Si inscriptions pas autorisees, retourner une chaine d'avertissement
  41  // Sinon inclusion du squelette
  42  // Si pas de mon ou pas de mail valide, premier appel rien d'autre a faire
  43  // Autrement 2e appel, envoyer un mail et le squelette ne produira pas de
  44  // formulaire.
  45  
  46  // http://doc.spip.org/@balise_FORMULAIRE_INSCRIPTION_dyn
  47  function balise_FORMULAIRE_INSCRIPTION_dyn($mode, $focus, $id=0) {
  48  
  49      if (!test_mode_inscription($mode)) return _T('pass_rien_a_faire_ici');
  50  
  51      $nom = _request('nom_inscription');
  52      $mail = _request('mail_inscription');
  53      $commentaire = ($mode=='redac') ? _T('pass_espace_prive_bla') : _T('pass_forum_bla');
  54  
  55      if ($mail) {
  56          include_spip('inc/filtres'); // pour email_valide
  57          $commentaire = message_inscription($mail, $nom, $mode, $id);
  58          if (is_array($commentaire)) {
  59              if (function_exists('envoyer_inscription'))
  60                  $f = 'envoyer_inscription';
  61              else 
  62                  $f = 'envoyer_inscription_dist';
  63              $commentaire = $f($commentaire, $nom, $mode, $id);
  64          }
  65      }
  66  
  67      $message = $commentaire ? '' : _T('form_forum_identifiant_mail');
  68  
  69      // #ENV*{message} doit etre non vide lorsque tout s'est bien passé
  70      // #ENV*{commentaire} doit etre non vide pour afficher le formulaire
  71      // et il indique si on s'inscrit a l'espace public ou prive 
  72      // ou donne un message d'erreur aux appels suivants si pb
  73  
  74      return array("formulaires/inscription", $GLOBALS['delais'],
  75              array('focus' => $focus,
  76                  'message' => $message,
  77                  'mode' => $mode,
  78                  'commentaire' => $commentaire,
  79                  'nom_inscription' => _request('nom_inscription'),
  80                  'mail_inscription' => _request('mail_inscription'),
  81                  'self' => str_replace('&amp;','&',(self()))));
  82  }
  83  
  84  // http://doc.spip.org/@test_mode_inscription
  85  function test_mode_inscription($mode) {
  86  
  87      return (($mode == 'redac' AND $GLOBALS['meta']['accepter_inscriptions'] == 'oui')
  88          OR ($mode == 'forum'
  89          AND ($GLOBALS['meta']['accepter_visiteurs'] == 'oui'
  90              OR $GLOBALS['meta']['forums_publics'] == 'abo')));
  91  }
  92  
  93  // fonction qu'on peut redefinir pour filtrer les adresses mail et les noms,
  94  // et donner des infos supplémentaires
  95  // Std: controler que le nom (qui sert a calculer le login) est plausible
  96  // et que l'adresse est valide (et on la normalise)
  97  // Retour: une chaine message d'erreur 
  98  // ou un tableau avec au minimum email, nom, mode (redac / forum)
  99  
 100  // http://doc.spip.org/@test_inscription_dist
 101  function test_inscription_dist($mode, $mail, $nom, $id=0) {
 102  
 103      include_spip('inc/filtres');
 104      $nom = trim(corriger_caracteres($nom));
 105      if (!$nom || strlen($nom) > 64)
 106          return _T('ecrire:info_login_trop_court');
 107      if (!$r = email_valide($mail)) return _T('info_email_invalide');
 108      return array('email' => $r, 'nom' => $nom, 'bio' => $mode);
 109  }
 110  
 111  // cree un nouvel utilisateur et renvoie un message d'impossibilite 
 112  // ou le tableau representant la ligne SQL le decrivant.
 113  
 114  // http://doc.spip.org/@message_inscription
 115  function message_inscription($mail, $nom, $mode, $id=0) {
 116  
 117      if (function_exists('test_inscription'))
 118          $f = 'test_inscription';
 119      else 
 120          $f = 'test_inscription_dist';
 121      $declaration = $f($mode, $mail, $nom, $id);
 122  
 123      if (is_string($declaration))
 124          return  $declaration;
 125  
 126      $row = spip_query("SELECT statut, id_auteur, login, email FROM spip_auteurs WHERE email=" . _q($declaration['email']));
 127      $row = spip_fetch_array($row);
 128  
 129      if (!$row) 
 130          // il n'existe pas, creer les identifiants  
 131          return inscription_nouveau($declaration);
 132      if (($row['statut'] == '5poubelle') AND !$declaration['pass'])
 133          // irrecuperable
 134          return _T('form_forum_access_refuse');
 135  
 136      if (($row['statut'] != 'nouveau') AND !$declaration['pass'])
 137          // deja inscrit
 138          return _T('form_forum_email_deja_enregistre');
 139  
 140      // existant mais encore muet, ou ressucite: renvoyer les infos
 141      $row['pass'] = creer_pass_pour_auteur($row['id_auteur']);
 142      return $row;
 143  }
 144  
 145  // On enregistre le demandeur comme 'nouveau', en memorisant le statut final
 146  // provisoirement dans le champ Bio, afin de ne pas visualiser les inactifs
 147  // A sa premiere connexion il obtiendra son statut final (auth->activer())
 148  
 149  // http://doc.spip.org/@inscription_nouveau
 150  function inscription_nouveau($declaration)
 151  {
 152      if (!isset($declaration['login']))
 153          $declaration['login'] = test_login($declaration['nom'], $declaration['email']);
 154  
 155      $declaration['statut'] = 'nouveau';
 156  
 157      $n = spip_abstract_insert('spip_auteurs', ('(' .join(',',array_keys($declaration)).')'), ("(" .join(", ",array_map('_q', $declaration)) .")"));
 158  
 159      $declaration['id_auteur'] = $n;
 160  
 161      $declaration['pass'] = creer_pass_pour_auteur($declaration['id_auteur']);
 162      return $declaration;
 163  }
 164  
 165  // envoyer identifiants par mail
 166  // fonction redefinissable qui doit retourner false si tout est ok
 167  // ou une chaine non vide expliquant pourquoi le mail n'a pas ete envoye
 168  
 169  // http://doc.spip.org/@envoyer_inscription_dist
 170  function envoyer_inscription_dist($ids, $nom, $mode, $id) {
 171      include_spip('inc/mail');
 172      $nom_site_spip = nettoyer_titre_email($GLOBALS['meta']["nom_site"]);
 173      $adresse_site = $GLOBALS['meta']["adresse_site"];
 174      
 175      $message = _T('form_forum_message_auto')."\n\n"
 176        . _T('form_forum_bonjour', array('nom'=>$nom))."\n\n"
 177        . _T((($mode == 'forum')  ?
 178          'form_forum_voici1' :
 179          'form_forum_voici2'),
 180             array('nom_site_spip' => $nom_site_spip,
 181               'adresse_site' => $adresse_site . '/',
 182               'adresse_login' => $adresse_site .'/'. _DIR_RESTREINT_ABS))
 183        . "\n\n- "._T('form_forum_login')." " . $ids['login']
 184        . "\n- ".  _T('form_forum_pass'). " " . $ids['pass'] . "\n\n";
 185  
 186      if (envoyer_mail($ids['email'],
 187               "[$nom_site_spip] "._T('form_forum_identifiants'),
 188               $message))
 189          return false;
 190      else
 191          return _T('form_forum_probleme_mail');
 192  }
 193  
 194  // http://doc.spip.org/@test_login
 195  function test_login($nom, $mail) {
 196      include_spip('inc/charsets');
 197      $nom = strtolower(translitteration($nom));
 198      $login_base = ereg_replace("[^a-zA-Z0-9_]", "_", $nom);
 199  
 200      // il faut eviter que le login soit vraiment trop court
 201      if (strlen($login_base) < 3) {
 202          $mail = strtolower(translitteration(preg_replace('/@.*/', '', $mail)));
 203          $login_base = ereg_replace("[^a-zA-Z0-9]", "_", $nom);
 204      }
 205      if (strlen($login_base) < 3)
 206          $login_base = 'user';
 207  
 208      // eviter aussi qu'il soit trop long (essayer d'attraper le prenom)
 209      if (strlen($login_base) > 10) {
 210          $login_base = preg_replace("/^(.{4,}(_.{1,7})?)_.*/",
 211              '\1', $login_base);
 212          $login_base = substr($login_base, 0,13);
 213      }
 214  
 215      $login = $login_base;
 216  
 217      for ($i = 1; ; $i++) {
 218          $n = spip_num_rows(spip_query("SELECT id_auteur FROM spip_auteurs WHERE login='$login' LIMIT 1"));
 219          if (!$n) return $login;
 220          $login = $login_base.$i;
 221      }
 222  }
 223  
 224  // http://doc.spip.org/@creer_pass_pour_auteur
 225  function creer_pass_pour_auteur($id_auteur) {
 226      include_spip('inc/acces');
 227      $pass = creer_pass_aleatoire(8, $id_auteur);
 228      $mdpass = md5($pass);
 229      $htpass = generer_htpass($pass);
 230      spip_query("UPDATE spip_auteurs    SET pass='$mdpass', htpass='$htpass' WHERE id_auteur = ".intval($id_auteur));
 231      ecrire_acces();
 232      
 233      return $pass;
 234  }
 235  
 236  ?>


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