/** * 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; }
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();
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'); }
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? }
/** * 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]; }
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; }