source: trunk/bureau/class/m_mailman.php @ 1185

Revision 1185, 9.3 KB checked in by anonymous, 9 years ago (diff)

Ajout de la liste des abonnes des listes

  • 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*/
30class 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 false;
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      $quota->inc("mailman"); // incrémentation du quota
135      // Creation de la liste : 1. recherche du nom de la liste
136      // CA NE MARCHE PAS !
137      $name=$login; 
138      $db->query("INSERT INTO mailman (uid,list,domain,name) VALUES ('$cuid','$login','$domain','$name');");
139      if (!$mail->add_wrapper($login,$domain,"/var/lib/mailman/mail/mailman post $name","mailman") || 
140          !$mail->add_wrapper($login."-request",$domain,"/var/lib/mailman/mail/mailman request $name","mailman") || 
141          !$mail->add_wrapper($login."-owner",$domain,"/var/lib/mailman/mail/mailman owner $name","mailman") || 
142          !$mail->add_wrapper($login."-admin",$domain,"/var/lib/mailman/mail/mailman admin $name","mailman") || 
143          !$mail->add_wrapper($login."-bounces",$domain,"/var/lib/mailman/mail/mailman bounces $name","mailman") || 
144          !$mail->add_wrapper($login."-confirm",$domain,"/var/lib/mailman/mail/mailman confirm $name","mailman") || 
145          !$mail->add_wrapper($login."-join",$domain,"/var/lib/mailman/mail/mailman join $name","mailman") ||
146          !$mail->add_wrapper($login."-leave",$domain,"/var/lib/mailman/mail/mailman leave $name","mailman") || 
147          !$mail->add_wrapper($login."-subscribe",$domain,"/var/lib/mailman/mail/mailman subscribe $name","mailman") || 
148          !$mail->add_wrapper($login."-unsubscribe",$domain,"/var/lib/mailman/mail/mailman unsubscribe $name","mailman")
149          ) {
150        $mail->del_wrapper($login,$domain);             $mail->del_wrapper($login."-request",$domain);
151        $mail->del_wrapper($login."-owner",$domain);    $mail->del_wrapper($login."-admin",$domain);
152        $mail->del_wrapper($login."-bounces",$domain);  $mail->del_wrapper($login."-confirm",$domain); 
153        $mail->del_wrapper($login."-join",$domain);     $mail->del_wrapper($login."-leave",$domain);
154        $mail->del_wrapper($login."-subscribe",$domain);        $mail->del_wrapper($login."-unsubscribe",$domain);
155        $db->query("DELETE FROM mailman WHERE name='$name';");
156        return false;
157      }
158      // Wrapper created, sql ok, now let's create the list :)
159      exec("/usr/lib/alternc/mailman.create \"".escapeshellcmd($name."@".$domain)."\" \"".escapeshellcmd($owner)."\" \"".escapeshellcmd($password)."\"");
160      return true;
161    } else {
162      $err->raise("mailman",7); // quota
163      return false;
164    }
165  }
166 
167  /*****************************************************************************/
168  function delete_lst($id) {
169    global $db,$err,$quota,$mail,$cuid;
170    $err->log("mailman","delete_lst",$id);
171   
172    $db->query("SELECT * FROM mailman WHERE id=$id and uid='$cuid';");
173    $db->next_record();
174    if (!$db->f("id")) {
175      $err->raise("mailman",9);
176      return false;
177    }
178    exec("/usr/lib/alternc/mailman.delete ".escapeshellarg($db->f("name")));
179    $login=$db->f("list");
180    $domain=$db->f("domain");
181    $db->query("DELETE FROM mailman WHERE id=$id");
182    $mail->del_wrapper($login,$domain);         $mail->del_wrapper($login."-request",$domain);
183    $mail->del_wrapper($login."-owner",$domain);        $mail->del_wrapper($login."-admin",$domain);
184    $mail->del_wrapper($login."-bounces",$domain);      $mail->del_wrapper($login."-confirm",$domain); 
185    $mail->del_wrapper($login."-join",$domain); $mail->del_wrapper($login."-leave",$domain);
186    $mail->del_wrapper($login."-subscribe",$domain);    $mail->del_wrapper($login."-unsubscribe",$domain);
187    $quota->dec("mailman");
188    return $login."@".$domain;
189  }
190
191  /* ----------------------------------------------------------------- */
192  /** Returns the list's members as a text file, one subscriber per
193   *   line.
194   */
195 function members($id) {
196    global $err,$db,$cuid;
197    $err->log("mailman","members");
198    $db->query("SELECT * FROM mailman WHERE uid='$cuid' AND id='$id';");
199    if (!$db->num_rows()) {
200      $err->raise("mailman",1);
201      return false;
202    }
203    $db->next_record();
204    passthru("/usr/lib/alternc/mailman.list ".$db->Record["list"]);
205  }
206
207
208  /* ----------------------------------------------------------------- */
209  /** Fonction appellée par domaines lorsqu'un domaine est effacé.
210   * Cette fonction efface tous les comptes mails du domaine concerné.
211   * @param string $dom Domaine à effacer
212   * @return boolean TRUE si le domaine a bien été effacé, FALSE si une erreur s'est produite.
213   * @access private
214   */
215  function alternc_del_mx_domain($dom) {
216    global $err;
217    $err->log("mailman","del_dom",$dom);
218
219    // Suppression des listes du domaine
220    $listes=$this->enum_ml($dom);
221    while (list($key,$val)=each($listes)) {
222      $this->delete_lst($val["id"]);
223    }
224    exec("/usr/lib/alternc/lst_deldom ".escapeshellarg($dom));
225    return true;
226  }
227
228  /* ----------------------------------------------------------------- */
229  function alternc_quota_check($id=-1) {
230    global $quota,$err,$cuid,$db;
231    $db->query("SELECT COUNT(*) AS cnt FROM mailman WHERE uid='$cuid';");
232    $db->next_record();
233    $quota->setquota("mailman",$db->f("cnt"),1);
234    return true;
235  }
236
237} /* Class m_mailman */
238
239?>
Note: See TracBrowser for help on using the repository browser.