/**
  * Show export form or generate export file on post
  * @return string
  */
 public function run()
 {
     /** @var Module $module */
     $module = Module::getInstance();
     $model = new ExportForm(['format' => $module->defaultExportFormat]);
     if ($model->load(Yii::$app->request->post())) {
         $fileName = Yii::t('language', 'translations') . '.' . $model->format;
         Yii::$app->response->format = $model->format;
         Yii::$app->response->formatters = [Response::FORMAT_XML => ['class' => XmlResponseFormatter::className(), 'rootTag' => 'translations'], Response::FORMAT_JSON => ['class' => JsonResponseFormatter::className()]];
         Yii::$app->response->setDownloadHeaders($fileName);
         return $model->getExportData();
     } else {
         if (empty($model->languages)) {
             $model->exportLanguages = $model->getDefaultExportLanguages($module->defaultExportStatus);
         }
         return $this->controller->render('export', ['model' => $model]);
     }
 }
 /**
  * @param array $params Search conditions.
  * @return ActiveDataProvider
  */
 public function search($params)
 {
     Yii::$app->session->setFlash('TM-language__id', $params['language_id']);
     $query = LanguageSource::find();
     $dataProvider = new ActiveDataProvider(['query' => $query]);
     $dataProvider->setSort(['attributes' => ['id', 'category', 'message', 'translation' => ['asc' => ['translation' => SORT_ASC], 'desc' => ['translation' => SORT_DESC], 'label' => Yii::t('language', 'Translation')]]]);
     if (!($this->load($params) && $this->validate())) {
         $query->joinWith('languageTranslateByLanguage');
         return $dataProvider;
     }
     $query->andFilterWhere(['id' => $this->id, 'category' => $this->category]);
     $query->andFilterWhere(['like', 'message', $this->message]);
     $query->joinWith(['languageTranslateByLanguage' => function ($query) {
         if ($this->translation) {
             $searchEmptyCommand = Module::getInstance()->searchEmptyCommand;
             if ($searchEmptyCommand && $this->translation == $searchEmptyCommand) {
                 $query->andWhere(['or', ['translation' => null], ['translation' => '']]);
             } else {
                 $query->andWhere(['like', 'translation', $this->translation]);
             }
         }
     }]);
     return $dataProvider;
 }