public function getTemplate($name, $pageinfo = "") { $templateSettings = Settings\TemplateSettings::get(); if (!$templateSettings->exists($name)) { if (!empty($pageinfo)) { // format it, or leave it empty $pageinfo = " (page={$pageinfo})"; } throw new SalicException("Template '{$name}' not found in templates.json" . $pageinfo); } return $templateSettings->data($name); }
/** * generate empty areas array from template * @param string $template The template name, if not default * @return array */ private function getDefaultAreas($template = 'default') { $defaultAreas = array(); foreach (TemplateSettings::data2($template)->areas as $area) { $defaultAreas[$area] = array(); // ['area1' => [], 'area2' => []] } return $defaultAreas; }
public function render404() { try { http_response_code(404); $defaultTemplate = TemplateSettings::data2(self::defaultTemplateName); $data = $this->loadData('404', $defaultTemplate); $this->doRenderPage($defaultTemplate->filename, $data); } catch (\Exception $e) { Utils::dieWithError($e, '404 rendering', $this); exit; } }
public function doSavePage($pagekey, array $regions) { foreach ($regions as $key => $val) { $page_dir = "site/data/{$pagekey}/"; if (!is_dir($page_dir)) { if (!mkdir($page_dir, 0750, true)) { // rwxr-x---, TODO: configurable directory permissions throw new \Exception("Failed to create directory '{$page_dir}'"); } } $pageSettings = PageSettings::get($pagekey); $blockSettings = BlockSettings::get(); $templateSettings = TemplateSettings::data2($pageSettings->template); // possible key formats: // - '_field' // - 'area_block' // - 'area_block.subblock' if ($key[0] === '_') { // we have a field if (preg_match('/^_([a-z0-9-]+)$/', $key, $matches) !== 1) { // matches 'area-name_block-name' throw new SalicApiException("Invalid field-key format: '{$key}'"); } $fieldKey = $matches[1]; if ($fieldKey && !in_array($fieldKey, $templateSettings->fields)) { throw new SalicApiException("Invalid field: '{$fieldKey}'", $templateSettings->fields); } // save as '_field-key_lang.ext' $filename = '_' . $fieldKey . '_' . $this->current_lang . self::dataFileExtension; } else { // we have a block if (preg_match('/^([a-z0-9-]+)_([a-z0-9-]+)(?:\\.([a-z0-9-]+))?$/', $key, $matches) !== 1) { // matches 'area-name_block-name' or 'area_block.sub-block' throw new SalicApiException("Invalid block-key format: '{$key}'"); } $areaKey = $matches[1]; $blockKey = $matches[2]; $subblock = @$matches[3]; // subblock is optional if (!array_key_exists($areaKey, $pageSettings->areas)) { throw new SalicApiException("Invalid area: '{$areaKey}'", $pageSettings->areas); } if (($myBlock = PageSettings::getBlock($pageSettings->areas[$areaKey], $blockKey)) == null) { throw new SalicApiException("Invalid block: '{$blockKey}'", $pageSettings->areas[$areaKey]); } $blockType = $blockSettings->data($myBlock['type']); if ($subblock) { if ($blockType->subblocks === true ? !is_numeric($subblock) : !in_array($subblock, $blockType->subblocks)) { throw new SalicApiException("Invalid subblock: '{$subblock}'[type={$myBlock['type']}]", $blockType->subblocks); } } if (!$blockType->editable) { throw new SalicApiException("Block not editable: '{$blockKey}'[type={$myBlock['type']}]"); } // save as 'area_block/subblock_lang.ext' if (!$subblock) { $filename = $areaKey . '_' . $blockKey . '_' . $this->current_lang . self::dataFileExtension; } else { Utils::mkdirs($page_dir . $areaKey . '_' . $blockKey); $filename = $areaKey . '_' . $blockKey . '/' . $subblock . '_' . $this->current_lang . self::dataFileExtension; } } $flag = file_put_contents($page_dir . $filename, $val, LOCK_EX); // lock the file exclusively while writing if ($flag === false) { throw new \Exception("Failed to write file '{$page_dir}{$filename}" . self::dataFileExtension . "'"); } //TODO: set file permissions } }