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

Revision 1181, 8.7 KB checked in by anonymous, 9 years ago (diff)

ne pas lister les domaines que l'on ne gere pas les mails
enlever un log de debug

  • 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  var $uid=0;     
33  var $clsid="mailman";       /* Numero de la classe php (pour les logs) */
34  var $lang="fr"; /* Default language for Mailman lists */
35  var $alternc_quota_name="mailman";
36 
37  /*****************************************************************************/
38  function m_mailman() {
39    global $cuid;
40    $this->uid=$cuid;
41  }
42 
43  /*****************************************************************************/
44  /** Return the mailing-lists managed by this member : */
45  function enum_ml($domain = null, $order_by = array('domain', 'list')) {
46    global $err,$db;
47    $err->log("mailman","enum_ml");
48    $order_by = array_map("addslashes", $order_by);
49    $order = 'ORDER BY `' . join('`,`', $order_by) . '`';
50$query = "SELECT * FROM mailman WHERE uid=".$this->uid.
51              (is_null($domain) ? "" : " AND domain='" . addslashes($domain) ."'" ) .
52              " $order;";
53    $db->query($query);
54    if (!$db->num_rows()) {
55      $err->raise("mailman",1);
56      return false;
57    }
58    $mls=array();
59    while ($db->next_record()) {
60      $mls[]=$db->Record;
61    }
62    return $mls;
63  }
64 
65  /*****************************************************************************/
66  function prefix_list() {
67    global $db,$err;
68    $r=array();
69    $db->query("SELECT domaine FROM domaines WHERE compte=".$this->uid." AND gesmx = 1 ORDER BY domaine;");
70    while ($db->next_record()) {
71      $r[]=$db->f("domaine");
72    }
73    return $r;
74  }
75  /*****************************************************************************/
76  function select_prefix_list($current) {
77    global $db,$err;
78    $r=$this->prefix_list();
79    reset($r);
80    while (list($key,$val)=each($r)) {
81      if ($current==$val) $c=" selected=\"selected\""; else $c="";
82      echo "<option$c>$val</option>";
83    }
84    return true;
85  }
86 
87  /*****************************************************************************/
88  /** Create a new list for this member : */
89  function add_lst($domain,$login,$owner,$password) {
90    global $db,$err,$quota,$mail;
91    $err->log("mailman","add_lst",$login."@".$domain." - ".$owner);
92   
93    if ($login=="") {
94      $err->raise("mailman",2);
95      return false;
96    }
97    if (!$owner || !$password) {
98      $err->raise("mailman",3);
99      return false;
100    }
101    if (checkmail($owner)) {
102      $err->raise("mailman",4);
103      return false;
104    }
105    $r=$this->prefix_list();
106    if (!in_array($domain,$r) || $domain=="") {
107      $err->raise("mailman",5);
108      return false;
109    }
110    $db->query("SELECT COUNT(*) AS cnt FROM mailman WHERE list='$login';");
111    $db->next_record();
112    if ($db->f("cnt")) {
113        $err->raise("mailman",10);
114        return false;
115    }
116    // Prefixe OK, on verifie la non-existence des mails que l'on va créer...
117    if (!$mail->available($login."@".$domain) || 
118        !$mail->available($login."-request@".$domain) || 
119        !$mail->available($login."-owner@".$domain) || 
120        !$mail->available($login."-admin@".$domain) || 
121        !$mail->available($login."-bounces@".$domain) || 
122        !$mail->available($login."-confirm@".$domain) || 
123        !$mail->available($login."-join@".$domain) || 
124        !$mail->available($login."-leave@".$domain) || 
125        !$mail->available($login."-subscribe@".$domain) || 
126        !$mail->available($login."-unsubscribe@".$domain)) {
127      // This is a mail account already !!!
128      $err->raise("mailman",6);
129      return false;
130    }
131    // Le compte n'existe pas, on vérifie le quota et on le créé.
132    if ($quota->cancreate("mailman")) {
133      $quota->inc("mailman"); // incrémentation du quota
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 (".$this->uid.",'$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,$quota,$mail;
169    $err->log("mailman","delete_lst",$id);
170   
171    $db->query("SELECT * FROM mailman WHERE id=$id and uid=".$this->uid.";");
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    $quota->dec("mailman");
187    return $login."@".$domain;
188  }
189
190  /** ***************************************************************************
191      del_dom($dom) Supprime un domaine a l'utilisateur
192      $dom est le domaine concerne
193      fonction appelée par m_domains
194  *****************************************************************************/
195  function del_dom($dom) {
196    global $err;
197    $err->log("mailman","del_dom",$dom);
198
199    // Suppression des listes du domaine
200    $listes=$this->enum_ml($dom);
201    while (list($key,$val)=each($listes)) {
202      $this->delete_lst($val["id"]);
203    }
204    exec("/usr/lib/alternc/lst_deldom ".escapeshellarg($dom));
205    return true;
206  }
207
208  /*****************************************************************************/
209  function add_dom($dom) {
210    global $err;
211    $err->log("mailman","del_dom",$dom);
212    return true;
213  }
214
215
216} /* Class m_mailman */
217
218?>
Note: See TracBrowser for help on using the repository browser.