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 $sGeo; 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 getProjects($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($iProjectId > 0) $asInfo['constraint'] = array(Db::getId(self::PROJ_TABLE)=>$iProjectId); $asProjects = $this->oDb->selectRows($asInfo, 'codename'); foreach($asProjects as &$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; } $sGeoFilePath = self::GEO_FOLDER.$asProject['geofile']; $asProject['geofile'] = file_exists($sGeoFilePath)?$asProject['geofile'].'?'.date("YmdHis", filemtime($sGeoFilePath)):$asProject['geofile']; } return $asProjects; } private function setProjectInfo() { $asResult = $this->getProjects($this->iProjectId); $asProject = reset($asResult); $this->sMode = $asProject['mode']; $this->asActive = array('from'=>$asProject['active_from'], 'to'=>$asProject['active_to']); $this->sCodeName = key($asResult); $this->sName = $asProject['name']; $this->sGeo = array('file'=>$asProject['geofile'], 'timezone'=>$asProject['timezone']); } }