root/trunk/gui/client/mail_add.php

Revision 2581, 17.4 KB (checked in by benedikt, 5 weeks ago)
  • Fixed #2200: Forward mail address not shown in log message
  • Property svn:keywords set to Id
Line 
1<?php
2/**
3 * ispCP ω (OMEGA) a Virtual Hosting Control System
4 *
5 * @copyright     2001-2006 by moleSoftware GmbH
6 * @copyright     2006-2010 by ispCP | http://isp-control.net
7 * @version     SVN: $Id$
8 * @link         http://isp-control.net
9 * @author         ispCP Team
10 *
11 * @license
12 * The contents of this file are subject to the Mozilla Public License
13 * Version 1.1 (the "License"); you may not use this file except in
14 * compliance with the License. You may obtain a copy of the License at
15 * http://www.mozilla.org/MPL/
16 *
17 * Software distributed under the License is distributed on an "AS IS"
18 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
19 * License for the specific language governing rights and limitations
20 * under the License.
21 *
22 * The Original Code is "VHCS - Virtual Hosting Control System".
23 *
24 * The Initial Developer of the Original Code is moleSoftware GmbH.
25 * Portions created by Initial Developer are Copyright (C) 2001-2006
26 * by moleSoftware GmbH. All Rights Reserved.
27 * Portions created by the ispCP Team are Copyright (C) 2006-2010 by
28 * isp Control Panel. All Rights Reserved.
29 */
30
31require '../include/ispcp-lib.php';
32
33check_login(__FILE__);
34
35$tpl = new pTemplate();
36
37$tpl->define_dynamic('page', Config::get('CLIENT_TEMPLATE_PATH') . '/mail_add.tpl');
38$tpl->define_dynamic('page_message', 'page');
39$tpl->define_dynamic('logged_from', 'page');
40$tpl->define_dynamic('als_list', 'page');
41$tpl->define_dynamic('sub_list', 'page');
42$tpl->define_dynamic('als_sub_list', 'page');
43$tpl->define_dynamic('to_alias_domain', 'page');
44$tpl->define_dynamic('to_subdomain', 'page');
45$tpl->define_dynamic('to_alias_subdomain', 'page');
46
47// page functions.
48
49function gen_page_form_data(&$tpl, $dmn_name, $post_check) {
50    $dmn_name = decode_idna($dmn_name);
51
52    if ($post_check === 'no') {
53
54        $tpl->assign(
55            array(
56                'USERNAME'                => "",
57                'DOMAIN_NAME'            => $dmn_name,
58                'MAIL_DMN_CHECKED'        => 'checked="checked"',
59                'MAIL_ALS_CHECKED'        => "",
60                'MAIL_SUB_CHECKED'        => "",
61                'MAIL_ALS_SUB_CHECKED'    => "",
62                'NORMAL_MAIL_CHECKED'    => 'checked="checked"',
63                'FORWARD_MAIL_CHECKED'    => "",
64                'FORWARD_LIST'            => ""
65            )
66        );
67
68    } else {
69        if (!isset($_POST['forward_list'])) {
70            $f_list = '';
71        } else {
72            $f_list = $_POST['forward_list'];
73        }
74
75        $tpl->assign(
76            array(
77                'USERNAME'                => clean_input($_POST['username'], true),
78                'DOMAIN_NAME'            => $dmn_name,
79                'MAIL_DMN_CHECKED'        => ($_POST['dmn_type'] === 'dmn') ? 'checked="checked"' : "",
80                'MAIL_ALS_CHECKED'        => ($_POST['dmn_type'] === 'als') ? 'checked="checked"' : "",
81                'MAIL_SUB_CHECKED'        => ($_POST['dmn_type'] === 'sub') ? 'checked="checked"' : "",
82                'MAIL_ALS_SUB_CHECKED'    => ($_POST['dmn_type'] === 'als_sub') ? 'checked="checked"' : "",
83                'NORMAL_MAIL_CHECKED'    => (isset($_POST['mail_type_normal'])) ? 'checked="checked"' : "",
84                'FORWARD_MAIL_CHECKED'    => (isset($_POST['mail_type_forward'])) ? 'checked="checked"' : "",
85                'FORWARD_LIST'            => $f_list
86            )
87        );
88    }
89}
90
91function gen_dmn_als_list(&$tpl, &$sql, $dmn_id, $post_check) {
92    $ok_status = Config::get('ITEM_OK_STATUS');
93
94    $query = "
95        SELECT
96            `alias_id`, `alias_name`
97        FROM
98            `domain_aliasses`
99        WHERE
100            `domain_id` = ?
101        AND
102            `alias_status` = ?
103        ORDER BY
104            `alias_name`
105    ";
106
107    $rs = exec_query($sql, $query, array($dmn_id, $ok_status));
108    if ($rs->RecordCount() == 0) {
109        $tpl->assign(
110            array(
111                'ALS_ID'        => '0',
112                'ALS_SELECTED'    => 'selected="selected"',
113                'ALS_NAME'        => tr('Empty list')
114            )
115        );
116        $tpl->parse('ALS_LIST', 'als_list');
117        $tpl->assign('TO_ALIAS_DOMAIN', '');
118    } else {
119        $first_passed = false;
120        while (!$rs->EOF) {
121            if ($post_check === 'yes') {
122                if (!isset($_POST['als_id'])) {
123                    $als_id = '';
124                } else {
125                    $als_id = $_POST['als_id'];
126                }
127
128                if ($als_id == $rs->fields['alias_id']) {
129                    $als_selected = 'selected="selected"';
130                } else {
131                    $als_selected = '';
132                }
133            } else {
134                if (!$first_passed) {
135                    $als_selected = 'selected="selected"';
136                } else {
137                    $als_selected = '';
138                }
139            }
140
141            $alias_name = decode_idna($rs->fields['alias_name']);
142            $tpl->assign(
143                array(
144                    'ALS_ID'        => $rs->fields['alias_id'],
145                    'ALS_SELECTED'    => $als_selected,
146                    'ALS_NAME'        => $alias_name
147                )
148            );
149            $tpl->parse('ALS_LIST', '.als_list');
150            $rs->MoveNext();
151
152            if (!$first_passed)
153                $first_passed = true;
154        }
155    }
156}
157
158function gen_dmn_sub_list(&$tpl, &$sql, $dmn_id, $dmn_name, $post_check) {
159    $ok_status = Config::get('ITEM_OK_STATUS');
160
161    $query = "
162        SELECT
163            `subdomain_id` AS sub_id, `subdomain_name` AS sub_name
164        FROM
165            `subdomain`
166        WHERE
167            `domain_id` = ?
168        AND
169            `subdomain_status` = ?
170        ORDER BY
171            `subdomain_name`
172";
173
174    $rs = exec_query($sql, $query, array($dmn_id, $ok_status));
175
176    if ($rs->RecordCount() == 0) {
177        $tpl->assign(
178            array(
179                'SUB_ID'        => '0',
180                'SUB_SELECTED'    => 'selected="selected"',
181                'SUB_NAME'        => tr('Empty list')
182            )
183        );
184        $tpl->parse('SUB_LIST', 'sub_list');
185        $tpl->assign('TO_SUBDOMAIN', '');
186    } else {
187        $first_passed = false;
188
189        while (!$rs->EOF) {
190            if ($post_check === 'yes') {
191                if (!isset($_POST['sub_id'])) {
192                    $sub_id = '';
193                } else {
194                    $sub_id = $_POST['sub_id'];
195                }
196
197                if ($sub_id == $rs->fields['sub_id']) {
198                    $sub_selected = 'selected="selected"';
199                } else {
200                    $sub_selected = '';
201                }
202            } else {
203                if (!$first_passed) {
204                    $sub_selected = 'selected="selected"';
205                } else {
206                    $sub_selected = '';
207                }
208            }
209
210            $sub_name = decode_idna($rs->fields['sub_name']);
211            $dmn_name = decode_idna($dmn_name);
212            $tpl->assign(
213                array(
214                    'SUB_ID'        => $rs->fields['sub_id'],
215                    'SUB_SELECTED'    => $sub_selected,
216                    'SUB_NAME'        => $sub_name . '.' . $dmn_name
217                )
218            );
219            $tpl->parse('SUB_LIST', '.sub_list');
220            $rs->MoveNext();
221
222            if (!$first_passed)
223                $first_passed = true;
224        }
225    }
226}
227
228function gen_dmn_als_sub_list(&$tpl, &$sql, $dmn_id, $post_check) {
229    $ok_status = Config::get('ITEM_OK_STATUS');
230
231    $query = "
232        SELECT
233            t1.`subdomain_alias_id` AS als_sub_id,
234            t1.`subdomain_alias_name` AS als_sub_name,
235            t2.`alias_name` AS als_name
236        FROM
237            `subdomain_alias` AS t1
238        LEFT JOIN (`domain_aliasses` AS t2) ON (t1.`alias_id` = t2.`alias_id`)
239        WHERE
240            t1.`alias_id` IN (SELECT `alias_id` FROM `domain_aliasses` WHERE `domain_id` = ?)
241        AND
242            t1.`subdomain_alias_status` = ?
243        ORDER BY
244            t1.`subdomain_alias_name`
245    ";
246
247    $rs = exec_query($sql, $query, array($dmn_id, $ok_status));
248
249    if ($rs->RecordCount() == 0) {
250        $tpl->assign(
251            array(
252                'ALS_SUB_ID'        => '0',
253                'ALS_SUB_SELECTED'    => 'selected="selected"',
254                'ALS_SUB_NAME'        => tr('Empty list')
255            )
256        );
257        $tpl->parse('ALS_SUB_LIST', 'sub_list');
258        $tpl->assign('TO_ALIAS_SUBDOMAIN', '');
259    } else {
260        $first_passed = false;
261
262        while (!$rs->EOF) {
263            if ($post_check === 'yes') {
264                if (!isset($_POST['als_sub_id'])) {
265                    $als_sub_id = '';
266                } else {
267                    $als_sub_id = $_POST['als_sub_id'];
268                }
269
270                if ($als_sub_id == $rs->fields['als_sub_id']) {
271                    $als_sub_selected = 'selected="selected"';
272                } else {
273                    $als_sub_selected = '';
274                }
275            } else {
276                if (!$first_passed) {
277                    $als_sub_selected = 'selected="selected"';
278                } else {
279                    $als_sub_selected = '';
280                }
281            }
282
283            $als_sub_name = decode_idna($rs->fields['als_sub_name']);
284            $als_name = decode_idna($rs->fields['als_name']);
285            $tpl->assign(
286                array(
287                    'ALS_SUB_ID'        => $rs->fields['als_sub_id'],
288                    'ALS_SUB_SELECTED'    => $als_sub_selected,
289                    'ALS_SUB_NAME'        => $als_sub_name . '.' . $als_name
290                )
291            );
292            $tpl->parse('ALS_SUB_LIST', '.als_sub_list');
293            $rs->MoveNext();
294
295            if (!$first_passed)
296                $first_passed = true;
297        }
298    }
299}
300
301function schedule_mail_account(&$sql, $domain_id, $dmn_name, $mail_acc) {
302
303    $mail_auto_respond = false;
304    $mail_auto_respond_text = '';
305    $mail_addr = '';
306
307    if (array_key_exists('mail_type_normal',$_POST)) {
308        $mail_pass = $_POST['pass'];
309        $mail_forward = '_no_';
310        if ($_POST['dmn_type'] === 'dmn') {
311            $mail_type[] = MT_NORMAL_MAIL;
312            $sub_id = '0';
313            $mail_addr = $mail_acc.'@'.$dmn_name; // the complete address
314        } else if ($_POST['dmn_type'] === 'sub') {
315            $mail_type[] = MT_SUBDOM_MAIL;
316            $sub_id = $_POST['sub_id'];
317            $mail_addr = $mail_acc.'@'.decode_idna($dmn_name); // the complete address
318        } else if ($_POST['dmn_type'] === 'als_sub') {
319            $mail_type[] = MT_ALSSUB_MAIL;
320            $sub_id = $_POST['als_sub_id'];
321            $mail_addr = $mail_acc.'@'.decode_idna($dmn_name); // the complete address
322        } else if ($_POST['dmn_type'] === 'als') {
323            $mail_type[] = MT_ALIAS_MAIL;
324            $sub_id = $_POST['als_id'];
325            $mail_addr = $mail_acc.'@'.decode_idna($dmn_name); // the complete address
326        } else {
327            set_page_message(tr('Unknown domain type'));
328            return false;
329        }
330    }
331
332    if (array_key_exists('mail_type_forward',$_POST)) {
333        if ($_POST['dmn_type'] === 'dmn') {
334            $mail_type[] = MT_NORMAL_FORWARD;
335            $sub_id = '0';
336        } else if ($_POST['dmn_type'] === 'sub') {
337            $mail_type[] = MT_SUBDOM_FORWARD;
338            $sub_id = $_POST['sub_id'];
339        } else if ($_POST['dmn_type'] === 'als_sub') {
340            $mail_type[] = MT_ALSSUB_FORWARD;
341            $sub_id = $_POST['als_sub_id'];
342        } else if ($_POST['dmn_type'] === 'als') {
343            $mail_type[] = MT_ALIAS_FORWARD;
344            $sub_id = $_POST['als_id'];
345        } else {
346            set_page_message(tr('Unknown domain type'));
347            return false;
348        }
349
350        if (!isset($_POST['mail_type_normal'])) {
351            $mail_pass = '_no_';
352        }
353
354        $mail_forward = $_POST['forward_list'];
355        $farray = preg_split("/[\n,]+/", $mail_forward);
356        $mail_accs = array();
357
358        foreach ($farray as $value) {
359            $value = trim($value);
360            if (!chk_email($value) && $value !== '') {
361                /* ERROR .. strange :) not email in this line - warning */
362                set_page_message(tr("Mailformat of an address in your forward list is incorrect!"));
363                return false;
364            } else if ($value === '') {
365                set_page_message(tr("Mail forward list empty!"));
366                return false;
367            } else if ($mail_acc.'@'.decode_idna($dmn_name) == $value){
368                set_page_message(tr("Forward to same address is not allowed!"));
369                return false;
370            }
371            $mail_accs[] = $value;
372        }
373        $mail_forward = implode(',', $mail_accs);
374    }
375
376    $mail_type = implode(',', $mail_type);
377    list($dmn_type, $type) = explode('_', $mail_type, 2);
378
379    $check_acc_query = "
380        SELECT
381            COUNT(`mail_id`) AS cnt
382        FROM
383            `mail_users`
384        WHERE
385            `mail_acc` = ?
386        AND
387            `domain_id` = ?
388        AND
389            `sub_id` = ?
390        AND
391            LEFT (`mail_type`, LOCATE('_', `mail_type`)-1) = ?
392    ";
393
394    $rs = exec_query($sql, $check_acc_query, array($mail_acc, $domain_id, $sub_id, $dmn_type));
395
396    if ($rs->fields['cnt'] > 0) {
397        set_page_message(tr('Mail account already exists!'));
398        return false;
399    }
400
401    if (preg_match("/^normal_mail/", $mail_type)
402        || preg_match("/^alias_mail/", $mail_type)
403        || preg_match("/^subdom_mail/", $mail_type)
404        || preg_match("/^alssub_mail/", $mail_type)) {
405        $mail_pass=encrypt_db_password($mail_pass);
406    }
407
408    $query = "
409        INSERT INTO `mail_users` (
410            `mail_acc`,
411            `mail_pass`,
412            `mail_forward`,
413            `domain_id`,
414            `mail_type`,
415            `sub_id`,
416            `status`,
417            `mail_auto_respond`,
418            `mail_auto_respond_text`,
419            `mail_addr`
420        ) VALUES
421            (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
422    ";
423
424    $rs = exec_query($sql, $query, array($mail_acc,
425            $mail_pass,
426            $mail_forward,
427            $domain_id,
428            $mail_type,
429            $sub_id,
430            Config::get('ITEM_ADD_STATUS'),
431            $mail_auto_respond,
432            $mail_auto_respond_text,
433            $mail_addr));
434
435    update_reseller_c_props(get_reseller_id($domain_id));
436
437    write_log($_SESSION['user_logged'] . ": adds new mail account: " . (!empty($mail_addr) ? $mail_addr : $mail_acc));
438    set_page_message(tr('Mail account scheduled for addition!'));
439    send_request();
440    user_goto('mail_accounts.php');
441}
442
443function check_mail_acc_data(&$sql, $dmn_id, $dmn_name) {
444
445    $mail_type_normal = isset($_POST['mail_type_normal']) ? $_POST['mail_type_normal'] : false;
446    $mail_type_forward = isset($_POST['mail_type_forward']) ? $_POST['mail_type_forward'] : false;
447
448    if (($mail_type_normal == false) && ($mail_type_forward == false)) {
449        set_page_message(tr('Please select at least one mail type!'));
450        return false;
451    }
452
453    if ($mail_type_normal) {
454        $pass = clean_input($_POST['pass']);
455        $pass_rep = clean_input($_POST['pass_rep']);
456    }
457
458    if (!isset($_POST['username']) || $_POST['username'] === '') {
459        set_page_message(tr('Please enter mail account username!'));
460        return false;
461    }
462
463    $mail_acc = strtolower(clean_input($_POST['username']));
464    if (ispcp_check_local_part($mail_acc) == "0") {
465        set_page_message(tr("Invalid Mail Localpart Format used!"));
466        return false;
467    }
468
469    if ($mail_type_normal) {
470        if (trim($pass) === '' || trim($pass_rep) === '') {
471            set_page_message(tr('Password data is missing!'));
472            return false;
473        } else if ($pass !== $pass_rep) {
474            set_page_message(tr('Entered passwords differ!'));
475            return false;
476        } else if (!chk_password($pass, 50, "/[`\xb4'\"\\\\\x01-\x1f\015\012|<>^$]/i")) {
477            // Not permitted chars
478            if (Config::get('PASSWD_STRONG')) {
479                set_page_message(sprintf(tr('The password must be at least %s long and contain letters and numbers to be valid.'), Config::get('PASSWD_CHARS')));
480            } else {
481                set_page_message(sprintf(tr('Password data is shorter than %s signs or includes not permitted signs!'), Config::get('PASSWD_CHARS')));
482            }
483            return false;
484        }
485    }
486
487
488    if ($_POST['dmn_type'] === 'sub') {
489        $id = 'sub_id';
490        $query = '
491            SELECT
492                CONCAT(t1.`subdomain_name`,\'.\',t2.`domain_name`) AS name
493            FROM
494                `subdomain` AS t1,`domain` AS t2
495            WHERE
496                t1.`domain_id` = t2.`domain_id`
497            AND
498                t1.`subdomain_id` = ?
499            AND
500                t1.`domain_id` = ?
501        ';
502        $type = tr('Subdomain');
503    }
504
505    if ($_POST['dmn_type'] === 'als_sub') {
506        $id = 'als_sub_id';
507        $query = '
508            SELECT
509                CONCAT(t1.`subdomain_alias_name`,\'.\',t2.`alias_name`) AS name
510            FROM
511                `subdomain_alias` AS t1
512            LEFT JOIN (`domain_aliasses` AS t2) ON (t1.`alias_id` = t2.`alias_id`)
513            LEFT JOIN (`domain` AS t3) ON (t2.`domain_id` = t3.`domain_id`)
514            WHERE
515                t1.`subdomain_alias_id` = ?
516            AND
517                t3.`domain_id` = ?
518        ';
519        $type = tr('Subdomain alias');
520    }
521
522    if ($_POST['dmn_type'] === 'als') {
523        $id = 'als_id';
524        $query = 'SELECT `alias_name` AS name FROM `domain_aliasses` WHERE `alias_id` = ? AND `domain_id` = ?';
525        $type = tr('Alias');
526    }
527
528    if (in_array($_POST['dmn_type'], array('sub', 'als_sub', 'als'))) {
529        if (!isset($_POST[$id])) {
530            set_page_message(sprintf(tr('%s list is empty! You cannot add mail accounts!'),$type));
531            return false;
532        }
533        if (!is_numeric($_POST[$id])) {
534            set_page_message(sprintf(tr('%s id is invalid! You cannot add mail accounts!'),$type));
535            return false;
536        }
537        $rs = exec_query($sql, $query, array($_POST[$id], $dmn_id));
538        if ($rs->fields['name'] == '') {
539            set_page_message(sprintf(tr('%s id is invalid! You cannot add mail accounts!'),$type));
540            return false;
541        }
542        $dmn_name=$rs->fields['name'];
543    }
544
545    if ($mail_type_forward && empty($_POST['forward_list'])) {
546        set_page_message(tr('Forward list is empty!'));
547        return false;
548    }
549
550    schedule_mail_account($sql, $dmn_id, $dmn_name, $mail_acc);
551}
552
553function gen_page_mail_acc_props(&$tpl, &$sql, $user_id) {
554    list($dmn_id,
555        $dmn_name,
556        $dmn_gid,
557        $dmn_uid,
558        $dmn_created_id,
559        $dmn_created,
560        $dmn_expires,
561        $dmn_last_modified,
562        $dmn_mailacc_limit,
563        $dmn_ftpacc_limit,
564        $dmn_traff_limit,
565        $dmn_sqld_limit,
566        $dmn_sqlu_limit,
567        $dmn_status,
568        $dmn_als_limit,
569        $dmn_subd_limit,
570        $dmn_ip_id,
571        $dmn_disk_limit,
572        $dmn_disk_usage,
573        $dmn_php,
574        $dmn_cgi,
575        $allowbackup,
576        $dmn_dns
577    ) = get_domain_default_props($sql, $user_id);
578
579    list($mail_acc_cnt,
580        $dmn_mail_acc_cnt,
581        $sub_mail_acc_cnt,
582        $als_mail_acc_cnt,
583        $alssub_mail_acc_cnt) = get_domain_running_mail_acc_cnt($sql, $dmn_id);
584
585    if ($dmn_mailacc_limit != 0 && $mail_acc_cnt >= $dmn_mailacc_limit) {
586        set_page_message(tr('Mail accounts limit reached!'));
587        user_goto('mail_accounts.php');
588    } else {
589        $post_check = isset($_POST['uaction']) ? 'yes' : 'no';
590        gen_page_form_data($tpl, $dmn_name, $post_check);
591        gen_dmn_als_list($tpl, $sql, $dmn_id, $post_check);
592        gen_dmn_sub_list($tpl, $sql, $dmn_id, $dmn_name, $post_check);
593        gen_dmn_als_sub_list($tpl, $sql, $dmn_id, $post_check);
594        if (isset($_POST['uaction']) && $_POST['uaction'] === 'add_user') {
595            check_mail_acc_data($sql, $dmn_id, $dmn_name);
596        }
597    }
598}
599
600// common page data.
601
602if (isset($_SESSION['email_support']) && $_SESSION['email_support'] == "no") {
603    header("Location: index.php");
604}
605
606$theme_color = Config::get('USER_INITIAL_THEME');
607
608$tpl->assign(
609    array(
610        'TR_CLIENT_ADD_MAIL_ACC_PAGE_TITLE'    => tr('ispCP - Client/Add Mail User'),
611        'THEME_COLOR_PATH'                    => "../themes/$theme_color",
612        'THEME_CHARSET'                        => tr('encoding'),
613        'ISP_LOGO'                            => get_logo($_SESSION['user_id'])
614    )
615);
616
617// dynamic page data.
618
619gen_page_mail_acc_props($tpl, $sql, $_SESSION['user_id']);
620
621// static page messages.
622
623gen_client_mainmenu($tpl, Config::get('CLIENT_TEMPLATE_PATH') . '/main_menu_email_accounts.tpl');
624gen_client_menu($tpl, Config::get('CLIENT_TEMPLATE_PATH') . '/menu_email_accounts.tpl');
625
626gen_logged_from($tpl);
627
628check_permissions($tpl);
629
630$tpl->assign(
631    array(
632        'TR_ADD_MAIL_USER'        => tr('Add mail users'),
633        'TR_USERNAME'            => tr('Username'),
634        'TR_TO_MAIN_DOMAIN'        => tr('To main domain'),
635        'TR_TO_DMN_ALIAS'        => tr('To domain alias'),
636        'TR_TO_SUBDOMAIN'        => tr('To subdomain'),
637        'TR_TO_ALS_SUBDOMAIN'    => tr('To alias subdomain'),
638        'TR_NORMAL_MAIL'        => tr('Normal mail'),
639        'TR_PASSWORD'            => tr('Password'),
640        'TR_PASSWORD_REPEAT'    => tr('Repeat password'),
641        'TR_FORWARD_MAIL'        => tr('Forward mail'),
642        'TR_FORWARD_TO'            => tr('Forward to'),
643        'TR_FWD_HELP'            => tr("Separate multiple email addresses with a line-break."),
644        'TR_ADD'                => tr('Add'),
645        'TR_EMPTY_DATA'            => tr('You did not fill all required fields')
646    )
647);
648
649gen_page_message($tpl);
650$tpl->parse('PAGE', 'page');
651$tpl->prnt();
652
653if (Config::get('DUMP_GUI_DEBUG')) {
654    dump_gui_debug();
655}
Note: See TracBrowser for help on using the browser.