示例#1
0
文件: file.php 项目: andresmaeso/neno
 /**
  * Load Extra data
  *
  * @return void
  */
 protected function loadExtraData()
 {
     $workingLanguage = NenoHelper::getWorkingLanguage();
     $db = JFactory::getDbo();
     $query = $db->getQuery(true);
     $query->select(array('SUM(word_counter) AS counter', 'tr.state'))->from('#__neno_content_element_translations as tr')->innerJoin('#__neno_content_element_language_strings AS ls ON tr.content_id = ls.id')->innerJoin('#__neno_content_element_language_files AS lf ON lf.id = ls.languagefile_id')->where(array('content_type = ' . $db->quote('lang_string'), 'lf.id = ' . $this->getId(), 'tr.language = ' . $db->quote($workingLanguage)))->group('tr.state');
     $db->setQuery($query);
     $statistics = $db->loadAssocList('state');
     $wordCount = new stdClass();
     $wordCount->untranslated = 0;
     $wordCount->queued = 0;
     $wordCount->changed = 0;
     $wordCount->translated = 0;
     // Assign the statistics
     foreach ($statistics as $state => $data) {
         switch ($state) {
             case NenoContentElementTranslation::NOT_TRANSLATED_STATE:
                 $wordCount->untranslated = (int) $data['counter'];
                 break;
             case NenoContentElementTranslation::QUEUED_FOR_BEING_TRANSLATED_STATE:
                 $wordCount->queued = (int) $data['counter'];
                 break;
             case NenoContentElementTranslation::SOURCE_CHANGED_STATE:
                 $wordCount->changed = (int) $data['counter'];
                 break;
             case NenoContentElementTranslation::TRANSLATED_STATE:
                 $wordCount->translated = (int) $data['counter'];
                 break;
         }
     }
     $wordCount->total = $wordCount->untranslated + $wordCount->queued + $wordCount->changed + $wordCount->translated;
     $this->wordCount = $wordCount;
 }
示例#2
0
 /**
  * {@inheritdoc}
  *
  * @param   boolean $cachable  If Joomla should cache the response
  * @param   array   $urlParams URL parameters
  *
  * @return JController
  */
 public function display($cachable = false, $urlParams = array())
 {
     $input = $this->input;
     $view = $input->getCmd('view', 'dashboard');
     $app = JFactory::getApplication();
     if (NenoSettings::get('installation_completed') != 1 && $view != 'installation' && $view != 'debug' && $app->isAdmin()) {
         if ($view != 'dashboard') {
             $app->enqueueMessage(JText::_('COM_NENO_INSTALLATION_ERROR'), 'error');
         }
         $app->redirect('index.php?option=com_neno&view=installation');
     }
     $input->set('view', $view);
     // Ensure that a working language is set for some views
     $viewsThatRequireWorkingLanguage = array('groupselements', 'editor', 'strings');
     $showLanguagesDropDown = false;
     if (in_array($view, $viewsThatRequireWorkingLanguage)) {
         // Get working language
         $workingLanguage = NenoHelper::getWorkingLanguage();
         $languages = JFactory::getLanguage()->getKnownLanguages();
         $showLanguagesDropDown = true;
         if (empty($workingLanguage) || !in_array($workingLanguage, array_keys($languages))) {
             $url = JRoute::_('index.php?option=com_neno&view=setworkinglang&next=' . $view, false);
             $this->setRedirect($url);
             $this->redirect();
         }
     }
     NenoHelperBackend::setAdminTitle($showLanguagesDropDown);
     parent::display($cachable, $urlParams);
     return $this;
 }
示例#3
0
文件: editor.php 项目: javigomez/neno
 /**
  * Method to handle ajax call for google translation
  *
  * @return string
  */
 public function translate()
 {
     $app = JFactory::getApplication();
     $input = $app->input;
     $text = html_entity_decode($input->getHtml('text'));
     $workingLanguage = NenoHelper::getWorkingLanguage();
     $defaultLanguage = NenoSettings::get('source_language');
     $translator = NenoSettings::get('translator');
     $result = array();
     try {
         /* @var $nenoTranslate NenoTranslateApi */
         $nenoTranslate = NenoTranslateApi::getAdapter($translator);
         try {
             $result['text'] = $nenoTranslate->translate($text, $defaultLanguage, $workingLanguage);
             $result['status'] = 'ok';
         } catch (Exception $e) {
             $result['text'] = $text;
             $result['status'] = 'err';
             $result['error'] = $e->getMessage();
         }
     } catch (UnexpectedValueException $e) {
         $result['text'] = $text;
         $result['status'] = 'err';
         $result['error'] = $e->getMessage();
     }
     echo json_encode($result);
     $app->close();
 }
示例#4
0
 *
 * @author      Jensen Technologies S.L. <*****@*****.**>
 * @copyright   Copyright (C) 2014 Jensen Technologies S.L. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */
// No direct access
defined('_JEXEC') or die;
JHtml::_('bootstrap.tooltip');
JHtml::_('behavior.multiselect');
// Include the CSS file
JHtml::stylesheet('media/neno/css/admin.css');
// Joomla Component Creator code to allow adding non select list filters
if (!empty($this->extraSidebar)) {
    $this->sidebar .= $this->extraSidebar;
}
$workingLanguage = NenoHelper::getWorkingLanguage();
?>

<style>

	.toggler {
		cursor: pointer;
		width: 18px;
		border: 0;
		padding: 10px 0 0 0 !important;

	}

	.toggler .icon-arrow-right-3,
	.toggler .icon-arrow-down-3 {
		color: #08c;
示例#5
0
 /**
  * Get an object with the amount of words per state
  *
  * @return stdClass
  */
 public function getWordCount()
 {
     if ($this->wordCount === null) {
         $this->wordCount = new stdClass();
         $this->wordCount->total = 0;
         $this->wordCount->untranslated = 0;
         $this->wordCount->translated = 0;
         $this->wordCount->queued = 0;
         $this->wordCount->changed = 0;
         $db = JFactory::getDbo();
         $query = $db->getQuery(true);
         $workingLanguage = NenoHelper::getWorkingLanguage();
         $query->select(array('SUM(word_counter) AS counter', 't.state'))->from($db->quoteName(NenoContentElementLanguageString::getDbTable()) . ' AS ls')->innerJoin($db->quoteName(NenoContentElementLanguageFile::getDbTable()) . ' AS lf ON ls.languagefile_id = lf.id')->innerJoin($db->quoteName(NenoContentElementTranslation::getDbTable()) . ' AS t ON t.content_id = ls.id AND t.content_type = ' . $db->quote('lang_string') . ' AND t.language LIKE ' . $db->quote($workingLanguage))->where('lf.group_id = ' . $this->getId())->group('t.state');
         $db->setQuery($query);
         $statistics = $db->loadAssocList('state');
         // Assign the statistics
         foreach ($statistics as $state => $data) {
             switch ($state) {
                 case NenoContentElementTranslation::NOT_TRANSLATED_STATE:
                     $this->wordCount->untranslated = (int) $data['counter'];
                     break;
                 case NenoContentElementTranslation::QUEUED_FOR_BEING_TRANSLATED_STATE:
                     $this->wordCount->queued = (int) $data['counter'];
                     break;
                 case NenoContentElementTranslation::SOURCE_CHANGED_STATE:
                     $this->wordCount->changed = (int) $data['counter'];
                     break;
                 case NenoContentElementTranslation::TRANSLATED_STATE:
                     $this->wordCount->translated = (int) $data['counter'];
                     break;
             }
         }
         $query->clear()->select(array('SUM(word_counter) AS counter', 'tr.state'))->from('#__neno_content_element_tables AS t')->innerJoin('#__neno_content_element_fields AS f ON f.table_id = t.id')->innerJoin('#__neno_content_element_translations AS tr  ON tr.content_id = f.id AND tr.content_type = ' . $db->quote('db_string') . ' AND tr.language LIKE ' . $db->quote($workingLanguage))->where(array('t.group_id = ' . $this->getId(), 't.translate IN (1,2)', 'f.translate = 1'))->group('tr.state');
         $db->setQuery($query);
         $statistics = $db->loadAssocList('state');
         // Assign the statistics
         foreach ($statistics as $state => $data) {
             switch ($state) {
                 case NenoContentElementTranslation::NOT_TRANSLATED_STATE:
                     $this->wordCount->untranslated = (int) $data['counter'] + $this->wordCount->untranslated;
                     break;
                 case NenoContentElementTranslation::QUEUED_FOR_BEING_TRANSLATED_STATE:
                     $this->wordCount->queued = (int) $data['counter'] + $this->wordCount->queued;
                     break;
                 case NenoContentElementTranslation::SOURCE_CHANGED_STATE:
                     $this->wordCount->changed = (int) $data['counter'] + $this->wordCount->changed;
                     break;
                 case NenoContentElementTranslation::TRANSLATED_STATE:
                     $this->wordCount->translated = (int) $data['counter'] + $this->wordCount->translated;
                     break;
             }
         }
         $this->wordCount->total = $this->wordCount->untranslated + $this->wordCount->queued + $this->wordCount->changed + $this->wordCount->translated;
     }
     return $this->wordCount;
 }
示例#6
0
 /**
  * Create the HTML for the fairly advanced title that allows changing the language you are working in
  *
  * @param   boolean $showLanguageDropDown If we should show the languages dropdown
  *
  * @return string
  */
 public static function setAdminTitle($showLanguageDropDown = false)
 {
     $app = JFactory::getApplication();
     $view = $app->input->getCmd('view', '');
     $document = $app->getDocument();
     $currentTitle = $document->getTitle();
     $document->setTitle($currentTitle . ' - ' . JText::_('COM_NENO_TITLE_' . strtoupper($view)));
     // If there is a language constant then start with that
     $displayData = array('view' => $view);
     if ($showLanguageDropDown) {
         $displayData['workingLanguage'] = NenoHelper::getWorkingLanguage();
         $displayData['targetLanguages'] = NenoHelper::getLanguages(false, false);
     }
     $adminTitleLayout = JLayoutHelper::render('toolbar', $displayData, JPATH_NENO_LAYOUTS);
     $layout = new JLayoutFile('joomla.toolbar.title');
     $html = $layout->render(array('title' => $adminTitleLayout, 'icon' => 'nope'));
     $app->JComponentTitle = $html;
 }
示例#7
0
 public function refreshWordCount()
 {
     $input = $this->input;
     // Refresh content for groups
     $groups = $input->get('groups', array(), 'ARRAY');
     $tables = $input->get('tables', array(), 'ARRAY');
     $files = $input->get('files', array(), 'ARRAY');
     $workingLanguage = NenoHelper::getWorkingLanguage();
     /* @var $db NenoDatabaseDriverMysqlx */
     $db = JFactory::getDbo();
     $query = $db->getQuery(true);
     $query->select('tr.id')->from('#__neno_content_element_translations AS tr')->innerJoin('#__neno_content_element_fields AS f ON tr.content_id = f.id')->innerJoin('#__neno_content_element_tables AS t ON t.id = f.table_id')->where(array('tr.state = ' . $db->quote(NenoContentElementTranslation::TRANSLATED_STATE), 'tr.language = ' . $db->quote($workingLanguage)));
     if (!empty($groups)) {
         $query->innerJoin('#__neno_content_element_groups AS g ON t.group_id = g.id')->where('g.id IN (' . implode(',', $db->quote($groups)) . ')');
     } elseif (!empty($tables) || !empty($files)) {
         $where = array();
         if (!empty($tables)) {
             $where[] = '(t.id IN (' . implode(',', $db->quote($tables)) . ') AND tr.content_type = ' . $db->quote(NenoContentElementTranslation::DB_STRING) . ')';
         }
         if (!empty($files)) {
             $where[] = '(t.id IN (' . implode(',', $db->quote($tables)) . ') AND tr.content_type = ' . $db->quote(NenoContentElementTranslation::LANG_STRING) . ')';
         }
         $query->where('(' . implode(' OR ', $where) . ')');
     }
     $db->setQuery($query);
     $translationIds = $db->loadArray();
     foreach ($translationIds as $translationId) {
         /* @var $translation NenoContentElementTranslation */
         $translation = NenoContentElementTranslation::load($translationId, false, true);
         $translation->persist();
     }
     JFactory::getApplication()->redirect('index.php?option=com_neno&view=groupselements');
 }
示例#8
0
 /**
  * Get languages
  *
  * @return array
  */
 public function getLanguages()
 {
     $languages = NenoHelper::getLanguages(false);
     $workingLanguage = NenoHelper::getWorkingLanguage();
     $defaultLanguage = NenoSettings::get('source_language');
     foreach ($languages as $key => $language) {
         if ($language->lang_code == $workingLanguage || $language->lang_code == $defaultLanguage) {
             unset($languages[$key]);
         }
     }
     return $languages;
 }
示例#9
0
 /**
  * Consolidate translation methods
  *
  * @param   int  $groupId                  Group Id
  * @param   bool $deleteTranslationMethods Delete previous translation methods
  *
  * @return void
  */
 public static function consolidateTranslationMethods($groupId, $deleteTranslationMethods = false)
 {
     $db = JFactory::getDbo();
     $subQuery = $db->getQuery(true);
     $workingLanguage = NenoHelper::getWorkingLanguage();
     if ($deleteTranslationMethods) {
         $subQuery->select('DISTINCT tr.id')->from('#__neno_content_element_translations AS tr')->innerJoin('#__neno_content_element_fields AS f ON tr.content_id = f.id')->innerJoin('#__neno_content_element_tables AS t ON f.table_id = t.id')->innerJoin('#__neno_content_element_groups AS g ON g.id = t.group_id')->where(array('tr.state = ' . NenoContentElementTranslation::NOT_TRANSLATED_STATE, 'tr.content_type = ' . $db->quote('db_string'), 'tr.language = ' . $db->quote($workingLanguage), 'g.id = ' . (int) $groupId));
         $query = $db->getQuery(true);
         $query->delete('#__neno_content_element_translation_x_translation_methods')->where('translation_id IN (' . (string) $subQuery . ')');
         $db->setQuery($query);
         $db->execute();
         $subQuery->clear()->select('DISTINCT tr.id')->from('#__neno_content_element_translations AS tr')->innerJoin('#__neno_content_element_language_strings AS ls ON tr.content_id = ls.id')->innerJoin('#__neno_content_element_language_files AS lf ON ls.languagefile_id = lf.id')->innerJoin('#__neno_content_element_groups AS g ON g.id = lf.group_id')->leftJoin('#__neno_content_element_groups_x_translation_methods AS gtm ON g.id = gtm.group_id AND tr.language = gtm.lang')->where(array('tr.state = ' . NenoContentElementTranslation::NOT_TRANSLATED_STATE, 'tr.content_type = ' . $db->quote('db_string'), 'tr.language = ' . $db->quote($workingLanguage), 'g.id = ' . (int) $groupId));
         $query->clear('where')->where('translation_id IN (' . (string) $subQuery . ')');
         $db->setQuery($query);
         $db->execute();
     } else {
         $subQuery2 = $db->getQuery(true);
         $subQuery2->select('1')->from('#__neno_content_element_translation_x_translation_methods AS trtm')->innerJoin('#__neno_translation_methods AS tm ON trtm.translation_method_id = tm.id')->where(array('trtm.translation_id = tr.id', 'FIND_IN_SET(gtm.translation_method_id,tm.acceptable_follow_up_method_ids)'));
         // For database strings
         $subQuery->select(array('tr.id', 'gtm.translation_method_id', 'gtm.ordering'))->from('#__neno_content_element_translations AS tr')->innerJoin('#__neno_content_element_fields AS f ON tr.content_id = f.id')->innerJoin('#__neno_content_element_tables AS t ON f.table_id = t.id')->innerJoin('#__neno_content_element_groups AS g ON g.id = t.group_id')->leftJoin('#__neno_content_element_groups_x_translation_methods AS gtm ON g.id = gtm.group_id AND tr.language = gtm.lang')->where(array('tr.state = ' . NenoContentElementTranslation::NOT_TRANSLATED_STATE, 'tr.content_type = ' . $db->quote('db_string'), 'tr.language = ' . $db->quote($workingLanguage), 'g.id = ' . (int) $groupId));
         $query = 'REPLACE INTO #__neno_content_element_translation_x_translation_methods (translation_id,translation_method_id,ordering) (' . (string) $subQuery . ')';
         $db->setQuery($query);
         $db->execute();
         $subQuery->clear()->select(array('tr.id', 'gtm.translation_method_id', 'gtm.ordering'))->from('#__neno_content_element_translations AS tr')->innerJoin('#__neno_content_element_fields AS f ON tr.content_id = f.id')->innerJoin('#__neno_content_element_tables AS t ON f.table_id = t.id')->innerJoin('#__neno_content_element_groups AS g ON g.id = t.group_id')->leftJoin('#__neno_content_element_groups_x_translation_methods AS gtm ON g.id = gtm.group_id AND tr.language = gtm.lang')->where(array('tr.state = ' . NenoContentElementTranslation::TRANSLATED_STATE, 'tr.content_type = ' . $db->quote('db_string'), 'tr.language = ' . $db->quote($workingLanguage), 'g.id = ' . (int) $groupId, 'gtm.ordering > 1', 'EXISTS (' . (string) $subQuery2 . ' )'));
         $query = 'REPLACE INTO #__neno_content_element_translation_x_translation_methods (translation_id,translation_method_id,ordering) (' . (string) $subQuery . ')';
         $db->setQuery($query);
         $db->execute();
         $subQuery->clear()->select(array('tr.id', 'gtm.translation_method_id', 'gtm.ordering'))->from('#__neno_content_element_translations AS tr')->innerJoin('#__neno_content_element_language_strings AS ls ON tr.content_id = ls.id')->innerJoin('#__neno_content_element_language_files AS lf ON ls.languagefile_id = lf.id')->innerJoin('#__neno_content_element_groups AS g ON g.id = lf.group_id')->leftJoin('#__neno_content_element_groups_x_translation_methods AS gtm ON g.id = gtm.group_id AND tr.language = gtm.lang')->where(array('tr.state = ' . NenoContentElementTranslation::NOT_TRANSLATED_STATE, 'tr.content_type = ' . $db->quote('db_string'), 'tr.language = ' . $db->quote($workingLanguage), 'g.id = ' . (int) $groupId));
         $query = 'REPLACE INTO #__neno_content_element_translation_x_translation_methods (translation_id,translation_method_id,ordering) (' . (string) $subQuery . ')';
         $db->setQuery($query);
         $db->execute();
         $subQuery->clear()->select(array('tr.id', 'gtm.translation_method_id', 'gtm.ordering'))->from('#__neno_content_element_translations AS tr')->innerJoin('#__neno_content_element_language_strings AS ls ON tr.content_id = ls.id')->innerJoin('#__neno_content_element_language_files AS lf ON ls.languagefile_id = lf.id')->innerJoin('#__neno_content_element_groups AS g ON g.id = lf.group_id')->leftJoin('#__neno_content_element_groups_x_translation_methods AS gtm ON g.id = gtm.group_id AND tr.language = gtm.lang')->where(array('tr.state = ' . NenoContentElementTranslation::TRANSLATED_STATE, 'tr.content_type = ' . $db->quote('db_string'), 'tr.language = ' . $db->quote($workingLanguage), 'g.id = ' . (int) $groupId, 'gtm.ordering > 1', 'EXISTS (' . (string) $subQuery2 . ' )'));
         $query = 'REPLACE INTO #__neno_content_element_translation_x_translation_methods (translation_id,translation_method_id,ordering) (' . (string) $subQuery . ')';
         $db->setQuery($query);
         $db->execute();
     }
 }
示例#10
0
 /**
  * Get an object with the amount of words per state
  *
  * @return stdClass
  */
 public function getWordCount()
 {
     if ($this->wordCount === null) {
         $cacheId = NenoCache::getCacheId(get_called_class() . '.' . __FUNCTION__, array($this->getId()));
         $cacheData = NenoCache::getCacheData($cacheId);
         if ($cacheData === null) {
             $this->wordCount = new stdClass();
             $this->wordCount->total = 0;
             $this->wordCount->untranslated = 0;
             $this->wordCount->translated = 0;
             $this->wordCount->queued = 0;
             $this->wordCount->changed = 0;
             $db = JFactory::getDbo();
             $query = $db->getQuery(true);
             $workingLanguage = NenoHelper::getWorkingLanguage();
             $query->select(array('SUM(word_counter) AS counter', 'tr.state'))->from('#__neno_content_element_translations AS tr')->where(array('tr.content_type = ' . $db->quote('db_string'), 'tr.language LIKE ' . $db->quote($workingLanguage), 'tr.content_id = ' . $this->getId()))->group('tr.state');
             $db->setQuery($query);
             $statistics = $db->loadAssocList('state');
             // Assign the statistics
             foreach ($statistics as $state => $data) {
                 switch ($state) {
                     case NenoContentElementTranslation::NOT_TRANSLATED_STATE:
                         $this->wordCount->untranslated = (int) $data['counter'];
                         break;
                     case NenoContentElementTranslation::QUEUED_FOR_BEING_TRANSLATED_STATE:
                         $this->wordCount->queued = (int) $data['counter'];
                         break;
                     case NenoContentElementTranslation::SOURCE_CHANGED_STATE:
                         $this->wordCount->changed = (int) $data['counter'];
                         break;
                     case NenoContentElementTranslation::TRANSLATED_STATE:
                         $this->wordCount->translated = (int) $data['counter'];
                         break;
                 }
             }
             $this->wordCount->total = $this->wordCount->untranslated + $this->wordCount->queued + $this->wordCount->changed + $this->wordCount->translated;
             $cacheData = $this->wordCount;
             NenoCache::setCacheData($cacheId, $cacheData);
         }
         $this->wordCount = $cacheData;
     }
     return $this->wordCount;
 }
示例#11
0
 /**
  * Build an SQL query to load the list data.
  *
  * @return    JDatabaseQuery
  *
  * @since    1.6
  */
 protected function getListQuery()
 {
     $db = JFactory::getDbo();
     $workingLanguage = NenoHelper::getWorkingLanguage();
     // Create a new query object.
     $dbStrings = parent::getListQuery();
     $languageFileStrings = parent::getListQuery();
     $dbStrings->select(array('tr1.*', 'f.field_name AS `key`', 't.table_name AS element_name', 'g1.group_name AS `group`', 'CHAR_LENGTH(tr1.string) AS characters'))->from('`#__neno_content_element_translations` AS tr1')->innerJoin('`#__neno_content_element_fields` AS f ON tr1.content_id = f.id')->innerJoin('`#__neno_content_element_tables` AS t ON t.id = f.table_id')->innerJoin('`#__neno_content_element_groups` AS g1 ON t.group_id = g1.id ')->where(array('tr1.language = ' . $db->quote($workingLanguage), 'tr1.content_type = ' . $db->quote('db_string'), 'f.translate = 1'))->group(array('HEX(tr1.string)', 'tr1.state'))->order('tr1.id');
     $languageFileStrings->select(array('tr2.*', 'ls.constant AS `key`', 'lf.filename AS element_name', 'g2.group_name AS `group`', 'CHAR_LENGTH(tr2.string) AS characters'))->from('`#__neno_content_element_translations` AS tr2')->innerJoin('`#__neno_content_element_language_strings` AS ls ON tr2.content_id = ls.id')->innerJoin('`#__neno_content_element_language_files` AS lf ON lf.id = ls.languagefile_id')->innerJoin('`#__neno_content_element_groups` AS g2 ON lf.group_id = g2.id ')->where(array('tr2.language = ' . $db->quote($workingLanguage), 'tr2.content_type = ' . $db->quote('lang_string')))->group(array('HEX(tr2.string)', 'tr2.state'))->order('tr2.id');
     $queryWhereDb = array();
     /* @var $groups array */
     $groups = $this->getState('filter.group_id', array());
     /* @var $element array */
     $element = $this->getState('filter.element', array());
     /* @var $field array */
     $field = $this->getState('filter.field', array());
     /* @var $file array */
     $file = $this->getState('filter.files', array());
     $groupIdAdded = false;
     if (!is_array($groups)) {
         $groups = array($groups);
     }
     if (!empty($groups) && !in_array('none', $groups)) {
         $queryWhereDb[] = 't.group_id IN (' . implode(', ', $groups) . ')';
         $languageFileStrings->where('lf.group_id IN (' . implode(', ', $groups) . ')');
     }
     if (!empty($element)) {
         if ($groupIdAdded === false) {
             $languageFileStrings->select('g2.id AS group_id');
             $dbStrings->select('g1.id AS group_id');
             $groupIdAdded = true;
         }
         $queryWhereDb[] = 't.id IN (' . implode(', ', $element) . ')';
         // Do not show any strings for this language file
         if (empty($file)) {
             $languageFileStrings->where('lf.id = 0');
         }
     }
     if (!empty($field)) {
         if ($groupIdAdded === false) {
             $languageFileStrings->select('g2.id AS group_id');
             $dbStrings->select('g1.id AS group_id');
         }
         // Do not show any strings for this language file
         if (empty($file)) {
             $languageFileStrings->where('lf.id = 0');
         }
         $queryWhereDb[] = 'f.id IN (' . implode(', ', $field) . ')';
     }
     if (!empty($file)) {
         $languageFileStrings->where('lf.id IN (' . implode(',', $file) . ')');
         if (empty($field) && empty($element)) {
             $queryWhereDb[] = 'f.id = 0 AND t.id = 0';
         }
     }
     if (count($queryWhereDb)) {
         $dbStrings->where('(' . implode(' OR ', $queryWhereDb) . ')');
     }
     $method = (array) $this->getState('filter.translator_type', array());
     if (!empty($method) && !in_array('none', $method)) {
         $dbStrings->where('tr_x_tm1.translation_method_id IN ("' . implode('", "', $method) . '")')->leftJoin('`#__neno_content_element_translation_x_translation_methods` AS tr_x_tm1 ON tr1.id = tr_x_tm1.translation_id');
         $languageFileStrings->where('tr_x_tm2.translation_method_id IN ("' . implode('", "', $method) . '")')->leftJoin('`#__neno_content_element_translation_x_translation_methods` AS tr_x_tm2 ON tr2.id = tr_x_tm2.translation_id');
     }
     $status = (array) $this->getState('filter.translation_status', array());
     if (!empty($status) && $status[0] !== '' && !in_array('none', $status)) {
         $dbStrings->where('tr1.state IN (' . implode(', ', $status) . ')');
         $languageFileStrings->where('tr2.state IN (' . implode(', ', $status) . ')');
     }
     // Hide empty strings if the user wants to do that
     if (NenoSettings::get('hide_empty_strings', true)) {
         $dbStrings->where('tr1.original_text <> ' . $db->quote(''));
         $languageFileStrings->where('tr2.original_text <> ' . $db->quote(''));
     }
     $query = parent::getListQuery();
     $query->select('DISTINCT *')->from('((' . (string) $dbStrings . ') UNION (' . (string) $languageFileStrings . ')) AS a')->group('id');
     $search = $this->getState('filter.search');
     if (!empty($search)) {
         $search = $db->quote('%' . $search . '%');
         $query->where('(a.original_text LIKE ' . $search . ' OR a.string LIKE ' . $search . ')');
     }
     // Add the list ordering clause.
     $orderCol = $this->state->get('list.ordering');
     $orderDirection = $this->state->get('list.direction');
     if ($orderCol && $orderDirection) {
         $query->order($db->escape($orderCol . ' ' . $orderDirection));
     }
     return $query;
 }