, 'id' => <id>, 'role' => <role>, ...), ...) * * @return array of category information * @see toArray()@admin/frontend/categories/categoryAdmin.inc.php */ function getCategories($category_id = ROOT_CATEGORY, $lang = '') { if ($lang == '') $lang = $GLOBALS['wdry_system']['default_language']; $staticCategoryAdmin = createStatic("categoryAdmin"); return $staticCategoryAdmin->toArray($category_id, $lang); } /** * Gets all Entries beloning to a certain category * * @param integer $category_id the ID of the category * @param string $lang The language code * @param array $needed_fields The names of needed fields, or null for all fields * @param string $order The name of the field by which the entries are sorted * @param integer $limit limit the amount of returned Entries, 0 for unlimited * @return array the array of transformed Entry-Objects. */ function getEntries($category_id, $lang = "", $needed_fields = null, $order = '', $limit = 0) { $cache_key = "getEntries_".$category_id."_".$order."_".$limit."_".$lang; $cache_result = cache_get_cache($cache_key); if ($cache_result !== false) return $cache_result; $staticEntry = createStatic("Entry"); $entryList = $staticEntry->findByParentId($category_id, $order, $limit); $info = array(); foreach ($entryList as $Entry) { if (!is_null($Entry->getCurrentVersion()) && $Entry->get('active')) $info[] = transformEntry($Entry, $lang, $needed_fields); } cache_store_cache($cache_key, $info); return $info; } function getFirstEntry($category_id, $lang="", $needed_fields=null) { $entries = getEntries($category_id, $lang, $needed_fields); if (sizeof($entries) > 0) { return $entries[0]; } return false; } function getFirstEntryId($category_id) { $Entry = getFirstEntry($category_id); if (is_array($Entry)) return $Entry["id"]; return false; } /** * Gets latest Entries belonging to a certain category * * @param integer $category_id the ID of the category * @return array the array of Entry-Objects. The Entry-Objects can be transformed in to an array with the transformEntry() function. */ function getLatestEntries($category_id, $limit = 0) { $staticEntry = createStatic("Entry"); $entryList = $staticEntry->searchLatest($category_id, $limit); $list = array(); foreach ($entryList as $Entry) { if (!is_null($Entry->getCurrentVersion()) && $Entry->get('active')) $list[] = $Entry; } return $list; } /** * Reads the Entry with the given ID from the Database and put's * it's fieldvalues into an array of the form array(<name> => <value>, <name> => <value>, ...) * * @param integer $entry_id * @param $lang The (optional) i18n-language of the entry. If omitted or nonexistant, the default language will be used. * @return array of the key/value pairs */ function getEntry($entry_id, $lang = '', $needed_fields = null, $bypass_cache = false) { $Entry = createObject("Entry", $entry_id); if (!$Entry->get("active")) return false; return transformEntry($Entry, $lang, $needed_fields, $bypass_cache); } /** * Transforms an Entry-Object into an key/value array with the contents of it's fields * * @param object $Entry * @param string $lang The language * @param array $needed_fields an array of names of the needed fiels, or null for all fields * @param boolean $bypass_cache true if the cache is to be bypassed * @param boolean $recurse true if containing arrays are to be handeled * @return array of the key/value pairs */ function transformEntry($Entry, $lang = '', $needed_fields = null, $bypass_cache = false, $recurse = true) { $page_id = 0; $language_id_i18n = 0; $entry_info = array(); $language_id_all = false; $staticLanguage = createStatic("Language"); $info = false; $cache_key = "Entry_".$Entry->getId()."_".$lang; if (is_array($needed_fields)) $cache_key.= "_".implode("_", $needed_fields); if (!$bypass_cache) { $info = cache_get_cache($cache_key); } if ($info !== false) return $info; $category_id = $Entry->getParentId(true); $fieldInformation = array(); if ($category_id > 0) { // Normale Category $fieldInformation = getFieldInformation($category_id); $Category = createObject("Category", $category_id); $page_id = $Category->get("page_id"); } else { $staticCategory = createStatic("Category"); $search = mkSearch(array(), 'overview_id', '=', $Entry->getId()); $categoryList = $staticCategory->findBy($search); if (sizeof($categoryList) > 0) { $Category = $categoryList[0]; $category_id = $Category->getId(); $fieldInformation = getFieldInformationByPage($Category->get('overview_page_id')); } else { wdry_die('Kann Entry ['.$Entry->getId().'] keiner Katgorie zuordnen', 'frontend.inc.php', ''); } } $Version = $Entry->getCurrentVersion(); if (!isset($Version) || is_null($Version)) { $Version = $Entry->getEditVersion(); if (!isset($Version) || is_null($Version)) { wdry_die("Keine Version für Entry ".$Entry->getId(), 'frontend.inc.php', 'transformEntry()'); } } $version_id = $Version->getId(); if ($lang == '') { $lang = 'de_DE'; } if($GLOBALS['wdry_system']['entry_i18n']) { $lang_code = findLanguageCode($lang); if ($lang_code === false) { wdry_die('No I18n found for Entry ['.$Entry->getId().'] with lang ['.$lang.']', 'frontend.inc.php', 'transformEntry()'); } $search = array(); $search = mkSearch($search, 'code', '=', $lang_code); $search = mkSearch($search, 'parent_id', '=', $version_id); $languageList = $staticLanguage->findBy($search); if (sizeof($languageList) > 0) { $Language = $languageList[0]; $language_id_i18n = $Language->getId(); } } $search = array(); $search = mkSearch($search, 'code', '=', LANG_ALL); $search = mkSearch($search, 'parent_id', '=', $version_id); $languageList = $staticLanguage->findBy($search); if (sizeof($languageList) > 0) { $Language = $languageList[0]; $language_id_all = $Language->getId(); } $entry_info["Entry"] = $Entry; $entry_info['id'] = $Entry->getId(); $entry_info['real_id'] = $Entry->getRealId(); $entry_info['parent_id'] = $Entry->getParentId(); $entry_info['category_id'] = $Entry->getParentId(); $entry_info['master_parent_id'] = $Entry->getParentId(true); $entry_info["is_link"] = $Entry->isLink(); $entry_info['page_id'] = $page_id; $entry_info['date_created'] = $Version->get('date_created'); $entry_info['created_by'] = $Version->get('created_by'); $entry_info['field_information'] = $fieldInformation; foreach ($fieldInformation as $field) { if ((is_array($needed_fields) && in_array($field["name"], $needed_fields)) || is_null($needed_fields)) { $widgetType = $field['type']; $widget_id = $field['widget_id']; $staticEntryObject = createStatic('Entry_'.$widgetType); $search = mkSearch(array(), 'widget_id', '=', $widget_id); $language_id = ($field['all_languages']) ? $language_id_all : $language_id_i18n ; $search = mkSearch($search, 'parent_id', '=', $language_id); $entryList = $staticEntryObject->findBy($search); if (sizeof($entryList) > 0) { $EntryObject = $entryList[0]; $entry_info[$field['name']] = $EntryObject->getField(); if ($widgetType == 'File') { $entry_info[$field['name'].'_internalname'] = $EntryObject->get('internalname'); $entry_info[$field['name'].'_filename'] = $EntryObject->get('filename'); } if ($widgetType == 'DynamicEnum') { $entry_info[$field['name'].'_ids'] = $EntryObject->get('entry_ids'); $entry_info[$field['name'].'_array'] = $EntryObject->getAsArray('entry_ids'); } if ($widgetType == 'Enum') { $entry_info[$field['name'].'_ids'] = $EntryObject->get('item_ids'); $entry_info[$field['name'].'_array'] = $EntryObject->getAsArray('entry_ids'); } if (($widgetType == 'EntryArray') && $recurse) { $entry_info[$field['name']] = transformEntryArray($EntryObject, $lang, null, $bypass_cache); } } } } cache_store_cache($cache_key, $entry_info); return $entry_info; } /** * Gets the "blueprint" of an entry for a given category * * @param integer $category_id the ID of the category * @param boolean $overviewOnly true, if you want only the fields designated for a list, false for all fields. * @return array of arrays. */ function getFieldInformation($category_id, $overviewOnly = false) { $cachekey = "fieldInformation_".$category_id."_".($overviewOnly === true ? "1" : "0"); $fieldInformation = cache_get_cache($cachekey); if ($fieldInformation !== false) return $fieldInformation; $Category = createObject("Category", $category_id); $page_id = $Category->get('page_id'); $fieldInformation = getFieldInformationByPage($page_id, $overviewOnly); cache_store_cache($cachekey, $fieldInformation); return $fieldInformation; } function transformEntryArray($Entry_EntryArray, $lang = '', $bypass_cache = false) { $array_info = false; $cachekey = "transEntryArray_".$Entry_EntryArray->getId()."_".$lang; if (!$bypass_cache) $array_info = cache_get_cache($cachekey); if ($array_info !== false) return $array_info; $staticEntry = createStatic("Entry"); $EntryArray = createObject("EntryArray", $Entry_EntryArray->get('widget_id')); $page_id = $EntryArray->get('subpage_id'); $field_information = getFieldInformationByPage($page_id); $arrayEntryList = $staticEntry->findByParentId($Entry_EntryArray->getId()); $array_info = array(); $entry_info = array(); foreach ($arrayEntryList as $Entry) { if ($Entry->isLink()) { $entry_info = transformEntry($Entry, $lang, null, $bypass_cache, false); } else { $entry_info['id'] = $Entry->getId(); foreach ($field_information as $field) { $widgetType = $field['type']; $widget_id = $field['widget_id']; $entryObjectClass = 'Entry_'.$widgetType; require_once($GLOBALS['wdry_system']['entities'][$entryObjectClass]); $staticEntryObject = new $entryObjectClass(); $search = array(); $search = mkSearch($search, 'widget_id', '=', $widget_id); $search = mkSearch($search, 'parent_id', '=', $Entry->isLink() ? $Entry->getRealId() : $Entry->getId()); $entryList = $staticEntryObject->findBy($search); if (sizeof($entryList) > 0) { $EntryObject = $entryList[0]; $entry_info[$field['name']] = $EntryObject->getField(); switch ($widgetType) { case('File'): $entry_info[$field['name'].'_internalname'] = $EntryObject->get('internalname'); $entry_info[$field['name'].'_filename'] = $EntryObject->get('filename'); break; case('DynamicEnum'): $entry_info[$field['name'].'_ids'] = $EntryObject->get('entry_ids'); break; case('Enum'): $entry_info[$field['name'].'_ids'] = $EntryObject->get('item_ids'); break; case('EntryArray'): $entry_info[$field['name']] = transformEntryArray($EntryObject, $lang, $bypass_cache); break; } } } } $array_info[] = $entry_info; } cache_store_cache($cachekey, $array_info); return $array_info; } /** * Gets the "blueprint" of an entry for a given Page * * @param integer $category_id the ID of the category * @param boolen $overviewOnly true, if you want only the fields designated for a list, false for all fields. * @return array of arrays. */ function getFieldInformationByPage($page_id, $overview_only = false) { $staticWidgetWrapper = createStatic("WidgetWrapper"); $fieldInformation = array(); $widgetWrapperList = $staticWidgetWrapper->findByParentId($page_id); // Sortierung automatisch Pos foreach ($widgetWrapperList as $WidgetWrapper) { $widget_type = $WidgetWrapper->get('widget_type'); $staticWidget = createStatic($widget_type); $widgetList = $staticWidget->findByParentId($WidgetWrapper->getId()); $Widget = $widgetList[0]; $fields = array(); if ((isset($overview_only) && !$overview_only) || $Widget->get('overview','bool')) { // Soll die Entity in der Uebersicht dargestellt werden? $fields['label'] = $WidgetWrapper->get('label'); // Die "Ueberschrift" in der Tabelle $fields['all_languages'] = $WidgetWrapper->get('all_languages'); // Die "Ueberschrift" in der Tabelle $fields['type'] = $widget_type; // Die Entity fuer den entsprechenden Wert setzt sich zusammen aus 'Entity_' + diesem Namen $fields['widget_id'] = $Widget->getId(); // Um bei mehreren Entity-Eintraegen dieses Typs den richtigen zu finden suchen wir auch noch nach der Widget-Id, die in der Entity vermerkt ist $fields['name'] = $Widget->get('name'); if ($widget_type == 'File') { $fields['file_type'] = $Widget->get('file_type'); } $fieldInformation[$fields['name']] = $fields; } } return $fieldInformation; } /** * Searches in the entries by the user-designated fields and their contents. * * @param integer $category_id the category to search the entries in. * @param array $search a search array like produced by the mkSearch function. * @return array an array of Entry objects. */ function searchInEntites($category_id, $search) { global $staticEntry; return $staticEntry->searchBy($category_id, $search); } function dbtr($identifier, $lang = "", $prefix = -1) { if ($lang == '') { $lang = $_SESSION['frontend_language']; if ($lang == '') { $lang = $GLOBALS['wdry_system']['default_language']; } } $Translation = new Translation($identifier, $prefix); return $Translation->get($lang); } function getCategoryTrail($Category, $returnIds = true) { $trail = array(); $trail[] = $returnIds ? $Category->getId() : $Category; while ($Category->getParentId() != ROOT_CATEGORY) { $Category = new Category($Category->getParentId()); $trail[] = $returnIds ? $Category->getId() : $Category; } return $trail; } function getCategoryTrailFromEntry($Entry) { $category_id = $Entry->getParentId(true); $Category = new Category($category_id); return getCategoryTrail($Category); } function findLanguageCode($key) { $staticI18n = createStatic("I18n"); $search = array(); $search = mkSearch($search, 'code', '=', $key); $i18nList = $staticI18n->findBy($search); if (sizeof($i18nList) == 0) { return false; } return $i18nList[0]->getId(); } function default_image($info_array, $image_name, $width, $height, $default_image = "") { if ($info_array[$image_name."_filename"] != "") { return sprintf('<img src="%s/show_image.php?id=%s&width=%s&height=%s" border="0" />', $GLOBALS['wdry_system']['url'], $info_array[$image_name], $width, $height); } elseif ($default_image != "") { return "<img src=\"".$default_image."\" border=\"0\" alt=\"\"/>"; } return ""; } function print_array($array, $just_return = false) { $output = "<pre>".print_r($array, true)."</pre>"; if ($just_return === true) return $output; print $output; } ?>