Fix timezone for dates in the past
This commit is contained in:
37
inc/db.php
37
inc/db.php
@@ -37,14 +37,14 @@ class Db extends PhpObject
|
||||
* 'cascading_delete'=>array('table_name1'=>array('linked_table1', 'linked_table2', ...), 'table_name2'=>...))
|
||||
* @var Array
|
||||
*/
|
||||
public function __construct($sDbServer, $sLogin, $sPass, $sDatabase, $asOptions, $sEncoding='utf8mb4')
|
||||
public function __construct($sDbServer, $sLogin, $sPass, $sDatabase, $asOptions, $sEncoding='utf8mb4', $sTimeZone='Europe/Paris')
|
||||
{
|
||||
parent::__construct(__FILE__, Settings::DEBUG);
|
||||
$this->sDatabase = $sDatabase;
|
||||
$this->asOptions = $asOptions;
|
||||
//$this->oConnection = mysql_connect(self::DB_SERVER, self::DB_LOGIN, self::DB_PASS);
|
||||
$this->oConnection = new mysqli($sDbServer, $sLogin, $sPass);
|
||||
$this->syncPhpParams($sEncoding);
|
||||
$this->syncPhpParams($sEncoding, $sTimeZone);
|
||||
|
||||
/*
|
||||
$dsn = 'mysql:dbname='.$this->sDatabase.';host='.self::DB_SERVER;
|
||||
@@ -73,20 +73,13 @@ class Db extends PhpObject
|
||||
}
|
||||
}
|
||||
|
||||
private function syncPhpParams($sEncoding)
|
||||
private function syncPhpParams($sEncoding, $sTimeZone)
|
||||
{
|
||||
//Characters encoding
|
||||
$this->oConnection->set_charset($sEncoding); //SET NAMES
|
||||
|
||||
//Time zone
|
||||
$oNow = new DateTime();
|
||||
$iMins = $oNow->getOffset() / 60;
|
||||
$iSign = ($iMins < 0)?-1:1;
|
||||
$iMins = abs($iMins);
|
||||
$iHours = floor($iMins / 60);
|
||||
$iMins -= $iHours * 60;
|
||||
$sOffset = sprintf('%+d:%02d', $iHours*$iSign, $iMins);
|
||||
$this->setQuery("SET time_zone='{$sOffset}';");
|
||||
//Timezone
|
||||
$this->setQuery("SET time_zone='{$sTimeZone}';");
|
||||
}
|
||||
|
||||
public function __destruct()
|
||||
@@ -210,7 +203,7 @@ class Db extends PhpObject
|
||||
$asForeignKeyQueries = array();
|
||||
foreach($asTableNames as $sTableName)
|
||||
{
|
||||
$asTableColumns = array_keys($this->getTablecolumns($sTableName));
|
||||
$asTableColumns = $this->getTablecolumns($sTableName, false);
|
||||
foreach($asTableColumns as $sColumnName)
|
||||
{
|
||||
if($this->isId($sColumnName) && $sColumnName!=self::getId($sTableName))
|
||||
@@ -313,10 +306,11 @@ class Db extends PhpObject
|
||||
private function isField($sTableFieldName)
|
||||
{
|
||||
$asPath = explode('.', str_replace('`', '', $sTableFieldName));
|
||||
return (is_array($asPath)
|
||||
&& count($asPath)==2
|
||||
&& in_array($asPath[0], $this->getTables()) //table among the declared tables
|
||||
&& in_array($asPath[1], array_keys($this->getTablecolumns($asPath[0])))); //field among the table fields
|
||||
return (
|
||||
is_array($asPath)
|
||||
&& count($asPath)==2
|
||||
&& $this->isColumnInTable($asPath[0], $asPath[1])
|
||||
);
|
||||
}
|
||||
|
||||
private function getTable($sTableId)
|
||||
@@ -331,7 +325,7 @@ class Db extends PhpObject
|
||||
}
|
||||
}
|
||||
|
||||
public function getTablecolumns($sTableName)
|
||||
public function getTablecolumns($sTableName, $bTypes=true)
|
||||
{
|
||||
if(!array_key_exists($sTableName, $this->asOptions['tables'])) return false;
|
||||
|
||||
@@ -339,9 +333,16 @@ class Db extends PhpObject
|
||||
foreach($this->asOptions['tables'][$sTableName] as $sFieldName) $asTableColumns[] = $sFieldName;
|
||||
$asTableColumns[] = 'led';
|
||||
|
||||
if(!$bTypes) return $asTableColumns;
|
||||
|
||||
$asTableName = array_fill(0, count($asTableColumns), $sTableName);
|
||||
return array_combine($asTableColumns, array_map(array('self', 'getColumnType'), $asTableColumns, $asTableName));
|
||||
}
|
||||
|
||||
public function isColumnInTable($sTableName, $sColName) {
|
||||
$asCols = $this->getTablecolumns($sTableName, false);
|
||||
return ($asCols && in_array($sColName, $asCols));
|
||||
}
|
||||
|
||||
private function getColumnType($sColumnName, $sTableName)
|
||||
{
|
||||
|
||||
@@ -63,11 +63,12 @@ abstract class Main extends PhpObject
|
||||
if($bDb) $asMandatoryClasses[] = array('name'=>'db', 'project'=>false);
|
||||
foreach($asMandatoryClasses as $asClass) $this->oClassManagement->incClass($asClass['name'], $asClass['project']);
|
||||
|
||||
$sTimeZone = ($sTimeZone=='')?Settings::TIMEZONE:$sTimeZone;
|
||||
$this->setContext($sProcessPage, $sTimeZone);
|
||||
|
||||
//Init objects
|
||||
if($bDb) {
|
||||
$this->oDb = new Db(Settings::DB_SERVER, Settings::DB_LOGIN, Settings::DB_PASS, Settings::DB_NAME, $this->getSqlOptions() , Settings::DB_ENC);
|
||||
$this->oDb = new Db(Settings::DB_SERVER, Settings::DB_LOGIN, Settings::DB_PASS, Settings::DB_NAME, $this->getSqlOptions() , Settings::DB_ENC, $sTimeZone);
|
||||
if(in_array($this->oDb->sDbState, array(Db::DB_NO_DATA, Db::DB_NO_TABLE))) $this->install();
|
||||
}
|
||||
}
|
||||
@@ -81,7 +82,7 @@ abstract class Main extends PhpObject
|
||||
private function setContext($sProcessPage, $sTimeZone='')
|
||||
{
|
||||
//Browser <> PHP <> MySql synchronization
|
||||
date_default_timezone_set(($sTimeZone=='')?Settings::TIMEZONE:$sTimeZone);
|
||||
date_default_timezone_set($sTimeZone);
|
||||
ini_set('default_charset', Settings::TEXT_ENC);
|
||||
header('Content-Type: text/html; charset='.Settings::TEXT_ENC);
|
||||
mb_internal_encoding(Settings::TEXT_ENC);
|
||||
|
||||
Reference in New Issue
Block a user