[spip-dev] logout -> n'apparait plus dans la case "en ligne"

--jRHKVT23PllUwdXP
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: 8bit

Coucou,

pour que les gens qui se "déconnectent" disparaissent illico de la case "en
ligne" des autres rédacteurs, je suggérais : "il suffirait de décaler la
date de login du rédacteur dans la base à H-1)".

J'ai fait la modif, mais comme il s'agit d'un fichier assez sensible, je
préfère qu'Antoine le valide. (ci-joint, donc)

PS: on la relance cette 1.2pr2 ?

-- Fil

--jRHKVT23PllUwdXP
Content-Type: application/x-httpd-php3
Content-Disposition: attachment; filename="inc_auth.php3"

<?

//
// Ce fichier ne sera execute qu'une fois
if (defined("_ECRIRE_INC_AUTH")) return;
define("_ECRIRE_INC_AUTH", "1");

function ask_php_auth($text_failure) {
  @Header("WWW-Authenticate: Basic realm=\"administrateur\"");
  @Header("HTTP/1.0 401 Unauthorized");
  echo $text_failure;
  exit;
}

//
// Fonctions de gestion de l'acces restreint aux rubriques
//

function recuperer_sous_rubriques($id_parent) {
  global $connect_id_rubrique;
    
  $query = "SELECT id_rubrique FROM spip_rubriques WHERE id_parent=$id_parent";
   $result = mysql_query($query);

  while ($row = mysql_fetch_array($result)) {
    $id_rubrique = $row['id_rubrique'];
    $connect_id_rubrique[] = $id_rubrique;
    recuperer_sous_rubriques($id_rubrique);
  }
}

function acces_rubrique($id_rubrique){
  global $connect_toutes_rubriques;
  global $connect_id_rubriques;
  global $connect_statut;
  
  if ($connect_toutes_rubriques OR ereg(",$id_rubrique,","$connect_id_rubriques")) return true;
  else return false;
}

function acces_restreint_rubrique($id_rubrique){
  global $connect_toutes_rubriques;
  global $connect_id_rubriques;
  global $connect_statut;
  
  if ($connect_statut=="0minirezo" AND ereg(",$id_rubrique,","$connect_id_rubriques")) return true;
  else return false;
}

//
// Si pas MySQL, fini
//

if (!$db_ok) echo "<P><H4>Attention&nbsp;: un probl&egrave;me technique (serveur MySQL) emp&ecirc;che l'acc&egrave;s &agrave; cette partie du site.\nMerci de votre compr&eacute;hension.</H4><P><P>\n";

$auth_text_failure = "<HTML><HEAD><TITLE>Echec de l'identification</TITLE></HEAD>
<BODY><H3>L'identification a &eacute;chou&eacute;.</H3><P>
Vous pouvez <a href=\"./\">r&eacute;essayer</a> ou <a href=\"../\">retourner au sommaire</a><P>
</BODY></HTML>";

//
// Initialiser variables (eviter hacks par URL)
//

$auth_login = "";
$auth_pass = "";
$auth_pass_ok = false;
$auth_can_disconnect = false;
$auth_htaccess = false;
if ($HTTP_GET_VARS["REMOTE_USER"] || $HTTP_POST_VARS["REMOTE_USER"] || $HTTP_COOKIE_VARS["REMOTE_USER"]) {
  ask_php_auth($auth_text_failure);
}
else $auth_login = $REMOTE_USER;

//
// Recuperer les donnees d'identification
//

if ($auth_login) {
  $auth_pass_ok = true;
  $auth_htaccess = true;
}
else {
  $auth_login = $PHP_AUTH_USER;
  $auth_mdpass = md5($PHP_AUTH_PW);
  $auth_can_disconnect = true;
  // Securite, ne pas garder la valeur en memoire
  $PHP_AUTH_PW = '';
  $HTTP_SERVER_VARS['PHP_AUTH_PW'] = '';
}

//
// Chercher le login dans la table auteurs
//

$auth_login = addslashes($auth_login);
$query = "SELECT * FROM spip_auteurs WHERE login='$auth_login' AND statut!='5poubelle' AND statut!='6forum'";
$result = @mysql_query($query);

if (!@mysql_num_rows($result)) {
  ask_php_auth($auth_text_failure);
}

if ($row = mysql_fetch_array($result)) {
  $connect_id_auteur=$row[0];
  $connect_nom=$row[1];
  $connect_bio=$row[2];
  $connect_email=$row[3];
  $connect_nom_site=$row[4];
  $connect_url_site=$row[5];
  $connect_login=$row[6];
  $connect_pass=$row[7];
  $connect_statut=$row[8];
  $connect_activer_messagerie=$row["messagerie"];
  $connect_activer_imessage=$row["imessage"];

  // Special : si dans la fiche auteur on modifie les valeurs
  // de messagerie, utiliser ces valeurs plutot que celle de la base.
  // D'ou leger bug si on modifie la fiche de quelqu'un d'autre.
  if ($perso_activer_messagerie) {
    $connect_activer_messagerie = $perso_activer_messagerie;
    $connect_activer_imessage = $perso_activer_imessage;
  }

  // Verifier si pass ok
  if ($connect_pass == $auth_mdpass) $auth_pass_ok = true;

  // Indiquer connexion - deconnexion
  if ($connect_activer_messagerie != "non") {
    @mysql_query("UPDATE spip_auteurs SET en_ligne=NOW() WHERE id_auteur='$connect_id_auteur'");
  }
  if (($logout == $PHP_AUTH_USER) || !$PHP_AUTH_USER) {
    // mettre la derniere date de connexion a H-1
    @mysql_query("UPDATE spip_auteurs SET en_ligne=DATE_SUB(NOW(),INTERVAL 1 HOUR) where id_auteur=$connect_id_auteur");
    ask_php_auth($auth_text_failure);
  }

  // Si administrateur, recuperer les rubriques gerees par l'admin
  if ($connect_statut == '0minirezo') {
    $query_admin = "SELECT * FROM spip_auteurs_rubriques WHERE id_auteur=$connect_id_auteur AND id_rubrique!='0'";
    $result_admin = mysql_query($query_admin);
    
    $connect_toutes_rubriques = (@mysql_num_rows($result_admin) == 0);
    if ($connect_toutes_rubriques) {
      $connect_id_rubrique[] = "0";
    }
    else {
      while ($row_admin = mysql_fetch_array($result_admin)) {
        $connect_id_rubrique[] = $row_admin["id_rubrique"];
        recuperer_sous_rubriques($row_admin["id_rubrique"]);
      }
    }
  
    $connect_id_rubriques = ",".join($connect_id_rubrique,",").",";
  }
  // Si pas admin, acces egal a toutes rubriques
  else {
    $connect_toutes_rubriques = false;
    $connect_id_rubriques = "";
  }
  
}
else {
  $auth_pass_ok = false;
}

// Securite, ne pas garder la valeur en memoire
$auth_mdpass = '';

if (!$auth_pass_ok) ask_php_auth($auth_text_failure);

if ($connect_statut == 'nouveau') {
  $query = "UPDATE spip_auteurs SET statut='1comite' WHERE id_auteur=$connect_id_auteur";
  $result = mysql_query($query);
  $connect_statut = '1comite';
}

?>

--jRHKVT23PllUwdXP--

Fil wrote:

pour que les gens qui se "déconnectent" disparaissent illico de la case "en
ligne" des autres rédacteurs, je suggérais : "il suffirait de décaler la
date de login du rédacteur dans la base à H-1)".

Je ne vois pas le problème : tu as été en ligne il y a une minute, pourquoi
n'apparaîtrais-tu pas ? Au contraire, ça permet de vérifier si tu es visible
ou pas. Je comprends bien que ce soit "un poil" plus joli, mais si c'est
juste un petit poil ;), je ne suis pas pour, c'est une dérive à la Microsoft
avec des tas de comportements spécifiques dans des tas de cas particuliers
qui rendent le truc insupportable car incompréhensible (cf. les assistants
Office, oui le petit chien qu'on a envie de tuer à coup de massue....).
Il y a déjà l'inaccessibilité des auteurs connectés depuis plus de deux
semaines, pas mal déroutante si on est pas au courant (pourquoi je peux
pas envoyer un message à machin alors que je peux en envoyer un à truc ?
ah, ok, c'est microsoft qui me simplifie la vie :-))

Et accessoirement, ça rend le code fouilli et complexe, parce que des
tas de cas particuliers qui n'entrent dans aucune logique cohérente.
Vaut mieux rester simple quand l'amélioration n'est pas importante.

a+

Antoine.

@ Antoine Pitrou (pitrou@free.fr) :

Je ne vois pas le problème : tu as été en ligne il y a une minute, pourquoi
n'apparaîtrais-tu pas ? Au contraire, ça permet de vérifier si tu es visible
ou pas.

Si tu veux, sauf que justement je ne le suis plus à ce moment-là !

Par ailleurs, le message d'erreur 401 pourrait être un peu plus soigné,
façon install.php3 ?

[ Tout ça est pour l'après-1.2, hein !]

-- Fil

tu as été en ligne il y a une minute,
pourquoi n'apparaîtrais-tu pas ?

Euh ... parce que tu n'es plus en ligne ? :stuck_out_tongue:

Si on conserve dans cet affichage le nom de ceux qui étaient connectés
il y a quelques minutes, même s'ils ne le sont plus, il faut sans
doute changer le libellé ...

-Nicolas