Example #1
0
 /**
  * Translate text using google api
  *
  * @param   string $text   text to translate
  * @param   string $source source language
  * @param   string $target target language
  *
  * @return string
  *
  * @throws Exception
  */
 public function translate($text, $source, $target)
 {
     // Convert from JISO to ISO codes
     $source = $this->convertFromJisoToIso($source);
     $target = $this->convertFromJisoToIso($target);
     $apiKey = NenoSettings::get('translator_api_key');
     $url = 'https://www.googleapis.com/language/translate/v2';
     //Chunk the text if need be
     $chunks = NenoHelper::chunkHTMLString($text, 4900);
     $translatedChunks = array();
     foreach ($chunks as $chunk) {
         // Invoke the POST request.
         $response = $this->post($url, array('key' => $apiKey, 'q' => $chunk, 'source' => $source, 'target' => $target), array('X-HTTP-Method-Override' => 'GET'));
         // Log it if server response is not OK.
         if ($response->code != 200) {
             NenoLog::log('Google API failed with response: ' . $response->code, 1);
             $responseData = json_decode($response->body, true);
             throw new Exception($responseData['error']['errors'][0]['message'] . ' (' . $responseData['error']['errors'][0]['reason'] . ')', $response->code);
         } else {
             $responseBody = json_decode($response->body);
             $translatedChunks[] = $responseBody->data->translations[0]->translatedText;
         }
     }
     return implode(' ', $translatedChunks);
 }
Example #2
0
 /**
  * Execute API Call
  *
  * @param   string $apiCall    API Call
  * @param   string $method     Http Method
  * @param   array  $parameters API call parameters
  *
  * @return array
  */
 public static function makeApiCall($apiCall, $method = 'GET', $parameters = array())
 {
     self::getHttp();
     $apiEndpoint = NenoSettings::get('api_server_url');
     $licenseCode = NenoSettings::get('license_code');
     $response = null;
     $responseStatus = false;
     if (!empty($apiEndpoint) && !empty($licenseCode)) {
         $method = strtolower($method);
         if (method_exists(self::$httpClient, $method)) {
             if ($method === 'get') {
                 if (!empty($parameters)) {
                     $query = implode('/', $parameters);
                     $apiCall = $apiCall . '/' . $query;
                 }
                 $apiResponse = self::$httpClient->{$method}($apiEndpoint . $apiCall, array('Authorization' => $licenseCode));
             } else {
                 $apiResponse = self::$httpClient->{$method}($apiEndpoint . $apiCall, json_encode($parameters), array('Content-Type' => 'application/json', 'Authorization' => $licenseCode));
             }
             /* @var $apiResponse JHttpResponse */
             $data = $apiResponse->body;
             if ($apiResponse->headers['Content-Type'] === 'application/json') {
                 $data = json_decode($data, true);
             }
             $response = $data;
             if ($apiResponse->code == 200) {
                 $responseStatus = true;
             }
         }
     }
     return array($responseStatus, $response);
 }
Example #3
0
 /**
  * Translate text using yandex api
  *
  * @param   string $text   text to translate
  * @param   string $source source language
  * @param   string $target target language
  *
  * @return string
  *
  * @throws Exception
  */
 public function translate($text, $source, $target)
 {
     // Convert from JISO to ISO codes
     $target = $this->convertFromJisoToIso($target);
     // Language parameter for url
     $source = $this->convertFromJisoToIso($source);
     $lang = $source . "-" . $target;
     $apiKey = NenoSettings::get('translator_api_key');
     // For POST requests, the maximum size of the text being passed is 10000 characters.
     if (mb_strlen($text) <= 10000) {
         $url = 'https://translate.yandex.net/api/v1.5/tr.json/translate?key=' . $apiKey . '&lang=' . $lang;
         // Invoke the POST request.
         $response = $this->post($url, array('text' => $text));
         $text = null;
         // Log it if server response is not OK.
         if ($response->code != 200) {
             NenoLog::log('Yandex API failed with response: ' . $response->code, 1);
             $responseData = json_decode($response->body, true);
             throw new Exception(JText::_('COM_NENO_EDITOR_YANDEX_ERROR_CODE_' . $responseData['code']), $responseData['code']);
         } else {
             $responseBody = json_decode($response->body);
             $text = $responseBody->text[0];
         }
         return $text;
     } else {
         throw new Exception(JText::_('COM_NENO_EDITOR_YANDEX_ERROR_TEXT_TOO_LONG'), 413);
     }
 }
Example #4
0
 /**
  * Execute the task
  *
  * @param   array $taskData Task data
  *
  * @return bool True on success, false otherwise
  */
 public function run($taskData)
 {
     $languages = NenoHelper::getLanguages();
     $defaultLanguage = NenoSettings::get('source_language');
     $profiler = new JProfiler();
     foreach ($languages as $language) {
         if ($language->lang_code !== $defaultLanguage) {
             $profiler->mark('Before create job' . $language->lang_code . ' Method: Machine');
             $machineJob = NenoJob::createJob($language->lang_code, NenoContentElementTranslation::MACHINE_TRANSLATION_METHOD);
             $profiler->mark('After create job' . $language->lang_code . ' Method: Machine');
             // If there are translations for this language and for this translation method
             if ($machineJob !== null) {
                 NenoLog::add(count($machineJob->getTranslations()) . ' translations have been found to translate through machine translation');
             }
             $proJob = NenoJob::createJob($language->lang_code, NenoContentElementTranslation::PROFESSIONAL_TRANSLATION_METHOD);
             // If there are translations for this language and for this translation method
             if ($proJob !== null) {
                 NenoLog::add(count($proJob->getTranslations()) . ' translations have been found to translate through professional translation');
             }
             if ($machineJob !== null || $proJob !== null) {
                 NenoTaskMonitor::addTask('job_sender');
             }
         }
     }
 }
Example #5
0
 /**
  * Translate text using google api
  *
  * @param   string $text   text to translate
  * @param   string $source source language
  * @param   string $target target language
  *
  * @return string
  *
  * @throws Exception
  */
 public function translate($text, $source, $target)
 {
     // Convert from JISO to ISO codes
     $source = $this->convertFromJisoToIso($source);
     $target = $this->convertFromJisoToIso($target);
     $apiKey = NenoSettings::get('translator_api_key');
     $url = 'https://www.googleapis.com/language/translate/v2';
     if (mb_strlen($text) < 5000) {
         // Invoke the POST request.
         $response = $this->post($url, array('key' => $apiKey, 'q' => $text, 'source' => $source, 'target' => $target), array('X-HTTP-Method-Override' => 'GET'));
         $text = null;
         // Log it if server response is not OK.
         if ($response->code != 200) {
             NenoLog::log('Google API failed with response: ' . $response->code, 1);
             $responseData = json_decode($response->body, true);
             throw new Exception($responseData['error']['errors'][0]['message'] . ' (' . $responseData['error']['errors'][0]['reason'] . ')', $response->code);
         } else {
             $responseBody = json_decode($response->body);
             $text = $responseBody->data->translations[0]->translatedText;
         }
         return $text;
     } else {
         throw new Exception(JText::_('COM_NENO_EDITOR_GOOGLE_ERROR_TEXT_TOO_LONG'), 413);
     }
 }
Example #6
0
 /**
  * Translate text using yandex api
  *
  * @param   string $text   text to translate
  * @param   string $source source language
  * @param   string $target target language
  *
  * @return string
  *
  * @throws Exception
  */
 public function translate($text, $source, $target)
 {
     // Convert from JISO to ISO codes
     $target = $this->convertFromJisoToIso($target);
     // Language parameter for url
     $source = $this->convertFromJisoToIso($source);
     $lang = $source . "-" . $target;
     $apiKey = NenoSettings::get('translator_api_key');
     //Chunk the text if need be
     $chunks = NenoHelper::chunkHTMLString($text, 9900);
     $translatedChunks = array();
     foreach ($chunks as $chunk) {
         $url = 'https://translate.yandex.net/api/v1.5/tr.json/translate?key=' . $apiKey . '&lang=' . $lang;
         // Invoke the POST request.
         $response = $this->post($url, array('text' => $chunk));
         // Log it if server response is not OK.
         if ($response->code != 200) {
             NenoLog::log('Yandex API failed with response: ' . $response->code, 1);
             $responseData = json_decode($response->body, true);
             throw new Exception(JText::_('COM_NENO_EDITOR_YANDEX_ERROR_CODE_' . $responseData['code']), $responseData['code']);
         } else {
             $responseBody = json_decode($response->body);
             $translatedChunks[] = $responseBody->text[0];
         }
     }
     return implode(' ', $translatedChunks);
 }
Example #7
0
 /**
  * Translate text using google api
  *
  * @param   string $text   text to translate
  * @param   string $source source language
  * @param   string $target target language
  *
  * @return string
  *
  * @throws Exception
  */
 public function translate($text, $source, $target)
 {
     // Convert from JISO to ISO codes
     $source = $this->convertFromJisoToIso($source);
     $target = $this->convertFromJisoToIso($target);
     list($clientId, $clientSecret) = explode(':', NenoSettings::get('translator_api_key'));
     $accessToken = $this->requestAccessToken($clientId, $clientSecret);
     $url = 'http://api.microsofttranslator.com/V2/Http.svc/Translate';
     //Chunk the text if need be
     $chunks = NenoHelper::chunkHTMLString($text, 4900);
     $translatedChunks = array();
     foreach ($chunks as $chunk) {
         $query = http_build_query(array('from' => $source, 'text' => $chunk, 'to' => $target));
         // Invoke the POST request.
         $response = $this->get($url . '?' . $query, array('Authorization' => 'Bearer ' . $accessToken));
         $responseBody = (array) simplexml_load_string($response->body);
         // Log it if server response is not OK.
         if ($response->code != 200) {
             NenoLog::log('Bing API failed with response: ' . $response->code, 1);
             throw new Exception((string) $responseBody['body']->p[1], $response->code);
         } else {
             $translatedChunks[] = $responseBody[0];
         }
     }
     return implode(' ', $translatedChunks);
 }
Example #8
0
 /**
  * Save a setting
  *
  * @return void
  */
 public function saveSetting()
 {
     $input = $this->input;
     $setting = $input->getString('setting');
     $newValue = $input->getString('value');
     if (NenoSettings::set($setting, $newValue)) {
         echo 'ok';
     }
     JFactory::getApplication()->close();
 }
Example #9
0
 /**
  * Check if the language switcher has been published already
  *
  * @param   bool $createdAndPublished True to check whether the module has created and published or just created.
  *
  * @return bool
  */
 public function getIsSwitcherPublished($createdAndPublished = true)
 {
     $db = JFactory::getDbo();
     $query = $db->getQuery(true);
     $query->select(1)->from('#__modules')->where('module = ' . $db->quote('mod_languages'));
     if ($createdAndPublished) {
         $query->where(array('position <> \'\'', 'published = 1 '));
     }
     $db->setQuery($query);
     return $db->loadResult() == 1 || !NenoSettings::get('show_language_switcher_warning', 1);
 }
Example #10
0
 /**
  * Load settings from the database
  *
  * @return void
  */
 private static function loadSettingsFromDb()
 {
     $db = JFactory::getDbo();
     $query = $db->getQuery(true);
     $query->select('*')->from('#__neno_settings');
     $db->setQuery($query);
     $settings = $db->loadObjectList();
     self::$settings = array();
     foreach ($settings as $setting) {
         self::$settings[$setting->setting_key] = array('value' => $setting->setting_value, 'read_only' => $setting->read_only);
     }
 }
Example #11
0
 /**
  * Task to set value for automatic translations
  *
  * @return void
  */
 public function setAutomaticTranslationSetting()
 {
     $app = JFactory::getApplication();
     $input = $app->input;
     $setting = $input->post->getString('setting');
     $value = $input->post->getInt('value');
     if (!empty($setting)) {
         echo NenoSettings::set($setting, $value) ? 'ok' : 'err';
     } else {
         echo 'err';
     }
     $app->close();
 }
Example #12
0
 /**
  * Discover the element
  *
  * @return bool True on success
  */
 public function discoverElement()
 {
     NenoHelper::setSetupState(JText::sprintf('COM_NENO_INSTALLATION_MESSAGE_PARSING_GROUP_TABLE', $this->group->getGroupName(), $this->getFilename()), 2);
     // Check if there are children not discovered
     $languageString = NenoContentElementLanguageString::load(array('discovered' => 0, '_limit' => 1, 'languagefile_id' => $this->id));
     if (empty($languageString)) {
         $this->setDiscovered(true)->persist();
     } else {
         NenoSettings::set('installation_level', '2.2');
         NenoSettings::set('discovering_element_1.2', $this->id);
     }
 }
Example #13
0
echo JText::sprintf('COM_NENO_COMMENTS_TO_TRANSLATOR_LANGUAGE_MODAL_ADD_TITLE', $item['lang_code']);
?>
</h3>

		<p><?php 
echo JText::_('COM_NENO_COMMENTS_TO_TRANSLATOR_MODAL_ADD_BODY_PRE');
?>
</p>

		<p><?php 
echo JText::sprintf('COM_NENO_COMMENTS_TO_TRANSLATOR_LANGUAGE_MODAL_ADD_BODY', JRoute::_('index.php?option=com_neno&view=externaltranslations&open=comment'));
?>
</p>

		<p><?php 
echo JText::sprintf('COM_NENO_COMMENTS_TO_TRANSLATOR_MODAL_ADD_BODY_POST', NenoSettings::get('source_language'), $item['lang_code']);
?>
</p>

		<p>
			<textarea class="comment-to-translator"
			          data-language="<?php 
echo $item['lang_code'];
?>
"><?php 
echo empty($item['comment']) ? '' : $item['comment'];
?>
</textarea>
		</p>
	</div>
	<div class="modal-footer">
Example #14
0
echo JText::sprintf('COM_NENO_COMMENTS_TO_TRANSLATOR_GENERAL_MODAL_ADD_TITLE');
?>
</h3>

			<p><?php 
echo JText::_('COM_NENO_COMMENTS_TO_TRANSLATOR_MODAL_ADD_BODY_PRE');
?>
</p>

			<p><?php 
echo JText::sprintf('COM_NENO_COMMENTS_TO_TRANSLATOR_GENERAL_MODAL_ADD_BODY', JRoute::_('index.php?option=com_neno&view=dashboard'), JRoute::_('index.php?option=com_neno&view=editor'));
?>
</p>

			<p><?php 
echo JText::sprintf('COM_NENO_COMMENTS_TO_TRANSLATOR_GENERAL_MODAL_ADD_BODY_POST', NenoSettings::get('source_language'));
?>
</p>

			<p>
			<textarea
				class="comment-to-translator"><?php 
echo empty($this->comment) ? '' : $this->comment;
?>
</textarea>
			</p>
		</div>
		<div class="modal-footer">
			<a href="#" class="btn" data-dismiss="modal"
				aria-hidden="true"><?php 
echo JText::_('COM_NENO_COMMENTS_TO_TRANSLATOR_MODAL_BTN_CLOSE');
Example #15
0
 /**
  * Create a job file
  *
  * @return bool True on success
  *
  * @throws Exception If something happens when the zip file is being created.
  */
 public function generateJobFile()
 {
     $filename = $this->getFileName();
     $jobData = array('jobId' => $this->getId(), 'job_create_time' => $this->getCreatedTime(true), 'file_name' => $filename, 'translation_method' => NenoHelper::convertTranslationMethodIdToName($this->getTranslationMethod()->id), 'from' => $this->getFromLanguage(), 'to' => $this->getToLanguage(), 'comment' => NenoSettings::get('external_translators_notes'), 'strings' => $this->getTranslations());
     $config = JFactory::getConfig();
     $tmpPath = $config->get('tmp_path');
     $fileData = array('name' => $filename . '.json', 'data' => json_encode($jobData));
     /* @var $zipArchiveAdapter JArchiveZip */
     $zipArchiveAdapter = JArchive::getAdapter('zip');
     $result = $zipArchiveAdapter->create($tmpPath . '/' . $filename . '.json.zip', array($fileData));
     $this->fileName = $filename;
     // If something happens in the process of creating the job file, let's throw an exception
     if (!$result) {
         throw new Exception('Error creating job file');
     }
     $this->persist();
     return $result;
 }
Example #16
0
 /**
  * Get license
  *
  * @return string
  */
 private static function getLicense()
 {
     return NenoSettings::get('license_code', '');
 }
Example #17
0
 /**
  * {@inheritdoc}
  *
  * @return boolean
  */
 public function persist()
 {
     // If the table has been marked as translatable, let's check for the content element file
     if ($this->translate) {
         $this->checkTranslatableStatusFromContentElementFile();
     }
     $result = parent::persist();
     if ($result) {
         /* @var $db NenoDatabaseDriverMysqlx */
         $db = JFactory::getDbo();
         // If the table has been marked as translated
         if ($this->translate) {
             // Creates shadow tables and copy the content on it
             $db->createShadowTables($this->tableName);
         }
         /* @var $field NenoContentElementField */
         foreach ($this->fields as $field) {
             $field->setTable($this)->setTranslate($field->isTranslatable() && $this->isTranslate())->persist();
             if ($field->getFieldName() === 'language' && $this->isTranslate()) {
                 $languages = NenoHelper::getTargetLanguages();
                 $defaultLanguage = NenoSettings::get('source_language');
                 foreach ($languages as $language) {
                     if ($language->lang_code != $defaultLanguage) {
                         $db->deleteContentElementsFromSourceTableToShadowTables($this->tableName, $language->lang_code);
                     }
                 }
             }
         }
     }
     return $result;
 }
Example #18
0
echo JText::_('COM_NENO_CONSOLIDATE_TRANSLATION_CONFIRM');
?>
</p>
			</div>
			<div class="modal-footer">
				<a href="#" class="btn btn-primary" id="consolidate-button-close" data-dismiss="modal" aria-hidden="true"><?php 
echo JText::_('JTOOLBAR_CLOSE');
?>
</a>
			</div>
		</div>
	</div>
</div>

<?php 
if (NenoSettings::get('translator') == '' || NenoSettings::get('translator_api_key') == '') {
    ?>

	<!-- Modal for translator API key -->
	<div id="translatorKeyModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="translatorKey"
		aria-hidden="true">
		<div class="modal-header">
			<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
			<h3 id="myModalLabel"><?php 
    echo JText::_('COM_NENO_EDITOR_NO_TRANSLATOR_HEADER');
    ?>
</h3>
		</div>
		<div class="modal-body">
			<p><?php 
    echo JText::_('COM_NENO_EDITOR_NO_TRANSLATOR_MESSAGE');
Example #19
0
 /**
  * Publish language switcher
  *
  * @throws Exception
  *
  * @return void
  */
 public function doNotShowWarningMessage()
 {
     NenoSettings::set('show_language_switcher_warning', 0);
     JFactory::getApplication()->redirect('index.php?option=com_neno&dashboard');
 }
Example #20
0
 /**
  * Discover the element
  *
  * @return bool True on success
  */
 public function discoverElement()
 {
     // Save the hierarchy first,
     if ($this->isNew() || NenoSettings::get('discovering_element_0') == $this->id) {
         NenoHelper::setSetupState(JText::sprintf('COM_NENO_INSTALLATION_MESSAGE_PARSING_GROUP', $this->groupName));
         $level = '1.1';
     } else {
         $level = '1.2';
     }
     $this->persist();
     $elementId = $this->id;
     if (empty($this->tables) && empty($this->languageFiles)) {
         NenoHelper::setSetupState(JText::sprintf('COM_NENO_INSTALLATION_MESSAGE_CONTENT_NOT_DETECTED', $this->getGroupName()), 1, 'warning');
         $level = 0;
         $elementId = 0;
     }
     NenoSettings::set('installation_level', $level);
     NenoSettings::set('discovering_element_0', $elementId);
 }
Example #21
0
 /**
  * Get translator comment
  *
  * @return string|null
  */
 public function getComment()
 {
     return NenoSettings::get('external_translators_notes');
 }
Example #22
0
 /**
  * Validate installation step 3
  *
  * @return bool
  */
 protected function validateStep2()
 {
     $input = $this->input;
     $app = JFactory::getApplication();
     $jform = $input->post->get('jform', array(), 'ARRAY');
     if (!empty($jform['translation_methods'])) {
         foreach ($jform['translation_methods'] as $key => $translationMethod) {
             NenoSettings::set('translation_method_' . ($key + 1), $translationMethod);
         }
         return true;
     }
     $app->enqueueMessage('', 'error');
     return false;
 }
Example #23
0
 /**
  * Get language configuration data
  *
  * @return array
  */
 public static function getLanguageConfigurationData()
 {
     /* @var $db NenoDatabaseDriverMysqlx */
     $db = JFactory::getDbo();
     $query = $db->getQuery(true);
     $default = NenoSettings::get('source_language');
     $subquery1 = $db->getQuery(true);
     $subquery2 = $db->getQuery(true);
     $subquery2->select('tr2.*')->from('#__neno_content_element_translations AS tr2')->where('content_type = ' . $db->quote('lang_string'));
     $subquery1->select('tr.*')->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('content_type = ' . $db->quote('db_string'), 'f.translate = 1', 't.translate = 1'))->union($subquery2);
     $query->select(array('l.lang_code', 'l.published', 'l.title', 'l.image', 'tr.state', 'SUM(tr.word_counter) AS word_count', 'lc.comment'))->from('#__languages AS l')->leftJoin('#__neno_language_external_translators_comments AS lc ON l.lang_code = lc.language')->leftJoin('(' . (string) $subquery1 . ') AS tr ON tr.language = l.lang_code')->where('l.lang_code <> ' . $db->quote($default))->group(array('l.lang_code', 'tr.state'))->order('lang_code');
     $db->setQuery($query);
     $languages = $db->loadObjectListMultiIndex('lang_code');
     $items = array();
     if (!empty($languages)) {
         foreach ($languages as $language) {
             $translated = 0;
             $queued = 0;
             $changed = 0;
             $untranslated = 0;
             $item = new stdClass();
             $item->lang_code = $language[0]->lang_code;
             $item->comment = $language[0]->comment;
             $item->published = $language[0]->published;
             $item->title = $language[0]->title;
             $item->image = $language[0]->image;
             $item->errors = NenoHelper::getLanguageErrors((array) $language[0]);
             $item->isInstalled = NenoHelper::isCompletelyInstall($item->lang_code);
             foreach ($language as $internalItem) {
                 switch ($internalItem->state) {
                     case NenoContentElementTranslation::TRANSLATED_STATE:
                         $translated = (int) $internalItem->word_count;
                         break;
                     case NenoContentElementTranslation::QUEUED_FOR_BEING_TRANSLATED_STATE:
                         $queued = (int) $internalItem->word_count;
                         break;
                     case NenoContentElementTranslation::SOURCE_CHANGED_STATE:
                         $changed = (int) $internalItem->word_count;
                         break;
                     case NenoContentElementTranslation::NOT_TRANSLATED_STATE:
                         $untranslated = (int) $internalItem->word_count;
                         break;
                 }
             }
             $item->wordCount = new stdClass();
             $item->wordCount->translated = $translated;
             $item->wordCount->queued = $queued;
             $item->wordCount->changed = $changed;
             $item->wordCount->untranslated = $untranslated;
             $item->wordCount->total = $translated + $queued + $changed + $untranslated;
             $item->translationMethods = NenoHelper::getLanguageDefault($item->lang_code);
             $items[] = $item;
         }
     }
     $languagesOnLanguageTable = array_keys($languages);
     $knownLanguages = JFactory::getLanguage()->getKnownLanguages();
     $defaultTranslationsMethods = NenoHelper::getDefaultTranslationMethods();
     foreach ($knownLanguages as $languageTag => $languageInfo) {
         if ($languageTag != $default && !in_array($languageTag, $languagesOnLanguageTable)) {
             $languagesData = new stdClass();
             $languagesData->lang_code = $languageInfo['tag'];
             $languagesData->title = $languageInfo['name'];
             $languagesData->translationMethods = $defaultTranslationsMethods;
             $languagesData->errors = NenoHelper::getLanguageErrors((array) $languagesData);
             $languagesData->placement = 'dashboard';
             $languagesData->image = NenoHelper::getLanguageImage($languageInfo['tag']);
             $languagesData->published = NenoHelper::isLanguagePublished($languageInfo['tag']);
             $languagesData->comment = NenoHelper::getLanguageTranslatorComment($languageInfo['tag']);
             $items[] = $languagesData;
         }
     }
     return $items;
 }
Example #24
0
 protected function ensureDefaultsExists($items)
 {
     // Create a simple array with key value of settings
     $settings = array();
     foreach ($items as $item) {
         $settings[$item->setting_key] = $item->setting_value;
     }
     // Related content
     if (!isset($settings['load_related_content'])) {
         NenoSettings::set('load_related_content', '0');
         $items = $this->getItems();
         // Refresh the items
     }
     return $items;
 }
Example #25
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;
 }
Example #26
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();
 }
Example #27
0
 /**
  * This method will be executed once the content is save
  *
  * @param   string $context Save context
  * @param   JTable $content JTable class of the content
  * @param   bool   $isNew   If the record is new or not
  *
  * @return void
  */
 public function onContentAfterSave($context, $content, $isNew)
 {
     //  If the user has create a new menu item, let's create it.
     if ($context == 'com_menus.item' && $isNew) {
         NenoHelper::createMenuStructure();
     } elseif ($content instanceof JTable) {
         /* @var $db NenoDatabaseDriverMysqlx */
         $db = JFactory::getDbo();
         $tableName = $content->getTableName();
         /* @var $table NenoContentElementTable */
         $table = NenoContentElementTable::load(array('table_name' => $tableName), false);
         if (!empty($table)) {
             // If the record has changed the state to 'Trashed'
             if (isset($content->state) && $content->state == -2) {
                 $primaryKeys = $content->getPrimaryKey();
                 $this->trashTranslations($table, array($content->{$primaryKeys[0]}));
             } else {
                 $fields = $table->getFields(false, true);
                 /* @var $field NenoContentElementField */
                 foreach ($fields as $field) {
                     if ($field->isTranslatable()) {
                         $primaryKeyData = array();
                         foreach ($content->getPrimaryKey() as $primaryKeyName => $primaryKeyValue) {
                             $primaryKeyData[$primaryKeyName] = $primaryKeyValue;
                         }
                         $field->persistTranslations($primaryKeyData);
                     }
                 }
                 $languages = NenoHelper::getLanguages(false);
                 $defaultLanguage = NenoSettings::get('source_language');
                 foreach ($languages as $language) {
                     if ($language->lang_code != $defaultLanguage) {
                         $shadowTable = $db->generateShadowTableName($tableName, $language->lang_code);
                         $properties = $content->getProperties();
                         $query = 'REPLACE INTO ' . $db->quoteName($shadowTable) . ' (' . implode(',', $db->quoteName(array_keys($properties))) . ') VALUES(' . implode(',', $db->quote($properties)) . ')';
                         $db->setQuery($query);
                         $db->execute();
                     }
                 }
             }
         }
     }
 }
echo JText::_('COM_NENO_COMMENTS_TO_TRANSLATOR_GENERAL_MODAL_ADD_TITLE');
?>
</h3>

        <p><?php 
echo JText::_('COM_NENO_COMMENTS_TO_TRANSLATOR_MODAL_ADD_BODY_PRE');
?>
</p>

        <p><?php 
echo JText::sprintf('COM_NENO_COMMENTS_TO_TRANSLATOR_EDITOR_MODAL_ADD_BODY', JRoute::_('index.php?option=com_neno&view=externaltranslations&open=comment'), $translation->language, JRoute::_('index.php?option=com_neno&view=dashboard'));
?>
</p>

        <p><?php 
echo JText::sprintf('COM_NENO_COMMENTS_TO_TRANSLATOR_MODAL_ADD_BODY_POST', NenoSettings::get('source_language'), $translation->language);
?>
</p>

        <p><textarea class="comment-to-translator"><?php 
echo empty($translation->comment) ? '' : $translation->comment;
?>
</textarea></p>
    </div>
    <div class="modal-footer">
        <p>
            <input type="checkbox" id="comment-check-<?php 
echo $translation->id;
?>
" class="comment-check"
                   data-content-id="<?php 
Example #29
0
 /**
  * Move the translation to its place in the shadow table
  *
  * @return bool
  */
 public function moveTranslationToTarget()
 {
     /* @var $db NenoDatabaseDriverMysqlx */
     $db = JFactory::getDbo();
     $query = $db->getQuery(true);
     // If the translation comes from database content, let's load it
     if ($this->contentType == self::DB_STRING) {
         $query->clear()->select(array('f.field_name', 't.table_name'))->from('`#__neno_content_element_fields` AS f')->innerJoin('`#__neno_content_element_tables` AS t ON f.table_id = t.id')->where('f.id = ' . $this->element->id);
         $db->setQuery($query);
         $row = $db->loadRow();
         list($fieldName, $tableName) = $row;
         // Ensure data integrity
         $this->string = NenoHelperData::ensureDataIntegrity($this->element->id, $this->string, $this->language);
         $query->clear()->select(array('f.field_name', 'ft.value'))->from('`#__neno_content_element_fields_x_translations` AS ft')->innerJoin('`#__neno_content_element_fields` AS f ON f.id = ft.field_id')->where('ft.translation_id = ' . $this->id);
         $db->setQuery($query);
         $whereValues = $db->loadAssocList('field_name');
         $shadowTableName = $db->generateShadowTableName($tableName, $this->language);
         $query->clear()->update($shadowTableName)->set($db->quoteName($fieldName) . ' = ' . $db->quote($this->string));
         foreach ($whereValues as $whereField => $where) {
             $query->where($db->quoteName($whereField) . ' = ' . $db->quote($where['value']));
         }
         $db->setQuery($query);
         $db->execute();
         return true;
     } else {
         $query->select(array('REPLACE(lf.filename, lf.language, ' . $db->quote($this->language) . ') AS filename', 'lf.filename as originalFilename', 'ls.constant'))->from('#__neno_content_element_translations AS tr')->innerJoin('#__neno_content_element_language_strings AS ls ON ls.id = tr.content_id')->innerJoin('#__neno_content_element_language_files AS lf ON ls.languagefile_id = lf.id')->where('tr.id = ' . (int) $this->id);
         $db->setQuery($query);
         $translationData = $db->loadAssoc();
         $existingStrings = array();
         if (!empty($translationData)) {
             $filePath = JPATH_ROOT . "/language/" . $this->language . '/' . $translationData['filename'];
             if (file_exists($filePath)) {
                 $existingStrings = NenoHelper::readLanguageFile($filePath);
             } else {
                 $defaultLanguage = NenoSettings::get('source_language');
                 if (file_exists(JPATH_ROOT . "/language/{$defaultLanguage}/" . $translationData['originalFilename'])) {
                     $existingStrings = NenoHelper::readLanguageFile(JPATH_ROOT . "/language/{$defaultLanguage}/" . $translationData['originalFilename']);
                 }
             }
             $existingStrings[$translationData['constant']] = $this->string;
             NenoHelper::saveIniFile($filePath, $existingStrings);
         }
     }
     return false;
 }
Example #30
0
 /**
  * Copy the content to a table that uses Joomla language field
  *
  * @param   string $tableName Table name
  *
  * @return void
  */
 public function copyContentElementsUsingJoomlaLanguageField($tableName)
 {
     $defaultLanguage = NenoSettings::get('source_language');
     $knownLanguages = NenoHelper::getLanguages();
     $columns = array_keys($this->getTableColumns($tableName));
     foreach ($columns as $key => $column) {
         if ($column == 'id') {
             unset($columns[$key]);
             break;
         }
     }
     foreach ($knownLanguages as $knownLanguage) {
         if ($knownLanguage->lang_code !== $defaultLanguage) {
             $selectColumns = $columns;
             foreach ($selectColumns as $key => $selectColumn) {
                 if ($selectColumn == 'language') {
                     $selectColumns[$key] = $this->quote($knownLanguage->lang_code);
                 } else {
                     $selectColumns[$key] = $this->quoteName($selectColumn);
                 }
             }
             $query = 'INSERT INTO ' . $tableName . ' (' . implode(',', $this->quoteName($columns)) . ') SELECT ' . implode(',', $selectColumns) . ' FROM ' . $tableName . ' WHERE language=' . $this->quote($defaultLanguage);
             $this->setQuery($query);
             $this->execute();
         }
     }
 }