diff --git a/inc/main.php b/inc/main.php index 0b56e5f..05cdef7 100755 --- a/inc/main.php +++ b/inc/main.php @@ -13,35 +13,35 @@ abstract class Main extends PhpObject const UNAUTHORIZED = 'unauthorized'; const NOT_FOUND = 'unknown action'; const NO_DATA = 'No Data'; - + const ACTIVE = 1; const INACTIVE = 0; - + //Folders const MASKS_FOLDER = 'masks/'; - + /** * Class Management * @var ClassManagement */ protected $oClassManagement; - + /** * DB Handle * @var Db */ protected $oDb; - + //Dates format const URL_DATE_FORMAT = 'Ymd'; const LAYOUT_DATE_FORMAT = 'F \t\h\e jS, Y'; const MYSQL_DATE_FORMAT = 'Y-m-d'; const LAYOUT_TIME_FORMAT = 'G:i'; - + //Variables protected $asMasks; protected $asContext; - + /** * Language Translator * @var Translator @@ -57,12 +57,12 @@ abstract class Main extends PhpObject { parent::__construct($sFile, Settings::DEBUG); $this->oClassManagement = $oClassManagement; - + //Load classes $asMandatoryClasses[] = array('name'=>'mask', 'project'=>false); if($bDb) $asMandatoryClasses[] = array('name'=>'db', 'project'=>false); foreach($asMandatoryClasses as $asClass) $this->oClassManagement->incClass($asClass['name'], $asClass['project']); - + $this->setContext($sProcessPage, $sTimeZone); //Init objects @@ -71,13 +71,13 @@ abstract class Main extends PhpObject if(in_array($this->oDb->sDbState, array(Db::DB_NO_DATA, Db::DB_NO_TABLE))) $this->install(); } } - + protected abstract function install(); - + public function getDbBuildScript() { return $this->oDb->getFullInstallQuery(); } - + private function setContext($sProcessPage, $sTimeZone='') { //Browser <> PHP <> MySql synchronization @@ -90,67 +90,68 @@ abstract class Main extends PhpObject mb_http_input(Settings::TEXT_ENC); mb_language('uni'); mb_regex_encoding(Settings::TEXT_ENC); - + $this->asContext['process_page'] = basename($sProcessPage); - + $sServerName = array_key_exists('SERVER_NAME', $_SERVER)?$_SERVER['SERVER_NAME']:$_SERVER['PWD']; $sScheme = array_key_exists('HTTP_X_FORWARDED_PROTO', $_SERVER)?$_SERVER['HTTP_X_FORWARDED_PROTO']:$_SERVER['REQUEST_SCHEME']; $sAppPath = $sScheme.'://'.str_replace(array('http://', 'https://'), '', $sServerName.dirname($_SERVER['SCRIPT_NAME'])); $this->asContext['serv_name'] = $sAppPath.(mb_substr($sAppPath, -1)!='/'?'/':''); - + $this->setMasks(); } - + public static function addTimestampToFilePath($sFilePath) { //Remove timestamp $sCleanedFilePath = preg_replace('/(.*)\?[\d]{14}$/', '$1', $sFilePath); - + //Add timestamp return file_exists($sCleanedFilePath)?$sCleanedFilePath.'?'.date("YmdHis", filemtime($sCleanedFilePath)):$sFilePath; } - + public function addUncaughtError($sError) { $this->addError('Uncaught errors:'."\n".$sError); } - + /* Building main pages */ - - public function getMainPage($asGlobalVars=array(), $sMainPage='index', $asMainPageTags=array()) + + public function getMainPage($asGlobalVars=array(), $sMainPage='index', $asMainPageTags=array(), $asCachePages=array()) { $asDefaultConsts = array('success'=>self::SUCCESS, 'error'=>self::ERROR, 'process_page'=>$this->asContext['process_page']); $asGlobalVars['consts'] = array_merge($asDefaultConsts, array_key_exists('consts', $asGlobalVars)?$asGlobalVars['consts']:array()); - + //Masks - $asPages = array_values($this->asMasks); - foreach($asPages as $sPage) + if(empty($asCachePages)) $asCachePages = array_values($this->asMasks); + foreach($asCachePages as $sPage) { - //$sPageContent = $this->getPageContent($sPage); - $oMask = new Mask($sPage, $this->oLang); - $sPageContent = $oMask->getMask(); - if($sPage!=$sMainPage) $asGlobalVars['consts']['pages'][$sPage] = $sPageContent; + if($sPage != $sMainPage) { + $oMask = new Mask($sPage, $this->oLang); + $sPageContent = $oMask->getMask(); + $asGlobalVars['consts']['pages'][$sPage] = $sPageContent; + } } - + if(!is_null($this->oLang)) { $asGlobalVars['consts']['lang_prefix'] = Mask::LANG_PREFIX; $asGlobalVars['consts']['lang'] = $this->oLang->getTranslations(); } - + $oMainMask = new Mask($sMainPage, $this->oLang); $oMainMask->setTag('GLOBAL_VARS', json_encode($asGlobalVars)); $oMainMask->setTags($asMainPageTags); - + return $oMainMask->getMask(); } - + protected function getPageContent($sPage) { return ToolBox::fixEOL(file_get_contents(self::MASKS_FOLDER.$sPage.'.html')); } - + /* DB structure. See Db::__construct */ - + protected abstract function getSqlOptions(); private function setMasks() @@ -159,7 +160,7 @@ abstract class Main extends PhpObject $asMaskPaths = glob(Mask::getMaskFile('*')); $this->asMasks = array_map('basename', $asMaskPaths, array_fill(1, count($asMaskPaths), Mask::MASK_EXT)); } - + public static function getJsonResult($bSuccess, $sDesc, $asVars=array()) { header('Content-type: application/json'); @@ -167,18 +168,18 @@ abstract class Main extends PhpObject $asResult['result'] = $asResult['result']?self::SUCCESS:self::ERROR; return json_encode($asResult); } - + public static function getResult($bSuccess, $sDesc, $asVars=array()) { return array('result'=>$bSuccess, 'desc'=>$sDesc, 'data'=>$asVars); } - + public static function goTo403() { http_response_code(403); exit; } - + public static function goTo404() { http_response_code(404); exit; } -} \ No newline at end of file +}