/** * Test for regression #13497: * attribute operator throws a PHP fatal error on a node without parent in a displayable language * * Situation: * - siteaccess with one language (fre-FR) and ShowUntranslatedObjects disabled * - parent content node in another language (eng-GB) with always available disabled * - content node in the siteaccess' language (fre-FR) * - fetch this fre-FR node from anywhere, and call attribute() on it * * Result: * - Fatal error: Call to a member function attribute() on a non-object in * kernel/classes/ezcontentobjecttreenode.php on line 4225 * * Explanation: the error actually comes from the can_remove_location attribute */ public function testIssue13497() { $bkpLanguages = eZContentLanguage::prioritizedLanguageCodes(); // Create a folder in english only $folder = new ezpObject("folder", 2, 14, 1, 'eng-GB'); $folder->setAlwaysAvailableLanguageID(false); $folder->name = "Parent for " . __FUNCTION__; $folder->publish(); $locale = eZLocale::instance('fre-FR'); $translation = eZContentLanguage::addLanguage($locale->localeCode(), $locale->internationalLanguageName()); // Create an article in french only, as a subitem of the previously created folder $article = new ezpObject("article", $folder->attribute('main_node_id'), 14, 1, 'fre-FR'); $article->title = "Object for " . __FUNCTION__; $article->short_description = "Description of test for " . __FUNCTION__; $article->publish(); $articleNodeID = $article->attribute('main_node_id'); // INi changes: set language to french only, untranslatedobjects disabled ezpINIHelper::setINISetting('site.ini', 'RegionalSettings', 'ContentObjectLocale', 'fre-FR'); // ezpINIHelper::setINISetting( 'site.ini', 'RegionalSettings', 'SiteLanguageList', array( 'fre-FR' ) ); eZContentLanguage::setPrioritizedLanguages(array('fre-FR')); ezpINIHelper::setINISetting('site.ini', 'RegionalSettings', 'ShowUntranslatedObjects', 'disabled'); eZContentLanguage::expireCache(); // This should crash eZContentObjectTreeNode::fetch($articleNodeID)->attribute('can_remove_location'); ezpINIHelper::restoreINISettings(); // re-expire cache for further tests eZContentLanguage::setPrioritizedLanguages($bkpLanguages); $article->remove(); $translation->removeThis(); eZContentLanguage::expireCache(); ezpINIHelper::restoreINISettings(); }