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

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

message erreur plus clair

File size: 3.9 KB
Line 
1<?php
2/*
3 * Plugin Notifications
4 * (c) 2009-2012 SPIP
5 * Distribue sous licence GPL
6 *
7 */
8
9if (!defined("_ECRIRE_INC_VERSION")) return;
10
11// http://doc.spip.org/@action_instituer_forum_dist
12function action_instituer_forum_paremail_dist() {
13
14        // verification manuelle de la signature : cas particulier de cette action signee par email
15        $arg = _request('arg');
16        $hash = _request('hash');
17
18        include_spip("inc/securiser_action");
19        $action = 'instituer_forum_paremail';
20        $pass = secret_du_site();
21
22        $verif = _action_auteur("$action-$arg", '', $pass, 'alea_ephemere');
23
24        $ae = explode("-",$arg);
25        $id_forum = array_shift($ae);
26        $statut = array_shift($ae);
27        $statut_init = array_shift($ae);
28        // l'email est ce qui reste
29        $email = implode("-",$ae);
30        $message = null;
31        $erreur_auteur = _T('notifications:info_moderation_interdite');
32
33        include_spip("inc/filtres");
34        $lien_moderation = lien_ou_expose(url_absolue(generer_url_entite($id_forum,'forum',"","forum$id_forum",false)),_T('notifications:info_moderation_lien_titre'));
35        $erreur = _T('notifications:info_moderation_url_perimee')."<br />$lien_moderation";
36
37        if ($hash==_action_auteur("$action-$arg", '', $pass, 'alea_ephemere')
38          OR $hash==_action_auteur("$action-$arg", '', $pass, 'alea_ephemere_ancien'))
39                $erreur = "";
40        else {
41                // le hash est invalide, mais peut-etre est-on loge avec cet email ?
42                // auquel cas on peut utiliser les liens, meme perimes (confort)
43                if (isset($GLOBALS['visiteur_session'])
44                  AND $GLOBALS['visiteur_session']['id_auteur']
45                        AND $GLOBALS['visiteur_session']['email']==$email){
46                        $message = sql_fetsel("id_objet,objet,statut","spip_forum","id_forum=".intval($id_forum));
47                        if (autoriser("modererforum",$message['objet'],$message['id_objet'])){
48                                $erreur_auteur = "";
49                                $erreur = "";
50                        }
51                }
52                else
53                        spip_log("Signature incorrecte pour $arg","moderationparemail"._LOG_INFO_IMPORTANTE);
54        }
55
56        // si hash est ok, verifier si l'email correspond a un auteur qui a le droit de faire cette action
57        if (!$erreur){
58                // reconstituer l'arg pour l'action standard
59                $arg = "$id_forum-$statut";
60
61                if (!$message)
62                        $message = sql_fetsel("id_objet,objet,statut","spip_forum","id_forum=".intval($id_forum));
63
64                // on recherche le message en verifiant qu'il a bien le statut
65                if ($message){
66                        if ($message['statut']!=$statut_init){
67                                $erreur = _T("notifications:info_moderation_deja_faite",array('id_forum'=>$id_forum,'statut'=>$message['statut']))
68                                        ."<br />$lien_moderation";
69                        }
70                        else {
71                                // trouver le(s) auteur(s) et verifier leur autorisation si besoin
72                                if ($erreur_auteur){
73                                        $res = sql_select("*","spip_auteurs","email=".sql_quote($email,'','text'));
74                                        while ($auteur = sql_fetch($res)){
75                                                if (autoriser("modererforum",$message['objet'],$message['id_objet'],$auteur)){
76                                                        $erreur_auteur = "";
77                                                        // on ajoute l'exception car on est pas identifie avec cet id_auteur
78                                                        autoriser_exception("modererforum",$message['objet'],$message['id_objet']);
79                                                        break;
80                                                }
81                                        }
82                                }
83                                if ($erreur_auteur){
84                                        $erreur = $erreur_auteur 
85                                          . "<br /><small>"
86                                          . _L("(aucun auteur avec l'email $email n'a de droit suffisant)")
87                                          . "</small>";
88                                        spip_log("Aucun auteur pour $email autorise a moderer $id_forum","moderationparemail"._LOG_INFO_IMPORTANTE);
89                                }
90                        }
91                }
92                else {
93                        spip_log("Message forum $id_forum introuvable","moderationparemail"._LOG_INFO_IMPORTANTE);
94                        $erreur = "Message forum $id_forum introuvable"; // improbable ?
95                }
96        }
97
98        if (!$erreur){
99                spip_log("Moderation message $id_forum $statut par $email","moderationparemail"._LOG_INFO_IMPORTANTE);
100                $instituer_forum = charger_fonction("instituer_forum","action");
101                $instituer_forum($arg);
102        }
103
104        // Dans tous les cas on finit sur un minipres qui dit si ok ou echec
105        $titre = (!$erreur ? _T("notifications:info_moderation_confirmee_$statut",array('id_forum'=>$id_forum)) : $erreur);
106        include_spip('inc/minipres');
107        echo minipres($titre,"","",true);
108
109}
Note: See TracBrowser for help on using the repository browser.