[PLUGINS] +set de base
[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 // http://doc.spip.org/@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 $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 }