From 65164295778caa2c4e623e7c8e195f2aa3560121 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Thu, 07 Apr 2016 13:19:58 -0400
Subject: [PATCH] - Changed 0000-00-00 date and datetime values to NULL (mySQL compatibility), Fixes: #3690

---
 interface/web/tools/import_vpopmail.php             |    4 +-
 interface/lib/classes/tform_tpl_generator.inc.php   |    2 
 install/sql/ispconfig3.sql                          |   20 +++++-----
 install/sql/incremental/upd_dev_collection.sql      |   23 +++++++++++
 interface/lib/classes/remote.d/openvz.inc.php       |    2 
 server/plugins-available/maildrop_plugin.inc.php    |    2 
 install/tpl/pureftpd_mysql.conf.master              |   20 +++++-----
 interface/lib/classes/tform_base.inc.php            |   12 +++---
 server/plugins-available/maildeliver_plugin.inc.php |    2 
 interface/lib/classes/listform.inc.php              |    2 
 server/lib/classes/cron.d/400-openvz.inc.php        |    2 
 11 files changed, 57 insertions(+), 34 deletions(-)

diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index 4333ab7..4f67ccc 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -227,3 +227,26 @@
 ALTER TABLE `client_template` ADD COLUMN `limit_database_user` int(11) NOT NULL DEFAULT '-1' after limit_database;
 ALTER TABLE `client` CHANGE `customer_no_template` `customer_no_template` VARCHAR(255) NULL DEFAULT 'R[CLIENTID]C[CUSTOMER_NO]';
 	
+ALTER TABLE `client` CHANGE `added_date` `added_date` DATE NULL DEFAULT NULL;
+ALTER TABLE `ftp_user` CHANGE `expires` `expires` DATETIME NULL DEFAULT NULL;
+ALTER TABLE `mail_user` CHANGE `autoresponder_start_date` `autoresponder_start_date` DATETIME NULL DEFAULT NULL;
+ALTER TABLE `mail_user` CHANGE `autoresponder_end_date` `autoresponder_end_date` DATETIME NULL DEFAULT NULL;
+ALTER TABLE `openvz_traffic` CHANGE `traffic_date` `traffic_date` DATE NULL DEFAULT NULL;
+ALTER TABLE `openvz_vm` CHANGE `active_until_date` `active_until_date` DATE NULL DEFAULT NULL;
+ALTER TABLE `sys_session` CHANGE `date_created` `date_created` DATETIME NULL DEFAULT NULL;
+ALTER TABLE `sys_session` CHANGE `last_updated` `last_updated` DATETIME NULL DEFAULT NULL;
+ALTER TABLE `web_domain` CHANGE `added_date` `added_date` DATE NULL DEFAULT NULL;
+ALTER TABLE `web_traffic` CHANGE `traffic_date` `traffic_date` DATE NULL DEFAULT NULL;
+
+UPDATE `client` SET `added_date` = NULL WHERE `added_date` = '0000-00-00';
+UPDATE `ftp_user` SET `expires` = NULL WHERE `expires` = '0000-00-00 00:00:00';
+UPDATE `mail_user` SET `autoresponder_start_date` = NULL WHERE `autoresponder_start_date` = '0000-00-00 00:00:00';
+UPDATE `mail_user` SET `autoresponder_end_date` = NULL WHERE `autoresponder_end_date` = '0000-00-00 00:00:00';
+UPDATE `openvz_traffic` SET `traffic_date` = NULL WHERE `traffic_date` = '0000-00-00';
+UPDATE `openvz_vm` SET `active_until_date` = NULL WHERE `active_until_date` = '0000-00-00';
+UPDATE `sys_session` SET `date_created` = NULL WHERE `date_created` = '0000-00-00 00:00:00';
+UPDATE `sys_session` SET `last_updated` = NULL WHERE `last_updated` = '0000-00-00 00:00:00';
+UPDATE `web_domain` SET `added_date` = NULL WHERE `added_date` = '0000-00-00';
+UPDATE `web_traffic` SET `traffic_date` = NULL WHERE `traffic_date` = '0000-00-00';
+
+
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 6eed418..17b08b6 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -258,7 +258,7 @@
   `customer_no_template` varchar(255) DEFAULT 'R[CLIENTID]C[CUSTOMER_NO]',
   `customer_no_start` int(11) NOT NULL DEFAULT '1',
   `customer_no_counter` int(11) NOT NULL DEFAULT '0',
-  `added_date` date NOT NULL DEFAULT '0000-00-00',
+  `added_date` date NULL DEFAULT NULL,
   `added_by` varchar(255) DEFAULT NULL,
   `validation_status` enum('accept','review','reject') NOT NULL DEFAULT 'accept',
   `risk_score` int(10) unsigned NOT NULL DEFAULT '0',
@@ -638,7 +638,7 @@
   `dl_ratio` int(11) NOT NULL default '-1',
   `ul_bandwidth` int(11) NOT NULL default '-1',
   `dl_bandwidth` int(11) NOT NULL default '-1',
-  `expires` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+  `expires` datetime NULL DEFAULT NULL,
   PRIMARY KEY  (`ftp_user_id`),
   KEY `active` (`active`),
   KEY `server_id` (`server_id`),
@@ -962,8 +962,8 @@
   `sender_cc` varchar(255) NOT NULL default '',
   `homedir` varchar(255) NOT NULL default '',
   `autoresponder` enum('n','y') NOT NULL default 'n',
-  `autoresponder_start_date` datetime NOT NULL default '0000-00-00 00:00:00',
-  `autoresponder_end_date` datetime NOT NULL default '0000-00-00 00:00:00',
+  `autoresponder_start_date` datetime NULL default NULL,
+  `autoresponder_end_date` datetime NULL default NULL,
   `autoresponder_subject` varchar(255) NOT NULL default 'Out of office reply',
   `autoresponder_text` mediumtext NULL,
   `move_junk` enum('n','y') NOT NULL default 'n',
@@ -1151,7 +1151,7 @@
 
 CREATE TABLE IF NOT EXISTS `openvz_traffic` (
   `veid` int(11) NOT NULL DEFAULT '0',
-  `traffic_date` date NOT NULL DEFAULT '0000-00-00',
+  `traffic_date` date NULL DEFAULT NULL,
   `traffic_bytes` bigint(32) unsigned NOT NULL DEFAULT '0',
   PRIMARY KEY (`veid`,`traffic_date`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
@@ -1184,7 +1184,7 @@
   `start_boot` varchar(255) NOT NULL DEFAULT 'y',
   `bootorder` int(11) NOT NULL DEFAULT '1',
   `active` varchar(255) NOT NULL DEFAULT 'y',
-  `active_until_date` date NOT NULL DEFAULT '0000-00-00',
+  `active_until_date` date NULL DEFAULT NULL,
   `description` text,
   `diskspace` int(11) NOT NULL DEFAULT '0',
   `traffic` int(11) NOT NULL DEFAULT '-1',
@@ -1739,8 +1739,8 @@
 
 CREATE TABLE `sys_session` (
   `session_id` varchar(64) NOT NULL DEFAULT '',
-  `date_created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
-  `last_updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+  `date_created` datetime NULL DEFAULT NULL,
+  `last_updated` datetime NULL DEFAULT NULL,
   `permanent` enum('n','y') NOT NULL DEFAULT 'n',
   `session_data` longtext,
   PRIMARY KEY (`session_id`),
@@ -1972,7 +1972,7 @@
   `enable_spdy` ENUM('y','n') NULL DEFAULT 'n',
   `last_quota_notification` date NULL default NULL,
   `rewrite_rules` mediumtext,
-  `added_date` date NOT NULL DEFAULT '0000-00-00',
+  `added_date` date NULL DEFAULT NULL,
   `added_by` varchar(255) DEFAULT NULL,
   `directive_snippets_id` int(11) unsigned NOT NULL default '0',
   `enable_pagespeed` ENUM('y','n') NOT NULL DEFAULT 'n',
@@ -2041,7 +2041,7 @@
 
 CREATE TABLE `web_traffic` (
   `hostname` varchar(255) NOT NULL DEFAULT '',
-  `traffic_date` date NOT NULL DEFAULT '0000-00-00',
+  `traffic_date` date NULL DEFAULT NULL,
   `traffic_bytes` bigint(32) unsigned NOT NULL default '0',
   PRIMARY KEY  (`hostname`,`traffic_date`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
diff --git a/install/tpl/pureftpd_mysql.conf.master b/install/tpl/pureftpd_mysql.conf.master
index fcf79bb..32d2159 100644
--- a/install/tpl/pureftpd_mysql.conf.master
+++ b/install/tpl/pureftpd_mysql.conf.master
@@ -59,12 +59,12 @@
 
 # Query to execute in order to fetch the password
 
-MYSQLGetPW      SELECT password FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires = "0000-00-00 00:00:00" OR expires > NOW())
+MYSQLGetPW      SELECT password FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires IS NULL OR expires > NOW())
 
 
 # Query to execute in order to fetch the system user name or uid
 
-MYSQLGetUID     SELECT uid FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires = "0000-00-00 00:00:00" OR expires > NOW())
+MYSQLGetUID     SELECT uid FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires IS NULL OR expires > NOW())
 
 
 # Optional : default UID - if set this overrides MYSQLGetUID
@@ -74,7 +74,7 @@
 
 # Query to execute in order to fetch the system user group or gid
 
-MYSQLGetGID     SELECT gid FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires = "0000-00-00 00:00:00" OR expires > NOW())
+MYSQLGetGID     SELECT gid FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires IS NULL OR expires > NOW())
 
 
 # Optional : default GID - if set this overrides MYSQLGetGID
@@ -84,34 +84,34 @@
 
 # Query to execute in order to fetch the home directory
 
-MYSQLGetDir     SELECT dir FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires = "0000-00-00 00:00:00" OR expires > NOW())
+MYSQLGetDir     SELECT dir FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires IS NULL OR expires > NOW())
 
 
 # Optional : query to get the maximal number of files 
 # Pure-FTPd must have been compiled with virtual quotas support.
 
-MySQLGetQTAFS  SELECT quota_files FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND quota_files != '-1' AND username="\L" AND (expires = "0000-00-00 00:00:00" OR expires > NOW())
+MySQLGetQTAFS  SELECT quota_files FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND quota_files != '-1' AND username="\L" AND (expires IS NULL OR expires > NOW())
 
 
 # Optional : query to get the maximal disk usage (virtual quotas)
 # The number should be in Megabytes.
 # Pure-FTPd must have been compiled with virtual quotas support.
 
-MySQLGetQTASZ  SELECT quota_size FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND quota_size != '-1' AND username="\L" AND (expires = "0000-00-00 00:00:00" OR expires > NOW())
+MySQLGetQTASZ  SELECT quota_size FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND quota_size != '-1' AND username="\L" AND (expires IS NULL OR expires > NOW())
 
 
 # Optional : ratios. The server has to be compiled with ratio support.
 
-MySQLGetRatioUL SELECT ul_ratio FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND ul_ratio != '-1' AND username="\L" AND (expires = "0000-00-00 00:00:00" OR expires > NOW())
-MySQLGetRatioDL SELECT dl_ratio FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND dl_ratio != '-1' AND username="\L" AND (expires = "0000-00-00 00:00:00" OR expires > NOW())
+MySQLGetRatioUL SELECT ul_ratio FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND ul_ratio != '-1' AND username="\L" AND (expires IS NULL OR expires > NOW())
+MySQLGetRatioDL SELECT dl_ratio FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND dl_ratio != '-1' AND username="\L" AND (expires IS NULL OR expires > NOW())
 
 
 # Optional : bandwidth throttling.
 # The server has to be compiled with throttling support.
 # Values are in KB/s .
 
-MySQLGetBandwidthUL SELECT ul_bandwidth FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND ul_bandwidth != '-1' AND username="\L" AND (expires = "0000-00-00 00:00:00" OR expires > NOW())
-MySQLGetBandwidthDL SELECT dl_bandwidth FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND dl_bandwidth != '-1' AND username="\L" AND (expires = "0000-00-00 00:00:00" OR expires > NOW())
+MySQLGetBandwidthUL SELECT ul_bandwidth FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND ul_bandwidth != '-1' AND username="\L" AND (expires IS NULL OR expires > NOW())
+MySQLGetBandwidthDL SELECT dl_bandwidth FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND dl_bandwidth != '-1' AND username="\L" AND (expires IS NULL OR expires > NOW())
 
 # Enable ~ expansion. NEVER ENABLE THIS BLINDLY UNLESS :
 # 1) You know what you are doing.
diff --git a/interface/lib/classes/listform.inc.php b/interface/lib/classes/listform.inc.php
index 120e652..af6c3ff 100644
--- a/interface/lib/classes/listform.inc.php
+++ b/interface/lib/classes/listform.inc.php
@@ -563,7 +563,7 @@
 					break;
 
 				case 'DATE':
-					if($record[$key] != '' && $record[$key] != '0000-00-00') {
+					if($record[$key] != '' && !is_null($record[$key]) && $record[$key] != '0000-00-00') {
 						$record[$key] = $record[$key];
 					}
 					break;
diff --git a/interface/lib/classes/remote.d/openvz.inc.php b/interface/lib/classes/remote.d/openvz.inc.php
index c427a1f..a4ef38a 100644
--- a/interface/lib/classes/remote.d/openvz.inc.php
+++ b/interface/lib/classes/remote.d/openvz.inc.php
@@ -307,7 +307,7 @@
 		$params['vm_password'] = (isset($override_params['vm_password']))?$override_params['vm_password']:$app->auth->get_random_password(10);
 		$params['start_boot'] = (isset($override_params['start_boot']))?$override_params['start_boot']:'y';
 		$params['active'] = (isset($override_params['active']))?$override_params['active']:'y';
-		$params['active_until_date'] = (isset($override_params['active_until_date']))?$override_params['active_until_date']:'0000-00-00';
+		$params['active_until_date'] = (isset($override_params['active_until_date']))?$override_params['active_until_date']:null;
 		$params['description'] = (isset($override_params['description']))?$override_params['description']:'';
 
 		//* The next params get filled with pseudo values, as the get replaced
diff --git a/interface/lib/classes/tform_base.inc.php b/interface/lib/classes/tform_base.inc.php
index 4405de4..1739c1f 100644
--- a/interface/lib/classes/tform_base.inc.php
+++ b/interface/lib/classes/tform_base.inc.php
@@ -206,7 +206,7 @@
 					break;
 
 				case 'DATE':
-					if($record[$key] != '' && $record[$key] != '0000-00-00') {
+					if($record[$key] != '' && !is_null($record[$key]) && $record[$key] != '0000-00-00') {
 						$tmp = explode('-', $record[$key]);
 						$new_record[$key] = date($this->dateformat, mktime(0, 0, 0, $tmp[1]  , $tmp[2], $tmp[0]));
 					}
@@ -770,7 +770,7 @@
 					}
 					break;
 				case 'DATE':
-					if($record[$key] != '' && $record[$key] != '0000-00-00') {
+					if($record[$key] != '' && !is_null($record[$key]) && $record[$key] != '0000-00-00') {
 						if(function_exists('date_parse_from_format')) {
 							$date_parts = date_parse_from_format($this->dateformat, $record[$key]);
 							$new_record[$key] = $date_parts['year'].'-'.str_pad($date_parts['month'], 2, "0", STR_PAD_LEFT).'-'.str_pad($date_parts['day'], 2, "0", STR_PAD_LEFT);
@@ -779,7 +779,7 @@
 							$new_record[$key] = date('Y-m-d', $tmp);
 						}
 					} else {
-						$new_record[$key] = '0000-00-00';
+						$new_record[$key] = null;
 					}
 					break;
 				case 'INTEGER':
@@ -802,19 +802,19 @@
 							$new_record[$key] = date( 'Y-m-d H:i:s', mktime($_dt_hour, $_dt_minute, $_dt_second, $_dt_month, $_dt_day, $_dt_year) );
 						}
 					} else {*/
-						if($record[$key] != '' && $record[$key] != '0000-00-00 00:00:00') {
+						if($record[$key] != '' && !is_null($record[$key]) && $record[$key] != '0000-00-00 00:00:00') {
 							//$tmp = strtotime($record[$key]);
 							//$new_record[$key] = date($this->datetimeformat, $tmp);
 							$parsed_date = date_parse_from_format($this->datetimeformat,$record[$key]);
 							if($parsed_date['error_count'] > 0 || ($parsed_date['year'] == 1899 && $parsed_date['month'] == 12 && $parsed_date['day'] == 31)) {
 								// There was an error, set the date to 0
-								$new_record[$key] = '0000-00-00 00:00:00';
+								$new_record[$key] = null;
 							} else {
 								// Date parsed successfully. Convert it to database format
 								$new_record[$key] = date( 'Y-m-d H:i:s', mktime($parsed_date['hour'], $parsed_date['minute'], $parsed_date['second'], $parsed_date['month'], $parsed_date['day'], $parsed_date['year']) );
 							}
 						} else {
-							$new_record[$key] = '0000-00-00 00:00:00';
+							$new_record[$key] = null;
 						}
 					/*}*/
 					break;
diff --git a/interface/lib/classes/tform_tpl_generator.inc.php b/interface/lib/classes/tform_tpl_generator.inc.php
index b759e51..348ac52 100644
--- a/interface/lib/classes/tform_tpl_generator.inc.php
+++ b/interface/lib/classes/tform_tpl_generator.inc.php
@@ -273,7 +273,7 @@
 					case 'DATE':
 						$type = 'date';
 						$typevalue = '';
-						$defaultValue = ($field["default"] != '')?$field["default"]:'0000-00-00';
+						$defaultValue = ($field["default"] != '')?$field["default"]:null;
 						break;
 					}
 
diff --git a/interface/web/tools/import_vpopmail.php b/interface/web/tools/import_vpopmail.php
index 3c8db20..242ea5f 100644
--- a/interface/web/tools/import_vpopmail.php
+++ b/interface/web/tools/import_vpopmail.php
@@ -231,8 +231,8 @@
 						"cc" => '',
 						"homedir" => '/var/vmail',
 						"autoresponder" => 'n',
-						"autoresponder_start_date" => '0000-00-00 00:00:00',
-						"autoresponder_end_date" => '0000-00-00 00:00:00',
+						"autoresponder_start_date" => null,
+						"autoresponder_end_date" => null,
 						"autoresponder_subject" => 'Out of office reply',
 						"autoresponder_text" => '',
 						"move_junk" => 'n',
diff --git a/server/lib/classes/cron.d/400-openvz.inc.php b/server/lib/classes/cron.d/400-openvz.inc.php
index 5eba8d2..c88e0e6 100644
--- a/server/lib/classes/cron.d/400-openvz.inc.php
+++ b/server/lib/classes/cron.d/400-openvz.inc.php
@@ -56,7 +56,7 @@
 
 		if ($app->dbmaster == $app->db) {
 			//* Check which virtual machines have to be deactivated
-			$sql = "SELECT * FROM openvz_vm WHERE active = 'y' AND active_until_date != '0000-00-00' AND active_until_date < CURDATE()";
+			$sql = "SELECT * FROM openvz_vm WHERE active = 'y' AND active_until_date IS NOT NULL AND active_until_date < CURDATE()";
 			$records = $app->db->queryAllRecords($sql);
 			if(is_array($records)) {
 				foreach($records as $rec) {
diff --git a/server/plugins-available/maildeliver_plugin.inc.php b/server/plugins-available/maildeliver_plugin.inc.php
index a6f9ae5..35001a4 100644
--- a/server/plugins-available/maildeliver_plugin.inc.php
+++ b/server/plugins-available/maildeliver_plugin.inc.php
@@ -138,7 +138,7 @@
 			$tpl->setVar('move_junk', $data["new"]["move_junk"]);
 
 			// Check autoresponder dates
-			if($data["new"]["autoresponder_start_date"] == '0000-00-00 00:00:00' && $data["new"]["autoresponder_end_date"] == '0000-00-00 00:00:00') {
+			if((!$data['new']['autoresponder_start_date'] || $data["new"]["autoresponder_start_date"] == '0000-00-00 00:00:00') && (!$data['new']['autoresponder_end_date'] || $data["new"]["autoresponder_end_date"] == '0000-00-00 00:00:00')) {
 				$tpl->setVar('autoresponder_date_limit', 0);
 			} else {
 				$tpl->setVar('autoresponder_date_limit', 1);
diff --git a/server/plugins-available/maildrop_plugin.inc.php b/server/plugins-available/maildrop_plugin.inc.php
index 5e05bc3..1ebb677 100644
--- a/server/plugins-available/maildrop_plugin.inc.php
+++ b/server/plugins-available/maildrop_plugin.inc.php
@@ -144,7 +144,7 @@
 				}
 				$tpl = str_replace('{vmail_mailbox_base}', $mail_config["homedir_path"], $tpl);
 
-				if ($data["new"]["autoresponder_start_date"] != '0000-00-00 00:00:00') { // Dates have been set
+				if ($data['new']['autoresponder_start_date'] && $data["new"]["autoresponder_start_date"] != '0000-00-00 00:00:00') { // Dates have been set
 					$tpl = str_replace('{start_date}', strtotime($data["new"]["autoresponder_start_date"]), $tpl);
 					$tpl = str_replace('{end_date}', strtotime($data["new"]["autoresponder_end_date"]), $tpl);
 				} else {

--
Gitblit v1.9.1