136 lines
4.0 KiB
PHP
136 lines
4.0 KiB
PHP
<?php
|
|
|
|
class Project extends PhpObject {
|
|
|
|
//Spot Mode
|
|
const MODE_PREVIZ = 'P';
|
|
const MODE_BLOG = 'B';
|
|
const MODE_HISTO = 'H';
|
|
const MODES = array('previz'=>self::MODE_PREVIZ, 'blog'=>self::MODE_BLOG, 'histo'=>self::MODE_HISTO);
|
|
|
|
//Folders
|
|
const GEO_FOLDER = 'geo/';
|
|
|
|
//DB Tables
|
|
const PROJ_TABLE = 'projects';
|
|
|
|
/**
|
|
* Database Handle
|
|
* @var Db
|
|
*/
|
|
private $oDb;
|
|
|
|
private $iProjectId;
|
|
private $sMode;
|
|
private $sName;
|
|
private $sCodeName;
|
|
private $asActive;
|
|
private $asGeo;
|
|
|
|
public function __construct(Db &$oDb) {
|
|
parent::__construct(__CLASS__, Settings::DEBUG);
|
|
$this->oDb = &$oDb;
|
|
}
|
|
|
|
public function setProjectId($iProjectId=0) {
|
|
if($iProjectId > 0) {
|
|
$this->iProjectId = $iProjectId;
|
|
}
|
|
else {
|
|
/**
|
|
* Project 1 [-----------------]
|
|
* Project 2 [---------------------------]
|
|
* Project 3 [-----------]
|
|
* Selected Project [-------Project 1-------][------------Project 2-------------][---------------Project 3------------------
|
|
* Mode --P--][--------B--------][--P--][-----------B---------------][---P---][-----B-----][---------H----------
|
|
*/
|
|
$sQuery = "SELECT MAX(id_project) FROM projects WHERE active_to = (SELECT MIN(active_to) FROM projects WHERE active_to > NOW() OR active_to = (SELECT MAX(active_to) FROM projects))";
|
|
$asResult = $this->oDb->getArrayQuery($sQuery, true);
|
|
$this->iProjectId = array_shift($asResult);
|
|
}
|
|
|
|
$this->setProjectInfo();
|
|
}
|
|
|
|
public function getMode() {
|
|
return $this->sMode;
|
|
}
|
|
|
|
public function getProjectId() {
|
|
return $this->iProjectId;
|
|
}
|
|
|
|
public function getProjectCodeName() {
|
|
return $this->sCodeName;
|
|
}
|
|
|
|
public function getActivePeriod($sFromTo='') {
|
|
return ($sFromTo=='')?$this->asActive:$this->asActive[$sFromTo];
|
|
}
|
|
|
|
public function getTimeZone() {
|
|
return $this->asGeo['timezone'];
|
|
}
|
|
|
|
public function getGeoFile() {
|
|
return $this->asGeo['file'];
|
|
}
|
|
|
|
public function getProjects($iProjectId=0) {
|
|
$bSpecificProj = ($iProjectId > 0);
|
|
$asInfo = array(
|
|
'select'=> array(
|
|
Db::getId(self::PROJ_TABLE)." AS id",
|
|
'codename',
|
|
'name',
|
|
'active_from',
|
|
'active_to',
|
|
"IF(NOW() BETWEEN active_from AND active_to, 1, IF(NOW() < active_from, 0, 2)) AS mode",
|
|
'geofile',
|
|
'timezone'
|
|
),
|
|
'from' => self::PROJ_TABLE
|
|
);
|
|
if($bSpecificProj) $asInfo['constraint'] = array(Db::getId(self::PROJ_TABLE)=>$iProjectId);
|
|
|
|
$asProjects = $this->oDb->selectRows($asInfo, 'codename');
|
|
foreach($asProjects as $sCodeName=>&$asProject) {
|
|
switch($asProject['mode']) {
|
|
case 0: $asProject['mode'] = self::MODE_PREVIZ; break;
|
|
case 1: $asProject['mode'] = self::MODE_BLOG; break;
|
|
case 2: $asProject['mode'] = self::MODE_HISTO; break;
|
|
}
|
|
|
|
$sGeoFile = self::GEO_FOLDER.$asProject['geofile'];
|
|
if(!file_exists($sGeoFile)) {
|
|
(new Converter())->convertToGeoJson($asProject['geofile']);
|
|
}
|
|
|
|
$asProject['geofile'] = Spot::addTimestampToFilePath($sGeoFile);
|
|
$asProject['codename'] = $sCodeName;
|
|
$asProject['timezone_desc'] = Spot::getTimeZoneDesc($asProject['timezone']);
|
|
}
|
|
return $bSpecificProj?$asProject:$asProjects;
|
|
}
|
|
|
|
public function getFeedIds() {
|
|
return $this->oDb->selectColumn(
|
|
Feed::FEED_TABLE,
|
|
Db::getId(Feed::FEED_TABLE),
|
|
array(Db::getId(self::PROJ_TABLE) => $this->getProjectId())
|
|
);
|
|
}
|
|
|
|
private function setProjectInfo() {
|
|
if($this->getProjectId() > 0) {
|
|
$asProject = $this->getProjects($this->getProjectId());
|
|
|
|
$this->sMode = $asProject['mode'];
|
|
$this->asActive = array('from'=>$asProject['active_from'], 'to'=>$asProject['active_to']);
|
|
$this->sCodeName = $asProject['codename'];
|
|
$this->sName = $asProject['name'];
|
|
$this->asGeo = array('file'=>$asProject['geofile'], 'timezone'=>$asProject['timezone']);
|
|
}
|
|
else $this->addError('Error while setting project: no project ID');
|
|
}
|
|
} |