Beispiel #1
0
 /**
  * Consolidate Translation
  *
  * @param   int $translationId Translation id
  *
  * @return bool True on success
  */
 public function consolidateTranslations($translationId)
 {
     /* @var $translation NenoContentElementTranslation */
     $translation = NenoContentElementTranslation::load($translationId);
     $db = JFactory::getDbo();
     $query = $db->getQuery(true);
     if (!empty($translation)) {
         $translationsToConsolidate = NenoContentElementTranslation::load(array('original_text' => $translation->getOriginalText(), 'language' => $translation->getLanguage(), 'id' => array('_field' => 'id', '_condition' => '<>', '_value' => $translation->getId())));
         /* @var $translationToConsolidate NenoContentElementTranslation */
         foreach ($translationsToConsolidate as $translationToConsolidate) {
             $translationToConsolidate->setString($translation->getString())->setState(NenoContentElementTranslation::TRANSLATED_STATE)->persist();
         }
     }
     return true;
 }
Beispiel #2
0
 /**
  * Consolidate Translation
  *
  * @param   int $translationId Translation id
  *
  * @return bool True on success
  */
 public function consolidateTranslations($translationId)
 {
     /* @var $translation NenoContentElementTranslation */
     $translation = NenoContentElementTranslation::load($translationId, false, true);
     if (!empty($translation)) {
         $translationsToConsolidate = NenoContentElementTranslation::load(array('original_text' => $translation->getOriginalText(), 'language' => $translation->getLanguage(), 'id' => array('_field' => 'id', '_condition' => '<>', '_value' => $translation->getId())), false, true);
         // Making sure that is an array
         if (!is_array($translationsToConsolidate)) {
             $translationsToConsolidate = array($translationsToConsolidate);
         }
         /* @var $translationToConsolidate NenoContentElementTranslation */
         foreach ($translationsToConsolidate as $translationToConsolidate) {
             $translationToConsolidate->setString($translation->getString())->setState(NenoContentElementTranslation::TRANSLATED_STATE)->persist();
         }
     }
     return true;
 }
Beispiel #3
0
 /**
  * Trash translations when the user click on the trash button
  *
  * @param NenoContentElementTable $table Table where the element was trashed
  * @param mixed                   $pk    Primary key value
  *
  * @return void
  */
 protected function trashTranslations(NenoContentElementTable $table, $pk)
 {
     $db = JFactory::getDbo();
     $primaryKeys = $table->getPrimaryKeys();
     $query = $db->getQuery(true);
     $query->select('tr.id')->from('#__neno_content_element_translations AS tr');
     /* @var $primaryKey NenoContentElementField */
     foreach ($primaryKeys as $key => $primaryKey) {
         $alias = 'ft' . $key;
         $query->where("exists(SELECT 1 FROM #__neno_content_element_fields_x_translations AS {$alias} WHERE {$alias}.translation_id = tr.id AND {$alias}.field_id = " . $primaryKey->getId() . " AND {$alias}.value = " . $db->quote($pk) . ")");
     }
     $db->setQuery($query);
     $translationIds = $db->loadColumn();
     foreach ($translationIds as $translationId) {
         /* @var $translation NenoContentElementTranslation */
         $translation = NenoContentElementTranslation::load($translationId);
         $translation->remove();
     }
 }
Beispiel #4
0
 public function saveExternalTranslatorsComment()
 {
     $input = $this->input;
     $placement = $input->post->getString('placement');
     $comment = $input->post->getHtml('comment', '');
     $result = false;
     $db = JFactory::getDbo();
     $query = $db->getQuery(true);
     switch ($placement) {
         case 'general':
             NenoSettings::set('external_translators_notes', $comment);
             $result = true;
             break;
         case 'language':
             $language = $input->post->getString('language');
             $query->select('*')->from('#__neno_language_external_translators_comments')->where('language = ' . $db->quote($language));
             $db->setQuery($query);
             $languageComment = $db->loadObject();
             if (empty($languageComment)) {
                 $languageComment = new stdClass();
                 $languageComment->language = $language;
             }
             $languageComment->comment = $comment;
             if (empty($languageComment->id)) {
                 $db->insertObject('#__neno_language_external_translators_comments', $languageComment, 'id');
             } else {
                 $db->updateObject('#__neno_language_external_translators_comments', $languageComment, 'id');
             }
             $result = true;
             break;
         case 'string':
             $translationId = $input->post->getInt('stringId');
             /* @var $translation NenoContentElementTranslation */
             $translation = NenoContentElementTranslation::load($translationId, false, true);
             $result = $translation->setComment($comment)->persist();
             $allTranslations = $input->post->getBool('alltranslations', false);
             if ($allTranslations) {
                 $contentId = $input->post->getInt('contentId');
                 if (!empty($contentId)) {
                     $query->update('#__neno_content_element_translations')->set('comment = ' . $db->quote($comment))->where(array('content_id = ' . $db->quote($contentId), 'content_type = ' . $db->quote($translation->getContentType()), 'language = ' . $db->quote($translation->getLanguage())));
                     $db->setQuery($query);
                     $db->execute();
                     $query->clear();
                     if ($translation->getContentType() == NenoContentElementTranslation::DB_STRING) {
                         $query->update('#__neno_content_element_fields');
                     } else {
                         $query->update('#__neno_content_element_language_strings');
                     }
                     // Saving this comment for the future
                     $query->set('comment = ' . $db->quote($comment))->where('id = ' . $db->quote($contentId));
                     $db->setQuery($query);
                     $db->execute();
                 }
             }
             break;
     }
     echo $result ? 'ok' : 'err';
     JFactory::getApplication()->close();
 }
Beispiel #5
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');
 }
Beispiel #6
0
 /**
  * Process a file
  *
  * @return bool True on success, false otherwise
  */
 public function processJobFinished()
 {
     $config = JFactory::getConfig();
     $tmpPath = $config->get('tmp_path');
     $filename = $this->getFileName();
     $fileContents = json_decode(file_get_contents($tmpPath . '/' . $filename . '.json' . '/' . $filename . '.json'), true);
     if ($fileContents !== null) {
         foreach ($fileContents['strings'] as $translationId => $translationText) {
             /* @var $translation NenoContentElementTranslation */
             $translation = NenoContentElementTranslation::load($translationId);
             $translation->setString($translationText);
             // Mark this translation method as completed
             $translation->markTranslationMethodAsCompleted($this->translationMethod->id);
             if ($translation->isBeingCompleted()) {
                 $translation->setState(NenoContentElementTranslation::TRANSLATED_STATE);
             }
             $translation->persist();
         }
         return true;
     }
     return false;
 }
Beispiel #7
0
 /**
  * Save translation as completed
  *
  * @return void
  */
 public function saveAsCompleted()
 {
     $input = $this->input;
     $translationId = $input->getInt('id');
     $translationText = $input->get('text', '', 'RAW');
     if ($this->saveTranslation($translationId, $translationText, NenoContentElementTranslation::TRANSLATED_STATE)) {
         /* @var $translation NenoContentElementTranslation */
         $translation = NenoContentElementTranslation::load($translationId, false);
         $data = array('translation' => $translation->prepareDataForView());
         $original_text = $translation->getOriginalText();
         $model = $this->getModel();
         $counter = $model->getSimilarTranslationsCounter($translationId, $translation->getLanguage(), $original_text);
         if ($counter != 0) {
             $data['message'] = JText::sprintf('COM_NENO_EDITOR_CONSOLIDATE_MESSAGE', $counter, NenoHelper::html2text($original_text, 200), NenoHelper::html2text($translationText, 200));
             $data['counter'] = $counter;
         }
         echo json_encode($data);
     }
     JFactory::getApplication()->close();
 }
Beispiel #8
0
 /**
  * Apply filter to existing translations
  *
  * @return void
  */
 public function applyFiltersToExistingContent()
 {
     $db = JFactory::getDbo();
     $query = $db->getQuery(true);
     $query->select('t.id')->from('#__neno_content_element_translations AS t')->where(array('t.content_type = ' . $db->quote('db_string'), 'EXISTS (SELECT 1 FROM #__neno_content_element_fields AS f ON t.content_id = f.id WHERE f.table_id = ' . (int) $this->id . ')'));
     $db->setQuery($query);
     $translationIds = $db->loadColumn();
     $filters = $this->getTableFilters();
     foreach ($translationIds as $translationId) {
         /* @var $translation NenoContentElementTranslation */
         $translation = NenoContentElementTranslation::load($translationId, false, true);
         $sqlQuery = $translation->generateSQLStatement();
         $sqlQuery->clear('select')->select('1');
         foreach ($filters as $filter) {
             $query->where($db->quoteName($filter['field']) . ' ' . $filter['operator'] . ' ' . $db->quote($filter['value']));
         }
         $db->setQuery($query);
         $result = $db->loadResult();
         // If the translation does not meet this requirements, let's delete it
         if (empty($result)) {
             $translation->remove();
         }
     }
 }
Beispiel #9
0
 /**
  * Save translation as completed
  *
  * @return void
  */
 public function saveAllAsCompleted()
 {
     // Get input and turn it into an array with objects
     $input = $this->input;
     $stringsJson = $input->get('strings', '', 'RAW');
     $strings = json_decode($stringsJson);
     // Create an array to hold info about the translations
     $messages = array();
     if (!empty($strings) && count($strings) > 0) {
         $checkedStrings = array();
         foreach ($strings as $string) {
             $string->text = NenoHelper::cleanXssString($string->text);
             // Save the translation
             if ($this->saveTranslation($string->translation_id, $string->text, NenoContentElementTranslation::TRANSLATED_STATE)) {
                 /* @var $translation NenoContentElementTranslation */
                 $translation = NenoContentElementTranslation::load($string->translation_id, false);
                 // Check for number of same translations to offer consolidation
                 // Only check for one string once
                 $counter = 0;
                 $originalText = $translation->getOriginalText();
                 if (in_array(strtolower(trim($originalText)), $checkedStrings) === false) {
                     $checkedStrings[] = strtolower(trim($originalText));
                     $model = $this->getModel();
                     $counter = $model->getSimilarTranslationsCounter($string->translation_id, $translation->getLanguage(), $originalText);
                 }
                 // If we found matches prepare data to return
                 $message = array();
                 if ($counter != 0) {
                     $message['translation_id'] = $string->translation_id;
                     $message['message'] = '<div><input type="checkbox" class="consolidate-checkbox" value="' . $string->translation_id . '" checked="checked"> ' . JText::sprintf('COM_NENO_EDITOR_CONSOLIDATE_MESSAGE', $counter, NenoHelper::html2text($originalText, 200), NenoHelper::html2text($string->text, 200)) . '</div>';
                     $message['counter'] = $counter;
                 }
                 if (!empty($message)) {
                     $messages[] = $message;
                 }
             }
         }
     }
     // Echo any messages
     if (count($messages) > 0) {
         echo json_encode($messages);
     }
     JFactory::getApplication()->close();
 }
Beispiel #10
0
 /**
  * Process a file
  *
  * @return bool True on success, false otherwise
  */
 public function processJobFinished()
 {
     $config = JFactory::getConfig();
     $tmpPath = $config->get('tmp_path');
     $filename = $this->getFileName();
     $fileContents = json_decode(file_get_contents($tmpPath . '/' . $filename . '.json' . '/' . $filename . '.json'), true);
     if ($fileContents !== null) {
         foreach ($fileContents['strings'] as $translationId => $translationText) {
             /* @var $translation NenoContentElementTranslation */
             $translation = NenoContentElementTranslation::load($translationId, false, true);
             if (!empty($translation)) {
                 $translation->setString(NenoHelper::replaceTranslationsInHtmlTag($translation->getOriginalText(), html_entity_decode($translationText, ENT_COMPAT | ENT_HTML401, $this->getCorrectEncodingCharset($this->getToLanguage()))));
                 // Mark this translation method as completed
                 $translation->markTranslationMethodAsCompleted($this->translationMethod->id);
                 if ($translation->isBeingCompleted()) {
                     $translation->setState(NenoContentElementTranslation::TRANSLATED_STATE);
                 }
                 // Saving translation
                 if ($translation->persist()) {
                     // Move translation to the target even if it's not completed. Machine => Professional || Professional => Manual
                     $translation->moveTranslationToTarget();
                 }
             }
         }
         // Ensure the shadow tables of the target language have their language column (if there's any) properly set.
         $tables = NenoContentElementTable::load(array('translate' => 1));
         /* @var $table NenoContentElementTable */
         foreach ($tables as $table) {
             $table->checkIntegrity($this->getToLanguage());
         }
         return true;
     }
     return false;
 }