/** * Translates a list based on cached values * @param array $rows * @param JFLanguage $language * @param array $tableArray */ public function translateListCached($rows, $language, $tableArray) { JoomFish::translateList($rows, $language, $tableArray); return $rows; }
/** * Load a list of database objects * @param string The field name of a primary key * @return array If <var>key</var> is empty as sequential list of returned TRANSLATED records. * If <var>key</var> is not empty then the returned array is indexed by the value * the database key. Returns <var>null</var> if the query fails. */ function loadObjectList($key = '', $translate = true, $language = null) { global $_JOOMFISH_MANAGER; if (!$translate) { $this->_skipSetRefTables = true; $result = parent::loadObjectList($key); $this->_skipSetRefTables = false; return $result; } $result = parent::loadObjectList($key); if (isset($_JOOMFISH_MANAGER)) { $this->_setLanguage($language); } // TODO check the impact of this on frontend translation // It does stop Joomfish plugins from working on missing translations e.g. regional content so disable for now // Don't do it for now since translation caching is so effective /* $registry =& JFactory::getConfig(); $defaultLang = $registry->getValue("config.defaultlang"); if ($defaultLang == $language){ $translate = false; } */ if (isset($_JOOMFISH_MANAGER)) { $doTranslate = false; $tables = $this->_getRefTables(); if ($tables == null) { return $result; } // an unstranslatable query to return result as is // if we don't have "fieldTablePairs" then we can't translate if (!array_key_exists("fieldTablePairs", $tables)) { return $result; } foreach ($tables["fieldTablePairs"] as $i => $table) { if ($this->translatedContentAvailable($table)) { $doTranslate = true; break; } } if ($doTranslate) { $pfunc = $this->_profile(); if ($_JOOMFISH_MANAGER->getCfg("transcaching", 1)) { // cache the results // TODO call based on config //$cache = &JFactory::getCache('jfquery'); $cache = $_JOOMFISH_MANAGER->getCache($language); $this->orig_limit = $this->_limit; $this->orig_offset = $this->_offset; $result = $cache->get(array("JoomFish", 'translateListCached'), array($result, $language, $this->_getRefTables())); $this->orig_limit = 0; $this->orig_offset = 0; } else { $this->orig_limit = $this->_limit; $this->orig_offset = $this->_offset; JoomFish::translateList($result, $language, $this->_getRefTables()); $this->orig_limit = 0; $this->orig_offset = 0; } $pfunc = $this->_profile($pfunc); } } return $result; }
/** * This function based on Joomfish own method, but the * JF one only returns the current item translated * instead of the full menu set * * @param $lang * @param $getOriginals * @param $currentLangMenuItems * @return unknown_type */ function shGetJFMenu($lang, $getOriginals = true, $currentLangMenuItems = false) { static $instance; if (!isset($instance)) { $instance = array(); if (!$currentLangMenuItems) { JError::raiseWarning('SOME_ERROR_CODE', "Error translating Menus - missing currentLangMenuItems"); return false; } $db =& JFactory::getDBO(); $sql = 'SELECT m.*, c.`option` as component' . ' FROM #__menu AS m' . ' LEFT JOIN #__components AS c ON m.componentid = c.id' . ' WHERE m.published = 1 ' . ' ORDER BY m.sublevel, m.parent, m.ordering'; $db->setQuery($sql); // get untranslated menus first // run through the translation code so that we get the correct reftablearray $registry =& JFactory::getConfig(); $defLang = $registry->getValue("config.defaultlang"); // done as array of one item so that joomla core menu code will work with it if (!($menu = $db->loadObjectList('id', true, $defLang))) { JError::raiseWarning('SOME_ERROR_CODE', "Error loading Menus: " . $db->getErrorMsg()); return false; } $instance["raw"] = array("rows" => $menu, "tableArray" => $db->_getRefTables(), "originals" => $currentLangMenuItems); shSetupMenuRoutes($instance["raw"]["rows"]); // This is really annoying in PHP5 - an array of stdclass objects is copied as an array of references // I tried doing this as a stdclass and cloning but it didn't seek to work. $instance["raw"] = serialize($instance["raw"]); $defLang = $registry->getValue("config.jflang"); $instance[$defLang] = unserialize($instance["raw"]); } if (!isset($instance[$lang])) { $instance[$lang] = unserialize($instance["raw"]); // Do not cache here since it can affect SEF components JLoader::import('helper', JPATH_ROOT . DS . 'modules' . DS . 'mod_jflanguageselection', 'jfmodule'); JoomFish::translateList($instance[$lang]["rows"], $lang, $instance[$lang]["tableArray"]); shSetupMenuRoutes($instance[$lang]["rows"]); } if ($getOriginals) { return $instance[$lang]["originals"]; } else { return $instance[$lang]["rows"]; } }
/** * Load a list of database objects * @param string The field name of a primary key * @return array If <var>key</var> is empty as sequential list of returned TRANSLATED records. * If <var>key</var> is not empty then the returned array is indexed by the value * the database key. Returns <var>null</var> if the query fails. */ function loadObjectList($key = '', $translate = true, $language = null) { global $mosConfig_lang, $_JOOMFISH_MANAGER; if ($language === null) { $jlang =& JFactory::getLanguage(); $language = $jlang->getTag(); } $result = $this->_db->loadObjectList($key); if ($translate && isset($_JOOMFISH_MANAGER)) { $doTranslate = false; $tables = $this->_getRefTables(); if ($tables == null) { return $result; } // an unstranslatable query to return result as is foreach ($tables["fieldTablePairs"] as $i => $table) { if ($this->translatedContentAvailable($table)) { $doTranslate = true; break; } } if ($doTranslate) { JoomFish::translateList($result, $this->_getTableName(), $language, $this->_getRefTables()); } } return $result; }