public function updateTemplateStyles() { // get all template styles $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('*')->from('#__template_styles')->where('client_id=0'); $db->setQuery($query); $rows = $db->loadObjectList(); $mm_config = null; $fromAlias = JalangHelper::getAliasSuffix($this->fromLangTag); foreach ($rows as $row) { $params = json_decode($row->params, true); if (!$params || !isset($params['mm_config'])) { continue; } $mmca = json_decode($params['mm_config'], true); $update = 0; if (is_array($mmca)) { foreach ($mmca as $mmt => $mmc) { if (preg_match('/-' . $this->from . '$/', $mmt) || !preg_match('/-[a-z]{2}$/', $mmt)) { //convert from configuration of megamenu in default language $mmt = preg_replace('/-(' . $this->from . '|' . $fromAlias . ')$/', '', $mmt); $mmc1 = json_encode($mmc); $mmt2 = $mmt . '-' . JalangHelper::getAliasSuffix($this->toLangTag); //if(isset($mmca[$mmt2])) continue; $mmc2 = preg_replace_callback('/(")(item|position)(["\\-:]+)(\\d+)([^\\d]?)/', array($this, 'updateTemplateStyles_callback'), $mmc1); $mmca[$mmt2] = json_decode($mmc2, true); $update = 1; } } } if ($update) { $mm_config = json_encode($mmca); $params['mm_config'] = $mm_config; // update template style $query->clear(); $query->update('#__template_styles')->set($db->quoteName('params') . '=' . $db->quote(json_encode($params)))->where('`id`=' . $row->id); $db->setQuery($query); $db->execute(); } } }
/** * @param $alias - alias of default item * @param $fromLangTag - source language tag * @param $toLangTag - destination language tag * @param $row - data of new item * @param $generateFrom - how to generate alias * @param $makeUnique - if true, it will test if generate alias is existed and try to create another one. * @return string - new alias */ public function getNewAlias($alias, $fromLangTag, $toLangTag, $row = null, $generateFrom = '', $makeUnique = false) { static $checkedAlias = array(); @(list($from, $fromCountry) = explode('-', $fromLangTag)); @(list($to, $toCountry) = explode('-', $toLangTag)); $fromCountry = strtolower($fromCountry); $toCountry = strtolower($toCountry); $hasTitle = is_array($row) && isset($row[$this->title_field]) && !empty($row[$this->title_field]); if (!$generateFrom) { if ($from == $to) { $generateFrom = 'alias'; } else { $params = JComponentHelper::getParams('com_jalang'); $generateFrom = $params->get('alias_type', 'title'); if ($this->table_type == 'alias') { $generateFrom = 'alias'; } } } if ($generateFrom == 'title' && $hasTitle) { $newAlias = $row[$this->title_field]; $newAlias = JApplication::stringURLSafe($newAlias); if ($newAlias == $alias) { $newAlias .= '-' . JalangHelper::getAliasSuffix($toLangTag); } } else { //append language code after alias of item in default language $suffix = JalangHelper::getAliasSuffix($fromLangTag); $newAlias = preg_replace('/\\-(' . str_replace('-', '\\-', $suffix) . ')$/', '', $alias); //remove suffix of other language $newAlias .= '-' . JalangHelper::getAliasSuffix($toLangTag); if ($newAlias == $alias) { //source language and destination language have a same language code } } if ($makeUnique) { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select($db->quoteName($this->alias_field))->from('#__' . $this->table); $i = (int) (isset($checkedAlias[$newAlias]) ? $checkedAlias[$newAlias] : 0); do { $testAlias = $i ? $newAlias . '-' . $i : $newAlias; $query->clear('where'); $query->where($db->quoteName($this->alias_field) . '=' . $db->quote($testAlias)); $db->setQuery($query); $test = $db->loadResult(); $i++; } while ($test); $checkedAlias[$newAlias] = $i; $newAlias = $testAlias; } return $newAlias; }
protected function updateVersion105() { /** * Version 1.0.5 * Update alias of item in table type alias (E.g: menu_types table) from using language code (E.g: mainmenu-en) as alias suffix * to use language tag instead (E.g: mainmenu-en-us) * * This fix is help to translate content into many languages that have same language code (E.g: en-US, en-GB, en-AU,...) */ $defaultLanguage = JalangHelper::getDefaultLanguage(); $db = JFactory::getDbo(); $query = $db->getQuery(true); //update menu_types and menu items $query->select('mt.id, mt.menutype, m.language')->from('#__menu_types AS mt')->innerJoin('#__menu AS m ON m.menutype = mt.menutype')->where('m.language <> ' . $db->quote($defaultLanguage))->where('m.language <> ' . $db->quote('*'))->group('mt.id'); $db->setQuery($query); $list = $db->loadObjectList(); if (count($list)) { foreach ($list as $item) { $langTag = $item->language; @(list($lang, $country) = explode('-', $langTag)); $oldmenutype = $memnutype = $item->menutype; //remove old suffix $memnutype = preg_replace('/-' . $lang . '$/', '', $memnutype); //add new suffix format $memnutype .= '-' . JalangHelper::getAliasSuffix($langTag); //update menu type $query->clear(); $query->update('#__menu_types')->set($db->quoteName('menutype') . '=' . $db->quote($memnutype))->where($db->quoteName('menutype') . '=' . $db->quote($oldmenutype)); $db->setQuery($query); $db->execute(); //update menu item $query->clear(); $query->update('#__menu')->set($db->quoteName('menutype') . '=' . $db->quote($memnutype))->where($db->quoteName('menutype') . '=' . $db->quote($oldmenutype)); $db->setQuery($query); $db->execute(); //update module $query->clear(); $query->select('m.id, m.params')->from('#__modules AS m')->where('m.language = ' . $db->quote($langTag)); $db->setQuery($query); $modules = $db->loadObjectList(); if (count($modules)) { foreach ($modules as $mod) { $registry = new JRegistry(); $registry->loadString($mod->params); $params = $registry->toArray(); if ($registry->get('menutype') == $oldmenutype) { $registry->set('menutype', $memnutype); $query->clear(); $query->update('#__modules')->set($db->quoteName('params') . '=' . $db->quote($registry->toString()))->where($db->quoteName('id') . '=' . $mod->id); $db->setQuery($query); $db->execute(); } } } //update template style - JA Mega menu config $query->clear(); $query->select('t.id, t.params')->from('#__template_styles AS t')->where('t.client_id=0'); $db->setQuery($query); $styles = $db->loadObjectList(); if (count($styles)) { foreach ($styles as $style) { $params = preg_replace('/\\b' . $oldmenutype . '\\b/', $memnutype, $style->params); if ($params != $style->params) { $query->clear(); $query->update('#__template_styles')->set($db->quoteName('params') . '=' . $db->quote($params))->where($db->quoteName('id') . '=' . $style->id); $db->setQuery($query); $db->execute(); } } } } } return true; }