Пример #1
0
 /**
  * @param DB $db The database object
  * @param array $modIDs The IDs of the modules for which the settings should be loaded
  * @param array $pageIDs The nested page IDs context
  * @return array The settings found sorted by module IDs
  */
 public static function getSettingsForElements(DB $db, array $modIDs, array $pageIDs)
 {
     $params = array_merge($modIDs, $pageIDs, $pageIDs);
     $stmntSettings = $db->prepare("\n\t\t\tSELECT element_instance_IDFK, page_IDFK, cols\n\t\t\tFROM element_column_layout\n\t\t\tWHERE element_instance_IDFK IN (" . DB::createInQuery($modIDs) . ")\n\t\t\tAND page_IDFK IN (" . DB::createInQuery($pageIDs) . ")\n\t\t\tORDER BY FIELD(page_IDFK, " . DB::createInQuery($pageIDs) . ")\n\t\t");
     $resSettings = $db->select($stmntSettings, $params);
     $stmntMods = $db->prepare("\n\t\t\tSELECT element_column_layout_IDFK, page_IDFK, element_instance_IDFK, col, sort\n\t\t\tFROM element_column_layout_module eclm\n\t\t\tWHERE element_column_layout_IDFK IN (" . DB::createInQuery($modIDs) . ")\n\t\t\tAND page_IDFK IN (" . DB::createInQuery($pageIDs) . ")\n\t\t\tORDER BY FIELD(page_IDFK, " . DB::createInQuery($pageIDs) . "), col, sort\n\t\t");
     $resMods = $db->select($stmntMods, $params);
     $modColList = array();
     foreach ($resMods as $res) {
         $modColList[$res->element_column_layout_IDFK][$res->col][] = $res->element_instance_IDFK;
     }
     $settingsArr = array();
     foreach ($resSettings as $res) {
         $settingsArr[$res->element_instance_IDFK][$res->page_IDFK] = $res;
         $settingsArr[$res->element_instance_IDFK][$res->page_IDFK]->columns = array();
         for ($i = 1; $i <= $res->cols; ++$i) {
             $settingsArr[$res->element_instance_IDFK][$res->page_IDFK]->columns[$i] = array();
         }
         if (isset($modColList[$res->element_instance_IDFK]) === false) {
             continue;
         }
         $settingsArr[$res->element_instance_IDFK][$res->page_IDFK]->columns = $modColList[$res->element_instance_IDFK];
     }
     return $settingsArr;
 }
 /**
  * @param string $columnSelector
  * @param mixed $selection
  *
  * @return mixed
  */
 public function renderSql($columnSelector, $selection)
 {
     if ($selection === null) {
         return null;
     }
     $not = $this->compareOperator == '!=' ? ' NOT' : null;
     return $columnSelector . $not . ' IN(' . DB::createInQuery($selection) . ')';
 }
Пример #3
0
 /**
  * @param DB $db The database object
  * @param array $modIDs The IDs of the modules for which the settings should be loaded
  * @param array $pageIDs The nested page IDs context
  * @return array The settings found sorted by module IDs
  */
 public static function getSettingsForElements(DB $db, array $modIDs, array $pageIDs)
 {
     $params = array_merge($modIDs, $pageIDs, $pageIDs);
     $stmntSettings = $db->prepare("\n\t\t\tSELECT element_instance_IDFK, page_IDFK, text\n\t\t\tFROM element_text\n\t\t\tWHERE element_instance_IDFK IN (" . DB::createInQuery($modIDs) . ")\n\t\t\tAND page_IDFK IN (" . DB::createInQuery($pageIDs) . ")\n\t\t\tORDER BY FIELD(page_IDFK, " . DB::createInQuery($pageIDs) . ")\n\t\t");
     $resSettings = $db->select($stmntSettings, $params);
     $settingsArr = array();
     foreach ($resSettings as $res) {
         $settingsArr[$res->element_instance_IDFK][$res->page_IDFK] = $res;
     }
     return $settingsArr;
 }
Пример #4
0
 /**
  * @param string $elementIdentifier
  * @param array $settings
  * @param DB $db
  * @param array $modIDs Module IDs to load settings for
  * @param array $pageIDs Page context IDs
  * @param string $elementInstanceColumn
  * @param string $pageInstanceColumn
  * @return array
  */
 public static function loadCmsElementSettings($elementIdentifier, $settings, DB $db, array $modIDs, array $pageIDs, $elementInstanceColumn = 'element_instance_IDFK', $pageInstanceColumn = 'page_IDFK')
 {
     $params = array_merge($modIDs, $pageIDs, $pageIDs);
     $settingsCols = array();
     foreach ($settings as $col => $as) {
         $settingsCols[] = $col . ' ' . $as;
     }
     $stmntSettings = $db->prepare("\n\t\t\tSELECT " . $elementInstanceColumn . ", " . $pageInstanceColumn . ", " . implode(', ', $settingsCols) . "\n\t\t\tFROM " . $elementIdentifier . "\n\t\t\tWHERE " . $elementInstanceColumn . " IN (" . DB::createInQuery($modIDs) . ")\n\t\t\tAND " . $pageInstanceColumn . " IN (" . DB::createInQuery($pageIDs) . ")\n\t\t\tORDER BY FIELD(" . $pageInstanceColumn . ", " . DB::createInQuery($pageIDs) . ")\n\t\t");
     $resSettings = $db->select($stmntSettings, $params);
     $settingsArr = array();
     foreach ($resSettings as $res) {
         $settingsArr[$res->{$elementInstanceColumn}][$res->{$pageInstanceColumn}] = $res;
     }
     return $settingsArr;
 }
Пример #5
0
 /**
  * @param DB $db The database object
  * @param array $modIDs The IDs of the modules for which the settings should be loaded
  * @param array $pageIDs The nested page IDs context
  * @return array The settings found sorted by module IDs
  */
 public static function getSettingsForElements(DB $db, array $modIDs, array $pageIDs)
 {
     //try {
     /*$pageIds = array(1);*/
     $params = array_merge($modIDs, $pageIDs, $pageIDs);
     $stmntSettings = $db->prepare("\n\t\t\t\tSELECT mod_instance_IDFK, page_IDFK, east_grid_size, center_grid_size, west_grid_size,\n\t\t\t\t\tnorth_mod_IDFK, south_mod_IDFK, east_mod_IDFK, west_mod_IDFK, center_mod_IDFK\n\t\t\t\tFROM mod_border_layout\n\t\t\t\tWHERE mod_instance_IDFK IN (" . DB::createInQuery($modIDs) . ")\n\t\t\t\tAND page_IDFK IN (" . DB::createInQuery($pageIDs) . ")\n\t\t\t\tORDER BY FIELD(page_IDFK, " . DB::createInQuery($pageIDs) . ")\n\t\t\t");
     $resSettings = $db->select($stmntSettings, $params);
     $settingsArr = array();
     foreach ($resSettings as $res) {
         $settingsArr[$res->mod_instance_IDFK][$res->page_IDFK] = $res;
     }
     return $settingsArr;
     /*} catch(\Exception $e) {
     			return false;
     		}*/
 }
Пример #6
0
 /**
  * @return string[]
  */
 protected function loadCmsRights()
 {
     $rgs = array();
     foreach ($this->loginPopo->rightgroups as $rg) {
         $rgs[] = $rg->rightgroupIDFK;
     }
     $cmsRights = array();
     if (count($rgs) === 0) {
         return $cmsRights;
     }
     // Lade CMS rights
     $stmntRights = $this->db->prepare("\n\t\t\tSELECT cms_right FROM cms_rightgroup_has_right\n\t\t\tWHERE date_from <= NOW() AND (date_to IS NULL OR date_to >= NOW())\n\t\t\tAND rightgroup_IDFK IN (" . DB::createInQuery($rgs) . ")\n\t\t");
     $resRights = $this->db->select($stmntRights, $rgs);
     foreach ($resRights as $r) {
         $cmsRights[] = $r->cms_right;
     }
     return $cmsRights;
 }
Пример #7
0
 /**
  * @param array $order
  * @param array|null $keyword
  * @param string|null $categories
  *
  * @return File[]
  */
 public function getAllFiles(array $order, $keyword = null, $categories = null)
 {
     $condStr = array();
     $params = array();
     if ($keyword !== null) {
         $condStr[] = 'filename LIKE ?';
         $params[] = '%' . $keyword . '%';
     }
     if ($categories !== null) {
         $condStr[] = 'category IN(' . DB::createInQuery($categories) . ')';
         $params = array_merge($params, $categories);
     }
     $stmntAllFiles = $this->db->prepare("\n\t\t\tSELECT ID, filenamesys, filename, filetype, filesize, send, otherinfo, category\n\t\t\tFROM file\n\t\t\t" . (count($condStr) > 0 ? ' WHERE ' . implode(' AND ', $condStr) : null) . "\n\t\t\tORDER BY " . $order['column'] . " " . $order['sort']);
     $tmpArr = $this->db->select($stmntAllFiles, $params);
     $files = array();
     foreach ($tmpArr as $f) {
         $f->filepath = $this->savePath . $f->filenamesys . DIRECTORY_SEPARATOR . $f->filename;
         $files[] = self::createFileFromData($f);
     }
     return $files;
 }
Пример #8
0
 public function getCacheModeByPageID(array $pageIDs)
 {
     $stmntCacheModes = $this->db->prepare("\n\t\t\tSELECT ID, cache_mode\n\t\t\tFROM page\n\t\t\tWHERE ID IN (" . DB::createInQuery($pageIDs) . ")\n\t\t");
     $resCacheModes = $this->db->select($stmntCacheModes, $pageIDs);
     $currentCacheMode = 9;
     foreach ($resCacheModes as $cm) {
         if ($currentCacheMode <= $cm->cache_mode) {
             continue;
         }
         $currentCacheMode = $cm->cache_mode;
     }
     return $currentCacheMode;
 }
Пример #9
0
 /**
  * @param DB $db The database object
  * @param array $modIDs The IDs of the modules for which the settings should be loaded
  * @param array $pageIDs The nested page IDs context
  * @return array The settings found sorted by module IDs and page IDs
  */
 public static function getSettingsForElements(DB $db, array $modIDs, array $pageIDs)
 {
     $params = array_merge($modIDs, $pageIDs, $pageIDs);
     $stmntSettings = $db->prepare("\n\t\t\tSELECT element_instance_IDFK, page_IDFK, navigation_IDFK, level_from, level_to, mode, class_name, show_active_stages_only\n\t\t\tFROM element_nav\n\t\t\tWHERE element_instance_IDFK IN (" . DB::createInQuery($modIDs) . ")\n\t\t\tAND page_IDFK IN (" . DB::createInQuery($pageIDs) . ")\n\t\t\tORDER BY FIELD (page_IDFK, " . DB::createInQuery($pageIDs) . ")\n\t\t");
     $resSettings = $db->select($stmntSettings, $params);
     $settingsArr = array();
     foreach ($resSettings as $res) {
         $settingsArr[$res->element_instance_IDFK][$res->page_IDFK] = $res;
     }
     return $settingsArr;
 }
Пример #10
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;
 }