source: alternc-mailman/trunk/bureau/class/m_mailman.php @ 2204

Revision 2204, 10.1 KB checked in by anarcat, 5 years ago (diff)

call the delete wrapper with the domain argument

Closes: #1096

  • 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
31class m_mailman {
32
33  /* ----------------------------------------------------------------- */
34  function m_mailman() {
35  }
36
37  /* ----------------------------------------------------------------- */
38  /**
39   * Quota name
40   */
41  function alternc_quota_names() {
42    return "mailman";
43  }
44
45  /*****************************************************************************/
46  /** Return the mailing-lists managed by this member : */
47  function enum_ml($domain = null, $order_by = array('domain', 'list')) {
48    global $err,$db,$cuid;
49    $err->log("mailman","enum_ml");
50    $order_by = array_map("addslashes", $order_by);
51    $order = 'ORDER BY `' . join('`,`', $order_by) . '`';
52$query = "SELECT * FROM mailman WHERE uid=$cuid".
53        (is_null($domain) ? "" : " AND domain='" . addslashes($domain) ."'" ) .
54              " $order;";
55    $db->query($query);
56    if (!$db->num_rows()) {
57      $err->raise("mailman",1);
58      return array();
59    }
60    $mls=array();
61    while ($db->next_record()) {
62      $mls[]=$db->Record;
63    }
64    return $mls;
65  }
66
67  /*****************************************************************************/
68  function prefix_list() {
69    global $db,$err,$cuid;
70    $r=array();
71    $db->query("SELECT domaine FROM domaines WHERE compte='$cuid' AND gesmx = 1 ORDER BY domaine;");
72    while ($db->next_record()) {
73      $r[]=$db->f("domaine");
74    }
75    return $r;
76  }
77  /*****************************************************************************/
78  function select_prefix_list($current) {
79    global $db,$err;
80    $r=$this->prefix_list();
81    reset($r);
82    while (list($key,$val)=each($r)) {
83      if ($current==$val) $c=" selected=\"selected\""; else $c="";
84      echo "<option$c>$val</option>";
85    }
86    return true;
87  }
88
89  /*****************************************************************************/
90        /** Get list informations */
91        function get_lst($id)
92        {
93                global $db, $err, $cuid;
94                $err->log("mailman","get_list", $cuid);
95
96                $q = "SELECT * FROM mailman WHERE uid = '" . $cuid . "' && id = '" . $id . "'";
97                $db->query($q);
98                $db->next_record();
99                if (!$db->f("id"))
100                {
101                        $err->raise("mailman",9);
102                        return false;
103                }
104                $login = $db->f("list");
105                $domain = $db->f("domain");
106                return $login . "@" . $domain;
107        }
108
109  /*****************************************************************************/
110  /** Create a new list for this member : */
111  function add_lst($domain,$login,$owner,$password) {
112    global $db,$err,$quota,$mail,$cuid;
113    $err->log("mailman","add_lst",$login."@".$domain." - ".$owner);
114    /* the list' internal name */
115    // $name = $login . '-' . $domain; # works only with the
116    // VirtualMailman patch
117    $name = $login;
118
119    if ($login=="") {
120      $err->raise("mailman",2);
121      return false;
122    }
123    if (!$owner || !$password) {
124      $err->raise("mailman",3);
125      return false;
126    }
127    if (checkmail($owner)) {
128      $err->raise("mailman",4);
129      return false;
130    }
131    $r=$this->prefix_list();
132    if (!in_array($domain,$r) || $domain=="") {
133      $err->raise("mailman",5);
134      return false;
135    }
136    $db->query("SELECT COUNT(*) AS cnt FROM mailman WHERE name='$name';");
137    $db->next_record();
138    if ($db->f("cnt")) {
139        $err->raise("mailman",10);
140        return false;
141    }
142    // Prefixe OK, on verifie la non-existence des mails que l'on va créer...
143    if (!$mail->available($login."@".$domain) ||
144        !$mail->available($login."-request@".$domain) ||
145        !$mail->available($login."-owner@".$domain) ||
146        !$mail->available($login."-admin@".$domain) ||
147        !$mail->available($login."-bounces@".$domain) ||
148        !$mail->available($login."-confirm@".$domain) ||
149        !$mail->available($login."-join@".$domain) ||
150        !$mail->available($login."-leave@".$domain) ||
151        !$mail->available($login."-subscribe@".$domain) ||
152        !$mail->available($login."-unsubscribe@".$domain)) {
153      // This is a mail account already !!!
154      $err->raise("mailman",6);
155      return false;
156    }
157    // Le compte n'existe pas, on vérifie le quota et on le créé.
158    if ($quota->cancreate("mailman")) {
159      // Creation de la liste : 1. recherche du nom de la liste
160      // CA NE MARCHE PAS !
161      $db->query("INSERT INTO mailman (uid,list,domain,name) VALUES ('$cuid','$login','$domain','$name');");
162      if (!$mail->add_wrapper($login,$domain,"/var/lib/mailman/mail/mailman post $name","mailman") ||
163          !$mail->add_wrapper($login."-request",$domain,"/var/lib/mailman/mail/mailman request $name","mailman") ||
164          !$mail->add_wrapper($login."-owner",$domain,"/var/lib/mailman/mail/mailman owner $name","mailman") ||
165          !$mail->add_wrapper($login."-admin",$domain,"/var/lib/mailman/mail/mailman admin $name","mailman") ||
166          !$mail->add_wrapper($login."-bounces",$domain,"/var/lib/mailman/mail/mailman bounces $name","mailman") ||
167          !$mail->add_wrapper($login."-confirm",$domain,"/var/lib/mailman/mail/mailman confirm $name","mailman") ||
168          !$mail->add_wrapper($login."-join",$domain,"/var/lib/mailman/mail/mailman join $name","mailman") ||
169          !$mail->add_wrapper($login."-leave",$domain,"/var/lib/mailman/mail/mailman leave $name","mailman") ||
170          !$mail->add_wrapper($login."-subscribe",$domain,"/var/lib/mailman/mail/mailman subscribe $name","mailman") ||
171          !$mail->add_wrapper($login."-unsubscribe",$domain,"/var/lib/mailman/mail/mailman unsubscribe $name","mailman")
172          ) {
173        $mail->del_wrapper($login,$domain);             $mail->del_wrapper($login."-request",$domain);
174        $mail->del_wrapper($login."-owner",$domain);    $mail->del_wrapper($login."-admin",$domain);
175        $mail->del_wrapper($login."-bounces",$domain);  $mail->del_wrapper($login."-confirm",$domain);
176        $mail->del_wrapper($login."-join",$domain);     $mail->del_wrapper($login."-leave",$domain);
177        $mail->del_wrapper($login."-subscribe",$domain);        $mail->del_wrapper($login."-unsubscribe",$domain);
178        $db->query("DELETE FROM mailman WHERE name='$name';");
179        return false;
180      }
181      // Wrapper created, sql ok, now let's create the list :)
182      exec("/usr/lib/alternc/mailman.create \"".escapeshellcmd($login."@".$domain)."\" \"".escapeshellcmd($owner)."\" \"".escapeshellcmd($password)."\"", &$output, &$return);
183      if ($return) {
184        $err->raise("mailman", "failed to create mailman list. error: %d, output: %s", $return, join("\n", $output));
185      }
186      return !$return;
187    } else {
188      $err->raise("mailman",7); // quota
189      return false;
190    }
191  }
192
193  /*****************************************************************************/
194  function delete_lst($id) {
195    global $db,$err,$mail,$cuid;
196    $err->log("mailman","delete_lst",$id);
197
198    $db->query("SELECT * FROM mailman WHERE id=$id and uid='$cuid';");
199    $db->next_record();
200    if (!$db->f("id")) {
201      $err->raise("mailman",9);
202      return false;
203    }
204    $login=$db->f("list");
205    $domain=$db->f("domain");
206    exec("/usr/lib/alternc/mailman.delete ".escapeshellarg($db->f("name").'@'.$domain), &$output, &$return);
207    if ($return) {
208      $err->raise("mailman", "failed to delete mailman list. error: %d, output: %s", $return, join("\n", $output));
209      return false;
210    }
211    $db->query("DELETE FROM mailman WHERE id=$id");
212    $mail->del_wrapper($login,$domain);         $mail->del_wrapper($login."-request",$domain);
213    $mail->del_wrapper($login."-owner",$domain);        $mail->del_wrapper($login."-admin",$domain);
214    $mail->del_wrapper($login."-bounces",$domain);      $mail->del_wrapper($login."-confirm",$domain);
215    $mail->del_wrapper($login."-join",$domain); $mail->del_wrapper($login."-leave",$domain);
216    $mail->del_wrapper($login."-subscribe",$domain);    $mail->del_wrapper($login."-unsubscribe",$domain);
217    return $login."@".$domain;
218  }
219
220  /* ----------------------------------------------------------------- */
221  /** Returns the list's members as a text file, one subscriber per
222   *   line.
223   */
224 function members($id) {
225    global $err,$db,$cuid;
226    $err->log("mailman","members");
227    $db->query("SELECT * FROM mailman WHERE uid='$cuid' AND id='$id';");
228    if (!$db->num_rows()) {
229      $err->raise("mailman",1);
230      return false;
231    }
232    $db->next_record();
233    passthru("/usr/lib/alternc/mailman.list ".$db->Record["list"]);
234  }
235
236
237  /* ----------------------------------------------------------------- */
238  /** Fonction appellée par domaines lorsqu'un domaine est effacé.
239   * Cette fonction efface tous les comptes mails du domaine concerné.
240   * @param string $dom Domaine à effacer
241   * @return boolean TRUE si le domaine a bien été effacé, FALSE si une erreur s'est produite.
242   * @access private
243   */
244  function alternc_del_mx_domain($dom) {
245    global $err;
246    $err->log("mailman","del_dom",$dom);
247
248    // Suppression des listes du domaine
249    $listes=$this->enum_ml($dom);
250    while (list($key,$val)=each($listes)) {
251      $this->delete_lst($val["id"]);
252    }
253    return true;
254  }
255
256  /* ----------------------------------------------------------------- */
257  function alternc_get_quota($name) {
258    global $err,$cuid,$db;
259    if ($name=="mailman") {
260      $db->query("SELECT COUNT(*) AS cnt FROM mailman WHERE uid='$cuid';");
261      $db->next_record();
262      return $db->f("cnt");
263    } else return false;
264  }
265
266} /* Class m_mailman */
267
268?>
Note: See TracBrowser for help on using the repository browser.