From 96ae77f9f14f3e1381fa3e5405c693b0273ce1d2 Mon Sep 17 00:00:00 2001 From: Till Brehm <tbrehm@ispconfig.org> Date: Sun, 10 Jan 2016 17:15:52 +0100 Subject: [PATCH] Implemented new date validation for autoresponder. --- .../classes/validate_autoresponder.inc.php | 34 +++++++++---------- interface/web/mail/form/mail_user.tform.php | 12 +++++-- interface/web/mail/lib/lang/en_mail_user.lng | 1 + interface/web/mail/mail_user_edit.php | 6 ++-- .../mail_user_autoresponder_edit.htm | 3 +- 5 files changed, 32 insertions(+), 24 deletions(-) diff --git a/interface/lib/classes/validate_autoresponder.inc.php b/interface/lib/classes/validate_autoresponder.inc.php index fa29b7ee70..ad0ee479be 100755 --- a/interface/lib/classes/validate_autoresponder.inc.php +++ b/interface/lib/classes/validate_autoresponder.inc.php @@ -33,15 +33,14 @@ class validate_autoresponder extends validate_datetime { function start_date($field_name, $field_value, $validator) { + global $app; + // save field value for later use in end_date() $this->start_date = $field_value; - if ($this->_datetime_selected($field_value)) { - // We just require a start date be set - return; - } - if($_POST['autoresponder'] == 'y') { - return "No start date selected"; + if($_POST['autoresponder'] == 'y' && $field_value == '') { + // we need a start date when autoresponder is on + return $app->tform->lng($validator['errmsg']).'<br />'; } } @@ -51,17 +50,18 @@ class validate_autoresponder extends validate_datetime $start_date = $this->start_date; //$start_date = $app->tform_actions->dataRecord['autoresponder_start_date']; - - $_msg = $this->not_empty('autoresponder_start_date', $start_date, $validator); - if (!$_msg) // Start date set - { - if ( !($_msg = $this->not_empty($field_name, $field_value, $validator)) ) // End date set - { - $validator['compare'] = $this->_get_timestamp_value($start_date); - $_msg = $this->is_greater($field_name, $field_value, $validator); - } - - return $_msg; + + // Parse date + $start_date_array = date_parse_from_format($app->lng('conf_format_datetime'),$start_date); + $end_date_array = date_parse_from_format($app->lng('conf_format_datetime'),$field_value); + + //calculate timestamps + $start_date_tstamp = mktime($start_date_array['hour'], $start_date_array['minute'], $start_date_array['second'], $start_date_array['month'], $start_date_array['day'], $start_date_array['year']); + $end_date_tstamp = mktime($end_date_array['hour'], $end_date_array['minute'], $end_date_array['second'], $end_date_array['month'], $end_date_array['day'], $end_date_array['year']); + + // End date has to be > start date + if($end_date_tstamp <= $start_date_tstamp) { + return $app->tform->lng($validator['errmsg']).'<br />'; } } diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php index 8d5b6257f4..8b80deab24 100644 --- a/interface/web/mail/form/mail_user.tform.php +++ b/interface/web/mail/form/mail_user.tform.php @@ -311,7 +311,11 @@ if ($global_config['mail']['mailbox_show_autoresponder_tab'] === 'y') { 'autoresponder_start_date' => array ( 'datatype' => 'DATETIME', 'formtype' => 'DATETIME', - 'validators'=> array ( 0 => array ( 'type' => 'CUSTOM', + 'validators'=> array ( + 0 => array ( 'type' => 'ISDATETIME', + 'allowempty' => 'y', + 'errmsg'=> 'autoresponder_start_date_is_no_date'), + 1 => array ( 'type' => 'CUSTOM', 'class' => 'validate_autoresponder', 'function' => 'start_date', 'errmsg'=> 'autoresponder_start_date_is_required'), @@ -320,7 +324,11 @@ if ($global_config['mail']['mailbox_show_autoresponder_tab'] === 'y') { 'autoresponder_end_date' => array ( 'datatype' => 'DATETIME', 'formtype' => 'DATETIME', - 'validators'=> array ( 0 => array ( 'type' => 'CUSTOM', + 'validators'=> array ( + 0 => array ( 'type' => 'ISDATETIME', + 'allowempty' => 'y', + 'errmsg'=> 'autoresponder_end_date_is_no_date'), + 1 => array ( 'type' => 'CUSTOM', 'class' => 'validate_autoresponder', 'function' => 'end_date', 'errmsg'=> 'autoresponder_end_date_isgreater'), diff --git a/interface/web/mail/lib/lang/en_mail_user.lng b/interface/web/mail/lib/lang/en_mail_user.lng index 86c5b1203c..ba4fdd42a0 100644 --- a/interface/web/mail/lib/lang/en_mail_user.lng +++ b/interface/web/mail/lib/lang/en_mail_user.lng @@ -14,6 +14,7 @@ $wb["autoresponder_start_date_txt"] = 'Start on'; $wb["autoresponder_start_date_ispast"] = 'Start date cannot be in the past.'; $wb["autoresponder_end_date_txt"] = 'End by'; $wb["autoresponder_end_date_isgreater"] = 'End date must be set and be later than start date.'; +$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.'; $wb["no_domain_perm"] = 'You have no permission for this domain.'; $wb["error_no_pwd"] = 'Password is empty.'; $wb["quota_error_isint"] = 'Mailbox size must be a number.'; diff --git a/interface/web/mail/mail_user_edit.php b/interface/web/mail/mail_user_edit.php index ab980ca6ca..e1e05d3d7f 100644 --- a/interface/web/mail/mail_user_edit.php +++ b/interface/web/mail/mail_user_edit.php @@ -255,9 +255,9 @@ class page_action extends tform_actions { $this->dataRecord["login"] = isset($this->dataRecord["email"]) ? $this->dataRecord["email"] : ''; } //* if autoresponder checkbox not selected, do not save dates - if (!isset($_POST['autoresponder']) && array_key_exists('autoresponder_start_date', $_POST)) { - $this->dataRecord['autoresponder_start_date'] = array_map(create_function('$item', 'return 0;'), $this->dataRecord['autoresponder_start_date']); - $this->dataRecord['autoresponder_end_date'] = array_map(create_function('$item', 'return 0;'), $this->dataRecord['autoresponder_end_date']); + if (!isset($_POST['autoresponder'])) { + $this->dataRecord['autoresponder_start_date'] = ''; + $this->dataRecord['autoresponder_end_date'] = ''; } parent::onSubmit(); diff --git a/interface/web/mail/templates/mail_user_autoresponder_edit.htm b/interface/web/mail/templates/mail_user_autoresponder_edit.htm index afefb7950f..c5fc584c09 100644 --- a/interface/web/mail/templates/mail_user_autoresponder_edit.htm +++ b/interface/web/mail/templates/mail_user_autoresponder_edit.htm @@ -18,8 +18,7 @@ </div> <div class="form-group"> <label for="autoresponder_start_date" class="col-sm-3 control-label">{tmpl_var name='autoresponder_start_date_txt'}</label> - <div class="col-sm-9">{tmpl_var name='autoresponder_start_date'} - <a href="javascript:AR_SetNow();">{tmpl_var name='now_txt'}</a></div> + <div class="col-sm-9">{tmpl_var name='autoresponder_start_date'}</div> </div> <div class="form-group"> <label for="autoresponder_end_date" class="col-sm-3 control-label">{tmpl_var name='autoresponder_end_date_txt'}</label> -- GitLab