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 | |
---|
60 | echo "<html> |
---|
61 | <head> |
---|
62 | <title>"; |
---|
63 | |
---|
64 | echo _T('listes:titrefenetre'); |
---|
65 | |
---|
66 | echo "</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 | |
---|
73 | echo "\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 () { |
---|
82 | if (document.all) {// Internet Explorer |
---|
83 | progress.className = 'show'; |
---|
84 | } else if (document.layers) {// Netscape |
---|
85 | document.progress.visibility = true; |
---|
86 | } else if (document.getElementById) {// Netscape 6+ |
---|
87 | document.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 " <input type='submit' name='ok' value='ok'>"; |
---|
170 | echo " <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> |
---|