root/alternc-mailman/tags/1.4.10/bureau/class/m_mailman.php

Revision 1208, 9.2 kB (checked in by anarcat, 4 years ago)

remove a remnant of sympa: a call to defunct lst_deldom

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1 <?php
2 /*
3  $Id$
4  ----------------------------------------------------------------------
5  AlternC - Web Hosting System
6  Copyright (C) 2002 by the AlternC Development Team.
7  http://alternc.org/
8  ----------------------------------------------------------------------
9  Based on:
10  Valentin Lacambre's web hosting softwares: http://altern.org/
11  ----------------------------------------------------------------------
12  LICENSE
13
14  This program is free software; you can redistribute it and/or
15  modify it under the terms of the GNU General Public License (GPL)
16  as published by the Free Software Foundation; either version 2
17  of the License, or (at your option) any later version.
18
19  This program is distributed in the hope that it will be useful,
20  but WITHOUT ANY WARRANTY; without even the implied warranty of
21  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22  GNU General Public License for more details.
23
24  To read the license please visit http://www.gnu.org/copyleft/gpl.html
25  ----------------------------------------------------------------------
26  Original Author of file: Benjamin Sonntag
27  Purpose of file: Manage mailing-lists with Mailman
28  ----------------------------------------------------------------------
29 */
30 class m_mailman {
31  
32   /* ----------------------------------------------------------------- */
33   function m_mailman() {
34   }
35  
36   /* ----------------------------------------------------------------- */
37   /**
38    * Quota name
39    */
40   function alternc_quota_names() {
41     return "mailman";
42   }
43
44   /*****************************************************************************/
45   /** Return the mailing-lists managed by this member : */
46   function enum_ml($domain = null, $order_by = array('domain', 'list')) {
47     global $err,$db,$cuid;
48     $err->log("mailman","enum_ml");
49     $order_by = array_map("addslashes", $order_by);
50     $order = 'ORDER BY `' . join('`,`', $order_by) . '`';
51 $query = "SELECT * FROM mailman WHERE uid=$cuid".
52         (is_null($domain) ? "" : " AND domain='" . addslashes($domain) ."'" ) .
53           " $order;";
54     $db->query($query);
55     if (!$db->num_rows()) {
56       $err->raise("mailman",1);
57       return array();
58     }
59     $mls=array();
60     while ($db->next_record()) {
61       $mls[]=$db->Record;
62     }
63     return $mls;
64   }
65  
66   /*****************************************************************************/
67   function prefix_list() {
68     global $db,$err,$cuid;
69     $r=array();
70     $db->query("SELECT domaine FROM domaines WHERE compte='$cuid' AND gesmx = 1 ORDER BY domaine;");
71     while ($db->next_record()) {
72       $r[]=$db->f("domaine");
73     }
74     return $r;
75   }
76   /*****************************************************************************/
77   function select_prefix_list($current) {
78     global $db,$err;
79     $r=$this->prefix_list();
80     reset($r);
81     while (list($key,$val)=each($r)) {
82       if ($current==$val) $c=" selected=\"selected\""; else $c="";
83       echo "<option$c>$val</option>";
84     }
85     return true;
86   }
87  
88   /*****************************************************************************/
89   /** Create a new list for this member : */
90   function add_lst($domain,$login,$owner,$password) {
91     global $db,$err,$quota,$mail,$cuid;
92     $err->log("mailman","add_lst",$login."@".$domain." - ".$owner);
93     
94     if ($login=="") {
95       $err->raise("mailman",2);
96       return false;
97     }
98     if (!$owner || !$password) {
99       $err->raise("mailman",3);
100       return false;
101     }
102     if (checkmail($owner)) {
103       $err->raise("mailman",4);
104       return false;
105     }
106     $r=$this->prefix_list();
107     if (!in_array($domain,$r) || $domain=="") {
108       $err->raise("mailman",5);
109       return false;
110     }
111     $db->query("SELECT COUNT(*) AS cnt FROM mailman WHERE list='$login';");
112     $db->next_record();
113     if ($db->f("cnt")) {
114         $err->raise("mailman",10);
115         return false;
116     }
117     // Prefixe OK, on verifie la non-existence des mails que l'on va créer...
118     if (!$mail->available($login."@".$domain) ||
119     !$mail->available($login."-request@".$domain) ||
120     !$mail->available($login."-owner@".$domain) ||
121     !$mail->available($login."-admin@".$domain) ||
122     !$mail->available($login."-bounces@".$domain) ||
123     !$mail->available($login."-confirm@".$domain) ||
124     !$mail->available($login."-join@".$domain) ||
125     !$mail->available($login."-leave@".$domain) ||
126     !$mail->available($login."-subscribe@".$domain) ||
127     !$mail->available($login."-unsubscribe@".$domain)) {
128       // This is a mail account already !!!
129       $err->raise("mailman",6);
130       return false;
131     }
132     // Le compte n'existe pas, on vérifie le quota et on le créé.
133     if ($quota->cancreate("mailman")) {
134       // Creation de la liste : 1. recherche du nom de la liste
135       // CA NE MARCHE PAS !
136       $name=$login;
137       $db->query("INSERT INTO mailman (uid,list,domain,name) VALUES ('$cuid','$login','$domain','$name');");
138       if (!$mail->add_wrapper($login,$domain,"/var/lib/mailman/mail/mailman post $name","mailman") ||
139       !$mail->add_wrapper($login."-request",$domain,"/var/lib/mailman/mail/mailman request $name","mailman") ||
140       !$mail->add_wrapper($login."-owner",$domain,"/var/lib/mailman/mail/mailman owner $name","mailman") ||
141       !$mail->add_wrapper($login."-admin",$domain,"/var/lib/mailman/mail/mailman admin $name","mailman") ||
142       !$mail->add_wrapper($login."-bounces",$domain,"/var/lib/mailman/mail/mailman bounces $name","mailman") ||
143       !$mail->add_wrapper($login."-confirm",$domain,"/var/lib/mailman/mail/mailman confirm $name","mailman") ||
144       !$mail->add_wrapper($login."-join",$domain,"/var/lib/mailman/mail/mailman join $name","mailman") ||
145       !$mail->add_wrapper($login."-leave",$domain,"/var/lib/mailman/mail/mailman leave $name","mailman") ||
146       !$mail->add_wrapper($login."-subscribe",$domain,"/var/lib/mailman/mail/mailman subscribe $name","mailman") ||
147       !$mail->add_wrapper($login."-unsubscribe",$domain,"/var/lib/mailman/mail/mailman unsubscribe $name","mailman")
148       ) {
149     $mail->del_wrapper($login,$domain);            $mail->del_wrapper($login."-request",$domain);
150     $mail->del_wrapper($login."-owner",$domain);    $mail->del_wrapper($login."-admin",$domain);
151     $mail->del_wrapper($login."-bounces",$domain);    $mail->del_wrapper($login."-confirm",$domain);   
152     $mail->del_wrapper($login."-join",$domain);    $mail->del_wrapper($login."-leave",$domain);
153     $mail->del_wrapper($login."-subscribe",$domain);    $mail->del_wrapper($login."-unsubscribe",$domain);
154     $db->query("DELETE FROM mailman WHERE name='$name';");
155     return false;
156       }
157       // Wrapper created, sql ok, now let's create the list :)
158       exec("/usr/lib/alternc/mailman.create \"".escapeshellcmd($name."@".$domain)."\" \"".escapeshellcmd($owner)."\" \"".escapeshellcmd($password)."\"");
159       return true;
160     } else {
161       $err->raise("mailman",7); // quota
162       return false;
163     }
164   }
165  
166   /*****************************************************************************/
167   function delete_lst($id) {
168     global $db,$err,$mail,$cuid;
169     $err->log("mailman","delete_lst",$id);
170     
171     $db->query("SELECT * FROM mailman WHERE id=$id and uid='$cuid';");
172     $db->next_record();
173     if (!$db->f("id")) {
174       $err->raise("mailman",9);
175       return false;
176     }
177     exec("/usr/lib/alternc/mailman.delete ".escapeshellarg($db->f("name")));
178     $login=$db->f("list");
179     $domain=$db->f("domain");
180     $db->query("DELETE FROM mailman WHERE id=$id");
181     $mail->del_wrapper($login,$domain);            $mail->del_wrapper($login."-request",$domain);
182     $mail->del_wrapper($login."-owner",$domain);    $mail->del_wrapper($login."-admin",$domain);
183     $mail->del_wrapper($login."-bounces",$domain);    $mail->del_wrapper($login."-confirm",$domain);   
184     $mail->del_wrapper($login."-join",$domain);    $mail->del_wrapper($login."-leave",$domain);
185     $mail->del_wrapper($login."-subscribe",$domain);    $mail->del_wrapper($login."-unsubscribe",$domain);
186     return $login."@".$domain;
187   }
188
189   /* ----------------------------------------------------------------- */
190   /** Returns the list's members as a text file, one subscriber per
191    *   line.
192    */
193  function members($id) {
194     global $err,$db,$cuid;
195     $err->log("mailman","members");
196     $db->query("SELECT * FROM mailman WHERE uid='$cuid' AND id='$id';");
197     if (!$db->num_rows()) {
198       $err->raise("mailman",1);
199       return false;
200     }
201     $db->next_record();
202     passthru("/usr/lib/alternc/mailman.list ".$db->Record["list"]);
203   }
204
205
206   /* ----------------------------------------------------------------- */
207   /** Fonction appellée par domaines lorsqu'un domaine est effacé.
208    * Cette fonction efface tous les comptes mails du domaine concerné.
209    * @param string $dom Domaine à effacer
210    * @return boolean TRUE si le domaine a bien été effacé, FALSE si une erreur s'est produite.
211    * @access private
212    */
213   function alternc_del_mx_domain($dom) {
214     global $err;
215     $err->log("mailman","del_dom",$dom);
216
217     // Suppression des listes du domaine
218     $listes=$this->enum_ml($dom);
219     while (list($key,$val)=each($listes)) {
220       $this->delete_lst($val["id"]);
221     }
222     return true;
223   }
224
225   /* ----------------------------------------------------------------- */
226   function alternc_get_quota($name) {
227     global $err,$cuid,$db;
228     if ($name=="mailman") {
229       $db->query("SELECT COUNT(*) AS cnt FROM mailman WHERE uid='$cuid';");
230       $db->next_record();
231       return $db->f("cnt");
232     } else return false;
233   }
234
235 } /* Class m_mailman */
236
237 ?>
238
Note: See TracBrowser for help on using the browser.