Пример #1
0
 /**
  * @inheritdoc
  */
 public function search($params)
 {
     $query = Message::find()->joinWith(['sourceMessage' => function ($query) {
         $query->from(['sourceMessage' => SourceMessage::tableName()]);
     }]);
     $dataProvider = new ActiveDataProvider(['query' => $query]);
     if ($this->language) {
         $query->filterWhere(['language' => $this->language]);
     }
     if ($this->prefix) {
         $query->andFilterWhere(['or', ['like', 'sourceMessage.category', $this->prefix . '.'], ['like', 'sourceMessage.category', $this->prefix . '/']]);
     }
     if (!($this->load($params) && $this->validate())) {
         return $dataProvider;
     }
     $query->andFilterWhere(['like', 'translation', $this->translation])->andFilterWhere(['like', 'sourceMessage.message', $this->source]);
     if ($this->category) {
         if ($this->prefix) {
             $query->andFilterWhere(['or', ['like', 'sourceMessage.category', $this->prefix . '.' . $this->category], ['like', 'sourceMessage.category', $this->prefix . '/' . $this->category]]);
         } else {
             $query->andFilterWhere(['like', 'sourceMessage.category', $this->category]);
         }
     }
     if ($this->translationStatus === static::MESSAGE_TRANSLATED_YES) {
         $query->andWhere('translation IS NOT NULL AND translation <> ""');
     } elseif ($this->translationStatus === static::MESSAGE_TRANSLATED_NO) {
         $query->andWhere('translation IS NULL OR translation = ""');
     }
     return $dataProvider;
 }
 public function translated()
 {
     $messageTableName = Message::tableName();
     $query = Message::find()->select($messageTableName . '.id');
     $i = 0;
     foreach (Yii::$app->getI18n()->languages as $language) {
         if ($i === 0) {
             $query->andWhere($messageTableName . '.language = :language and ' . $messageTableName . '.translation is not null', [':language' => $language]);
         } else {
             $query->innerJoin($messageTableName . ' t' . $i, 't' . $i . '.id = ' . $messageTableName . '.id and t' . $i . '.language = :language and t' . $i . '.translation is not null', [':language' => $language]);
         }
         $i++;
     }
     $ids = $query->indexBy('id')->all();
     $this->andWhere(['in', 'id', array_keys($ids)]);
     return $this;
 }
 public function actionSaveTranslate()
 {
     if (!Yii::$app->request->post('hasEditable', false)) {
         return;
     }
     //$key = unserialize(Yii::$app->request->post('editableKey', false));
     $key = json_decode(Yii::$app->request->post('editableKey', false), true);
     if (empty($key)) {
         return;
     }
     /** @var Message $model */
     $model = Message::findOne($key);
     if (Model::loadMultiple([Yii::$app->request->post('editableIndex', 0) => $model], Yii::$app->request->post()) && $model->save()) {
         echo Json::encode(['output' => Html::encode($model->translation)]);
     } else {
         echo Json::encode(['message' => 'Ошибки при вводе']);
     }
 }
 public function run()
 {
     if (Yii::$app->request->isPost && Yii::$app->request->validateCsrfToken()) {
         try {
             $messages = Yii::$app->request->post('messages');
             foreach ($messages as $idLanguage => $message) {
                 if ($message) {
                     list($id, $language) = explode('::', $idLanguage);
                     Message::updateAll(['translation' => $message], 'id = :id AND language = :language', [':id' => $id, ':language' => $language]);
                 }
             }
             $class = 'success';
             $body = 'Cообщения успешно переведены!';
         } catch (Exception $e) {
             $class = 'danger';
             $body = 'Произошла ошибка!' . (YII_DEBUG ? ' код: <b>' . $e->getCode() . '</b>, имя: <b>' . $e->getName() . '</b>, сообщение: <b>' . $e->getMessage() . '</b>' : '');
         } catch (\Exception $e) {
             $class = 'danger';
             $body = 'Произошла ошибка!' . (YII_DEBUG ? ' код: <b>' . $e->getCode() . '</b>, имя: <b>' . $e->getName() . '</b>, сообщение: <b>' . $e->getMessage() . '</b>' : '');
         }
         return Alert::widget(['body' => $body, 'options' => ['class' => 'alert-' . $class]]);
     }
 }
Пример #5
0
 public function getMessages()
 {
     return $this->hasMany(Message::className(), ['id' => 'id'])->indexBy('language');
 }
Пример #6
0
 public function actionFlush()
 {
     $tableNames = [Message::tableName(), SourceMessage::tableName()];
     $db = Yii::$app->getDb();
     foreach ($tableNames as $tableName) {
         $db->createCommand()->delete($tableName)->execute();
     }
     echo PHP_EOL . 'Done.' . PHP_EOL;
 }