Bladeren bron

#359 Dehardcoded the timezone (while preserving 'Europe/Paris' as the default)

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@1177 a333f486-631f-4898-b8df-5754b55c2be0
romainq 14 jaren geleden
bovenliggende
commit
03a508a231
4 gewijzigde bestanden met toevoegingen van 44 en 27 verwijderingen
  1. 1 27
      core/attributedef.class.inc.php
  2. 11 0
      core/cmdbsource.class.inc.php
  3. 18 0
      core/config.class.inc.php
  4. 14 0
      core/metamodel.class.php

+ 1 - 27
core/attributedef.class.inc.php

@@ -1823,20 +1823,6 @@ class AttributeEnum extends AttributeString
  */
 class AttributeDateTime extends AttributeDBField
 {
-	//const MYDATETIMEZONE = "UTC";
-	const MYDATETIMEZONE = "Europe/Paris";
-	static protected $const_TIMEZONE = null; // set once for all upon object construct 
-
-	static public function InitStatics()
-	{
-		// Init static constant once for all (remove when PHP allows real static const)
-		self::$const_TIMEZONE = new DateTimeZone(self::MYDATETIMEZONE);
-
-		// #@# Init default timezone -> do not get a notice... to be improved !!!
-		// duplicated in the email test page (the mail function does trigger a notice as well)
-		date_default_timezone_set(self::MYDATETIMEZONE);
-	}
-
 	static protected function GetDateFormat()
 	{
 		return "Y-m-d H:i:s";
@@ -1852,10 +1838,9 @@ class AttributeDateTime extends AttributeDBField
 	protected function GetSQLCol() {return "TIMESTAMP";}
 	public static function GetAsUnixSeconds($value)
 	{
-		$oDeadlineDateTime = new DateTime($value, self::$const_TIMEZONE);
+		$oDeadlineDateTime = new DateTime($value);
 		$iUnixSeconds = $oDeadlineDateTime->format('U');
 		return $iUnixSeconds;
-		
 	}
 
 	// #@# THIS HAS TO REVISED
@@ -2153,11 +2138,6 @@ class AttributeDate extends AttributeDateTime
 		return "Y-m-d";
 	}
 
-	static public function InitStatics()
-	{
-		// Nothing to do...
-	}
-
 	static protected function ListExpectedParams()
 	{
 		return parent::ListExpectedParams();
@@ -2173,9 +2153,6 @@ class AttributeDate extends AttributeDateTime
 	}
 }
 
-// Init static constant once for all (remove when PHP allows real static const)
-AttributeDate::InitStatics();
-
 /**
  * A dead line stored as a date & time
  * The only difference with the DateTime attribute is the display:
@@ -2233,9 +2210,6 @@ class AttributeDeadline extends AttributeDateTime
 		return $sResult;
 	}
 }
-// Init static constant once for all (remove when PHP allows real static const)
-AttributeDateTime::InitStatics();
-
 
 /**
  * Map a foreign key to an attribute 

+ 11 - 0
core/cmdbsource.class.inc.php

@@ -84,6 +84,17 @@ class CMDBSource
 		}
 	}
 
+	public static function SetTimezone($sTimezone = null)
+	{
+		// Note: requires the installation of MySQL special tables,
+		//       otherwise, only 'SYSTEM' or "+10:00' may be specified which is NOT sufficient because of day light saving times
+		if (!is_null($sTimezone))
+		{
+			$sQuotedTimezone = self::Quote($sTimezone);
+			self::Query("SET time_zone = $sQuotedTimezone");
+		}
+	}
+
 	public static function ListDB()
 	{
 		$aDBs = self::QueryToCol('SHOW DATABASES', 'Database');

+ 18 - 0
core/config.class.inc.php

@@ -286,6 +286,24 @@ class Config
 			'source_of_value' => '',
 			'show_in_conf_sample' => true,
 		),
+		'apc_cache.query_ttl' => array(
+			'type' => 'integer',
+			'description' => 'Time to live set in APC for the prepared queries (seconds - 0 means no timeout)',
+			'default' => 3600,
+			'value' => 3600,
+			'source_of_value' => '',
+			'show_in_conf_sample' => true,
+		),
+		'timezone' => array(
+			'type' => 'string',
+			'description' => 'Timezone (reference: http://php.net/manual/en/timezones.php). If empty, it will be left unchanged and MUST be explicitely configured in PHP',
+			// examples... not used (nor 'description')
+			'examples' => array('America/Sao_Paulo', 'America/New_York (standing for EDT)', 'America/Los_Angeles (standing for PDT)', 'Asia/Istanbul', 'Asia/Singapore', 'Africa/Casablanca', 'Australia/Sydney'),
+			'default' => 'Europe/Paris',
+			'value' => 'Europe/Paris',
+			'source_of_value' => '',
+			'show_in_conf_sample' => true,
+		),
 	);
 
 	public function IsProperty($sPropCode)

+ 14 - 0
core/metamodel.class.php

@@ -3628,6 +3628,19 @@ abstract class MetaModel
 										&& function_exists('apc_store');
 		self::$m_iQueryCacheTTL = self::$m_oConfig->Get('apc_cache.query_ttl');
 
+		// PHP timezone first...
+		//
+		$sPHPTimezone = self::$m_oConfig->Get('timezone');
+		if ($sPHPTimezone == '')
+		{
+			// Leave as is... up to the admin to set a value somewhere...
+			//$sPHPTimezone = date_default_timezone_get();
+		}
+		else
+		{
+			date_default_timezone_set($sPHPTimezone);
+		}
+
 		// Note: load the dictionary as soon as possible, because it might be
 		//       needed when some error occur
 		$sAppIdentity = self::GetConfig()->Get('session_name');
@@ -3750,6 +3763,7 @@ abstract class MetaModel
 
 		CMDBSource::Init($sServer, $sUser, $sPwd); // do not select the DB (could not exist)
 		CMDBSource::SetCharacterSet($sCharacterSet, $sCollation);
+		// Later when timezone implementation is correctly done: CMDBSource::SetTimezone($sDBTimezone);
 	}
 
 	public static function GetModuleSetting($sModule, $sProperty, $defaultvalue = null)