public static function getStatus2($id)
 {
     $langs = Yii::$app->components['i18n']['languages'];
     $langlist = implode("','", $langs);
     $langLen = sizeof($langs);
     $messageTableName = Message::tableName();
     $query = Message::findBySql("SELECT * FROM yii2_message WHERE language IN ('{$langlist}') AND id={$id} AND (TRIM(translation)<>'' AND translation IS NOT NULL)")->count('*');
     return $query . "/" . $langLen;
 }
 public function translated()
 {
     $langs = Yii::$app->components['i18n']['languages'];
     $langlist = implode("','", $langs);
     $langLen = sizeof($langs);
     $messageTableName = Message::tableName();
     $query = Message::findBySql("\n          SELECT yii2_source_message.*\n          FROM yii2_source_message, yii2_message\n          WHERE yii2_message.language IN ('{$langlist}') AND (TRIM(yii2_message.translation)='' OR yii2_message.translation IS NULL) AND yii2_source_message.id=yii2_message.id")->all();
     $ids = [];
     foreach ($query as $row) {
         $ids[] = $row->id;
     }
     $this->andWhere("id NOT IN ('" . implode("','", $ids) . "')");
     return $this;
 }
 /**
  * @param array|null $params
  * @return ActiveDataProvider
  */
 public function search($params)
 {
     $query = SourceMessage::find()->joinWith('message');
     $dataProvider = new ActiveDataProvider(['query' => $query]);
     if (!($this->load($params) && $this->validate())) {
         return $dataProvider;
     }
     if ($this->status == static::STATUS_TRANSLATED) {
         $query->translated();
     }
     if ($this->status == static::STATUS_NOT_TRANSLATED) {
         $query->notTranslated();
     }
     $query->andFilterWhere(['like', 'category', $this->category])->andFilterWhere(['like', 'message', $this->message])->andFilterWhere(['like', Message::tableName() . '.translation', $this->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 and ' . $messageTableName . '.translation <> ""', [':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', $messageTableName . '.id', array_keys($ids)]);
     return $this;
 }
 /**
  * @return \uran1980\yii\modules\i18n\models\query\SourceMessageQuery
  */
 public function translated()
 {
     $table = Message::tableName();
     $query = Message::find()->select("{$table}.id");
     $i = 0;
     foreach (Yii::$app->getI18n()->languages as $language) {
         if ($i === 0) {
             $query->andWhere("{$table}.language = :language and {$table}.translation is not null", [':language' => $language]);
         } else {
             $query->innerJoin("{$table} t{$i}", "t{$i}.id = {$table}.id and t{$i}.language = :language and t{$i}.translation is not null", [':language' => $language]);
         }
         $i++;
     }
     $ids = $query->indexBy('id')->all();
     $this->andWhere(['in', "{$table}.id", array_keys($ids)])->andWhere(['not like', 'message', '@@']);
     return $this;
 }
 public function getMessage()
 {
     $firstLang = Yii::$app->getI18n()->languages[0];
     return $this->hasOne(Message::className(), ['id' => 'id'])->where(['language' => $firstLang])->indexBy('language');
 }
 public function getMessages()
 {
     return $this->hasMany(Message::className(), ['id' => 'id'])->indexBy('language');
 }
Example #8
0
use Zelenin\yii\modules\I18n\Module;
$this->title = 'Переводы';
echo Breadcrumbs::widget(['links' => [$this->title]]);
?>
<div class="panel panel-default">
    <div class="panel-heading">
        <h3 class="panel-title"><?php 
echo Html::encode($this->title);
?>
</h3>
    </div>

    <div class="panel-body">
        <?php 
Pjax::begin();
echo GridView::widget(['filterModel' => $searchModel, 'dataProvider' => $dataProvider, 'columns' => [['attribute' => 'id', 'value' => function ($model, $index, $dataColumn) {
    return $model->id;
}, 'filter' => false], ['attribute' => 'message', 'format' => 'raw', 'value' => function ($model, $index, $widget) {
    return Html::a($model->message, ['update', 'id' => $model->id], ['data' => ['pjax' => 0]]);
}], ['attribute' => 'translation', 'format' => 'raw', 'value' => function ($model, $index, $widget) {
    return $model->getDefaultLangTranslation();
}], ['attribute' => 'category', 'value' => function ($model, $index, $dataColumn) {
    return $model->category;
}, 'filter' => ArrayHelper::map($searchModel::getCategories(), 'category', 'category')], ['attribute' => 'status', 'value' => function ($model, $index, $widget) {
    return \Zelenin\yii\modules\I18n\models\Message::isModelFullyTranslated($model->id) ? 'Переведено' : 'Не переведено';
}, 'filter' => Html::dropDownList($searchModel->formName() . '[status]', $searchModel->status, $searchModel->getStatus(), ['class' => 'form-control', 'prompt' => ''])]]]);
Pjax::end();
?>
    </div>
</div>
 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;
 }
 /**
  * @param array|null $params
  * @return ActiveDataProvider
  */
 public function search($params)
 {
     $query = SourceMessage::find();
     $dataProvider = new ActiveDataProvider(['query' => $query, 'sort' => ['defaultOrder' => ['id' => SORT_DESC]]]);
     // check and populate params
     if (!($this->load($params) && $this->validate())) {
         $query->joinWith(['messages']);
         return $dataProvider;
     }
     if ($this->status == static::STATUS_TRANSLATED) {
         $query->joinWith(['messages']);
         $query->translated();
     }
     if ($this->status == static::STATUS_NOT_TRANSLATED) {
         $query->joinWith(['messages']);
         $query->notTranslated();
     }
     if ($this->status == static::STATUS_DELETED) {
         $query->joinWith(['messages']);
         $query->deleted();
     }
     // search with related table
     // @see http://www.yiiframework.com/wiki/621/filter-sort-by-calculated-related-fields-in-gridview-yii-2-0/
     if (!empty($this->translation)) {
         $query->joinWith(['messages' => function ($q) {
             $q->where(['like', Message::tableName() . '.translation', $this->translation]);
         }]);
     }
     $query->andFilterWhere(['like', 'category', $this->category])->andFilterWhere(['like', 'message', $this->message]);
     return $dataProvider;
 }