source: spip-zone/_plugins_/mailman_popup/mailman_inscriptions.html @ 70524

Last change on this file since 70524 was 3225, checked in by cedric.morin@…, 15 years ago

passage en plugin de _contribs_\_email_\_mailinglists_\_mailman_\mailman_popup
a finir de tester avec un mailman sous la main

File size: 7.3 KB
Line 
1#CACHE{3600}
2<?php
3
4        // definitions des listes : a faire dans mes_options.php
5        global $mailman_data;
6        if (!$mailman_data)
7                $mailman_data = array(
8                        'spip' => Array('pretty' => 'SPIP', listeon=>'spip-on@rezo.net',
9                                responsable =>'spip-owner@rezo.net'),
10                        'test' => Array('pretty' => 'test', listeon=>'test-on@rezo.net',
11                                responsable =>'test-owner@rezo.net'),
12                        'disko' => Array('pretty' => 'Disko',
13                                'listeon' =>'disko-on@other_server.org',
14                                'responsable' =>'disko-owner@other_server.org',
15                                'langue' => 'eo')
16                );
17       
18        // config mailman
19        $mm_who = "~mailman/bin/list_members $liste";
20        $mm_ismember = "~mailman/bin/find_member -l $liste";
21        $mm_remove = "~mailman/bin/remove_members --nouserack $liste";
22        $mm_add = "~mailman/bin/add_members -w n -r - $liste";
23        $mm_invite = "~mailman/bin/invite_members -r - $liste";
24
25
26        // definitions speciales
27        $charsets = Array('fr'=>'iso-8859-1','fa'=>'utf-8', 'zh'=>'utf-8', 'pt'=>'iso-8859-1', es=>'iso-8859-1', 'eo'=>'utf-8');
28
29        // securite
30        if (!$liste = ereg_replace("[^a-z0-9_-]+", "", strtolower($liste))) die('x');
31        // chercher dans les listes de Mailman dont les archives sont publiques
32        if (!$mailman_data[$liste]) {
33                if (@file_exists("/var/local/mailman/archives/public/$liste")) {
34                        $mailman_data[$liste] = Array (
35                                listeon=>"$liste-on@rezo.net",
36                                responsable=>"$liste-owner@rezo.net",
37                                pretty=>"$liste"
38                        );
39                }
40        }
41        if (!$mailman_data[$liste]) die('x');
42
43        // config liste
44        if (!$lang AND !$lang = $mailman_data[$liste]['langue']) $lang = 'fr';
45        if (!$charset = $charsets[$lang]) $charset = 'iso-8859-1';
46
47        // charger le fichier de langue
48        // (tricher sur ecrire/)
49        /*include ('inc_version.php3');
50        include ('inc_lang.php3');
51        include ('inc_charsets.php3');
52        include ('inc_filtres.php3');*/
53        $dir_ecrire='';
54        $flag_ecrire=true;
55        $meta['langues_proposees'] = $all_langs = 'fr,fa,cpf,oci_ni,bg,es,en,nl,ar,zh,pt,eo';
56        $meta['charset'] = $charset;
57        changer_langue($lang);
58
59
60echo "<html>
61<head>
62<title>";
63
64echo _T('listes:titrefenetre');
65
66echo "</title>
67<link rel='stylesheet' href='#CHEMIN{img_pack/mailman_popup.css}' type='text/css'>
68<meta http-equiv='Content-Type' content='text/html; charset=$charset'>
69</head>
70<body dir='".lang_dir($lang, 'ltr', 'rtl')."'>
71";
72
73echo "\n
74<style>
75<!--
76.hide { position:absolute; visibility:hidden; }
77.show { position:absolute; visibility:visible; }
78-->
79</style>
80<script type='text/javascript'><!--
81        function affiche_attente () {
82if (document.all) {// Internet Explorer
83progress.className = 'show';
84} else if (document.layers) {// Netscape
85document.progress.visibility = true;
86} else if (document.getElementById) {// Netscape 6+
87document.getElementById('progress').className = 'show';
88}
89        }
90// --></script>\n";
91
92
93        // recupere la liste de tous les abonnes :
94        // echo `$mm_who`;
95
96        // si une adresse est precisee, la tester contre la liste
97        $member = -1;
98
99        $s_mail = htmlspecialchars($var_email);
100        eregi("[-+_.'a-z0-9]+@[-.a-z0-9]+\.[a-z]+", $var_email, $regs);
101        $var_email = $regs[0];
102        if ($var_email AND $var_action)
103                $member = is_member($var_email);
104
105        switch ($var_action) {
106                case 'sub':
107                        if ($member == 1) {
108                                $retour = "<font class='txtgris'>"._T('listes:deja', Array('var_email'=>$var_email, 'liste'=>$liste))."</font>";
109                        } else if ($var_email) {
110                                // inscription
111                                // `echo "$var_email" | $mm_add`;
112                                $listeon = $mailman_data[$liste]['listeon'];
113
114                                @mail ($listeon, ' ', ' ', "From: $var_email\n", "-f$var_email");
115
116                                $retour = "<font class='txtgris'>"._T('listes:ajoutee', Array('var_email'=>$var_email, 'liste'=>$liste))."</font>";
117                                $fin = true;
118                        } else {
119                                $retour = "<font class='txtgris'>"._T('listes:veuillez')."</font>";
120                        }
121                        break;
122
123                case 'unsub':
124                        if ($member == 1) {
125                                // desabonner
126                                $listeoff = ereg_replace("-on@", "-off@", $mailman_data[$liste]['listeon']);
127                                @mail($listeoff, "unsubscribe", "unsubscribe", "From: $var_email\r\n", "-f$var_email");
128# OLD STYLE #                           `$mm_remove "$var_email"`;
129                                $retour = "<span class='txtgris'>"._T('listes:desabo')."</span>";
130                                $fin = true;
131                                $responsable = $mailman_data[$liste]['responsable'];
132
133                                $sujet = filtrer_entites(_T('listes:subject_removed', array('liste' => $liste)));
134                                if ($charset == 'utf-8') {
135                                        @mb_internal_encoding($charset);
136                                        $sujet = @mb_encode_mimeheader(unicode_to_utf_8($sujet), 'utf-8', 'Q');
137                                }
138                                @mail ($var_email, $sujet, unicode_to_utf_8(filtrer_entites(_T('listes:mail_removed', array('var_email'=>$var_email, 'liste'=>$liste, 'responsable'=>$responsable)))),
139                                        "From: $responsable\n".
140                                        "MIME-Version: 1.0\n".
141                                        "Content-Type: text/plain; charset=$charset\n".
142                                        "Content-Transfer-Encoding: 8bit\n",
143                                "-f$responsable");
144                        } else if ($var_email) {
145                                $erreur = "<font class='txtgris'>"._T('listes:pasabo', array('var_email'=>$var_email, 'liste'=>$liste))."</font>";
146                        } else {
147                                $retour = "<span class='txtgris'>"._T('listes:veuillez')."</span>";
148                        }
149                        break;
150
151                case '':
152                default:
153                        break;
154        }
155
156
157
158
159        // affichage
160        echo "<table border='0' width='250' cellpadding='10'><tr><td>\n";
161        if ($erreur) echo "<font class='txtgris'><b>$erreur</b></font>\n";
162        if ($retour) echo "$retour\n";
163        else {
164                echo "<form method='post' action='".$_SERVER['SCRIPT_URL']."' onsubmit='affiche_attente ();'>\n";
165                echo "<input type='hidden' name='liste' value='$liste'>\n";
166                echo "<input type='hidden' name='lang' value='$lang'>\n";
167                echo "<br><span class='txtgris'>"._T('listes:votreemail')."</span><br>
168                 <input type='text' length='15' name='var_email' value='$s_mail'>\n";
169                //echo "&nbsp; &nbsp; &nbsp; <input type='submit' name='ok' value='ok'>";
170                echo "&nbsp;<input type='image' name='ok' src='#CHEMIN{img_pack/mailmanpopup_okbis.gif}' vspace='0' hspace='0' align='top'>";
171               
172                echo "<br><br><span class='txtgris'><input type='radio' name='var_action' value='sub' id='sub'".($var_action<>'unsub' ? " checked" : "")."><label for='sub'> "._T('listes:inscription', array('liste'=>$liste))."</label><br />\n</span>";
173                echo "<span class='txtgris'><input type='radio' name='var_action' value='unsub' id='unsub'".($var_action=='unsub' ? " checked" : "")."><label for='unsub'> "._T('listes:quitter')."</label>\n</span>";
174                echo "\n</form>\n";
175        }
176        echo " <tr>
177    <td>";
178?>
179<span id="progress" class="hide" style="font-family: Verdana,Arial,Sans,sans-serif;  border-style: solid ; border-width: 1; border-color: #E86519; font-size: 11px;">
180<script type='text/javascript'><!--
181        document.write("<?php echo _T('listes:patientez'); ?>");
182// --></script></span>
183<?php
184    echo "<div align='right'><a href='javascript:window.close();' class='txtgris'>"._T('listes:fermer')."</a></div>\n";
185    echo "<div align='right'><a href='javascript:window.close();' class='txtgris'><img src='#CHEMIN{img_pack/mailmanpopup_croix.gif}' border='0' /></a></div>";
186    echo "</td>\n</tr>\n</table>";
187
188        // chercher un membre
189        function is_member($email) {
190#               global $mm_ismember;
191                global $mm_who, $liste;
192                $email_regexp = preg_replace('/[.+?[\]]/', '\\\\\\0', $email);
193
194                $cache = _DIR_CACHE . 'popup_'.$liste.'.txt';
195                if (time() - @filemtime($cache) > 600) {
196                        $tous = `$mm_who`;
197                        if ($f = @fopen("$cache.tmp", "w")) {
198                                @fwrite($f, $tous);
199                                @fclose($f);
200                                @rename ("$cache.tmp", $cache);
201                        }
202                }
203                $result = `grep -l -E "$email_regexp" $cache`;
204                if ($result)
205                        return true;
206                else
207                        return false;
208
209                #       if (eregi("\n$email_regexp ", "\n".$result))
210                #               return true;
211        }
212
213// print_r($GLOBALS);
214
215?>
216</body>
217</html>
Note: See TracBrowser for help on using the repository browser.