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'}&nbsp;
-                <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