Changeset 65466 in spip-zone


Ignore:
Timestamp:
Sep 3, 2012, 10:08:55 AM (7 years ago)
Author:
cedric@…
Message:

si on est loge avec le bon email, on peut utiliser un lien meme si le hash est perime

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/notifications/trunk/action/instituer_forum_paremail.php

    r65465 r65466  
    2626        $verif = _action_auteur("$action-$arg", '', $pass, 'alea_ephemere');
    2727
    28         $id_forum = explode("-",$arg);
    29         $id_forum = array_shift($id_forum);
     28        $ae = explode("-",$arg);
     29        $id_forum = array_shift($ae);
     30        $statut = array_shift($ae);
     31        $statut_init = array_shift($ae);
     32        // l'email est ce qui reste
     33        $email = implode("-",$ae);
     34        $message = null;
     35        $erreur_auteur = _T('notifications:info_moderation_interdite');
     36
    3037        include_spip("inc/filtres");
    3138        $lien_moderation = lien_ou_expose(url_absolue(generer_url_entite($id_forum,'forum',"","forum$id_forum",false)),_T('notifications:info_moderation_lien_titre'));
     
    3542          OR $hash==_action_auteur("$action-$arg", '', $pass, 'alea_ephemere_ancien'))
    3643                $erreur = "";
    37         else
    38                 spip_log("Signature incorrecte pour $arg","moderationparemail"._LOG_INFO_IMPORTANTE);
     44        else {
     45                // le hash est invalide, mais peut-etre est-on loge avec cet email ?
     46                // auquel cas on peut utiliser les liens, meme perimes (confort)
     47                if (isset($GLOBALS['visiteur_session'])
     48                  AND $GLOBALS['visiteur_session']['id_auteur']
     49                        AND $GLOBALS['visiteur_session']['email']==$email){
     50                        $message = sql_fetsel("id_objet,objet,statut","spip_forum","id_forum=".intval($id_forum));
     51                        if (autoriser("modererforum",$message['objet'],$message['id_objet'])){
     52                                $erreur_auteur = "";
     53                                $erreur = "";
     54                        }
     55                }
     56                else
     57                        spip_log("Signature incorrecte pour $arg","moderationparemail"._LOG_INFO_IMPORTANTE);
     58        }
    3959
    4060        // si hash est ok, verifier si l'email correspond a un auteur qui a le droit de faire cette action
    4161        if (!$erreur){
    42                 $arg = explode("-",$arg);
    43                 $id_forum = array_shift($arg);
    44                 $statut = array_shift($arg);
    45                 $statut_init = array_shift($arg);
    46                 // l'email est ce qui reste
    47                 $email = implode("-",$arg);
    4862                // reconstituer l'arg pour l'action standard
    4963                $arg = "$id_forum-$statut";
    5064
     65                if (!$message)
     66                        $message = sql_fetsel("id_objet,objet,statut","spip_forum","id_forum=".intval($id_forum));
     67
    5168                // on recherche le message en verifiant qu'il a bien le statut
    52                 if ($message = sql_fetsel("id_objet,objet,statut","spip_forum","id_forum=".intval($id_forum))){
     69                if ($message){
    5370                        if ($message['statut']!=$statut_init){
    5471                                $erreur = _T("notifications:info_moderation_deja_faite",array('id_forum'=>$id_forum,'statut'=>$message['statut']))
     
    5673                        }
    5774                        else {
    58                                 $erreur = _T('notifications:info_moderation_interdite');
    59                                 // trouver le(s) auteur(s) et verifier leur autorisation
    60                                 $res = sql_select("*","spip_auteurs","email=".sql_quote($email,'','text'));
    61                                 while ($auteur = sql_fetch($res)){
    62                                         if (autoriser("modererforum",$message['objet'],$message['id_objet'],$auteur)){
    63                                                 $erreur = "";
    64                                                 // on ajoute l'exception car on est pas identifie avec cet id_auteur
    65                                                 autoriser_exception("modererforum",$message['objet'],$message['id_objet']);
    66                                                 break;
     75                                // trouver le(s) auteur(s) et verifier leur autorisation si besoin
     76                                if ($erreur_auteur){
     77                                        $res = sql_select("*","spip_auteurs","email=".sql_quote($email,'','text'));
     78                                        while ($auteur = sql_fetch($res)){
     79                                                if (autoriser("modererforum",$message['objet'],$message['id_objet'],$auteur)){
     80                                                        $erreur_auteur = "";
     81                                                        // on ajoute l'exception car on est pas identifie avec cet id_auteur
     82                                                        autoriser_exception("modererforum",$message['objet'],$message['id_objet']);
     83                                                        break;
     84                                                }
    6785                                        }
    6886                                }
    69                                 if ($erreur){
     87                                if ($erreur_auteur){
     88                                        $erreur = $erreur_auteur;
    7089                                        spip_log("Aucun auteur pour $email autorise a moderer $id_forum","moderationparemail"._LOG_INFO_IMPORTANTE);
    7190                                }
Note: See TracChangeset for help on using the changeset viewer.