/** * This method is used to retrieve all parent elements (an parent elements needs to * have the flag 'tx_languagevisibility_inheritanceflag_original' or * needs to be orverlayed with a record, that has the field 'tx_languagevisibility_inheritanceflag_overlayed' * configured or is the first element of the rootline * * @param tx_languagevisibility_element $element * @return array $elements (collection of tx_languagevisibility_element) */ public function getParentElementsFromElement(tx_languagevisibility_element $element, $language) { $elements = array(); if ($element instanceof tx_languagevisibility_pageelement) { /* @var $sys_page t3lib_pageSelect */ $rootline = $this->getOverlayedRootLine($element->getUid(), $language->getUid()); if (is_array($rootline)) { foreach ($rootline as $rootlineElement) { if ($rootlineElement['tx_languagevisibility_inheritanceflag_original'] == 1 || $rootlineElement['tx_languagevisibility_inheritanceflag_overlayed'] == 1) { $elements[] = self::getElementForTable('pages', $rootlineElement['uid']); } } if (sizeof($elements) == 0) { $root = end($rootline); $elements[] = self::getElementForTable('pages', $root['uid']); } } } else { $parentPage = $this->getElementForTable('pages', $element->getUid()); $elements = $this->getParentElementsFromElement($parentPage, $language); } return $elements; }
/** * Create a visiblity object for an element for a given language. * @param tx_languagevisibility_language $language * @param tx_languagevisibility_element $element * @param boolean $omitLocal * @return tx_languagevisibility_visibility */ protected function getVisibility(tx_languagevisibility_language $language, tx_languagevisibility_element $element, $omitLocal = false) { $visibility = new tx_languagevisibility_visibility(); $local = $element->getLocalVisibilitySetting($language->getUid()); if (!$omitLocal && ($local != '' && $local != '-')) { $visibility->setVisibilityString($local)->setVisibilityDescription('local setting ' . $local); return $visibility; } else { if ($element->isLanguageSetToAll()) { $visibility->setVisibilityString('yes')->setVisibilityDescription('language configured to all'); return $visibility; } if ($element->isMonolithicTranslated()) { if ($element->languageEquals($language)) { $visibility->setVisibilityString('yes')->setVisibilityDescription(''); } else { $visibility->setVisibilityString('no')->setVisibilityDescription(''); } return $visibility; } if ($element->getFieldToUseForDefaultVisibility() == 'page') { if ($this->getUseInheritance()) { // gibt es in der rootline das visibiklitysetting no+ für die sprache dann return 'no' $inheritedVisibility = $this->getInheritedVisibility($language, $element); switch ($inheritedVisibility->getVisibilityString()) { case 'no+': //if no+ is found it means the current element should be threated as if it has no set $visibility->setVisibilityString('no')->setVisibilityDescription('force to no (' . $inheritedVisibility->getVisibilityDescription() . ')'); break; case 'yes+': $visibility->setVisibilityString('yes')->setVisibilityDescription('force to yes (' . $inheritedVisibility->getVisibilityDescription() . ')'); break; default: $setting = $language->getDefaultVisibilityForPage($element); $visibility->setVisibilityString($setting)->setVisibilityDescription('default visibility for page (' . $setting . ')'); break; } } else { //inheritance is disabled $setting = $language->getDefaultVisibilityForPage($element); $visibility->setVisibilityString($setting)->setVisibilityDescription('default visibility for page (' . $setting . ')'); } } elseif ($element->getFieldToUseForDefaultVisibility() == 'tt_news') { $setting = $language->getDefaultVisibilityForTTNewsElement($element); $visibility->setVisibilityString($setting)->setVisibilityDescription('default visibility for news (' . $setting . ')'); } else { $setting = $language->getDefaultVisibilityForElement($element); $visibility->setVisibilityString($setting)->setVisibilityDescription('default visibility for element (' . $setting . ')'); } if ($visibility->getVisibilityString() == '') { $visibility->setVisibilityString('t')->setVisibilityDescription('no visibility configured using default setting "t"'); } return $visibility; } }