Harmonize timezones
This commit is contained in:
@@ -32,7 +32,7 @@ class Picture extends PhpObject {
|
||||
if(empty($this->asPics)) {
|
||||
if($this->oProject->getProjectId()) {
|
||||
$asPics = $this->oDb->selectRows(array(
|
||||
'select' => array(Db::getId(self::PIC_TABLE), 'filename', 'taken_on', 'timestamp AS added_on', 'rotate'),
|
||||
'select' => array(Db::getId(self::PIC_TABLE), 'filename', 'taken_on', 'posted_on', 'rotate'),
|
||||
'from' => self::PIC_TABLE,
|
||||
'constraint'=> array(Db::getId(Project::PROJ_TABLE) => $this->oProject->getProjectId())
|
||||
));
|
||||
@@ -54,17 +54,20 @@ class Picture extends PhpObject {
|
||||
public function addPic($sPicName, $sMethod='upload') {
|
||||
$sError = '';
|
||||
if(!$this->isProjectModeValid() && $sMethod!='sync') $sError = 'Le projet (id='.$this->oProject->getProjectId().') n\'est pas en mode "blog"';
|
||||
elseif($this->oDb->pingValue(self::PIC_TABLE, array('filename'=>$sPicName))) $sError = 'l\'image existe déjà';
|
||||
elseif($this->oDb->pingValue(self::PIC_TABLE, array('filename'=>$sPicName)) && $sMethod!='sync') $sError = 'l\'image existe déjà';
|
||||
else {
|
||||
//Add picture to DB
|
||||
$asPicInfo = self::getPicInfo($sPicName);
|
||||
$iPicId = $this->oDb->insertRow(self::PIC_TABLE, array(
|
||||
$asPicInfo = $this->getPicInfoFromFile($sPicName);
|
||||
$asDbInfo = array(
|
||||
Db::getId(Project::PROJ_TABLE) => $this->oProject->getProjectId(),
|
||||
'filename' => $sPicName,
|
||||
'taken_on' => date(Db::TIMESTAMP_FORMAT, $asPicInfo['taken_ts']),
|
||||
'timestamp' => date(Db::TIMESTAMP_FORMAT, $asPicInfo['file_ts']),
|
||||
'taken_on' => ($asPicInfo['taken_ts'] > 0)?date(Db::TIMESTAMP_FORMAT, $asPicInfo['taken_ts']):0, //Site Time (Settings::TIMEZONE)
|
||||
'posted_on' => date(Db::TIMESTAMP_FORMAT, $asPicInfo['file_ts']), //Site Time
|
||||
'rotate' => $asPicInfo['rotate']
|
||||
));
|
||||
);
|
||||
|
||||
if($sMethod=='sync') $iPicId = $this->oDb->insertUpdateRow(self::PIC_TABLE, $asDbInfo, array(Db::getId(Project::PROJ_TABLE), 'filename'));
|
||||
else $iPicId = $this->oDb->insertRow(self::PIC_TABLE, $asDbInfo);
|
||||
|
||||
if(!$iPicId) $sError = 'l\'image n\'a pas pu être entrée en base';
|
||||
else {
|
||||
@@ -95,19 +98,26 @@ class Picture extends PhpObject {
|
||||
return $this->getCleanMessageStack();
|
||||
}
|
||||
|
||||
private static function getPicInfo($sPicName)
|
||||
private function getPicInfoFromFile($sPicName)
|
||||
{
|
||||
$sPicPath = self::getPicPath($sPicName);
|
||||
$iPicTimeStamp = $iPicTakenTimeStamp = $iPicFileTimeStamp = 0;
|
||||
$iTimeStamp = $iTakenOn = $iPostedOn = 0;
|
||||
$sTakenOn = '';
|
||||
$asExif = @exif_read_data($sPicPath, 0, true);
|
||||
if(!$asExif) $asExif['FILE']['FileDateTime'] = filemtime($sPicPath);
|
||||
|
||||
//Timestamps
|
||||
if(array_key_exists('EXIF', $asExif) && array_key_exists('DateTimeOriginal', $asExif['EXIF'])) $iPicTakenTimeStamp = strtotime($asExif['EXIF']['DateTimeOriginal']);
|
||||
if(array_key_exists('FILE', $asExif) && array_key_exists('FileDateTime', $asExif['FILE'])) $iPicFileTimeStamp = $asExif['FILE']['FileDateTime'];
|
||||
if(array_key_exists('EXIF', $asExif) && array_key_exists('DateTimeOriginal', $asExif['EXIF'])) $sTakenOn = $asExif['EXIF']['DateTimeOriginal'];
|
||||
if(array_key_exists('FILE', $asExif) && array_key_exists('FileDateTime', $asExif['FILE'])) $iPostedOn = $asExif['FILE']['FileDateTime'];
|
||||
|
||||
//Picture info do not have any TZ: Interpreting date time using project timezone (assuming all pictures have been taken in this time zone)
|
||||
if($sTakenOn != '') {
|
||||
$oTakenOn = new DateTime($sTakenOn, new DateTimeZone($this->oProject->getTimeZone()));
|
||||
$iTakenOn = $oTakenOn->format('U');
|
||||
}
|
||||
|
||||
//Merge timestamps
|
||||
$iPicTimeStamp = ($iPicTakenTimeStamp > 0)?$iPicTakenTimeStamp:$iPicFileTimeStamp;
|
||||
$iTimeStamp = ($iTakenOn > 0)?$iTakenOn:$iPostedOn;
|
||||
|
||||
//Orientation
|
||||
if(array_key_exists('IFD0', $asExif) && array_key_exists('Orientation', $asExif['IFD0'])) {
|
||||
@@ -123,9 +133,9 @@ class Picture extends PhpObject {
|
||||
else $sRotate = '0';
|
||||
|
||||
return array(
|
||||
'timestamp' => $iPicTimeStamp,
|
||||
'taken_ts' => $iPicTakenTimeStamp,
|
||||
'file_ts' => $iPicFileTimeStamp,
|
||||
'timestamp' => $iTimeStamp,
|
||||
'taken_ts' => $iTakenOn,
|
||||
'file_ts' => $iPostedOn,
|
||||
'rotate' => $sRotate
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user