示例#1
0
 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();
         }
     }
 }
示例#2
0
 /**
  * @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;
 }
示例#3
0
 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;
 }