/** * * @test * @return void */ public function getIsoCode() { // Create the Array fixture. $fixture = array('uid' => 1, 'static_lang_isocode' => '49'); $language = new tx_languagevisibility_language(); $language->setData($fixture); // Assert that the size of the Array fixture is 0. $this->assertEquals('HE', $language->getIsoCode(), "wrong getIsoCode"); }
/** * Returns the fallback order of an record element. * * (non-PHPdoc) * @see classes/tx_languagevisibility_element#getFallbackOrder($language) */ function getFallbackOrder(tx_languagevisibility_language $language) { return $language->getFallbackOrderElement($this); }
/** * Compare element-language and foreign language. * * @todo make this method work for pages * @return boolean */ public function languageEquals(tx_languagevisibility_language $language) { return $this->row['sys_language_uid'] == $language->getUid(); }
/** * 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; }
/** * We have the same situation as before but in this * testcase we test the visibility of page c and change * the pid afterward. Because the visibility is forced * to no by inheritance, it should normaly be visible, * but the result of the visibility is chached in * that situation and the visibility will only change afterwards * when the cache was flushed. * * @param void * @return void * @author Timo Schmidt <*****@*****.**> * @test */ public function changeOfPidDoesNotInfluenceCachedResult() { $cacheManager = tx_languagevisibility_cacheManager::getInstance(); $isCacheEnabled = $cacheManager->isCacheEnabled(); $this->assertTrue($isCacheEnabled, 'Cache needs to be enabled to perform this test'); $this->importDataSet(dirname(__FILE__) . '/fixtures/canDetermineInheritedVisibility.xml'); $fixtureLanguageRow = array('uid' => 1, 'tx_languagevisibility_defaultvisibility' => 't'); $fixtureLanguage = new tx_languagevisibility_language(); $fixtureLanguage->setData($fixtureLanguageRow); $dao = new tx_languagevisibility_daocommon(); $elementFactory = new tx_languagevisibility_elementFactory($dao); $fixtureElement = $elementFactory->getElementForTable('pages', 3); $visibilityService = new tx_languagevisibility_visibilityService(); $visibilityResult = true; $visibilityResult = $visibilityService->isVisible($fixtureLanguage, $fixtureElement); $this->assertFalse($visibilityResult, 'The element should not be visibile because of the inherited force to no setting'); $db = $GLOBALS['TYPO3_DB']; /* @var $db t3lib_db */ $db->exec_UPDATEquery('pages', 'pid=2', array('pid' => 0)); $visibilityResult = $visibilityService->isVisible($fixtureLanguage, $fixtureElement); $this->assertFalse($visibilityResult, 'The element should not still not be visible because the visibility result is cached'); tx_languagevisibility_cacheManager::getInstance()->flushAllCaches(); $visibilityResult = $visibilityService->isVisible($fixtureLanguage, $fixtureElement); $this->assertTrue($visibilityResult, 'Now the element should be visible because the cache was flushed'); }
function _fixture_getLanguageFourWithElementFallback() { $fixture = array('uid' => 2, 'tx_languagevisibility_fallbackorder' => '0,1', 'tx_languagevisibility_fallbackorderel' => '1', 'tx_languagevisibility_defaultvisibility' => 'f', 'tx_languagevisibility_defaultvisibilityel' => 'f'); $language4 = new tx_languagevisibility_language(); $language4->setData($fixture); return $language4; }
/** * 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; } }