Exemple #1
0
 /**
  * Method to get a list of articles.
  * Overridden to add a check for access levels.
  *
  * @return  mixed  An array of data items on success, false on failure.
  * @since   1.6.1
  */
 public function getItems()
 {
     $items = parent::getItems();
     $app = JFactory::getApplication();
     $db = JFactory::getDbo();
     $adapter = JalangHelper::getHelperContent();
     $translator = new JalangHelperTranslator();
     $params = JComponentHelper::getParams('com_jalang');
     $language = $app->getUserState('com_jalang.mainlanguage', '*');
     $languages = JHtml::_('contentlanguage.existing', true, true);
     if ($adapter->table_type == 'table') {
         if (!$language || $language == '*') {
             $language = JalangHelper::getDefaultLanguage();
         }
         $translator->fromLangTag = $language;
         $from_table = $translator->getLangTable('#__' . $adapter->table, $language);
         $filterById = $db->quoteName('st') . '.' . $db->quoteName($adapter->primarykey) . '=%d';
     } else {
         $translator->fromLangTag = $language;
         $from_table = '#__' . $adapter->table;
         $filterById = $db->quoteName('c') . '.' . $db->quoteName($adapter->primarykey) . '=%d';
         $translator->loadAssociate($adapter->table, $adapter->primarykey, $adapter->associate_context, false);
     }
     for ($x = 0, $count = count($items); $x < $count; $x++) {
         $sourceid = $items[$x]->{$adapter->primarykey};
         if ($adapter->table_type == 'table') {
             foreach ($languages as $cl) {
                 if ($cl->value != $language) {
                     $translator->toLangTag = $cl->value;
                     $translator->loadAssociate($adapter->table, $adapter->primarykey, $adapter->associate_context, true, array(sprintf($filterById, $sourceid)));
                 }
             }
         }
         $items[$x]->associations = isset($translator->aAssociation[$adapter->table][$sourceid]) ? $translator->aAssociation[$adapter->table][$sourceid] : array();
     }
     return $items;
 }
Exemple #2
0
require_once( __DIR__ . '/helpers/helper.php' );
require_once( __DIR__ . '/helpers/content/content.php' );
require_once( __DIR__ . '/helpers/translator/translator.php' );
*/
require_once dirname(__FILE__) . '/helpers/helper.php';
require_once dirname(__FILE__) . '/helpers/tool.php';
require_once dirname(__FILE__) . '/helpers/content/content.php';
require_once dirname(__FILE__) . '/helpers/translator/translator.php';
$app = JFactory::getApplication();
$helper = new JalangHelper();
$helper->update();
$itemtype = JRequest::getVar('itemtype', 'content');
if (!empty($itemtype)) {
    $app->setUserState('com_jalang.itemtype', $itemtype);
}
$mainlanguage = JRequest::getVar('mainlanguage', JalangHelper::getDefaultLanguage());
if (!empty($mainlanguage)) {
    $app->setUserState('com_jalang.mainlanguage', $mainlanguage);
}
//asset
$document = JFactory::getDocument();
if (JalangHelper::isJoomla3x()) {
    $document->addStyleSheet('components/com_jalang/asset/style.css');
} else {
    $document->addStyleSheet('components/com_jalang/asset/style_2x.css');
    $document->addScript('components/com_jalang/asset/jquery.min.js');
    $document->addScript('components/com_jalang/asset/jquery-noconflict.js');
}
$controller = JControllerLegacy::getInstance('Jalang');
$controller->execute(JFactory::getApplication()->input->get('task'));
$controller->redirect();
Exemple #3
0
 public function translateAll()
 {
     $this->consoleInit();
     $input = JFactory::getApplication()->input;
     //$from = $input->get('translate_from', '*');
     //$to = $input->get('translate_to', '*');
     $languages = JalangHelper::getListInstalledLanguages();
     $from = JalangHelper::getDefaultLanguage();
     if (!headers_sent()) {
         header('Content-type: text/html; charset=utf-8');
     }
     foreach ($languages as $lang) {
         if ($lang->element == $from) {
             continue;
         }
         $params = JComponentHelper::getParams('com_jalang');
         $translator = JalangHelperTranslator::getInstance($params->get('translator_api_active', 'bing'));
         $translator->sendOutput('<h3>' . JText::sprintf('START_TO_TRANSLATE_FOR_THE_VAR_LANGUAGE', $lang->name) . '</h3>');
         $translator->translateAllTables($from, $lang->element);
         //sleep(2);
         $translator->sendOutput(str_pad('', 50, '-'));
     }
     jexit('Done');
 }
Exemple #4
0
 public final function removeLanguage($languageTag)
 {
     if (!$languageTag || $languageTag == '*') {
         $this->sendOutput(JText::_('SOURCE_LANGUAGE_IS_NOT_SPECIFIED_OR_NOT_SUPPORTED'));
         return false;
     }
     if ($languageTag == JalangHelper::getDefaultLanguage()) {
         $this->sendOutput(JText::_('ALERT_CANNOT_REMOVE_DEFAULT_LANGUAGE'));
         return false;
     }
     $langId = JalangHelper::getLanguageIdFromCode($languageTag);
     $parts = explode('-', $languageTag);
     $langCode = strtolower(trim($parts[0]));
     $adapters = JalangHelperContent::getListAdapters();
     $db = JFactory::getDbo();
     foreach ($adapters as $adapter) {
         $component = $adapter['title'];
         $adapter = JalangHelperContent::getInstance($adapter['name']);
         $table = '#__' . $adapter->table;
         $this->sendOutput('<h3>' . JText::sprintf('START_TO_REMOVE_ITEM_FROM_THE_COMPONENT', $component) . '</h3>');
         if ($adapter->table_type == 'native' || $adapter->table_type == 'table_ml') {
             if (!$adapter->language_field) {
                 continue;
             }
             if ($adapter->language_mode == 'id') {
                 $where = $db->quoteName($adapter->language_field) . '=' . $db->quote($langId);
             } else {
                 $where = $db->quoteName($adapter->language_field) . '=' . $db->quote($languageTag);
             }
             if ($adapter->table_type == 'native') {
                 //delete association data
                 $query = "DELETE FROM #__associations\r\n\t\t\t\t\t\tWHERE id IN (\r\n\t\t\t\t\t\t\tSELECT " . $db->quote($adapter->primarykey) . "\r\n\t\t\t\t\t\t\tFROM " . $table . "\r\n\t\t\t\t\t\t\tWHERE `context` = " . $db->quote($adapter->associate_context) . "\r\n\t\t\t\t\t\t\tAND " . $where . "\r\n\t\t\t\t\t\t)";
                 $db->setQuery($query);
                 $db->execute();
             }
             //delete items
             $query = $db->getQuery(true);
             $query->delete($table);
             $query->where($where);
             $db->setQuery($query);
             $db->execute();
             $num_items = $db->getAffectedRows();
             $this->sendOutput(JText::sprintf('NUM_ITEMS_ARE_REMOVED', $num_items) . '<br />');
         } elseif ($adapter->table_type == 'alias') {
             $query = $db->getQuery(true);
             $query->delete($table);
             $query->where($db->quoteName($adapter->alias_field) . ' LIKE ' . $db->quote('%-' . $langCode));
             $db->setQuery($query);
             $db->execute();
             $num_items = $db->getAffectedRows();
             $this->sendOutput(JText::sprintf('NUM_ITEMS_ARE_REMOVED', $num_items) . '<br />');
         } elseif ($adapter->table_type == 'table') {
             $tableml = $this->getLangTable($table, $languageTag);
             $query = "DROP TABLE " . $db->quoteName($tableml);
             $db->setQuery($query);
             $db->execute();
             $this->sendOutput(JText::sprintf('DROP_THE_LANGUAGE_TABLE', $tableml) . '<br />');
         }
     }
     //remove content language?
 }
Exemple #5
0
 /**
  * is called on before save item to database event
  * @param JalangHelperTranslator $translator
  * @param int $sourceid - id of source item
  * @param array $row - data for new item
  */
 public function afterSave(&$translator, $sourceid, &$row)
 {
     //After translate item, if item is set to display in All language
     //then it will be updated to display in default language
     $defaultLanguage = JalangHelper::getDefaultLanguage();
     if (isset($row['language']) && ($translator->fromLangTag == '*' || $translator->fromLangTag == $defaultLanguage)) {
         //Update language for item set to All language since the item set to All languages can't be associated.
         $db = JFactory::getDbo();
         $query = $db->getQuery(true);
         $query->update('#__' . $this->table)->set($db->quoteName('language') . '=' . $db->quote($defaultLanguage));
         $query->where($db->quoteName($this->primarykey) . '=' . $db->quote($sourceid));
         $db->setQuery($query);
         $db->execute();
     }
 }
 public function loadAssociate($table, $id = 'id', $context, $reload = false, $filter = array())
 {
     $defaultLanguage = JalangHelper::getDefaultLanguage();
     if ($this->fromLangTag == '*' && $this->convertLangTag) {
         $fromLangTag = $this->convertLangTag;
     } else {
         $fromLangTag = $this->fromLangTag;
     }
     $adapter = JalangHelperContent::getInstance($table);
     if ($adapter->table_type == 'table') {
         $this->createLangTable('#__' . $table, $fromLangTag);
         $this->createLangTable('#__' . $table, $this->toLangTag);
     }
     if (!isset($this->aAssociation[$table]) || $reload || $adapter->table_type == 'table') {
         if (!isset($this->aAssociation[$table])) {
             $this->aAssociation[$table] = array();
         }
         $aMap =& $this->aAssociation[$table];
         $db = JFactory::getDbo();
         if ($adapter->table_type == 'table') {
             $from_table = $this->getLangTable('#__' . $table, $fromLangTag);
             $to_table = $this->getLangTable('#__' . $table, $this->toLangTag);
             $query = $db->getQuery(true);
             $query->select('st.' . $adapter->primarykey . ' AS sourceid, dt.' . $adapter->primarykey . ' AS newid');
             $query->from($from_table . ' AS st');
             $query->innerJoin($to_table . ' AS dt ON (st.' . $adapter->primarykey . ' = dt.' . $adapter->primarykey . ')');
             if (count($filter)) {
                 $query->where($filter);
             }
             $db->setQuery($query);
             $rows = $db->loadObjectList();
             if (count($rows)) {
                 foreach ($rows as $row) {
                     if (!isset($aMap[$row->sourceid])) {
                         $aMap[$row->sourceid] = array();
                     }
                     $aMap[$row->sourceid][$fromLangTag] = $row->sourceid;
                     $aMap[$row->sourceid][$this->toLangTag] = $row->newid;
                 }
             }
         } elseif ($adapter->table_type == 'table_ml') {
             $query = $db->getQuery(true);
             // content association
             $langField = $db->quoteName($adapter->language_field);
             $query->select('a.' . $adapter->primarykey . " AS sourceid, GROUP_CONCAT(l.lang_code, ',', a.{$adapter->primarykey} SEPARATOR '|') AS `data`")->from('#__' . $adapter->table . ' AS a');
             if ($adapter->language_mode == 'id') {
                 $query->innerJoin('#__languages AS l ON l.lang_id = a.' . $adapter->language_field);
             } else {
                 $query->innerJoin('#__languages AS l ON l.lang_code = a.' . $adapter->language_field);
             }
             $query->group('a.' . $adapter->primarykey);
             $db->setQuery($query);
             $rows = $db->loadObjectList();
             if (count($rows)) {
                 foreach ($rows as $row) {
                     if (!$row->data) {
                         continue;
                     }
                     $aMap[$row->sourceid] = array();
                     $data = explode('|', $row->data);
                     $assoc = array();
                     foreach ($data as $d) {
                         list($language, $contentid) = explode(',', $d);
                         if ($language != $fromLangTag) {
                             $aMap[$row->sourceid][$language] = $contentid;
                         }
                     }
                 }
             }
         } elseif ($adapter->table_type == 'alias') {
             $query = $db->getQuery(true);
             $query->select('a.lang_code, a.title, a.title_native')->from('#__languages AS a');
             $db->setQuery($query);
             $list = $db->loadObjectList();
             $languages = array();
             foreach ($list as $item) {
                 $lang_code = preg_replace('/\\-.*/', '', $item->lang_code);
                 $languages[$lang_code] = $item;
             }
             //
             $query = $db->getQuery(true);
             $query->select('*')->from('#__' . $adapter->table);
             if ($this->fromLangTag != '*') {
                 $lang_code = preg_replace('/\\-.*/', '', $this->fromLangTag);
                 if ($this->fromLangTag == $defaultLanguage) {
                     $query->where('(' . $db->quoteName($adapter->alias_field) . ' LIKE ' . $db->quote('%-' . $lang_code) . ' OR ' . $db->quoteName($adapter->alias_field) . ' NOT REGEXP ' . $db->quote('-[a-z]{2}$') . ')');
                 } else {
                     $query->where($db->quoteName($adapter->alias_field) . ' LIKE ' . $db->quote('%-' . $lang_code));
                 }
             } else {
                 $query->where($db->quoteName($adapter->alias_field) . ' NOT REGEXP ' . $db->quote('-[a-z]{2}$'));
             }
             $db->setQuery($query);
             $rows = $db->loadObjectList();
             if (count($rows)) {
                 foreach ($rows as $row) {
                     $sourceid = $row->{$adapter->primarykey};
                     if (!isset($aMap[$sourceid])) {
                         $aMap[$sourceid] = array();
                     }
                     $aMap[$sourceid][$this->fromLangTag] = $sourceid;
                     $alias = $row->{$adapter->alias_field};
                     if ($this->fromLangTag != '*') {
                         $lang_code = preg_replace('/\\-.*/', '', $this->fromLangTag);
                         $alias = preg_replace('/\\-' . $lang_code . '$/', '', $alias);
                     }
                     $query = $db->getQuery(true);
                     $query->select('*')->from('#__' . $adapter->table);
                     $where = array();
                     $where[] = $db->quoteName($adapter->alias_field) . ' = ' . $db->quote($alias);
                     $where[] = $db->quoteName($adapter->alias_field) . ' REGEXP ' . $db->quote($alias . '-[a-z]{2}$');
                     $query->where($where, 'OR');
                     $db->setQuery($query);
                     $rows2 = $db->loadObjectList();
                     if (count($rows2)) {
                         foreach ($rows2 as $row2) {
                             if ($alias == $row2->{$adapter->alias_field}) {
                                 $aMap[$sourceid]['*'] = $row2->{$adapter->primarykey};
                                 if (!isset($aMap[$sourceid][$defaultLanguage])) {
                                     $aMap[$sourceid][$defaultLanguage] = $row2->{$adapter->primarykey};
                                 }
                             } else {
                                 foreach ($languages as $lang_code => $item) {
                                     if ($alias . '-' . $lang_code == $row2->{$adapter->alias_field}) {
                                         $aMap[$sourceid][$item->lang_code] = $row2->{$adapter->primarykey};
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         } else {
             //table_type = native
             $query = $db->getQuery(true);
             // content association
             $langField = $db->quoteName($adapter->language_field);
             $query->select("a.key, GROUP_CONCAT(c.{$langField}, ',', c.id SEPARATOR '|') AS `data`");
             $query->from('#__associations AS a');
             $query->innerJoin('#__' . $table . ' AS c ON  (a.id=c.' . $id . ' AND a.context = ' . $db->quote($context) . ')');
             $query->group('a.key');
             $db->setQuery($query);
             $rows = $db->loadObjectList();
             if (count($rows)) {
                 foreach ($rows as $row) {
                     if (!$row->data) {
                         continue;
                     }
                     $data = explode('|', $row->data);
                     $assoc = array();
                     foreach ($data as $d) {
                         list($language, $contentid) = explode(',', $d);
                         $assoc[$language] = $contentid;
                         if ($language == '*' && !isset($assoc[$defaultLanguage])) {
                             $assoc[$defaultLanguage] = $contentid;
                         }
                     }
                     if (isset($assoc[$fromLangTag])) {
                         $aMap[$assoc[$fromLangTag]] = $assoc;
                     }
                 }
             }
         }
     }
     //return @$this->aAssociation[$table];
 }
Exemple #7
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;
 }