Alternc  latest
Alternc logiel libre pour l'hébergement
m_roundcube.php
Go to the documentation of this file.
1 <?php
2 /*
3  ----------------------------------------------------------------------
4  AlternC - Web Hosting System
5  Copyright (C) 2000-2012 by the AlternC Development Team.
6  https://alternc.org/
7  ----------------------------------------------------------------------
8  LICENSE
9 
10  This program is free software; you can redistribute it and/or
11  modify it under the terms of the GNU General Public License (GPL)
12  as published by the Free Software Foundation; either version 2
13  of the License, or (at your option) any later version.
14 
15  This program is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  GNU General Public License for more details.
19 
20  To read the license please visit http://www.gnu.org/copyleft/gpl.html
21  ----------------------------------------------------------------------
22  Purpose of file: Manage Roundcube webmail configuration
23  ----------------------------------------------------------------------
24 */
25 
26 /**
27 * This class handle roundcube's webmail
28 * hook the main panel page to add a link to the webmail
29 */
30 class m_roundcube {
31 
32  /* ----------------------------------------------------------------- */
33  /** Hook called by the homepage or the /webmail link
34  * to redirect the user to a known webmail url.
35  * the variable 'webmail_redirect' tells which webmail has the priority.
36  * @return string the URL of the webmail
37  */
38  function hook_admin_webmail() {
39  global $db;
40  // Search for the domain where the panel is hosted, then search for a webmail in it.
41  $i=2;
42  if (!empty($_SERVER["HTTP_HOST"])) {
43  do { // for each domain part (search panel.alternc.org then alternc.org then org, if the current panel is at www.panel.alternc.org)
44  $expl=explode(".",$_SERVER["HTTP_HOST"],$i);
45  if (count($expl)>=2) {
46  list($host,$dompart)=$expl;
47  // We search for a 'squirrelmail' subdomain in that domain
48  $db->query("SELECT * FROM sub_domaines s WHERE s.domaine=? AND s.type='roundcube';",array($dompart));
49  if ($db->next_record()) {
50  $domain=$db->Record;
51  return "http://".$domain["sub"].(($domain["sub"])?".":"").$domain["domaine"];
52  }
53  }
54  $i++;
55  } while (strpos($dompart,'.')!==false);
56  }
57 
58  // not found: search for a webmail in the admin user account
59  $db->query("SELECT * FROM sub_domaines s WHERE s.compte=2000 AND s.type='roundcube';");
60  if ($db->next_record()) {
61  $domain=$db->Record;
62  return "http://".$domain["sub"].(($domain["sub"])?".":"").$domain["domaine"];
63  }
64 
65  }
66 
67 
68  /* ----------------------------------------------------------------- */
69  /** Hook called when an email is REALLY deleted (by the cron, not just in the panel)
70  * @param mail_id integer the ID of the mail in the AlternC database
71  * @param fullmail string the deleted mail himself in the form of john@domain.tld
72  * @return false|null
73  */
74  function hook_mail_delete_for_real($mail_id, $fullmail) {
75  // Include Roundcube configuration
76  // Delete from the roundcube configuration
77 
78  // Use cleandb.sh filled by roundcube ? http://trac.roundcube.net/browser/github/bin/cleandb.sh
79 
80  include_once("/etc/roundcube/debian-db.php");
81  if (! isset($dbtype)) {
82  global $msg;
83  $msg->raise('Error', "roundcube::hook_mail_delete_for_real",_("Problem: missing var in Debian Roundcube configuration file"));
84  return false;
85  }
86 
87  switch ($dbtype) {
88  case "sqlite":
89  $rcdb = "sqlite:///$basepath/$dbname?mode=0640";
90  $dbh = new PDO("sqlite:/$basepath/$dbname");
91  break;
92  default:
93  if ($dbport != '') $dbport=":$dbport";
94  if ($dbserver == '') $dbserver="localhost";
95  $dbh= new PDO("$dbtype:host=$dbserver;dbname=$dbname;dbport=$dbport", $dbuser, $dbpass);
96  #$rcdb = "$dbtype:$dbuser:$dbpass@$dbserver$dbport/$dbname";
97  break;
98  }
99 
100  $stmt = $dbh->prepare("SELECT user_id FROM users WHERE username = ?;");
101  $req=$stmt->execute(array($fullmail));
102 
103  if ($req) {
104  foreach ( $stmt->fetchAll() as $t ) {
105  if (empty($t['user_id'])) continue ;
106  $rcuser_id=$t['user_id'];
107 
108  $dbh->prepare("DELETE from contactgroupmembers where contactgroup_id in (select contactgroup_id from contactgroups where user_id = ?) ; ")->execute(array($rcuser_id));
109  $dbh->prepare("DELETE from contactgroups where user_id = ? ; ")->execute(array($rcuser_id));
110  $dbh->prepare("DELETE from contacts where user_id = ? ; ")->execute(array($rcuser_id));
111  $dbh->prepare("DELETE from identities where user_id = ? ; ")->execute(array($rcuser_id));
112  $dbh->prepare("DELETE from users where user_id = ? ; ")->execute(array($rcuser_id));
113  } //foreach
114  }
115 
116  }
117 
118 } /* Class Roundcube */
119 
120 
121 
122 
123 
global $db
Definition: bootstrap.php:26
$msg
Definition: bootstrap.php:75
global $dbh
Definition: bootstrap.php:26
This class handle roundcube's webmail hook the main panel page to add a link to the webmail.
Definition: m_roundcube.php:30
hook_mail_delete_for_real($mail_id, $fullmail)
Hook called when an email is REALLY deleted (by the cron, not just in the panel)
Definition: m_roundcube.php:74
hook_admin_webmail()
Hook called by the homepage or the /webmail link to redirect the user to a known webmail url.
Definition: m_roundcube.php:38
$host
Definition: config.php:71
$domain
Definition: dom_import.php:36
$mail_id
foreach($domaines_user as $domaine) $t
$i