/** * @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]]); } }
public function getMessages() { return $this->hasMany(Message::className(), ['id' => 'id'])->indexBy('language'); }
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; }