PageRenderTime 29ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 1ms

/administrator/components/com_yos_translator/controllers/translateone.php

https://bitbucket.org/bekket/lviveurorent
PHP | 295 lines | 210 code | 40 blank | 45 comment | 14 complexity | ba7c2d46ee20f35383002b1407bb2ce7 MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0
  1. <?php
  2. /**
  3. * Translateone Controller for yos_translator Component
  4. * @package yos_translator
  5. * @subpackage Components
  6. * @link http://yopensource.com
  7. * @author Minh Nguyen
  8. * @copyright Minh Nguyen (minhna@gmail.com)
  9. * @license Commercial
  10. */
  11. // Check to ensure this file is included in Joomla!
  12. defined('_JEXEC') or die();
  13. /**
  14. * Translator Extension Controller
  15. *
  16. * @package yos_translator
  17. * @subpackage Components
  18. */
  19. class TranslatorControllerTranslateone extends TranslatorController
  20. {
  21. var $_notran = array();
  22. /**
  23. * constructor (registers additional tasks to methods)
  24. * @return void
  25. */
  26. function __construct()
  27. {
  28. parent::__construct();
  29. $this->registerTask('save_continue', 'save');
  30. }
  31. function edit(){
  32. //hide mainmenu
  33. JRequest::setVar('hidemainmenu', 1);
  34. $view=$this->getView('content_translateone','html');
  35. if ($model=& $this->getModel('content_translateone')) {
  36. $view->setModel($model);
  37. $view->setLayout('form');
  38. }
  39. $view->display();
  40. }
  41. function save(){
  42. global $mainframe, $option;
  43. $db =& JFactory::getDBO();
  44. $reference_id = JRequest::getInt('reference_id');
  45. $lang_id = JRequest::getInt('translate_to');
  46. $published = JRequest::getString('published');
  47. $published = $published == '1' ? 1 : 0;
  48. $tsl_title = JRequest::getVar( 'tsl_title', '', 'post', 'string', JREQUEST_ALLOWRAW );
  49. $tsl_introtext = JRequest::getVar( 'tsl_introtext', '', 'post', 'string', JREQUEST_ALLOWRAW );
  50. $tsl_fulltext = JRequest::getVar( 'tsl_fulltext', '', 'post', 'string', JREQUEST_ALLOWRAW );
  51. $tsl_metakey = JRequest::getVar( 'tsl_metakey', '', 'post', 'string', JREQUEST_ALLOWRAW );
  52. $tsl_metadesc = JRequest::getVar( 'tsl_metadesc', '', 'post', 'string', JREQUEST_ALLOWRAW );
  53. //get table
  54. JTable::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR.DS.'tables');
  55. //load content to get original values
  56. $content =& JTable::getInstance('content','Table');
  57. $content->load((int)$reference_id);
  58. //remove old translated records
  59. $query = "DELETE FROM #__jf_content WHERE reference_id = $reference_id AND language_id = $lang_id AND reference_table= 'content'";
  60. $db->setQuery($query);
  61. $db->query();
  62. //load jf_content table
  63. $tbl_jf_content =& JTable::getInstance('jf_content', 'Table');
  64. //get title:
  65. $tbl_jf_content->store_jf($lang_id, $reference_id, 'content', 'title', $tsl_title, md5($content->title), $content->title, $published);
  66. //get introtext:
  67. $tbl_jf_content->store_jf($lang_id, $reference_id, 'content', 'introtext', $tsl_introtext, md5($content->introtext), $content->introtext, $published);
  68. //get fulltext:
  69. $tbl_jf_content->store_jf($lang_id, $reference_id, 'content', 'fulltext', $tsl_fulltext, md5($content->fulltext), $content->fulltext, $published);
  70. //get metakey:
  71. $tbl_jf_content->store_jf($lang_id, $reference_id, 'content', 'metakey', $tsl_metakey, md5($content->metakey), $content->metakey, $published);
  72. //get metadesk:
  73. $tbl_jf_content->store_jf($lang_id, $reference_id, 'content', 'metadesc', $tsl_metadesc, md5($content->metadesc), $content->metadesc, $published);
  74. //copy alias, images, publish_up, publish_down, atribs fields
  75. $tbl_jf_content->store_jf($lang_id, $reference_id, 'content', 'alias', $content->alias, md5($content->alias), $content->alias, $published);
  76. $tbl_jf_content->store_jf($lang_id, $reference_id, 'content', 'images', $content->images, md5($content->images), $content->images, $published);
  77. $tbl_jf_content->store_jf($lang_id, $reference_id, 'content', 'publish_up', $content->publish_up, md5($content->publish_up), $content->publish_up, $published);
  78. $tbl_jf_content->store_jf($lang_id, $reference_id, 'content', 'publish_down', $content->publish_down, md5($content->publish_down), $content->publish_down, $published);
  79. $tbl_jf_content->store_jf($lang_id, $reference_id, 'content', 'attribs', $content->attribs, md5($content->attribs), $content->attribs, $published);
  80. //redirect
  81. $msg = 'Translated successfully';
  82. $task = JRequest::getCmd('task');
  83. if ($task == 'save_continue' ) {
  84. $url = "index.php?option=$option&task=translateone.edit&cid[]=$reference_id|0";
  85. }
  86. else {
  87. $url = "index.php?option=$option&view=contents";
  88. }
  89. $mainframe->redirect( $url, $msg );
  90. }
  91. /**
  92. * Dump to notranslate data
  93. *
  94. * @param content data $data
  95. * @return content data
  96. */
  97. function notranslate($data){
  98. $regex = '/\{notranslate\}(.*?)\{\/notranslate\}/m';
  99. preg_match_all($regex, $data, $matches);
  100. $f_number = count($matches[0]);
  101. if (!$f_number) {
  102. return $data;
  103. }
  104. for ($i =0 ; $i<$f_number; $i++){
  105. $data = str_replace($matches[0][$i], md5($matches[0][$i]),$data);
  106. $this->_notran[] = array('hash'=> md5($matches[0][$i]), 'value'=> $matches[1][$i]);
  107. }
  108. return $data;
  109. }
  110. /**
  111. * Replace personconfig to notranslate and dump it
  112. *
  113. * @param content data $data
  114. * @return content data
  115. */
  116. function personconfig( $data ){
  117. $config =& JComponentHelper::getParams('com_yos_translator');
  118. $param_notranslate= $config->get('notranslate');
  119. $param_notranslate= preg_replace('/\s/','',$param_notranslate);
  120. if ($param_notranslate) {
  121. $arr_tag = explode(';',$param_notranslate);
  122. foreach ($arr_tag as $tag) {
  123. if ($tag) {
  124. $arr_sp = explode(',', $tag);
  125. $tagfirst = $arr_sp[0];
  126. $taglast = $arr_sp[1];
  127. if (!($tagfirst && $taglast)) {
  128. continue;
  129. }
  130. preg_match_all('/'.str_replace('/','\/',preg_quote($tagfirst)).'(.*?)'.str_replace('/','\/',preg_quote($taglast)).'/', $data, $matches);
  131. $f_number = count($matches[0]);
  132. if (!$f_number) {
  133. continue;
  134. }
  135. for ($i =0 ; $i<$f_number; $i++){
  136. $data = str_replace($matches[0][$i], '<div>'.md5($matches[0][$i]).'</div>',$data);
  137. $this->_notran[] = array('hash'=> md5($matches[0][$i]), 'value'=> $matches[0][$i]);
  138. }
  139. }
  140. }
  141. }
  142. return $data;
  143. }
  144. //translate content and store in jf_content table
  145. function translate(){
  146. global $mainframe, $option;
  147. $view=$this->getView('content_translateone','html');
  148. if (!$model=& $this->getModel('content_translateone')) {
  149. $msg = "Couldn't get model!";
  150. $mainframe->redirect( "index.php?option=$option&view=contents", $msg );
  151. }
  152. $reference_id = JRequest::getVar('reference_id', 0);
  153. $language_id = JRequest::getVar('language_id', 0);
  154. $translate_to = JRequest::getInt('translate_to', 0);
  155. $model->initialize($reference_id, $language_id);
  156. //build a page to translate
  157. $pageContent = '';
  158. $titleHashBegin = md5('JLORD_BEGIN_TITLE_AREA');
  159. $titleHashEnd = md5('JLORD_END_TITLE_AREA');
  160. $pageContent .= '' . $titleHashBegin . '<div>' . $model->get('org_title', '') . '</div>' . $titleHashEnd . '';
  161. $pageContent .= "<br />";
  162. $introtextHashBegin = md5('JLORD_BEGIN_INTROTEXT_AREA');
  163. $introtextHashEnd = md5('JLORD_END_INTROTEXT_AREA');
  164. $pageContent .= '' . $introtextHashBegin . '<div>' . $model->get('org_introtext', '') . '</div>' . $introtextHashEnd . '';
  165. $pageContent .= "<br />";
  166. $fulltextHashBegin = md5('JLORD_BEGIN_FULLTEXT_AREA');
  167. $fulltextHashEnd = md5('JLORD_END_FULLTEXT_AREA');
  168. $pageContent .= '' . $fulltextHashBegin . '<div>' . $model->get('org_fulltext', '') . '</div>' . $fulltextHashEnd . '';
  169. $pageContent .= "<br />";
  170. $metakeyHashBegin = md5('JLORD_BEGIN_METAKEY_AREA');
  171. $metakeyHashEnd = md5('JLORD_END_METAKEY_AREA');
  172. $pageContent .= '' . $metakeyHashBegin . '<div>' . $model->get('org_metakey', '') . '</div>' . $metakeyHashEnd . '';
  173. $pageContent .= "<br />";
  174. $metadescHashBegin = md5('JLORD_BEGIN_METADESC_AREA');
  175. $metadescHashEnd = md5('JLORD_END_METADESC_AREA');
  176. $pageContent .= '' . $metadescHashBegin . '<div>' . $model->get('org_metadesc', '') . '</div>' . $metadescHashEnd . '';
  177. $pageContent .= "<br />";
  178. //No translate
  179. $pageContent = $this->notranslate($pageContent);
  180. $pageContent = $this->personconfig($pageContent);
  181. //get language pair
  182. $languagePair = $model->getLanguagePair($translate_to);
  183. $language_from = JRequest::getString('from_lang', '');
  184. if ($language_from != '') {
  185. //get code of language to
  186. $code_to = $model->_getLanguageCode($translate_to);
  187. $languagePair = $language_from.'|'.$code_to;
  188. }
  189. //get translated pageContent from helper
  190. require_once(JPATH_COMPONENT_ADMINISTRATOR.DS.'helpers'.DS.'translator.php');
  191. $translator = new Yos_translator();
  192. $tsl_pageContent = $translator->translate($languagePair, $pageContent);
  193. //Prepare save content
  194. if (count($this->_notran)) {
  195. foreach ($this->_notran as $notran) {
  196. $tsl_pageContent = str_replace($notran['hash'], $notran['value'], $tsl_pageContent);
  197. $tsl_pageContent = str_replace('<div> '.$notran['value'].' </div>', $notran['value'], $tsl_pageContent);
  198. }
  199. }
  200. //get title:
  201. if (preg_match('/' . $titleHashBegin . '\s*<div>(.*?)<\/div>\s*' . $titleHashEnd . '/is', $tsl_pageContent, $match)) {
  202. $model->set('tsl_title', trim($match[1]));
  203. }
  204. //get introtext:
  205. if (preg_match('/' . $introtextHashBegin . '\s*<div>(.*?)<\/div>\s*' . $introtextHashEnd . '/is', $tsl_pageContent, $match)) {
  206. $model->set('tsl_introtext', trim($match[1]));
  207. }
  208. //get fulltext:
  209. if (preg_match('/' . $fulltextHashBegin . '\s*<div>(.*?)<\/div>\s*' . $fulltextHashEnd . '/is', $tsl_pageContent, $match)) {
  210. $model->set('tsl_fulltext', trim($match[1]));
  211. }
  212. //get metakey
  213. if (preg_match('/' . $metakeyHashBegin . '\s*<div>(.*?)<\/div>\s*' . $metakeyHashEnd . '/is', $tsl_pageContent, $match)) {
  214. $model->set('tsl_metakey', trim($match[1]));
  215. }
  216. //get metadesk:
  217. if (preg_match('/' . $metadescHashBegin . '\s*<div>(.*?)<\/div>\s*' . $metadescHashEnd . '/is', $tsl_pageContent, $match)) {
  218. $model->set('tsl_metadesc', trim($match[1]));
  219. }
  220. $model->set('translated', 1);
  221. //set this modle to view
  222. $view->setModel($model);
  223. $view->setLayout('form');
  224. $view->display();
  225. }
  226. function cancel(){
  227. global $mainframe, $option;
  228. $msg = "Operation aborted!";
  229. $mainframe->redirect( "index.php?option=$option&view=contents", $msg );
  230. }
  231. }