/**
  * receive relevant fallbackOrder
  */
 function getFallbackOrder(tx_languagevisibility_language $language)
 {
     return $language->getFallbackOrder($this);
 }
 /**
  *
  * @test
  * @return void
  */
 public function getFallbackOrder()
 {
     $el = $this->getMockForAbstractClass('tx_languagevisibility_element', array(), 'tx_languagevisibility_element_x', false);
     // Create the Array fixture.
     $fixture = array('uid' => 1, 'tx_languagevisibility_complexfallbacksetting' => '0', 'tx_languagevisibility_fallbackorder' => '0,1,2', 'tx_languagevisibility_fallbackorderel' => '0,1', 'tx_languagevisibility_fallbackorderttnewsel' => '0,2');
     $language = new tx_languagevisibility_language();
     $language->setData($fixture);
     $this->assertEquals(array('0', '1', '2'), $language->getFallbackOrder($el), "wrong getFallbackOrder");
     $this->assertEquals(array('0', '1', '2'), $language->getFallbackOrderElement($el), "wrong getFallbackOrder - complex applied where normal is excepted");
     $this->assertEquals(array('0', '1', '2'), $language->getFallbackOrderTTNewsElement($el), "wrong getFallbackOrder - complex applied where normal is excepted");
     // Create the Array fixture.
     $this->assertTrue($language->isLanguageUidInFallbackOrder(0, $el));
     $this->assertTrue($language->isLanguageUidInFallbackOrder(2, $el));
     $this->assertFalse($language->isLanguageUidInFallbackOrder(4711, $el));
     $fixture = array('uid' => 1, 'tx_languagevisibility_complexfallbacksetting' => '1', 'tx_languagevisibility_fallbackorder' => '0,1,2', 'tx_languagevisibility_fallbackorderel' => '0,1', 'tx_languagevisibility_fallbackorderttnewsel' => '0,2');
     $language = new tx_languagevisibility_language();
     $language->setData($fixture);
     $this->assertEquals(array('0', '1', '2'), $language->getFallbackOrder($el), "wrong getFallbackOrder");
     $this->assertEquals(array('0', '1'), $language->getFallbackOrderElement($el), "wrong getFallbackOrder");
     $this->assertEquals(array('0', '2'), $language->getFallbackOrderTTNewsElement($el), "wrong getFallbackOrder");
 }
 /**
  * returns array with the visibility options that are allowed for the current user.
  *
  * @param tx_languagevisibility_language $language
  * @return array
  */
 public static function getAvailableOptionsForLanguage(tx_languagevisibility_language $language, $isOverlay = false, $element = null)
 {
     $element = $element === null ? self::getContextElement('pages', self::_guessCurrentPid()) : $element;
     $elementSupportsInheritance = $element->supportsInheritance();
     $uid = $language->getUid();
     $select = array();
     $useInheritance = $elementSupportsInheritance && self::isInheritanceEnabled();
     if (!$isOverlay) {
         if ($uid == 0) {
             $select['-'] = '-';
             $select['yes'] = 'yes';
             $select['no'] = 'no';
             if ($useInheritance) {
                 $select['no+'] = 'no+';
             }
         } else {
             $select['-'] = '-';
             $select['yes'] = 'yes';
             $select['no'] = 'no';
             if ($useInheritance) {
                 $select['no+'] = 'no+';
             }
             $select['t'] = 't';
             $select['f'] = 'f';
         }
         //check permissions, if user has no permission only no for the language is allowed
         // if the user has permissions for languages that act as fallbacklanguage: then the languages that falls back can have "-" in the options!
         if (!$GLOBALS['BE_USER']->checkLanguageAccess($uid)) {
             //check if the language falls back to one of the languages the user has permissions:
             $isInFallback = FALSE;
             $fallbacks = $language->getFallbackOrder($element);
             foreach ($fallbacks as $lId) {
                 if ($GLOBALS['BE_USER']->checkLanguageAccess($lId)) {
                     $isInFallback = TRUE;
                     continue;
                 }
             }
             $select = array();
             if ($isInFallback) {
                 $select['-'] = '-';
             }
             if ($uid != 0 && self::isTranslatedAsDefaultEnabled()) {
                 $select['t'] = 't';
             }
             $select['no'] = 'no';
             if ($useInheritance) {
                 $select['no+'] = 'no+';
             }
         }
     } else {
         //overlays elements can only have "force to no" or "force to no inherited"
         $select['-'] = '-';
         $select['no'] = 'no';
         if ($useInheritance) {
             $select['no+'] = 'no+';
         }
     }
     /**
      * Get translations of labels from the locallang file
      */
     if (is_object($GLOBALS['LANG'])) {
         //get value from locallang:
         foreach ($select as $k => $v) {
             $select[$k] = $GLOBALS['LANG']->sl('LLL:EXT:languagevisibility/locallang_db.xml:tx_languagevisibility_visibility.I.' . $v);
         }
     }
     return $select;
 }