source: bureau/class/m_mailman.php @ 45

Revision 45, 9.0 KB checked in by anarcat, 7 years ago (diff)

[project @ alternc: changeset 2003-04-17 21:39:56 by benjamin]

  • PLEINS de modif pendant les vacances :
  • Ajout des commentaires doxygen dans m_stats
  • Corrections des fonctions alternc_* dans les classes pour conformité
  • Ajout du paramètre "admlst" qui dit comment chaque admin veut voir apparaitre la liste des membres (long/court)
  • D'autres modifs que j'ai surement oubliées...

Original author: benjamin
Date: 2003-04-17 21:39:57

Line 
1<?php
2/*
3 $Id: m_mailman.php,v 1.2 2003/04/17 21:39:56 benjamin Exp $
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/*
31   SQL STRUCTURE :
32
33CREATE TABLE mailman (
34  id int(10) unsigned NOT NULL auto_increment,
35  uid int(10) unsigned NOT NULL default '0',
36  list varchar(128) NOT NULL default '',
37  domain varchar(255) NOT NULL default '',
38  name varchar(255) NOT NULL default '',
39  PRIMARY KEY  (id)
40) TYPE=MyISAM COMMENT='Listes de discussion Mailman';
41
42*/
43
44class m_mailman {
45 
46  var $uid=0;         /* Membre dont on souhaite gérer les listes de diffusions */
47  var $lang="fr"; /* Default language for Mailman lists */
48 
49  /** Nom du quota utilisé */
50  var $alternc_quota_name="mailman";
51
52  /*****************************************************************************/
53  function m_mailman($membre=0) { $this->uid=$membre; }
54 
55  /*****************************************************************************/
56  /** Return the mailing-lists managed by this member : */
57  function enum_ml() {
58    global $err,$db;
59    $err->log("mailman","enum_ml");
60    $db->query("SELECT * FROM mailman WHERE uid=".$this->uid.";");
61    if (!$db->num_rows()) {
62      $err->raise("mailman",1);
63      return false;
64    }
65    $mls=array();
66    while ($db->next_record()) {
67      $mls[]=$db->Record;
68    }
69    return $mls;
70  }
71 
72  /*****************************************************************************/
73  function prefix_list() {
74    global $db,$err;
75    $r=array();
76    $db->query("SELECT domaine FROM domaines WHERE compte=".$this->uid." ORDER BY domaine;");
77    while ($db->next_record()) {
78      $r[]=$db->f("domaine");
79    }
80    return $r;
81  }
82  /*****************************************************************************/
83  function select_prefix_list($current) {
84    global $db,$err;
85    $r=$this->prefix_list();
86    reset($r);
87    while (list($key,$val)=each($r)) {
88      if ($current==$val) $c=" selected"; else $c="";
89      echo "<option$c>$val</option>";
90    }
91    return true;
92  }
93 
94  /*****************************************************************************/
95  /** Create a new list for this member : */
96  function add_lst($domain,$login,$owner,$password) {
97    global $db,$err,$quota,$mail;
98    $err->log("mailman","add_lst",$login."@".$domain." - ".$owner);
99    $login=strtolower($login);
100    // TODO : verifier que le domaine est bien hébergé.
101    $domain=strtolower($domain);
102    if ($login=="") {
103      $err->raise("mailman",2);
104      return false;
105    }
106    if (!$owner || !$password) {
107      $err->raise("mailman",3);
108      return false;
109    }
110    if (checkmail($owner)) {
111      $err->raise("mailman",4);
112      return false;
113    }
114    $r=$this->prefix_list();
115    if (!in_array($domain,$r) || $domain=="") {
116      $err->raise("mailman",5);
117      return false;
118    }
119    /*
120      if (strpos($login,"_")!==false) {
121      $err->raise("mailman",8);
122      return false;
123      }
124    */
125    $db->query("SELECT COUNT(*) AS cnt FROM mailman WHERE list='$login';");
126    $db->next_record();
127    if ($db->f("cnt")) {
128      $err->raise("mailman",10);
129      return false;
130    }
131    // Prefixe OK, on verifie la non-existence des mails que l'on va créer...
132    if (!$mail->available($login."@".$domain) || !$ma->available($login."-request@".$domain) || !$ma->available($login."-owner@".$domain) || !$ma->available($login."-admin@".$domain) || !$ma->available($login."-bounces@".$domain) || !$ma->available($login."-confirm@".$domain) || !$ma->available($login."-join@".$domain) || !$ma->available($login."-leave@".$domain) || !$ma->available($login."-subscribe@".$domain) || !$ma->available($login."-unsubscribe@".$domain)) {
133      // This is a mail account already !!!
134      $err->raise("mailman",6);
135      return false;
136    }
137    // Le compte n'existe pas, on vérifie le quota et on le créé.
138    if ($quota->cancreate("ml")) {
139      $quota->inc("ml"); // incrémentation du quota
140      // Creation de la liste : 1. recherche du nom de la liste
141      // CA NE MARCHE PAS !
142      $name=$login; 
143      $db->query("INSERT INTO mailman (uid,list,domain,name) VALUES (".$this->uid.",'$login','$domain','$name');");
144      if (!$mail->add_wrapper($login,$domain,"/var/lib/mailman/mail/mailman post $name","mailman") || 
145          !$mail->add_wrapper($login."-request",$domain,"/var/lib/mailman/mail/mailman request $name","mailman") || 
146          !$mail->add_wrapper($login."-owner",$domain,"/var/lib/mailman/mail/mailman owner $name","mailman") || 
147          !$mail->add_wrapper($login."-admin",$domain,"/var/lib/mailman/mail/mailman admin $name","mailman") || 
148          !$mail->add_wrapper($login."-bounces",$domain,"/var/lib/mailman/mail/mailman bounces $name","mailman") || 
149          !$mail->add_wrapper($login."-confirm",$domain,"/var/lib/mailman/mail/mailman confirm $name","mailman") || 
150          !$mail->add_wrapper($login."-join",$domain,"/var/lib/mailman/mail/mailman join $name","mailman") ||
151          !$mail->add_wrapper($login."-leave",$domain,"/var/lib/mailman/mail/mailman leave $name","mailman") || 
152          !$mail->add_wrapper($login."-subscribe",$domain,"/var/lib/mailman/mail/mailman subscribe $name","mailman") || 
153          !$mail->add_wrapper($login."-unsubscribe",$domain,"/var/lib/mailman/mail/mailman unsubscribe $name","mailman")
154          ) {
155        $mail->del_wrapper($login,$domain);             $ma->del_wrapper($login."-request",$domain);
156        $mail->del_wrapper($login."-owner",$domain);    $ma->del_wrapper($login."-admin",$domain);
157        $mail->del_wrapper($login."-bounces",$domain);  $ma->del_wrapper($login."-confirm",$domain);   
158        $mail->del_wrapper($login."-join",$domain);     $ma->del_wrapper($login."-leave",$domain);
159        $mail->del_wrapper($login."-subscribe",$domain);        $ma->del_wrapper($login."-unsubscribe",$domain);
160        $db->query("DELETE FROM mailman WHERE name='$name';");
161        return false;
162      }
163      // Wrapper created, sql ok, now let's create the list :)
164      exec("/usr/lib/alternc/mailman.create \"".escapeshellcmd($name."@".$domain)."\" \"".escapeshellcmd($owner)."\" \"".escapeshellcmd($password)."\"");
165      return true;
166    } else {
167      $err->raise("mailman",7); // quota
168      return false;
169    }
170  }
171 
172  /*****************************************************************************/
173  function delete_lst($id) {
174    global $db,$err,$quota,$mail;
175    $err->log("mailman","delete_lst",$id);
176   
177    $db->query("SELECT * FROM mailman WHERE id=$id and uid=".$this->uid.";");
178    $db->next_record();
179    if (!$db->f("id")) {
180      $err->raise("mailman",9);
181      return false;
182    }
183    exec("/usr/lib/alternc/mailman.delete ".escapeshellarg($db->f("name")));
184    $login=$db->f("list");
185    $domain=$db->f("domain");
186    $db->query("DELETE FROM mailman WHERE id=$id");
187    $mail->del_wrapper($login,$domain);         $ma->del_wrapper($login."-request",$domain);
188    $mail->del_wrapper($login."-owner",$domain);        $ma->del_wrapper($login."-admin",$domain);
189    $mail->del_wrapper($login."-bounces",$domain);      $ma->del_wrapper($login."-confirm",$domain);   
190    $mail->del_wrapper($login."-join",$domain); $ma->del_wrapper($login."-leave",$domain);
191    $mail->del_wrapper($login."-subscribe",$domain);    $ma->del_wrapper($login."-unsubscribe",$domain);
192    $quota->dec("ml");
193    return $login."@".$domain;
194  }
195
196  /** ***************************************************************************
197      del_dom($dom) Supprime un domaine a l'utilisateur
198      $dom est le domaine concerne
199      fonction appelée par m_domains
200  *****************************************************************************/
201  function alternc_del_domain($dom) {
202    global $err;
203    $err->log("mailman","del_domain",$dom);
204
205    // Suppression des listes du domaine
206    $listes=$this->enum_ml();
207    while (list($key,$val)=each($listes)) {
208      $this->delete_lst($val["id"]);
209    }
210    exec("/usr/lib/alternc/lst_deldom ".escapeshellarg($dom));
211    return true;
212  }
213
214  /*****************************************************************************/
215  function alternc_add_domain($dom) {
216    global $err;
217    $err->log("mailman","del_domain",$dom);
218    return true;
219  }
220
221
222} /* Class m_mailman */
223
224?>
Note: See TracBrowser for help on using the repository browser.