Example #1
0
 /**
  * Reloads settings for a given element
  * @param CmsElement $cmsElement The element which settings should be reloaded
  * @param CmsPage $cmsPage The CmsPage in which context the settings for the element should be loaded
  */
 public function reloadSettings(CmsElement $cmsElement, CmsPage $cmsPage)
 {
     if ($cmsElement instanceof CmsElementSettingsLoadable === false) {
         return;
     }
     /** @var CmsElementSettingsLoadable $cmsElement */
     $cmsElement->resetSettingsFound();
     /** @var CmsElementSettingsLoadable $cmsElement */
     $settings = $cmsElement->getSettingsForElements($this->db, array($cmsElement->getID()), PageModel::getPageIdsRecursive($cmsPage));
     foreach ($settings as $settingEntries) {
         /** @var CmsElement */
         $settingsEntry = $this->combineSettings($settingEntries);
         $cmsElement->setSettings($settingsEntry);
     }
 }
Example #2
0
 /**
  * @param CmsPage $cmsPage
  * @param bool $useCache
  * @return \ArrayObject The element tree for the current page
  */
 private function generateElementTree(CmsPage $cmsPage, $useCache = false)
 {
     // TODO check if any page inheriting from has changed
     $pageIDs = PageModel::getPageIdsRecursive($cmsPage);
     /*if($useCache === true) {
     			$stmntFetchCache = $this->db->prepare("
     				SELECT pc.ID, pc.cached_elements, pc.cache_time
     				FROM page_cache pc
     				LEFT JOIN page p ON p.ID = pc.ID
     				WHERE pc.cache_time >= p.last_modified
     				AND pc.ID IN(" . DB::createInQuery($pageIDs) . ")
     			");
     
     			$resFetchCache = $this->db->select($stmntFetchCache,
     				$pageIDs
     			);
     
     			if(count($resFetchCache) === count($pageIDs)) {
     				foreach($resFetchCache as $fc) {
     					if($fc->ID != $cmsPage->getID())
     						continue;
     
     					return unserialize($fc->cached_elements);
     				}
     			}
     		}*/
     /*$stmntElements = $this->db->prepare("
     			SELECT ei.ID, ei.mod_IDFK element_ID, ei.page_IDFK page_ID, parent_mod_IDFK parent_element_ID, ea.class, ea.name, ei.revision,
     			IF(ih.element_instance_IDFK IS NULL, 0, 1) hidden
     			FROM cms_element_instance ei
     			LEFT JOIN cms_element_available ea ON ea.ID = ei.mod_IDFK
     			LEFT JOIN cms_element_instance_hidden ih ON ih.element_instance_IDFK = ei.ID AND ih.page_IDFK = ?
     			WHERE ei.page_IDFK IN (" . DB::createInQuery($pageIDs) . ")
     			AND ea.active = 1
     		");
     
     		$resElements = $this->db->select($stmntElements,
     			array_merge(array($cmsPage->getID()), $pageIDs)
     		);*/
     $stmntElements = $this->db->prepare("\n\t\t\tSELECT ei.ID, ei.mod_IDFK element_ID, ei.page_IDFK page_ID, parent_mod_IDFK parent_element_ID, ea.class, ea.name, ei.revision,\n\t\t\tIF(ih.element_instance_IDFK IS NULL, 0, 1) hidden\n\t\t\tFROM cms_element_instance ei\n\t\t\tLEFT JOIN cms_element_available ea ON ea.ID = ei.mod_IDFK\n\t\t\tLEFT JOIN cms_element_instance_hidden ih ON ih.element_instance_IDFK = ei.ID AND ih.page_IDFK IN (" . DB::createInQuery($pageIDs) . ")\n\t\t\tWHERE ei.page_IDFK IN (" . DB::createInQuery($pageIDs) . ")\n\t\t\tAND ea.active = 1\n\t\t");
     $resElements = $this->db->select($stmntElements, array_merge($pageIDs, $pageIDs));
     // Settings und co
     $elementTypes = array();
     $elementInstances = array();
     foreach ($resElements as $e) {
         /** @var CmsElement $elementInstance */
         $elementInstance = new $e->class($e->ID, $e->page_ID, $e->name);
         if ($e->revision !== null) {
             $elementInstance->setRevision($e->revision);
         }
         $elementInstance->setHidden($e->hidden == 1);
         $elementInstances[$e->ID] = $elementInstance;
         $elementTypes[$e->class][] = $e->ID;
     }
     // Load settings for modules
     foreach ($elementTypes as $class => $modIDs) {
         $refClass = new \ReflectionClass($class);
         if ($refClass->isSubclassOf('ch\\metanet\\cms\\common\\CmsElementSettingsLoadable') === false) {
             continue;
         }
         /** @var CmsElementSettingsLoadable $class */
         $settings = $class::getSettingsForElements($this->db, $modIDs, $pageIDs);
         foreach ($settings as $key => $settingEntries) {
             $settingsEntry = $this->combineSettings($settingEntries);
             $elementInstances[$key]->setSettings($settingsEntry);
         }
     }
     $cachedTree = new \ArrayObject($this->createTree($resElements, $elementInstances));
     if ($useCache === true) {
         $cachedTreeSerialized = serialize($cachedTree);
         try {
             $stmntCacheElements = $this->db->prepare("\n\t\t\t\t\tINSERT INTO page_cache SET\n\t\t\t\t\t\tID = ?, cached_elements = ?, cache_time = NOW()\n\t\t\t\t\tON DUPLICATE KEY UPDATE\n\t\t\t\t\t\tcached_elements = ?, cache_time = NOW()\n\t\t\t\t");
             $this->db->insert($stmntCacheElements, array($cmsPage->getID(), $cachedTreeSerialized, $cachedTreeSerialized));
         } catch (\Exception $e) {
             // Cache could not be saved
         }
     }
     return $cachedTree;
 }