/** * 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; }