source: spip-zone/_plugins_/comments/trunk/comments_fonctions.php @ 66098

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

Permettre aux internautes de s’abonner (et se désabonner) par courriel à chaque discussion, au cas par cas, simplement, via une simple case à cocher (http://contrib.spip.net/Plugin-Comments-notes-de-developpement)
La fonctionnalité necessite le plugin notifications en v2.2.1 mini (qui gère la notification et le desabonnement)

File size: 5.5 KB
Line 
1<?php
2/*
3 * Plugin Comments
4 * (c) 2010 Collectif
5 * Distribue sous licence GPL
6 *
7 */
8
9/* pour que le pipeline ne rale pas ! */
10function comments_autoriser(){}
11
12/**
13 *
14 * Inserer des styles
15 *
16 * @param string $flux
17 * @return string
18 */
19function comments_insert_head_css($flux){
20        if ($f = find_in_path("css/comments.css"))
21                $flux .= '<link rel="stylesheet" href="'.direction_css($f).'" type="text/css" media="all" />';
22        return $flux;
23}
24
25/***
26 * (c)James 2006, Licence GNU/GPL
27 * |me compare un id_auteur, par exemple,
28 * d'une boucle FORUMS avec les auteurs d'un objet
29 * et renvoie la valeur booleenne true (vrai) si on trouve
30 *  une correspondance
31 * utilisation:
32 * <div id="forum#ID_FORUM"[(#ID_OBJET|me{#OBJET,#ID_AUTEUR})class="me"]>
33 *
34 * @param int $id_objet
35 * @param string $objet
36 * @param int $id_auteur
37 * @param string $sioui
38 * @param string $sinon
39 * @return bool
40 */
41function filtre_me_dist($id_objet, $objet, $id_auteur, $sioui = ' ', $sinon = '') {
42        static $auteurs = array();
43        if(!isset($auteurs[$objet][$id_objet])) {
44                $r = sql_allfetsel("id_auteur","spip_auteurs_liens","objet=".sql_quote($objet)." AND id_objet=".intval($id_objet));
45                $auteurs[$objet][$id_objet] = array_map('reset',$r);
46        }
47        return (in_array($id_auteur, $auteurs[$objet][$id_objet])?$sioui:$sinon);
48}
49
50/**
51 * Generer les boutons d'admin des forum selon les droits du visiteur
52 * en SPIP >= 2.1 uniquement
53 *
54 * @param object $p
55 * @return object
56 */
57function balise_BOUTONS_ADMIN_FORUM_dist($p) {
58        if (($_id = interprete_argument_balise(1,$p))===NULL)
59                $_id = champ_sql('id_forum', $p);
60
61                $p->code = "
62'<'.'?php
63        if (\$GLOBALS[\'visiteur_session\'][\'statut\']==\'0minirezo\'
64                AND (\$id = '.intval($_id).')
65                AND     include_spip(\'inc/autoriser\')
66                AND autoriser(\'moderer\',\'forum\',\$id)) {
67                        include_spip(\'inc/actions\');include_spip(\'inc/filtres\');
68                        echo \"<div class=\'boutons spip-admin actions modererforum\'>\"
69                        . bouton_action(_T(\'forum:icone_supprimer_message\'),generer_action_auteur(\'instituer_forum\',\$id.\'-off\',ancre_url(self(),\'forum\')))
70                        . bouton_action(_T(\'forum:icone_bruler_message\'),generer_action_auteur(\'instituer_forum\',\$id.\'-spam\',ancre_url(self(),\'forum\')))
71                        . \"</div>\";
72                }
73?'.'>'";
74
75        $p->interdire_scripts = false;
76        return $p;
77}
78
79/**
80 * Charger la saisie du formulaire forum : declarer le champ 'notification' en plus
81 * (seulement utilise si plugin notifications dispo)
82 *
83 * @param array $flux
84 * @return array
85 */
86function comments_formulaire_charger($flux){
87        if ($flux['args']['form']=='forum'){
88                $flux['data']['notification']=1;
89        }
90        return $flux;
91}
92
93/**
94 * Verifier la saisie dans le formulaire forum :
95 * login obligatoire
96 * email optionnellement obligatoire
97 *
98 * @param array $flux
99 * @return array
100 */
101function comments_formulaire_verifier($flux){
102
103        if ($flux['args']['form']=='forum'){
104                // on doit indiquer un login au moins
105                if (!isset($GLOBALS['visiteur_session']['statut'])){
106                        if (!_request('session_nom') AND
107                                (!isset($GLOBALS['visiteur_session']['session_nom']) OR !strlen($GLOBALS['visiteur_session']['session_nom']))){
108                                $flux['data']['session_nom'] = _T('info_obligatoire');
109                                unset($flux['data']['previsu']);
110                        }
111                        include_spip("inc/config");
112                        if (lire_config("comments/email_obli",'')
113                                AND !_request('session_email')
114                                AND (!isset($GLOBALS['visiteur_session']['session_email']) OR !strlen($GLOBALS['visiteur_session']['session_email']))){
115                                $flux['data']['session_email'] = _T('info_obligatoire');
116                                unset($flux['data']['previsu']);
117                        }
118                }
119        }
120        return $flux;
121}
122
123/**
124 * Traiter le formulaire de forum :
125 *
126 * - ne pas rediriger en fin de traitement si pas d'url demandee explicitement
127 *   et si on est pas sur la ?page=forum
128 *
129 * - preparer un message en cas de moderation
130 *
131 * @param array $flux
132 * @return array
133 */
134function comments_formulaire_traiter($flux){
135        if ($flux['args']['form']=='forum'
136                ){
137                // args :
138                // $objet,$id_objet, $id_forum,$ajouter_mot, $ajouter_groupe, $afficher_previsu, $retour
139                // si pas d'url de retour explicite
140                $redirect = $flux['data']['redirect'];
141                if (!isset($flux['args']['args'][6]) OR !$flux['args']['args'][6]){
142                        // si on est pas sur la page forum, on ne redirige pas
143                        // mais il faudra traiter l'ancre
144                        if (!($p=_request('page')) OR $p!=='forum'){
145                                unset($flux['data']['redirect']);
146                                // mais on le remet editable !
147                                $flux['data']['editable']=true;
148                                // vider la saisie :
149                                set_request('texte');
150                                set_request('titre');
151                                set_request('url_site');
152                                set_request('ajouter_groupe');
153                                set_request('ajouter_mot');
154                                set_request('id_forum');
155                                set_request('notification');
156                        }
157                }
158
159                $id_forum = $flux['data']['id_forum'];
160                include_spip('base/abstract_sql');
161                $statut = sql_getfetsel('statut','spip_forum','id_forum='.intval($id_forum));
162                if ($statut=='publie'){
163                        // le message est OK, il suffit de mettre une ancre !
164                        $flux['data']['message_ok'] = 
165                          _T('comments:reponse_comment_ok');
166                        if (!isset($flux['data']['redirect'])){
167                                $flux['data']['message_ok'] .=
168                                                "<script type='text/javascript'>function move_comment$id_forum(){
169jQuery('#formulaire_forum .reponse_formulaire').detach().appendTo(jQuery('#forum$id_forum').parent()).addClass('success');
170jQuery('#forum$id_forum').parent().positionner();
171//window.location.hash='forum$id_forum';
172}
173jQuery(function(){jQuery('.comments-posts').ajaxReload({callback:move_comment$id_forum})});</script>";
174
175                        }
176                }
177                else {
178                        // dire que le message a ete modere
179                        $flux['data']['message_ok'] = _T('comments:reponse_comment_modere');
180                }
181               
182        }
183        return $flux;
184
185}
186?>
Note: See TracBrowser for help on using the repository browser.