public function actionTranslate() { if (!Yii::app()->request->isPostRequest) { throw new CHttpException(403, 'Forbidden'); } if (empty($_POST) || !array_key_exists('form', $_POST) || !array_key_exists('text_id', $_POST['form']) || !array_key_exists('text_translate', $_POST['form']) || !is_array($_POST['form']['text_translate'])) { throw new CHttpException(403, 'Forbidden'); } $text = Translate::model()->findByPk($_POST['form']['text_id']); if ($text == NULL) { throw new CHttpException(403, 'Forbidden'); } $isChange = FALSE; $textTranslated = $_POST['form']['text_translate']; $langs = Langs::model()->findAll(); foreach ($langs as $lang) { if (array_key_exists($lang->alias, $textTranslated)) { $translateLang = TranslateLang::model()->find('translate__id=:translate__id AND lang=:lang', array(':translate__id' => $text->id, ':lang' => $lang->alias)); if ($translateLang == NULL) { $translateLang = new TranslateLang(); $translateLang->translate__id = $text->id; $translateLang->lang = $lang->alias; } if ($translateLang->translate != $textTranslated[$translateLang->lang]) { $isChange = TRUE; $translateLang->translate = $textTranslated[$translateLang->lang]; if (!$translateLang->save()) { Yii::trace('TRANSLATE EDIT SAVE FATAL ERROR. CODE#1: ' . var_export($translateLang->getErrors(), TRUE)); throw new CException('Ошибка сохранения перевода', E_USER_ERROR); } } } } if ((bool) $isChange) { if ($text->object_type == Translate::OBJECT_TYPE_STATIC_JAVASCRIPT) { Translate::fileRegenerateJavascript(); } else { Translate::fileRegenerate(); } } echo CJSON::encode(array('result' => $isChange, 'texts' => $textTranslated)); }
public static function fileRegenerateJavascript() { $path = Yii::app()->basePath . '/../js/translate/app_translate.js'; $directory = Yii::app()->basePath . '/../js/translate'; if (!file_exists($directory)) { if (!mkdir($directory, self::FILE_MODE, true)) { trigger_error('Не удалось создать директорию для хранения транслита. Проверьте права.', E_USER_ERROR); } @chmod($directory, self::FILE_MODE); } $langsModel = Langs::model()->findAll(); $result = array(); foreach ($langsModel as $langModel) { $translatesLang = TranslateLang::model()->findAll(array('condition' => 'lang=:lang AND text != ""', 'params' => array(':lang' => $langModel->alias), 'with' => array('translateModel' => array('joinType' => 'INNER JOIN', 'condition' => 'object_type=:object_type_javascript', 'params' => array(':object_type_javascript' => self::OBJECT_TYPE_STATIC_JAVASCRIPT))))); foreach ($translatesLang as $translate) { $result[$translate->lang . '_' . $translate->translateModel->text] = $translate->translate; } } $predata = 'var app_js_translate = new Object;' . "\n"; $body = ''; foreach ($result as $key => $dataset) { $body .= "\t" . "app_js_translate['" . $key . "']" . "\t" . '=' . "\t" . "'" . $dataset . "';" . "\n"; } file_put_contents($path, $predata . $body); }