[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins / notifications2 / action / instituer_forum_paremail.php
1 <?php
2 /*
3 * Plugin Notifications
4 * (c) 2009-2012 SPIP
5 * Distribue sous licence GPL
6 *
7 */
8
9 if (!defined("_ECRIRE_INC_VERSION")) return;
10
11 // https://code.spip.net/@action_instituer_forum_dist
12 function 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 isset($GLOBALS['visiteur_session']['id_auteur'])
45 AND $GLOBALS['visiteur_session']['id_auteur']
46 AND isset($GLOBALS['visiteur_session']['email'])
47 AND $GLOBALS['visiteur_session']['email']==$email){
48 $message = sql_fetsel("id_objet,objet,statut","spip_forum","id_forum=".intval($id_forum));
49 if (autoriser("modererforum",$message['objet'],$message['id_objet'])){
50 $erreur_auteur = "";
51 $erreur = "";
52 }
53 }
54 else
55 spip_log("Signature incorrecte pour $arg","moderationparemail"._LOG_INFO_IMPORTANTE);
56 }
57
58 // si hash est ok, verifier si l'email correspond a un auteur qui a le droit de faire cette action
59 if (!$erreur){
60 // reconstituer l'arg pour l'action standard
61 $arg = "$id_forum-$statut";
62
63 if (!$message)
64 $message = sql_fetsel("id_objet,objet,statut","spip_forum","id_forum=".intval($id_forum));
65
66 // on recherche le message en verifiant qu'il a bien le statut
67 if ($message){
68 if ($message['statut']!=$statut_init){
69 $erreur = _T("notifications:info_moderation_deja_faite",array('id_forum'=>$id_forum,'statut'=>$message['statut']))
70 ."<br />$lien_moderation";
71 }
72 else {
73 // trouver le(s) auteur(s) et verifier leur autorisation si besoin
74 if ($erreur_auteur){
75 $res = sql_select("*","spip_auteurs","email=".sql_quote($email,'','text'));
76 while ($auteur = sql_fetch($res)){
77 if (autoriser("modererforum",$message['objet'],$message['id_objet'],$auteur)){
78 $erreur_auteur = "";
79 // on ajoute l'exception car on est pas identifie avec cet id_auteur
80 autoriser_exception("modererforum",$message['objet'],$message['id_objet']);
81 break;
82 }
83 }
84 }
85 if ($erreur_auteur){
86 $erreur = $erreur_auteur
87 . "<br /><small>"
88 . _L("(aucun auteur avec l'email $email n'a de droit suffisant)")
89 . "</small>";
90 spip_log("Aucun auteur pour $email autorise a moderer $id_forum","moderationparemail"._LOG_INFO_IMPORTANTE);
91 }
92 }
93 }
94 else {
95 spip_log("Message forum $id_forum introuvable","moderationparemail"._LOG_INFO_IMPORTANTE);
96 $erreur = "Message forum $id_forum introuvable"; // improbable ?
97 }
98 }
99
100 if (!$erreur){
101 spip_log("Moderation message $id_forum $statut par $email","moderationparemail"._LOG_INFO_IMPORTANTE);
102 $instituer_forum = charger_fonction("instituer_forum","action");
103 $instituer_forum($arg);
104 }
105
106 // Dans tous les cas on finit sur un minipres qui dit si ok ou echec
107 $titre = (!$erreur ? _T("notifications:info_moderation_confirmee_$statut",array('id_forum'=>$id_forum)) : $erreur);
108 include_spip('inc/minipres');
109 echo minipres($titre,"","",true);
110
111 }