/**
  * 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;
 }
 /**
  * return the accumulated visibility setting: reads default for language then reads local for element and merges them.
  * if local is default, then the global is used or it is forced to be "yes" if the language was set to all.
  * if the element itself is a translated original record the element is only visible in the specific language
  * If nothing is set the hardcoded default "t" (translated) is returned
  *
  * @param tx_languagevisibility_language $language
  * @param tx_languagevisibility_element $element
  * @param boolean
  * @return string
  */
 public function getVisibilitySetting(tx_languagevisibility_language $language, tx_languagevisibility_element $element, $omitLocal = false)
 {
     $cacheManager = tx_languagevisibility_cacheManager::getInstance();
     $cacheData = $cacheManager->get('visibilitySettingCache');
     $isCacheEnabled = $cacheManager->isCacheEnabled();
     $elementTable = $element->getTable();
     $elementUid = $element->getUid();
     $languageUid = $language->getUid();
     $cacheKey = $languageUid . '_' . $elementUid . '_' . $elementTable . '_' . $omitLocal;
     if (!$isCacheEnabled || !isset($cacheData[$cacheKey])) {
         $cacheData[$cacheKey] = $this->getVisibility($language, $element, $omitLocal)->getVisibilityString();
         $cacheManager->set('visibilitySettingCache', $cacheData);
     }
     return $cacheData[$cacheKey];
 }