Change file name to match class name

This commit is contained in:
2021-06-28 20:48:53 +02:00
parent 2bb25347dd
commit dacd8a8cca

View File

@@ -1,215 +1,215 @@
<?php <?php
namespace Franzz\Spot; namespace Franzz\Spot;
use Franzz\Objects\PhpObject; use Franzz\Objects\PhpObject;
use Franzz\Objects\Db; use Franzz\Objects\Db;
use \Settings; use \Settings;
class Project extends PhpObject { class Project extends PhpObject {
//Spot Mode //Spot Mode
const MODE_PREVIZ = 'P'; const MODE_PREVIZ = 'P';
const MODE_BLOG = 'B'; const MODE_BLOG = 'B';
const MODE_HISTO = 'H'; const MODE_HISTO = 'H';
const MODES = array('previz'=>self::MODE_PREVIZ, 'blog'=>self::MODE_BLOG, 'histo'=>self::MODE_HISTO); const MODES = array('previz'=>self::MODE_PREVIZ, 'blog'=>self::MODE_BLOG, 'histo'=>self::MODE_HISTO);
//DB Tables //DB Tables
const PROJ_TABLE = 'projects'; const PROJ_TABLE = 'projects';
/** /**
* Database Handle * Database Handle
* @var Db * @var Db
*/ */
private $oDb; private $oDb;
private $iProjectId; private $iProjectId;
private $sMode; private $sMode;
private $sName; private $sName;
private $sCodeName; private $sCodeName;
private $asActive; private $asActive;
private $asGeo; private $asGeo;
public function __construct(Db &$oDb, $iProjectId=0) { public function __construct(Db &$oDb, $iProjectId=0) {
parent::__construct(__CLASS__, Settings::DEBUG); parent::__construct(__CLASS__, Settings::DEBUG);
$this->oDb = &$oDb; $this->oDb = &$oDb;
if($iProjectId > 0) $this->setProjectId($iProjectId); if($iProjectId > 0) $this->setProjectId($iProjectId);
} }
public function getProjectId() { public function getProjectId() {
return $this->iProjectId; return $this->iProjectId;
} }
public function setProjectId($iProjectId=0) { public function setProjectId($iProjectId=0) {
if($iProjectId > 0) { if($iProjectId > 0) {
$this->iProjectId = $iProjectId; $this->iProjectId = $iProjectId;
} }
else { else {
/** /**
* Project 1 [-----------------] * Project 1 [-----------------]
* Project 2 [---------------------------] * Project 2 [---------------------------]
* Project 3 [-----------] * Project 3 [-----------]
* Selected Project [-------Project 1-------][------------Project 2-------------][---------------Project 3------------------ * Selected Project [-------Project 1-------][------------Project 2-------------][---------------Project 3------------------
* Mode --P--][--------B--------][--P--][-----------B---------------][---P---][-----B-----][---------H---------- * Mode --P--][--------B--------][--P--][-----------B---------------][---P---][-----B-----][---------H----------
*/ */
$sQuery = $sQuery =
"SELECT MAX(id_project) ". "SELECT MAX(id_project) ".
"FROM projects ". "FROM projects ".
"WHERE active_to = (". "WHERE active_to = (".
"SELECT MIN(active_to) ". //Select closest project in the future "SELECT MIN(active_to) ". //Select closest project in the future
"FROM projects ". "FROM projects ".
"WHERE active_to > NOW() ". //Select Next project "WHERE active_to > NOW() ". //Select Next project
"OR active_to = (". //In case there is no next project, select the last one "OR active_to = (". //In case there is no next project, select the last one
"SELECT MAX(active_to) ". "SELECT MAX(active_to) ".
"FROM projects". "FROM projects".
")". ")".
")"; ")";
$asResult = $this->oDb->getArrayQuery($sQuery, true); $asResult = $this->oDb->getArrayQuery($sQuery, true);
$this->iProjectId = array_shift($asResult); $this->iProjectId = array_shift($asResult);
} }
$this->setProjectInfo(); $this->setProjectInfo();
} }
public function createProjectId() { public function createProjectId() {
$this->setProjectId($this->oDb->insertRow(self::PROJ_TABLE, array('codename'=>''))); $this->setProjectId($this->oDb->insertRow(self::PROJ_TABLE, array('codename'=>'')));
return $this->getProjectId(); return $this->getProjectId();
} }
public function getMode() { public function getMode() {
return $this->sMode; return $this->sMode;
} }
public function getProjectName() { public function getProjectName() {
return $this->sName; return $this->sName;
} }
public function setProjectName($sName) { public function setProjectName($sName) {
return $this->updateField('name', $sName); return $this->updateField('name', $sName);
} }
public function getProjectCodeName() { public function getProjectCodeName() {
return $this->sCodeName; return $this->sCodeName;
} }
public function setProjectCodeName($sCodeName) { public function setProjectCodeName($sCodeName) {
return $this->updateField('codename', $sCodeName); return $this->updateField('codename', $sCodeName);
} }
public function getActivePeriod($sFromTo='') { public function getActivePeriod($sFromTo='') {
return ($sFromTo=='')?$this->asActive:$this->asActive[$sFromTo]; return ($sFromTo=='')?$this->asActive:$this->asActive[$sFromTo];
} }
public function setActivePeriod($oValue, $sFromTo='') { public function setActivePeriod($oValue, $sFromTo='') {
if($sFromTo=='') { if($sFromTo=='') {
$this->updateField('active_from', $oValue['from']); $this->updateField('active_from', $oValue['from']);
return $this->updateField('active_to', $oValue['to']); return $this->updateField('active_to', $oValue['to']);
} }
else { else {
return $this->updateField('active_'.$sFromTo, $oValue); return $this->updateField('active_'.$sFromTo, $oValue);
} }
} }
public function getFeedIds() { public function getFeedIds() {
return $this->oDb->selectColumn( return $this->oDb->selectColumn(
Feed::FEED_TABLE, Feed::FEED_TABLE,
Db::getId(Feed::FEED_TABLE), Db::getId(Feed::FEED_TABLE),
array(Db::getId(self::PROJ_TABLE) => $this->getProjectId()) array(Db::getId(self::PROJ_TABLE) => $this->getProjectId())
); );
} }
public function getProjects($iProjectId=0) { public function getProjects($iProjectId=0) {
$bSpecificProj = ($iProjectId > 0); $bSpecificProj = ($iProjectId > 0);
$asInfo = array( $asInfo = array(
'select'=> array( 'select'=> array(
Db::getId(self::PROJ_TABLE)." AS id", Db::getId(self::PROJ_TABLE)." AS id",
'codename', 'codename',
'name', 'name',
'active_from', 'active_from',
'active_to', 'active_to',
"IF(NOW() BETWEEN active_from AND active_to, 1, IF(NOW() < active_from, 0, 2)) AS mode" "IF(NOW() BETWEEN active_from AND active_to, 1, IF(NOW() < active_from, 0, 2)) AS mode"
), ),
'from' => self::PROJ_TABLE 'from' => self::PROJ_TABLE
); );
if($bSpecificProj) $asInfo['constraint'] = array(Db::getId(self::PROJ_TABLE)=>$iProjectId); if($bSpecificProj) $asInfo['constraint'] = array(Db::getId(self::PROJ_TABLE)=>$iProjectId);
$asProjects = $this->oDb->selectRows($asInfo, 'codename'); $asProjects = $this->oDb->selectRows($asInfo, 'codename');
foreach($asProjects as $sCodeName=>&$asProject) { foreach($asProjects as $sCodeName=>&$asProject) {
switch($asProject['mode']) { switch($asProject['mode']) {
case 0: $asProject['mode'] = self::MODE_PREVIZ; break; case 0: $asProject['mode'] = self::MODE_PREVIZ; break;
case 1: $asProject['mode'] = self::MODE_BLOG; break; case 1: $asProject['mode'] = self::MODE_BLOG; break;
case 2: $asProject['mode'] = self::MODE_HISTO; break; case 2: $asProject['mode'] = self::MODE_HISTO; break;
} }
if($sCodeName != '' && !Converter::isGeoJsonValid($sCodeName)) Converter::convertToGeoJson($sCodeName); if($sCodeName != '' && !Converter::isGeoJsonValid($sCodeName)) Converter::convertToGeoJson($sCodeName);
$asProject['geofilepath'] = Spot::addTimestampToFilePath(Geo::getFilePath($sCodeName, GeoJson::EXT)); $asProject['geofilepath'] = Spot::addTimestampToFilePath(Geo::getFilePath($sCodeName, GeoJson::EXT));
$asProject['gpxfilepath'] = Spot::addTimestampToFilePath(Geo::getFilePath($sCodeName, Gpx::EXT)); $asProject['gpxfilepath'] = Spot::addTimestampToFilePath(Geo::getFilePath($sCodeName, Gpx::EXT));
$asProject['codename'] = $sCodeName; $asProject['codename'] = $sCodeName;
} }
return $bSpecificProj?$asProject:$asProjects; return $bSpecificProj?$asProject:$asProjects;
} }
public function getProject() { public function getProject() {
return $this->getProjects($this->getProjectId()); return $this->getProjects($this->getProjectId());
} }
public function getLastUpdate(): int { public function getLastUpdate(): int {
$iLastUpdate = INF; $iLastUpdate = INF;
$asFeedIds = $this->getFeedIds(); $asFeedIds = $this->getFeedIds();
foreach($asFeedIds as $iFeedId) { foreach($asFeedIds as $iFeedId) {
$iLastUpdate = min($iLastUpdate, (new Feed($this->oDb, $iFeedId))->getLastUpdate()); $iLastUpdate = min($iLastUpdate, (new Feed($this->oDb, $iFeedId))->getLastUpdate());
} }
return $iLastUpdate; return $iLastUpdate;
} }
public function getMaps() { public function getMaps() {
$sQuery = $sQuery =
"SELECT codename, geo_name, min_zoom, max_zoom, attribution ". "SELECT codename, geo_name, min_zoom, max_zoom, attribution ".
"FROM ".Spot::MAPPING_TABLE." ". "FROM ".Spot::MAPPING_TABLE." ".
"LEFT JOIN ".Spot::MAP_TABLE." USING(".Db::getId(Spot::MAP_TABLE).") ". "LEFT JOIN ".Spot::MAP_TABLE." USING(".Db::getId(Spot::MAP_TABLE).") ".
"WHERE ".Db::getId(self::PROJ_TABLE)." = ".$this->getProjectId()." ". "WHERE ".Db::getId(self::PROJ_TABLE)." = ".$this->getProjectId()." ".
"OR ".Db::getId(self::PROJ_TABLE)." IS NULL "; "OR ".Db::getId(self::PROJ_TABLE)." IS NULL ";
return $this->oDb->getArrayQuery($sQuery, true); return $this->oDb->getArrayQuery($sQuery, true);
} }
private function setProjectInfo() { private function setProjectInfo() {
if($this->getProjectId() > 0) { if($this->getProjectId() > 0) {
$asProject = $this->getProject(); $asProject = $this->getProject();
$this->sMode = $asProject['mode']; $this->sMode = $asProject['mode'];
$this->asActive = array('from'=>$asProject['active_from'], 'to'=>$asProject['active_to']); $this->asActive = array('from'=>$asProject['active_from'], 'to'=>$asProject['active_to']);
$this->sCodeName = $asProject['codename']; $this->sCodeName = $asProject['codename'];
$this->sName = $asProject['name']; $this->sName = $asProject['name'];
$this->asGeo = array('geofile'=>$asProject['geofilepath'], 'gpxfile'=>$asProject['gpxfilepath']); $this->asGeo = array('geofile'=>$asProject['geofilepath'], 'gpxfile'=>$asProject['gpxfilepath']);
} }
else $this->addError('Error while setting project: no project ID'); else $this->addError('Error while setting project: no project ID');
} }
private function updateField($sField, $oValue) { private function updateField($sField, $oValue) {
$bResult = ($this->oDb->updateRow(self::PROJ_TABLE, $this->getProjectId(), array($sField=>$oValue)) > 0); $bResult = ($this->oDb->updateRow(self::PROJ_TABLE, $this->getProjectId(), array($sField=>$oValue)) > 0);
$this->setProjectInfo(); $this->setProjectInfo();
return $bResult; return $bResult;
} }
public function delete() { public function delete() {
$asResult = array(); $asResult = array();
if($this->getProjectId() > 0) { if($this->getProjectId() > 0) {
$asFeedIds = $this->getFeedIds(); $asFeedIds = $this->getFeedIds();
foreach($asFeedIds as $iFeedId) { foreach($asFeedIds as $iFeedId) {
$asResult['feed'][] = (new Feed($this->oDb, $iFeedId))->delete(); $asResult['feed'][] = (new Feed($this->oDb, $iFeedId))->delete();
} }
$asResult['project'][] = array( $asResult['project'][] = array(
'id' => $this->getProjectId(), 'id' => $this->getProjectId(),
'del' => $this->oDb->deleteRow(self::PROJ_TABLE, $this->getProjectId()), 'del' => $this->oDb->deleteRow(self::PROJ_TABLE, $this->getProjectId()),
'desc' => $this->oDb->getLastError() 'desc' => $this->oDb->getLastError()
); );
} }
else $asResult['project'][] = array('del'=>false, 'desc'=>'Error while setting project: no project ID'); else $asResult['project'][] = array('del'=>false, 'desc'=>'Error while setting project: no project ID');
return $asResult; return $asResult;
} }
} }