示例#1
0
文件: Salic.php 项目: TeNNoX/Salic
 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);
 }
示例#2
0
 /**
  * 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;
 }
示例#3
0
文件: Salic.php 项目: TeNNoX/Salic
 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;
     }
 }
示例#4
0
文件: SalicMng.php 项目: TeNNoX/Salic
 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
     }
 }