/** * 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; }