/**
  * 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;
 }
Exemple #3
0
/**
 * 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;
 }