root/trunk/gui/include/admin-functions.php

Revision 1414, 58.0 kB (checked in by scitech, 6 hours ago)

Alias subdomain are not deleted when alais is deleted in same operation. Alias subdomains are not counted. Add support for alias subdomain mail (part III)

Line 
1 <?php
2 /**
3  * ispCP ω (OMEGA) a Virtual Hosting Control System
4  *
5  * @copyright     2001-2006 by moleSoftware GmbH
6  * @copyright     2006-2008 by ispCP | http://isp-control.net
7  * @version     SVN: $Id$
8  * @link         http://isp-control.net
9  * @author         ispCP Team
10  *
11  * @license
12  *   This program is free software; you can redistribute it and/or modify it under
13  *   the terms of the MPL General Public License as published by the Free Software
14  *   Foundation; either version 1.1 of the License, or (at your option) any later
15  *   version.
16  *   You should have received a copy of the MPL Mozilla Public License along with
17  *   this program; if not, write to the Open Source Initiative (OSI)
18  *   http://opensource.org | osi@opensource.org
19  */
20
21 /*
22  * encode() - encode string to be valid as mail header
23  *
24  * source: php.net/manual/en/function.mail.php
25  *
26  * input:
27  *   string $in_str - string to be encoded [should be in the $charset charset]
28  *   string $charset - chanrset in that string will be encoded
29  *
30  * output:
31  *   string - encoded string
32  *
33  * comment: need to check emails with ? and space in subject - some probs can occur
34  */
35 function encode($in_str, $charset = 'UTF-8') {
36     $out_str = $in_str;
37     if ($out_str && $charset) {
38         // define start delimimter, end delimiter and spacer
39         $end = "?=";
40         $start = "=?" . $charset . "?B?";
41         $spacer = $end . "\r\n " . $start;
42         // determine length of encoded text within chunks
43         // and ensure length is even
44         $length = 75 - strlen($start) - strlen($end);
45         $length = floor($length / 4) * 4;
46         // encode the string and split it into chunks
47         // with spacers after each chunk
48         $out_str = base64_encode($out_str);
49         $out_str = chunk_split($out_str, $length, $spacer);
50         // remove trailing spacer and
51         // add start and end delimiters
52         $spacer = preg_quote($spacer);
53         $out_str = preg_replace("/" . $spacer . "$/", "", $out_str);
54         $out_str = $start . $out_str . $end;
55     }
56     return $out_str;
57 }
58
59 function gen_admin_mainmenu(&$tpl, $menu_file) {
60     $sql = Database::getInstance();
61
62     $tpl->define_dynamic('menu', $menu_file);
63     $tpl->define_dynamic('isactive_support', 'menu');
64     $tpl->define_dynamic('custom_buttons', 'menu');
65     $tpl->assign(
66         array(
67             'TR_MENU_GENERAL_INFORMATION' => tr('General information'),
68             'TR_MENU_HOSTING_PLANS' => tr('Manage hosting plans'),
69             'TR_MENU_SYSTEM_TOOLS' => tr('System tools'),
70             'TR_MENU_MANAGE_USERS' => tr('Manage users'),
71             'TR_MENU_STATISTICS' => tr('Statistics'),
72             'SUPPORT_SYSTEM_PATH' => Config::get('ISPCP_SUPPORT_SYSTEM_PATH'),
73             'SUPPORT_SYSTEM_TARGET' => Config::get('ISPCP_SUPPORT_SYSTEM_TARGET'),
74             'TR_MENU_SUPPORT_SYSTEM' => tr('Support system'),
75             'TR_MENU_SETTINGS' => tr('Settings'),
76             'TR_MENU_GENERAL_INFORMATION' => tr('General information'),
77             'TR_MENU_HOSTING_PLANS' => tr('Manage hosting plans'),
78             'TR_MENU_SYSTEM_TOOLS' => tr('System tools'),
79             'TR_MENU_MANAGE_USERS' => tr('Manage users'),
80             'TR_MENU_STATISTICS' => tr('Statistics'),
81             'SUPPORT_SYSTEM_PATH' => Config::get('ISPCP_SUPPORT_SYSTEM_PATH'),
82             'SUPPORT_SYSTEM_TARGET' => Config::get('ISPCP_SUPPORT_SYSTEM_TARGET'),
83             'TR_MENU_SUPPORT_SYSTEM' => tr('Support system'),
84             'TR_MENU_SETTINGS' => tr('Settings'),
85             'TR_MENU_CHANGE_PASSWORD' => tr('Change password'),
86             'TR_MENU_CHANGE_PERSONAL_DATA' => tr('Change personal data'),
87             'TR_MENU_ADD_ADMIN' => tr('Add admin'),
88             'TR_MENU_ADD_RESELLER' => tr('Add reseller'),
89             'TR_MENU_RESELLER_ASIGNMENT' => tr('Reseller assignment'),
90             'TR_MENU_USER_ASIGNMENT' => tr('User assignment'),
91             'TR_MENU_EMAIL_SETUP' => tr('Email setup'),
92             'TR_MENU_CIRCULAR' => tr('Email marketing'),
93             'TR_MENU_ADD_HOSTING' => tr('Add hosting plan'),
94             'TR_MENU_RESELLER_STATISTICS' => tr('Reseller statistics'),
95             'TR_MENU_SERVER_STATISTICS' => tr('Server statistics'),
96             'TR_MENU_ADMIN_LOG' => tr('Admin log'),
97             'TR_MENU_MANAGE_IPS' => tr('Manage IPs'),
98             'TR_MENU_SYSTEM_INFO' => tr('System info'),
99             'TR_MENU_I18N' => tr('Internationalisation'),
100             'TR_MENU_LANGUAGE' => tr('Language'),
101             'TR_MENU_LAYOUT_TEMPLATES' => tr('Layout'),
102             'TR_MENU_LOGOUT' => tr('Logout'),
103             'TR_MENU_QUESTIONS_AND_COMMENTS' => tr('Support system'),
104             'TR_MENU_SERVER_TRAFFIC_SETTINGS' => tr('Server traffic settings'),
105             'TR_MENU_SERVER_STATUS' => tr('Server status'),
106             'TR_MENU_ISPCP_UPDATE' => tr('ispCP updates'),
107             'TR_MENU_ISPCP_DATABASE_UPDATE' => tr('ispCP database updates'),
108             'TR_MENU_ISPCP_DEBUGGER' => tr('ispCP debugger'),
109             'TR_CUSTOM_MENUS' => tr('Custom menus'),
110             'TR_MENU_OVERVIEW' => tr('Overview'),
111             'TR_MENU_MANAGE_SESSIONS' => tr('User sessions'),
112             'TR_MENU_LOSTPW_EMAIL' => tr('Lostpw email setup'),
113             'TR_MAINTENANCEMODE' => tr('Maintenance mode'),
114             'TR_GENERAL_SETTINGS' => tr('General settings'),
115             'TR_SERVERPORTS' => tr('Server ports')
116             )
117         );
118
119     $query = "
120         SELECT
121             *
122         FROM
123             `custom_menus`
124         WHERE
125             `menu_level` = 'admin'
126     ";
127
128     $rs = exec_query($sql, $query, array());
129     if ($rs->RecordCount() == 0) {
130         $tpl->assign('CUSTOM_BUTTONS', '');
131     } else {
132         global $i;
133         $i = 100;
134
135         while (!$rs->EOF) {
136             $menu_name = $rs->fields['menu_name'];
137             $menu_link = get_menu_vars($rs->fields['menu_link']);
138             $menu_target = $rs->fields['menu_target'];
139
140             if ($menu_target === '') {
141                 $menu_target = "";
142             } else {
143                 $menu_target = "target=\"" . $menu_target . "\"";
144             }
145
146             $tpl->assign(
147                 array('BUTTON_LINK' => $menu_link,
148                     'BUTTON_NAME' => $menu_name,
149                     'BUTTON_TARGET' => $menu_target,
150                     'BUTTON_ID' => $i,
151                     )
152                 );
153
154             $tpl->parse('CUSTOM_BUTTONS', '.custom_buttons');
155             $rs->MoveNext();
156             $i++;
157         } // end while
158     } // end else
159     if (!Config::get('ISPCP_SUPPORT_SYSTEM')) {
160         $tpl->assign('ISACTIVE_SUPPORT', '');
161     }
162
163     if (strtolower(Config::get('HOSTING_PLANS_LEVEL')) != 'admin') {
164         $tpl->assign('HOSTING_PLANS', '');
165     }
166
167     $tpl->parse('MAIN_MENU', 'menu');
168 }
169
170 function gen_admin_menu(&$tpl, $menu_file) {
171     $sql = Database::getInstance();
172
173     $tpl->define_dynamic('menu', $menu_file);
174     $tpl->define_dynamic('custom_buttons', 'menu');
175
176     $tpl->assign(
177         array(
178             'TR_MENU_GENERAL_INFORMATION' => tr('General information'),
179             'TR_MENU_CHANGE_PASSWORD' => tr('Change password'),
180             'TR_MENU_CHANGE_PERSONAL_DATA' => tr('Change personal data'),
181             'TR_MENU_MANAGE_USERS' => tr('Manage users'),
182             'TR_MENU_ADD_ADMIN' => tr('Add admin'),
183             'TR_MENU_ADD_RESELLER' => tr('Add reseller'),
184             'TR_MENU_RESELLER_ASIGNMENT' => tr('Reseller assignment'),
185             'TR_MENU_USER_ASIGNMENT' => tr('User assignment'),
186             'TR_MENU_EMAIL_SETUP' => tr('Email setup'),
187             'TR_MENU_CIRCULAR' => tr('Email marketing'),
188             'TR_MENU_HOSTING_PLANS' => tr('Manage hosting plans'),
189             'TR_MENU_ADD_HOSTING' => tr('Add hosting plan'),
190             'TR_MENU_ROOTKIT_LOG' => tr('Rootkit Log'),
191             'TR_MENU_RESELLER_STATISTICS' => tr('Reseller statistics'),
192             'TR_MENU_SERVER_STATISTICS' => tr('Server statistics'),
193             'TR_MENU_ADMIN_LOG' => tr('Admin log'),
194             'TR_MENU_MANAGE_IPS' => tr('Manage IPs'),
195             'TR_MENU_SUPPORT_SYSTEM' => tr('Support system'),
196             'TR_MENU_SYSTEM_INFO' => tr('System info'),
197             'TR_MENU_I18N' => tr('Internationalisation'),
198             'TR_MENU_LANGUAGE' => tr('Language'),
199             'TR_MENU_LAYOUT_TEMPLATES' => tr('Layout'),
200             'TR_MENU_LOGOUT' => tr('Logout'),
201             'TR_MENU_QUESTIONS_AND_COMMENTS' => tr('Support system'),
202             'TR_MENU_STATISTICS' => tr('Statistics'),
203             'TR_MENU_SYSTEM_TOOLS' => tr('System tools'),
204             'TR_MENU_SERVER_TRAFFIC_SETTINGS' => tr('Server traffic settings'),
205             'TR_MENU_SERVER_STATUS' => tr('Server status'),
206             'TR_MENU_ISPCP_UPDATE' => tr('ispCP updates'),
207             'TR_MENU_ISPCP_DEBUGGER' => tr('ispCP debugger'),
208             'TR_CUSTOM_MENUS' => tr('Custom menus'),
209             'TR_MENU_OVERVIEW' => tr('Overview'),
210             'TR_MENU_MANAGE_SESSIONS' => tr('User sessions'),
211             'SUPPORT_SYSTEM_PATH' => Config::get('ISPCP_SUPPORT_SYSTEM_PATH'),
212             'SUPPORT_SYSTEM_TARGET' => Config::get('ISPCP_SUPPORT_SYSTEM_TARGET'),
213             'TR_MENU_LOSTPW_EMAIL' => tr('Lostpw email setup'),
214             'TR_MAINTENANCEMODE' => tr('Maintenance mode'),
215             'TR_MENU_SETTINGS' => tr('Settings'),
216             'TR_GENERAL_SETTINGS' => tr('General settings'),
217             'TR_SERVERPORTS' => tr('Server ports'),
218             'VERSION' => Config::get('Version'),
219             'BUILDDATE' => Config::get('BuildDate'),
220             'CODENAME' => Config::get('CodeName')
221             )
222         );
223     $query = "
224         SELECT
225             *
226         from
227             custom_menus
228         where
229             menu_level = 'admin1'
230 ";
231
232     $rs = exec_query($sql, $query, array());
233     if ($rs->RecordCount() == 0) {
234         $tpl->assign('CUSTOM_BUTTONS', '');
235     } else {
236         global $i;
237         $i = 100;
238
239         while (!$rs->EOF) {
240             $menu_name = $rs->fields['menu_name'];
241             $menu_link = get_menu_vars($rs->fields['menu_link']);
242             $menu_target = $rs->fields['menu_target'];
243
244             if ($menu_target === '') {
245                 $menu_target = "";
246             } else {
247                 $menu_target = "target=\"" . $menu_target . "\"";
248             }
249
250             $tpl->assign(
251                 array('BUTTON_LINK' => $menu_link,
252                     'BUTTON_NAME' => $menu_name,
253                     'BUTTON_TARGET' => $menu_target,
254                     'BUTTON_ID' => $i,
255                     )
256                 );
257
258             $tpl->parse('CUSTOM_BUTTONS', '.custom_buttons');
259             $rs->MoveNext();
260             $i++;
261         } // end while
262     } // end else
263     if (!Config::get('ISPCP_SUPPORT_SYSTEM')) {
264         $tpl->assign('SUPPORT_SYSTEM', '');
265     }
266
267     if (strtolower(Config::get('HOSTING_PLANS_LEVEL')) != 'admin') {
268         $tpl->assign('HOSTING_PLANS', '');
269     }
270
271     $tpl->parse('MENU', 'menu');
272 }
273
274 function get_cnt_of_user(&$sql, $user_type) {
275     $query = "SELECT count(`admin_id`) as cnt FROM `admin` WHERE `admin_type`=?";
276
277     $rs = exec_query($sql, $query, array($user_type));
278
279     $admin_cnt = $rs->fields['cnt'];
280
281     return $admin_cnt;
282 }
283
284 function get_cnt(&$sql, $table, $field, $where, $value) {
285     if ($where != '') {
286         $query = "SELECT count(?) as cnt FROM $table WHERE $where = ?";
287         $rs = exec_query($sql, $query, array($field, $value));
288     } else {
289         $query = "SELECT count(?) as cnt FROM $table ";
290         $rs = exec_query($sql, $query, array($field));
291     }
292
293     $cnt = $rs->fields['cnt'];
294     return $cnt;
295 }
296
297 function get_sql_user_count($sql) {
298     $query = "SELECT DISTINCT `sqlu_name` FROM `sql_user` ";
299
300     $rs = exec_query($sql, $query, false);
301
302     return $rs->RecordCount();
303 }
304
305 function get_admin_general_info(&$tpl, &$sql) {
306     $tpl->assign(
307         array('TR_GENERAL_INFORMATION' => tr('General information'),
308             'TR_ACCOUNT_NAME' => tr('Account name'),
309             'TR_ADMIN_USERS' => tr('Admin users'),
310             'TR_RESELLER_USERS' => tr('Reseller users'),
311             'TR_NORMAL_USERS' => tr('Normal users'),
312             'TR_DOMAINS' => tr('Domains'),
313             'TR_SUBDOMAINS' => tr('Subdomains'),
314             'TR_DOMAINS_ALIASES' => tr('Domain aliases'),
315             'TR_MAIL_ACCOUNTS' => tr('Mail accounts'),
316             'TR_FTP_ACCOUNTS' => tr('FTP accounts'),
317             'TR_SQL_DATABASES' => tr('SQL databases'),
318             'TR_SQL_USERS' => tr('SQL users'),
319             'TR_SYSTEM_MESSAGES' => tr('System messages'),
320             'TR_NO_NEW_MESSAGES' => tr('No new messages'),
321             'TR_SERVER_TRAFFIC' => tr('Server traffic')
322             )
323         );
324
325     $tpl->assign(
326         array('ACCOUNT_NAME' => $_SESSION['user_logged'],
327             'ADMIN_USERS' => get_cnt($sql, 'admin', 'admin_id', 'admin_type', 'admin'),
328             'RESELLER_USERS' => get_cnt($sql, 'admin', 'admin_id', 'admin_type', 'reseller'),
329             'NORMAL_USERS' => get_cnt($sql, 'admin', 'admin_id', 'admin_type', 'user'),
330             'DOMAINS' => get_cnt($sql, 'domain', 'domain_id', '', ''),
331             'SUBDOMAINS' => get_cnt($sql, 'subdomain', 'subdomain_id', '', '') + get_cnt($sql, 'subdomain_alias', 'subdomain_alias_id', '', ''),
332             'DOMAINS_ALIASES' => get_cnt($sql, 'domain_aliasses', 'alias_id', '', ''),
333             'MAIL_ACCOUNTS' => get_cnt($sql, 'mail_users', 'mail_id', '', ''),
334             'FTP_ACCOUNTS' => get_cnt($sql, 'ftp_users', 'userid', '', ''),
335             'SQL_DATABASES' => get_cnt($sql, 'sql_database', 'sqld_id', '', ''),
336             'SQL_USERS' => get_sql_user_count($sql)
337             )
338         );
339 }
340
341 function gen_admin_list(&$tpl, &$sql) {
342     $query = "
343             SELECT
344                 t1.`admin_id`, t1.`admin_name`, t1.`domain_created`, IFNULL(t2.`admin_name`, '') AS created_by
345             FROM
346                 `admin` AS t1
347             LEFT JOIN
348                 `admin` AS t2 ON t1.created_by = t2.admin_id
349             WHERE
350                 t1.`admin_type`='admin'
351             ORDER BY
352                 t1.`admin_name`
353             ASC
354     ";
355
356     $rs = exec_query($sql, $query, array());
357
358     $i = 0;
359
360     if ($rs->RecordCount() == 0) {
361         $tpl->assign(
362             array('ADMIN_MESSAGE' => tr('Administrators list is empty!'),
363                 'ADMIN_LIST' => ''
364                 )
365             );
366
367         $tpl->parse('ADMIN_MESSAGE', 'admin_message');
368     } else {
369         $tpl->assign(
370             array(
371                 'TR_ADMIN_USERNAME' => tr('Username'),
372                 'TR_ADMIN_CREATED_ON' => tr('Creation date'),
373                 'TR_ADMIN_CREATED_BY' => tr('Created by'),
374                 'TR_ADMIN_OPTIONS' => tr('Options'),
375                 )
376             );
377         while (!$rs->EOF) {
378             if ($i % 2 == 0) {
379                 $tpl->assign(
380                     array('ADMIN_CLASS' => 'content',
381                         )
382                     );
383             } else {
384                 $tpl->assign(
385                     array('ADMIN_CLASS' => 'content2',
386                         )
387                     );
388             }
389
390             $admin_created = $rs->fields['domain_created'];
391
392             if ($admin_created == 0) {
393                 $admin_created = tr('N/A');
394             } else {
395                 $date_formt = Config::get('DATE_FORMAT');
396                 $admin_created = date($date_formt, $admin_created);
397             }
398
399             if ($rs->fields['created_by'] == '' || $rs->fields['admin_id'] == $_SESSION['user_id']) {
400                 $tpl->assign(
401                     array('ADMIN_DELETE_LINK' => ''
402                         )
403                     );
404                 $tpl->parse('ADMIN_DELETE_SHOW', 'admin_delete_show');
405             } else {
406                 $tpl->assign(
407                     array('ADMIN_DELETE_SHOW' => '',
408                         'TR_DELETE' => tr('Delete'),
409                         'URL_DELETE_ADMIN' => "user_delete.php?delete_id=" . $rs->fields['admin_id'] . "&delete_username=" . $rs->fields['admin_name'],
410                         'ADMIN_USERNAME' => $rs->fields['admin_name'],
411                         )
412                     );
413                 $tpl->parse('ADMIN_DELETE_LINK', 'admin_delete_link');
414             }
415
416             $tpl->assign(
417                 array('ADMIN_USERNAME' => $rs->fields['admin_name'],
418                     'ADMIN_CREATED_ON' => $admin_created,
419                     'ADMIN_CREATED_BY' => ($rs->fields['created_by'] != null) ? $rs->fields['created_by'] : tr("System"),
420                     'URL_EDIT_ADMIN' => "admin_edit.php?edit_id=" . $rs->fields[