source: spip-zone/_plugins_/notifications/trunk/action/instituer_forum_paremail.php @ 65466

Last change on this file since 65466 was 65466, checked in by cedric@…, 8 years ago

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

File size: 4.3 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2011                                                *
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
13if (!defined("_ECRIRE_INC_VERSION")) return;
14
15// http://doc.spip.org/@action_instituer_forum_dist
16function action_instituer_forum_paremail_dist() {
17
18        // verification manuelle de la signature : cas particulier de cette action signee par email
19        $arg = _request('arg');
20        $hash = _request('hash');
21
22        include_spip("inc/securiser_action");
23        $action = 'instituer_forum_paremail';
24        $pass = secret_du_site();
25
26        $verif = _action_auteur("$action-$arg", '', $pass, 'alea_ephemere');
27
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
37        include_spip("inc/filtres");
38        $lien_moderation = lien_ou_expose(url_absolue(generer_url_entite($id_forum,'forum',"","forum$id_forum",false)),_T('notifications:info_moderation_lien_titre'));
39        $erreur = _T('notifications:info_moderation_url_perimee')."<br />$lien_moderation";
40
41        if ($hash==_action_auteur("$action-$arg", '', $pass, 'alea_ephemere')
42          OR $hash==_action_auteur("$action-$arg", '', $pass, 'alea_ephemere_ancien'))
43                $erreur = "";
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        }
59
60        // si hash est ok, verifier si l'email correspond a un auteur qui a le droit de faire cette action
61        if (!$erreur){
62                // reconstituer l'arg pour l'action standard
63                $arg = "$id_forum-$statut";
64
65                if (!$message)
66                        $message = sql_fetsel("id_objet,objet,statut","spip_forum","id_forum=".intval($id_forum));
67
68                // on recherche le message en verifiant qu'il a bien le statut
69                if ($message){
70                        if ($message['statut']!=$statut_init){
71                                $erreur = _T("notifications:info_moderation_deja_faite",array('id_forum'=>$id_forum,'statut'=>$message['statut']))
72                                        ."<br />$lien_moderation";
73                        }
74                        else {
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                                                }
85                                        }
86                                }
87                                if ($erreur_auteur){
88                                        $erreur = $erreur_auteur;
89                                        spip_log("Aucun auteur pour $email autorise a moderer $id_forum","moderationparemail"._LOG_INFO_IMPORTANTE);
90                                }
91                        }
92                }
93                else {
94                        spip_log("Message forum $id_forum introuvable","moderationparemail"._LOG_INFO_IMPORTANTE);
95                        $erreur = "Message forum $id_forum introuvable"; // improbable ?
96                }
97        }
98
99        if (!$erreur){
100                spip_log("Moderation message $id_forum $statut par $email","moderationparemail"._LOG_INFO_IMPORTANTE);
101                $instituer_forum = charger_fonction("instituer_forum","action");
102                $instituer_forum($arg);
103        }
104
105        // Dans tous les cas on finit sur un minipres qui dit si ok ou echec
106        $titre = (!$erreur ? _T("notifications:info_moderation_confirmee_$statut",array('id_forum'=>$id_forum)) : $erreur);
107        include_spip('inc/minipres');
108        echo minipres($titre,"","",true);
109
110}
Note: See TracBrowser for help on using the repository browser.