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