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

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

cartouche PHPDoc

File size: 3.8 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                                        spip_log("Aucun auteur pour $email autorise a moderer $id_forum","moderationparemail"._LOG_INFO_IMPORTANTE);
86                                }
87                        }
88                }
89                else {
90                        spip_log("Message forum $id_forum introuvable","moderationparemail"._LOG_INFO_IMPORTANTE);
91                        $erreur = "Message forum $id_forum introuvable"; // improbable ?
92                }
93        }
94
95        if (!$erreur){
96                spip_log("Moderation message $id_forum $statut par $email","moderationparemail"._LOG_INFO_IMPORTANTE);
97                $instituer_forum = charger_fonction("instituer_forum","action");
98                $instituer_forum($arg);
99        }
100
101        // Dans tous les cas on finit sur un minipres qui dit si ok ou echec
102        $titre = (!$erreur ? _T("notifications:info_moderation_confirmee_$statut",array('id_forum'=>$id_forum)) : $erreur);
103        include_spip('inc/minipres');
104        echo minipres($titre,"","",true);
105
106}
Note: See TracBrowser for help on using the repository browser.