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

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

triple oups piqué : id_forum erroné

File size: 3.8 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        $id_forum = explode("-",$arg);
29        $id_forum = array_shift($id_forum);
30        include_spip("inc/filtres");
31        $lien_moderation = lien_ou_expose(url_absolue(generer_url_entite($id_forum,'forum',"","forum$id_forum",false)),_T('notifications:info_moderation_lien_titre'));
32        $erreur = _T('notifications:info_moderation_url_perimee')."<br />$lien_moderation";
33
34        if ($hash==_action_auteur("$action-$arg", '', $pass, 'alea_ephemere')
35          OR $hash==_action_auteur("$action-$arg", '', $pass, 'alea_ephemere_ancien'))
36                $erreur = "";
37        else
38                spip_log("Signature incorrecte pour $arg","moderationparemail"._LOG_INFO_IMPORTANTE);
39
40        // si hash est ok, verifier si l'email correspond a un auteur qui a le droit de faire cette action
41        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);
48                // reconstituer l'arg pour l'action standard
49                $arg = "$id_forum-$statut";
50
51                // 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))){
53                        if ($message['statut']!=$statut_init){
54                                $erreur = _T("notifications:info_moderation_deja_faite",array('id_forum'=>$id_forum,'statut'=>$message['statut']))
55                                        ."<br />$lien_moderation";
56                        }
57                        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;
67                                        }
68                                }
69                                if ($erreur){
70                                        spip_log("Aucun auteur pour $email autorise a moderer $id_forum","moderationparemail"._LOG_INFO_IMPORTANTE);
71                                }
72                        }
73                }
74                else {
75                        spip_log("Message forum $id_forum introuvable","moderationparemail"._LOG_INFO_IMPORTANTE);
76                        $erreur = "Message forum $id_forum introuvable"; // improbable ?
77                }
78        }
79
80        if (!$erreur){
81                spip_log("Moderation message $id_forum $statut par $email","moderationparemail"._LOG_INFO_IMPORTANTE);
82                $instituer_forum = charger_fonction("instituer_forum","action");
83                $instituer_forum($arg);
84        }
85
86        // Dans tous les cas on finit sur un minipres qui dit si ok ou echec
87        $titre = (!$erreur ? _T("notifications:info_moderation_confirmee_$statut",array('id_forum'=>$id_forum)) : $erreur);
88        include_spip('inc/minipres');
89        echo minipres($titre,"","",true);
90
91}
Note: See TracBrowser for help on using the repository browser.