From fcc69847d167aab1d3c40a094a6ca1a21147055a Mon Sep 17 00:00:00 2001
From: wyrie <wyrie@ispconfig3>
Date: Thu, 17 Dec 2009 05:55:52 -0500
Subject: [PATCH] Implemented: FS#1003 - Autoresponder: Start and end date (Interface)

---
 interface/web/mail/lib/lang/en_mail_user.lng         |    6 +
 interface/lib/classes/validate_datetime.inc.php      |  138 ++++++++++++++++++++++++++++++++++
 interface/lib/lang/en.lng                            |    1 
 interface/lib/classes/validate_autoresponder.inc.php |   59 ++++++++++++++
 4 files changed, 203 insertions(+), 1 deletions(-)

diff --git a/interface/lib/classes/validate_autoresponder.inc.php b/interface/lib/classes/validate_autoresponder.inc.php
new file mode 100755
index 0000000..c8db6a9
--- /dev/null
+++ b/interface/lib/classes/validate_autoresponder.inc.php
@@ -0,0 +1,59 @@
+<?php
+/*
+Copyright (c) 2009, Scott Barr <gsbarr@gmail.com>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+include_once('validate_datetime.inc.php');
+
+class validate_autoresponder extends validate_datetime 
+{
+	function start_date($field_name, $field_value, $validator)
+	{
+		if ($this->_datetime_selected($field_value)) {
+			return $this->is_future($field_name, $field_value, $validator);
+		}
+	}
+	
+	function end_date($field_name, $field_value, $validator)
+	{
+		global $app;
+		
+		$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;
+		}
+	}
+}
\ No newline at end of file
diff --git a/interface/lib/classes/validate_datetime.inc.php b/interface/lib/classes/validate_datetime.inc.php
new file mode 100755
index 0000000..b13e0ac
--- /dev/null
+++ b/interface/lib/classes/validate_datetime.inc.php
@@ -0,0 +1,138 @@
+<?php
+/*
+Copyright (c) 2009, Scott Barr <gsbarr@gmail.com>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of ISPConfig nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
+      specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+class validate_datetime 
+{
+	/**
+	 * Check if the parsed datetime selectors are not set
+	 * to it's default value (zero).
+	 * 
+	 * @param array $field_value
+	 * @return bool
+	 */
+	function _datetime_selected($field_value)
+	{
+		if (is_array($field_value) && count($field_value) >= 5) 
+		{
+			$result = array_filter($field_value, create_function('$dt_unit', 'return ($dt_unit > 0);'));
+			return (count($result) !== 0);
+		}
+		
+		return false;
+	}
+	
+	/**
+	 * Check wordbook for the existence of an
+	 * error message. If not found will return
+	 * the parsed error message with line break.
+	 * 
+	 * @param $errmsg
+	 * @return string
+	 */
+	function _get_error($errmsg)
+	{
+		global $app;
+		
+		$errmsg = (isset($app->tform->wordbook[$errmsg])) ? $app->tform->wordbook[$errmsg] : $errmsg;
+		$errmsg .= '<br />' . PHP_EOL;
+		
+		return $errmsg;
+	}
+	
+	/**
+	 * Helper function - filter the contents of the 
+	 * selectors and return the resulting unix timestamp.
+	 * 
+	 * @param $field_value
+	 * @return int Unix timestamp
+	 */
+	function _get_timestamp_value($field_value)
+	{
+		$second = 0;
+		$filtered_values = array_map(create_function('$item','return (int)$item;'), $field_value);
+		extract($filtered_values, EXTR_OVERWRITE);
+		
+		return mktime($hour, $minute, $second, $month, $day, $year);
+	}
+	
+	/**
+	 * The minimum requirement to submit a datetime field
+	 * is to set the day, month and year values. Check that
+	 * these values are not zero (default).
+	 * 
+	 * @param string $field_name
+	 * @param array $field_value
+	 * @param array $validator
+	 * @return string|void Error message if found
+	 */
+	function not_empty($field_name, $field_value, $validator)
+	{
+		extract($field_value);
+		if ( !($day > 0 && $month > 0 && $year > 0) ) {
+			return $this->_get_error($validator['errmsg']);
+		}
+	}
+	
+	/**
+	 * Check that the selected datetime is in the future.
+	 * 
+	 * @param string $field_name
+	 * @param array $field_value
+	 * @param array $validator
+	 * @return string|void Error message if found
+	 */
+	function is_future($field_name, $field_value, $validator) 
+	{
+		$validator['compare'] = mktime(date('H'), (date('i')-30), 0, date('m'), date('d'), date('Y')); // Turn back the clock 30 minutes for slow posters.	
+		return $this->is_greater($field_name, $field_value, $validator);
+	}
+	
+	/**
+	 * Compare the selected datetime to a timestamp
+	 * parsed via the validator array (key: compare).
+	 * 
+	 * @param string $field_name
+	 * @param array $field_value
+	 * @param array $validator
+	 * @return string|void Error message if found
+	 */
+	function is_greater($field_name, $field_value, $validator)
+	{
+		if ( !isset($validator['compare']) || !is_numeric($validator['compare']) || (date('d/m/Y', $validator['compare']) == '01/01/1970') ) {
+			return $this->_get_error('Could not find a unix timestamp to compare datetime with.');
+		}
+		
+		$dt_stamp = $this->_get_timestamp_value($field_value);
+		if ($dt_stamp < $validator['compare']) {
+			return $this->_get_error($validator['errmsg']);
+		}
+	}
+	
+	
+}
\ No newline at end of file
diff --git a/interface/lib/lang/en.lng b/interface/lib/lang/en.lng
index eb58161..facf513 100644
--- a/interface/lib/lang/en.lng
+++ b/interface/lib/lang/en.lng
@@ -15,6 +15,7 @@
 $wb['error_no_delete_permission'] = 'You dont have the permission to delete this record!';
 $wb["page_txt"] = 'Page';
 $wb["page_of_txt"] = 'of';
+$wb["page_and_txt"] = 'and';
 $wb["page_next_txt"] = 'Next';
 $wb["page_back_txt"] = 'Back';
 $wb["delete_txt"] = 'Delete';
diff --git a/interface/web/mail/lib/lang/en_mail_user.lng b/interface/web/mail/lib/lang/en_mail_user.lng
index ccb9651..6690819 100644
--- a/interface/web/mail/lib/lang/en_mail_user.lng
+++ b/interface/web/mail/lib/lang/en_mail_user.lng
@@ -7,7 +7,11 @@
 $wb["email_error_isemail"] = 'Email address is invalid.';
 $wb["email_error_unique"] = 'Duplicate Email address.';
 $wb["autoresponder_text_txt"] = 'Text';
-$wb["autoresponder_txt"] = 'Autoresponder';
+$wb["autoresponder_txt"] = 'Active';
+$wb["autoresponder_start_date_txt"] = 'Start on';
+$wb["autoresponder_start_date_isfuture"] = '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["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.';

--
Gitblit v1.9.1