diff --git a/cli/cron.sh b/cli/cron.sh new file mode 100644 index 0000000..054fa99 --- /dev/null +++ b/cli/cron.sh @@ -0,0 +1,4 @@ +#!/bin/bash +wget -qO- https://spot.lutran.fr/index.php?a=update_project > /dev/null + +#Crontab job: 0 * * * * . /var/www/spot/spot_cron.sh > /dev/null \ No newline at end of file diff --git a/files/db/update_v10_to_v11.sql b/config/db/update_v10_to_v11.sql similarity index 100% rename from files/db/update_v10_to_v11.sql rename to config/db/update_v10_to_v11.sql diff --git a/files/db/update_v11_to_v12.sql b/config/db/update_v11_to_v12.sql similarity index 100% rename from files/db/update_v11_to_v12.sql rename to config/db/update_v11_to_v12.sql diff --git a/files/db/update_v12_to_v13.sql b/config/db/update_v12_to_v13.sql similarity index 100% rename from files/db/update_v12_to_v13.sql rename to config/db/update_v12_to_v13.sql diff --git a/files/db/update_v13_to_v14.sql b/config/db/update_v13_to_v14.sql similarity index 100% rename from files/db/update_v13_to_v14.sql rename to config/db/update_v13_to_v14.sql diff --git a/files/db/update_v14_to_v15.sql b/config/db/update_v14_to_v15.sql similarity index 100% rename from files/db/update_v14_to_v15.sql rename to config/db/update_v14_to_v15.sql diff --git a/files/db/update_v15_to_v16.sql b/config/db/update_v15_to_v16.sql similarity index 100% rename from files/db/update_v15_to_v16.sql rename to config/db/update_v15_to_v16.sql diff --git a/files/db/update_v16_to_v17.sql b/config/db/update_v16_to_v17.sql similarity index 100% rename from files/db/update_v16_to_v17.sql rename to config/db/update_v16_to_v17.sql diff --git a/files/db/update_v17_to_v18.sql b/config/db/update_v17_to_v18.sql similarity index 100% rename from files/db/update_v17_to_v18.sql rename to config/db/update_v17_to_v18.sql diff --git a/files/db/update_v18_to_v19.sql b/config/db/update_v18_to_v19.sql similarity index 100% rename from files/db/update_v18_to_v19.sql rename to config/db/update_v18_to_v19.sql diff --git a/files/db/update_v19_to_v20.sql b/config/db/update_v19_to_v20.sql similarity index 100% rename from files/db/update_v19_to_v20.sql rename to config/db/update_v19_to_v20.sql diff --git a/files/db/update_v1_to_v2.sql b/config/db/update_v1_to_v2.sql similarity index 100% rename from files/db/update_v1_to_v2.sql rename to config/db/update_v1_to_v2.sql diff --git a/files/db/update_v20_to_v21.sql b/config/db/update_v20_to_v21.sql similarity index 100% rename from files/db/update_v20_to_v21.sql rename to config/db/update_v20_to_v21.sql diff --git a/files/db/update_v2_to_v3.sql b/config/db/update_v2_to_v3.sql similarity index 100% rename from files/db/update_v2_to_v3.sql rename to config/db/update_v2_to_v3.sql diff --git a/files/db/update_v3_to_v4.sql b/config/db/update_v3_to_v4.sql similarity index 100% rename from files/db/update_v3_to_v4.sql rename to config/db/update_v3_to_v4.sql diff --git a/files/db/update_v4_to_v5.sql b/config/db/update_v4_to_v5.sql similarity index 100% rename from files/db/update_v4_to_v5.sql rename to config/db/update_v4_to_v5.sql diff --git a/files/db/update_v5_to_v6.sql b/config/db/update_v5_to_v6.sql similarity index 100% rename from files/db/update_v5_to_v6.sql rename to config/db/update_v5_to_v6.sql diff --git a/files/db/update_v6_to_v7.sql b/config/db/update_v6_to_v7.sql similarity index 100% rename from files/db/update_v6_to_v7.sql rename to config/db/update_v6_to_v7.sql diff --git a/files/db/update_v7_to_v8.sql b/config/db/update_v7_to_v8.sql similarity index 100% rename from files/db/update_v7_to_v8.sql rename to config/db/update_v7_to_v8.sql diff --git a/files/db/update_v8_to_v9.sql b/config/db/update_v8_to_v9.sql similarity index 100% rename from files/db/update_v8_to_v9.sql rename to config/db/update_v8_to_v9.sql diff --git a/files/db/update_v9_to_v10.sql b/config/db/update_v9_to_v10.sql similarity index 100% rename from files/db/update_v9_to_v10.sql rename to config/db/update_v9_to_v10.sql diff --git a/api/Converter.php b/lib/Converter.php similarity index 95% rename from api/Converter.php rename to lib/Converter.php index e46342f..7277f42 100644 --- a/api/Converter.php +++ b/lib/Converter.php @@ -36,18 +36,18 @@ class Converter extends PhpObject { public static function isGeoJsonValid($sCodeName) { $bResult = false; - $sGpxFilePath = Geo::getFilePath($sCodeName, Gpx::EXT); - $sGeoJsonFilePath = Geo::getFilePath($sCodeName, GeoJson::EXT); + $sGpxFilePath = Gpx::getFilePath($sCodeName); + $sGeoJsonFilePath = GeoJson::getFilePath($sCodeName); //No need to generate if gpx is missing - if(!file_exists($sGpxFilePath) || file_exists($sGeoJsonFilePath) && filemtime($sGeoJsonFilePath) > filemtime(Geo::getFilePath($sCodeName, Gpx::EXT))) $bResult = true; + if(!file_exists($sGpxFilePath) || file_exists($sGeoJsonFilePath) && filemtime($sGeoJsonFilePath) > filemtime(Gpx::getFilePath($sCodeName))) $bResult = true; return $bResult; } } class Geo extends PhpObject { - const GEO_FOLDER = 'geo/'; + const GEO_FOLDER = '../geo/'; const OPT_SIMPLE = 'simplification'; protected $asTracks; @@ -55,12 +55,16 @@ class Geo extends PhpObject { public function __construct($sCodeName) { parent::__construct(get_class($this), Settings::DEBUG, PhpObject::MODE_HTML); - $this->sFilePath = self::getFilePath($sCodeName, static::EXT); + $this->sFilePath = self::getFilePath($sCodeName); $this->asTracks = array(); } - public static function getFilePath($sCodeName, $sExt) { - return self::GEO_FOLDER.$sCodeName.$sExt; + public static function getFilePath($sCodeName) { + return self::GEO_FOLDER.$sCodeName.static::EXT; + } + + public static function getDistFilePath($sCodeName) { + return 'geo/'.$sCodeName.static::EXT; } public function getLog() { diff --git a/api/Email.php b/lib/Email.php similarity index 100% rename from api/Email.php rename to lib/Email.php diff --git a/api/Feed.php b/lib/Feed.php similarity index 100% rename from api/Feed.php rename to lib/Feed.php diff --git a/api/Map.php b/lib/Map.php similarity index 100% rename from api/Map.php rename to lib/Map.php diff --git a/api/Media.php b/lib/Media.php similarity index 99% rename from api/Media.php rename to lib/Media.php index 04f915a..14dea37 100644 --- a/api/Media.php +++ b/lib/Media.php @@ -12,7 +12,7 @@ class Media extends PhpObject { const MEDIA_TABLE = 'medias'; //Media folders - const MEDIA_FOLDER = 'files/'; + const MEDIA_FOLDER = '../files/'; const THUMB_FOLDER = self::MEDIA_FOLDER.'thumbs/'; const THUMB_MAX_WIDTH = 400; diff --git a/api/Project.php b/lib/Project.php similarity index 96% rename from api/Project.php rename to lib/Project.php index 26378ec..26c35f7 100644 --- a/api/Project.php +++ b/lib/Project.php @@ -144,8 +144,8 @@ class Project extends PhpObject { if($sCodeName != '' && !Converter::isGeoJsonValid($sCodeName)) Converter::convertToGeoJson($sCodeName); - $asProject['geofilepath'] = Spot::addTimestampToFilePath(Geo::getFilePath($sCodeName, GeoJson::EXT)); - $asProject['gpxfilepath'] = Spot::addTimestampToFilePath(Geo::getFilePath($sCodeName, Gpx::EXT)); + $asProject['geofilepath'] = Spot::addTimestampToFilePath(GeoJson::getDistFilePath($sCodeName)); + $asProject['gpxfilepath'] = Spot::addTimestampToFilePath(Gpx::getDistFilePath($sCodeName)); $asProject['codename'] = $sCodeName; } return $bSpecificProj?$asProject:$asProjects; diff --git a/api/Spot.php b/lib/Spot.php similarity index 95% rename from api/Spot.php rename to lib/Spot.php index 61b195a..d0c2b26 100755 --- a/api/Spot.php +++ b/lib/Spot.php @@ -40,6 +40,8 @@ class Spot extends Main const DEFAULT_LANG = 'en'; + const MAIN_PAGE = 'index'; + private Project $oProject; private Media $oMedia; private User $oUser; @@ -158,42 +160,42 @@ class Spot extends Main ); } - public function getAppMainPage() - { + public function getAppParams() { + //Cache Page List $asPages = array_diff($this->asMasks, array('email_update', 'email_conf')); if(!$this->oUser->checkUserClearance(User::CLEARANCE_ADMIN)) { $asPages = array_diff($asPages, array('admin', 'upload')); } + $asGlobalVars = array( + 'vars' => array( + 'chunk_size' => self::FEED_CHUNK_SIZE, + 'default_project_codename' => $this->oProject->getProjectCodeName(), + 'projects' => $this->oProject->getProjects(), + 'user' => $this->oUser->getUserInfo() + ), + 'consts' => array( + 'server' => $this->asContext['serv_name'], + 'modes' => Project::MODES, + 'clearances' => User::CLEARANCES, + 'default_timezone' => Settings::TIMEZONE + ) + ); + + return self::getJsonResult(true, '', parent::getParams($asGlobalVars, self::MAIN_PAGE, $asPages)); + } + + public function getAppMainPage() + { return parent::getMainPage( + self::MAIN_PAGE, array( - 'vars' => array( - 'chunk_size' => self::FEED_CHUNK_SIZE, - 'default_project_codename' => $this->oProject->getProjectCodeName(), - 'projects' => $this->oProject->getProjects(), - 'user' => $this->oUser->getUserInfo() - ), - 'consts' => array( - 'server' => $this->asContext['serv_name'], - 'modes' => Project::MODES, - 'clearances' => User::CLEARANCES, - 'default_timezone' => Settings::TIMEZONE - ) - ), - 'index', - array( - 'language' => $this->oLang->getLanguage(), - 'host_url' => $this->asContext['serv_name'], - 'filepath_css' => self::addTimestampToFilePath('style/spot.css'), - 'filepath_js_d3' => self::addTimestampToFilePath('script/d3.min.js'), - 'filepath_js_leaflet' => self::addTimestampToFilePath('script/leaflet.min.js'), - 'filepath_js_jquery' => self::addTimestampToFilePath('script/jquery.min.js'), - 'filepath_js_jquery_mods' => self::addTimestampToFilePath('script/jquery.mods.js'), - 'filepath_js_spot' => self::addTimestampToFilePath('script/spot.js'), - 'filepath_js_lightbox' => self::addTimestampToFilePath('script/lightbox.js') - ), - $asPages + 'language' => $this->oLang->getLanguage(), + 'host_url' => $this->asContext['serv_name'], + 'filepath_css' => self::addTimestampToFilePath('spot.css'), + 'filepath_js' => self::addTimestampToFilePath('../dist/app.js') + ) ); } diff --git a/api/Uploader.php b/lib/Uploader.php similarity index 100% rename from api/Uploader.php rename to lib/Uploader.php diff --git a/api/User.php b/lib/User.php similarity index 100% rename from api/User.php rename to lib/User.php diff --git a/lib/index.php b/lib/index.php new file mode 100755 index 0000000..b909fab --- /dev/null +++ b/lib/index.php @@ -0,0 +1,107 @@ +setProjectId($iProjectId); + +$sResult = ''; +if($sAction!='') +{ + switch($sAction) + { + case 'params': + $sResult = $oSpot->getAppParams(); + break; + case 'markers': + $sResult = $oSpot->getMarkers(); + break; + case 'next_feed': + $sResult = $oSpot->getNextFeed($iId); + break; + case 'new_feed': + $sResult = $oSpot->getNewFeed($iId); + break; + case 'add_post': + $sResult = $oSpot->addPost($sName, $sContent); + break; + case 'subscribe': + $sResult = $oSpot->subscribe($sEmail, $sName); + break; + case 'unsubscribe': + $sResult = $oSpot->unsubscribe(); + break; + case 'unsubscribe_email': + $sResult = $oSpot->unsubscribeFromEmail($iId); + break; + case 'update_project': + $sResult = $oSpot->updateProject(); + break; + default: + if($oSpot->checkUserClearance(User::CLEARANCE_ADMIN)) + { + switch($sAction) + { + case 'upload': + $sResult = $oSpot->upload(); + break; + case 'add_comment': + $sResult = $oSpot->addComment($iId, $sContent); + break; + case 'admin_new': + $sResult = $oSpot->createProject(); + break; + case 'admin_get': + $sResult = $oSpot->getAdminSettings(); + break; + case 'admin_set': + $sResult = $oSpot->setAdminSettings($sType, $iId, $sField, $oValue); + break; + case 'admin_del': + $sResult = $oSpot->delAdminSettings($sType, $iId); + break; + case 'generate_cron': + $sResult = $oSpot->genCronFile(); + break; + case 'sql': + $sResult = $oSpot->getDbBuildScript(); + break; + default: + $sResult = Main::getJsonResult(false, Main::NOT_FOUND); + } + } + else $sResult = Main::getJsonResult(false, Main::NOT_FOUND); + } +} +else $sResult = $oSpot->getAppMainPage(); + +$sDebug = ob_get_clean(); +if(Settings::DEBUG && $sDebug!='') $oSpot->addUncaughtError($sDebug); + +echo $sResult;