[ Index ]
 

Code source de SPIP 1.9.2c

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/ecrire/balise/ -> login_public.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  spip_connect();
  17  
  18  // http://doc.spip.org/@balise_LOGIN_PUBLIC
  19  function balise_LOGIN_PUBLIC ($p, $nom='LOGIN_PUBLIC') {
  20      return calculer_balise_dynamique($p, $nom, array('url'));
  21  }
  22  
  23  # retourner:
  24  # 1. l'url collectee ci-dessus (args0) ou donnee en filtre (filtre0)
  25  # 2. l'eventuel parametre de la balise (args1) fournie par
  26  #    calculer_balise_dynamique, en l'occurence le #LOGIN courant si l'on
  27  #    programme une <boucle(AUTEURS)>[(#LOGIN_PUBLIC{#LOGIN})]
  28  
  29  // http://doc.spip.org/@balise_LOGIN_PUBLIC_stat
  30  function balise_LOGIN_PUBLIC_stat ($args, $filtres) {
  31      return array($filtres[0] ? $filtres[0] : $args[0], $args[1], $args[2]);
  32  }
  33  
  34  // http://doc.spip.org/@balise_LOGIN_PUBLIC_dyn
  35  function balise_LOGIN_PUBLIC_dyn($url, $login) {
  36  
  37      if (!$url         # pas d'url passee en filtre ou dans le contexte
  38      AND !$url = _request('url') # ni d'url passee par l'utilisateur
  39      ){
  40          $url = str_replace('&amp;', '&', self()); 
  41      }
  42      return login_explicite($login, $url, true);
  43  }
  44  
  45  // cette fonction est commune a la balise #LOGIN_PUBLIC et #LOGIN_PRIVE
  46  // elle doit accepter les visiteurs dans le premier cas, mais pas dans le second
  47  // http://doc.spip.org/@login_explicite
  48  function login_explicite($login, $cible, $accepter_visiteurs = false) {
  49      global $auteur_session;
  50  
  51      // passer $action dans parametre_url pour avoir une chance que $cible == $action
  52      // et pas faire de boulce infinie de redirection
  53      $action = parametre_url(str_replace('&amp;', '&', self()),'var_dummy','','&');
  54      if ($cible) {
  55          $cible = parametre_url($cible, 'var_erreur', '', '&');
  56          $cible = parametre_url($cible, 'var_login', '', '&');
  57      } else {
  58          if (ereg("[?&]url=([^&]*)", $action, $m))
  59              $cible = rawurldecode($m[1]);
  60          else
  61              $cible = _DIR_RESTREINT ;
  62      }
  63  
  64      verifier_visiteur();
  65  
  66      // Si on est connecte, envoyer vers la destination
  67      // sauf si on y est deja
  68      if ($auteur_session AND
  69      ($auteur_session['statut']=='0minirezo'
  70      OR $auteur_session['statut']=='1comite'
  71      OR ($accepter_visiteurs && ($auteur_session['statut']=='6forum')))) {
  72          $auth = charger_fonction('auth','inc');
  73          $auth = $auth();
  74          if (($auth==="")
  75            OR ($accepter_visiteurs && ($auth=='6forum'))) {
  76              if ($cible != $action) {
  77                  if (!headers_sent() AND !$_GET['var_mode']) {
  78                      include_spip('inc/headers');
  79                      redirige_par_entete($cible);
  80                  } else {
  81                      include_spip('inc/minipres');
  82                      return http_href($cible, _T('login_par_ici'));
  83                  }
  84              } else
  85                  return ''; # on est arrive on bon endroit, et logue'...
  86          }
  87      }
  88  
  89      return login_pour_tous($login ? $login : _request('var_login'), $cible, $action);
  90  }
  91  
  92  // http://doc.spip.org/@login_pour_tous
  93  function login_pour_tous($login, $cible, $action) {
  94      global $ignore_auth_http, $_SERVER, $_COOKIE;
  95  
  96      // en cas d'echec de cookie, inc_auth a renvoye vers le script de
  97      // pose de cookie ; s'il n'est pas la, c'est echec cookie
  98      // s'il est la, c'est probablement un bookmark sur bonjour=oui,
  99      // et pas un echec cookie.
 100      if (_request('var_echec_cookie'))
 101          $echec_cookie = ($_COOKIE['spip_session'] != 'test_echec_cookie');
 102      else $echec_cookie = '';
 103  
 104      // hack grossier pour changer le message en cas d'echec d'un visiteur(6forum) sur ecrire/
 105      $echec_visiteur = _request('var_echec_visiteur')?' ':'';
 106  
 107  
 108      $pose_cookie = generer_url_public('spip_cookie');
 109      $auth_http = '';    
 110      if ($echec_cookie AND !$ignore_auth_http) {
 111          if (($GLOBALS['flag_sapi_name']
 112               AND eregi("apache", @php_sapi_name()))
 113          OR ereg("^Apache.* PHP", $_SERVER['SERVER_SOFTWARE']))
 114              $auth_http = $pose_cookie;
 115      }
 116      // Attention dans le cas 'intranet' la proposition de se loger
 117      // par auth_http peut conduire a l'echec.
 118      if (isset($_SERVER['PHP_AUTH_USER']) AND isset($_SERVER['PHP_AUTH_PW']))
 119          $auth_http = '';
 120  
 121      // Le login est memorise dans le cookie d'admin eventuel
 122      if (!$login) {
 123          if (ereg("^@(.*)$", $_COOKIE['spip_admin'], $regs))
 124              $login = $regs[1];
 125      } else if ($login == '-1')
 126          $login = '';
 127  
 128      $erreur = '';
 129      if ($login) {
 130          $row =  spip_abstract_fetsel('*', 'spip_auteurs', "login=" . _q($login));
 131          // Retrouver ceux qui signent de leur nom ou email
 132          if (!$row AND !$GLOBALS['ldap_present']) {
 133              $row = spip_abstract_fetsel('*', 'spip_auteurs', "(nom = " . _q($login) . " OR email = " . _q($login) . ") AND login<>'' AND statut<>'5poubelle'");
 134              if ($row) {
 135                  $login_alt = $login; # afficher ce qu'on a tape
 136                  $login = $row['login'];
 137              }
 138          }
 139  
 140          if ((!$row AND !$GLOBALS['ldap_present']) OR
 141              ($row['statut'] == '5poubelle') OR 
 142              (($row['source'] == 'spip') AND $row['pass'] == '')) {
 143              $erreur =  _T('login_identifiant_inconnu',
 144                  array('login' => htmlspecialchars($login)));
 145              $row = array();
 146              $login = '';
 147              include_spip('inc/cookie');
 148              spip_setcookie("spip_admin", "", time() - 3600);
 149          } else {
 150              // on laisse le menu decider de la langue
 151              unset($row['lang']);
 152          }
 153      }
 154      if (!$row)
 155          $row = array();
 156      // afficher "erreur de mot de passe" si &var_erreur=pass
 157      if (_request('var_erreur') == 'pass')
 158          $erreur = _T('login_erreur_pass');
 159  
 160      // Appeler le squelette formulaire_login
 161      return array('formulaires/login', $GLOBALS['delais'],
 162          array_merge(
 163                  array_map('texte_script', $row),
 164                  array(
 165                      'action2' => ($login ? $pose_cookie: $action),
 166                      'erreur' => $erreur,
 167                      'action' => $action,
 168                      'url' => $cible,
 169                      'auth_http' => $auth_http,
 170                      'echec_cookie' => ($echec_cookie ? ' ' : ''),
 171                      'echec_visiteur' => $echec_visiteur,
 172                      'login' => $login,
 173                      'login_alt' => (isset($login_alt) ? $login_alt : $login),
 174                      'self' => str_replace('&amp;', '&', self())
 175                      )
 176                  )
 177              );
 178  
 179  }
 180  
 181  // Bouton duree de connexion
 182  
 183  // http://doc.spip.org/@filtre_rester_connecte
 184  function filtre_rester_connecte($prefs) {
 185      $prefs = unserialize(stripslashes($prefs));
 186      return $prefs['cnx'] == 'perma' ? ' ' : '';
 187  }
 188  
 189  ?>


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