, ...)
*
* @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('
',
$GLOBALS['wdry_system']['url'],
$info_array[$image_name],
$width,
$height);
} elseif ($default_image != "") {
return "
";
}
return "";
}
function print_array($array, $just_return = false) {
$output = "".print_r($array, true)."
";
if ($just_return === true) return $output;
print $output;
}
?>