public function generateIndex()
 {
     $logger = FrameworkLoggerFactory::getLogger($this);
     $responseCode = 200;
     $responseStr = null;
     if ($this->cmsController->getHttpRequest()->getVar('token') !== $this->cmsController->getCmsSettings()->security_token) {
         throw new HttpException('Access denied! No or wrong security token submitted.', 403);
     }
     ob_start();
     try {
         echo "Load mod_search settings...\n";
         $searchSettingsPath = $this->cmsController->getCore()->getSiteRoot() . 'settings' . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR . 'mod_search.config.json';
         $searchSettings = JsonUtils::decodeFile($searchSettingsPath);
         $indexesBasePath = $this->cmsController->getCore()->getSiteRoot() . 'index' . DIRECTORY_SEPARATOR;
         $indexer = new Indexer($this->cmsController->getDB(), $this->cmsController->getCore(), $indexesBasePath);
         $indexer->start($searchSettings);
         unset($indexer);
         $responseStr = ob_get_clean();
     } catch (\Exception $e) {
         $logger->error('Could not create index: ', $e);
         $responseCode = 500;
         $responseStr = 'Could not create index: ' . $e->getMessage();
     }
     return new HttpResponse($responseCode, $responseStr, array('Content-Type' => 'text/plain; charset=utf-8'));
 }
Ejemplo n.º 2
0
 /**
  * Renders the current frontend page into the basic frontend template.html file and adds some useful data to the
  * template (e.x. logged in user if there is any, site title, etc.)
  * 
  * @param PageModel $pageModel
  *
  * @return HttpResponse The rendered CMS page ready to send it to the client
  * @throws HttpException if the page does not exist or is not accessible for the current user
  */
 protected function generateCMSPage(PageModel $pageModel)
 {
     if ($this->cmsPage === null) {
         $this->eventDispatcher->dispatch('cms.page_not_found', new PageNotFoundEvent($this->httpRequest));
         throw new HttpException('Could not find cms page', 404);
     }
     if (!$pageModel->hasUserReadAccess($this->cmsPage, $this->auth)) {
         $this->eventDispatcher->dispatch('cms.page_access_denied', new PageAccessDeniedEvent($this->httpRequest));
         throw new HttpException('You don\'t have access to this page', 403);
     }
     $currentEnv = $this->core->getCurrentDomain()->environment;
     $lastChanged = new \DateTime($this->cmsPage->getLastModified());
     $cacheDuration = 18000;
     //31536000; <-- a year
     $responseHeaders = array('Content-Type' => 'text/html; charset=utf-8', 'Content-Language' => $this->cmsPage->getLanguage(), 'Cache-Control' => 'No-Cache', 'Last-Modified' => null, 'Vary' => 'Accept-Encoding');
     // Don't cache if a module controls page content
     /*if($this->cmsRoute->getModuleID() === null)
     		$responseHeaders['Last-Modified'] = gmdate('D, d M Y H:i:s \G\M\T', $lastChanged->getTimestamp());*/
     /*if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && $this->cmsPage->getLastModified() <= date('Y-m-d H:i:s', strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])))
     		return new HttpResponse(304, null, $responseHeaders);*/
     $lang = $this->getLocaleHandler()->getLanguage();
     // HTML Cache here!
     $pageCacheActive = isset($this->core->getSettings()->cms->{$currentEnv}->page_cache) ? $this->core->getSettings()->cms->{$currentEnv}->page_cache : false;
     $pageCacheMode = $this->cmsPage->getCacheMode();
     $cacheDir = $this->core->getSiteCacheDir() . 'html' . DIRECTORY_SEPARATOR;
     $pageCacheFile = $cacheDir . 'page-' . $this->cmsPage->getID() . '.html';
     if ($pageCacheActive === true && $this->auth->isLoggedIn() === false && in_array($pageCacheMode, array(CmsPage::CACHE_MODE_PRIVATE, CmsPage::CACHE_MODE_PUBLIC)) && stream_resolve_include_path($pageCacheFile)) {
         $fileTime = filemtime($pageCacheFile);
         // TODO: check if a parent page has changed not only the current
         if ($this->cmsPage->getLastModified() === null || $fileTime >= $lastChanged->getTimestamp()) {
             if ($currentEnv === 'dev') {
                 echo 'Cached page found from: ' . date('d.m.Y H:i:s', $fileTime);
             }
             return new HttpResponse(200, $pageCacheFile, $responseHeaders, true);
         }
     }
     $pageElementCache = isset($this->core->getSettings()->cms->{$currentEnv}) && $this->core->getSettings()->cms->{$currentEnv}->page_cache === true;
     $elementModel = new ElementModel($this->db);
     $elements = $elementModel->getElementTree($this->cmsPage, $pageElementCache);
     if ($this->cmsPage->getLayoutID() !== null && $elements->offsetExists($this->cmsPage->getLayoutID())) {
         $this->cmsPage->setLayout($elements->offsetGet($this->cmsPage->getLayoutID()));
     }
     $elementView = new CmsView($this->templateEngine, $this->core->getSiteRoot() . 'templates' . DIRECTORY_SEPARATOR . $this->currentDomain->template . DIRECTORY_SEPARATOR . 'elements' . DIRECTORY_SEPARATOR);
     // Last modified
     $dtLastModified = new \DateTime($this->cmsPage->getLastModified());
     $dtCreated = new \DateTime($this->cmsPage->getCreated());
     $pageHtml = $this->cmsPage->render($this, $elementView);
     /*$dtLastModifiedRender = new \DateTime($this->cmsPage->getLastModified());
     
     		$responseHeaders['Last-Modified'] = gmdate('D, d M Y H:i:s \G\M\T', $dtLastModifiedRender->getTimestamp());*/
     $tplVars = array('siteTitle' => $this->cmsPage->getTitle(), 'meta_description' => $this->cmsPage->getDescription(), 'page_id' => $this->cmsPage->getID(), 'page_html' => $pageHtml, 'modifier_name' => $this->cmsPage->getModifierName(), 'creator_name' => $this->cmsPage->getCreatorName(), 'date_modified' => $dtLastModified->format($this->getLocaleHandler()->getDateTimeFormat()), 'date_created' => $dtCreated->format($this->getLocaleHandler()->getDateTimeFormat()), 'logged_in' => $this->auth->isLoggedIn(), 'cms_page' => true, 'area_head' => $this->generateAreaHead($this->cmsPage), 'area_body' => $this->generateAreaBody($this->cmsPage), 'current_uri' => urlencode($this->httpRequest->getURI()));
     if ($this->auth->isLoggedIn()) {
         $stmntElements = $this->db->prepare("SELECT ID, name, class FROM cms_element_available WHERE active = '1' ORDER BY name");
         $resElements = $this->db->select($stmntElements);
         $elementList = array();
         foreach ($resElements as $mod) {
             $mod->author = null;
             $mod->version = null;
             $mod->description = null;
             $settingsFile = $this->core->getSiteRoot() . 'settings' . DIRECTORY_SEPARATOR . 'elements' . DIRECTORY_SEPARATOR . $mod->name . '.config.json';
             if (stream_resolve_include_path($settingsFile) === false) {
                 $elementList[] = $mod;
                 continue;
             }
             try {
                 $jsonObj = JsonUtils::decodeFile($settingsFile);
                 if (isset($jsonObj->name) === true) {
                     $mod->name = isset($jsonObj->name->{$lang}) ? $jsonObj->name->{$lang} : $jsonObj->name->en;
                 }
                 if (isset($jsonObj->description) === true) {
                     $mod->description = isset($jsonObj->description->{$lang}) ? $jsonObj->description->{$lang} : $jsonObj->description->en;
                 }
             } catch (\Exception $e) {
                 $this->logger->error('Could not parse config file of element: ' . $mod->name, $e);
             }
             $elementList[] = $mod;
         }
         usort($elementList, function ($a, $b) {
             return strtolower($a->name) > strtolower($b->name);
         });
         $tplVars['elements'] = $elementList;
     }
     $html = $this->renderBasicTemplate('template.html', $tplVars);
     if ($pageCacheActive === true && $this->auth->isLoggedIn() === false && in_array($pageCacheMode, array(CmsPage::CACHE_MODE_PRIVATE, CmsPage::CACHE_MODE_PUBLIC))) {
         file_put_contents($pageCacheFile, $html);
     }
     $httpStatusCode = $this->cmsPage->getErrorCode() !== null ? $this->cmsPage->getErrorCode() : 200;
     return new HttpResponse($httpStatusCode, $html, $responseHeaders);
 }
Ejemplo n.º 3
0
 public function getSettings($settingsName, $componentType = null)
 {
     $moduleConfigPath = $this->core->getSiteRoot() . 'settings' . DIRECTORY_SEPARATOR;
     if ($componentType !== null) {
         $moduleConfigPath .= $componentType . DIRECTORY_SEPARATOR;
     }
     $moduleConfigFileName = $settingsName . '.json';
     if (file_exists($moduleConfigPath . $moduleConfigFileName) === false) {
         return new \stdClass();
     }
     $currentEnv = $this->core->getCurrentDomain()->environment;
     $jsonSettings = JsonUtils::decodeFile($moduleConfigPath . $moduleConfigFileName);
     if (isset($jsonSettings->{$currentEnv}) === true) {
         return $jsonSettings->{$currentEnv};
     } elseif (isset($jsonSettings->default) === true) {
         return $jsonSettings->default;
     }
     return new \stdClass();
 }
Ejemplo n.º 4
0
 /**
  * Checks if the element has settings to configure per element instance
  * 
  * @param FrontendController $fec
  *
  * @return bool True if it has settings else false
  */
 protected function hasConfig(FrontendController $fec)
 {
     $configFilePath = $fec->getCore()->getSiteRoot() . 'settings' . DIRECTORY_SEPARATOR . 'elements' . DIRECTORY_SEPARATOR;
     $configFile = $configFilePath . $this->identifier . '.config.json';
     if (file_exists($configFile) === false) {
         return false;
     }
     try {
         $json = JsonUtils::decodeFile($configFile);
         if (!isset($json->settings)) {
             return false;
         }
     } catch (\Exception $e) {
         var_dump($e, JsonUtils::minify(file_get_contents($configFile)));
         return false;
     }
     return true;
 }