/** * Lists all models. * @return mixed */ public function actionIndex() { $sourceLanguage = 'en-US'; $languages = Yii::$app->yee->languages; $categories = MessageSource::getMessageCategories(); unset($languages[$sourceLanguage]); $currentLanguage = Yii::$app->getRequest()->get('translation', NULL); $currentCategory = Yii::$app->getRequest()->get('category', NULL); if (!in_array($currentLanguage, array_keys($languages))) { $currentLanguage = NULL; } if (!in_array($currentCategory, array_keys($categories))) { $currentCategory = NULL; } if ($currentLanguage && $currentCategory) { Message::initMessages($currentCategory, $currentLanguage); $messageIds = MessageSource::getMessageIdsByCategory($currentCategory); $sourceTable = MessageSource::tableName(); $messageTable = Message::tableName(); $messages = Message::find()->andWhere(['IN', 'source_id', $messageIds])->andWhere(['language' => $currentLanguage])->indexBy('id')->all(); } else { $messages = []; } if (User::hasPermission('updateTranslations') && Message::loadMultiple($messages, Yii::$app->request->post()) && Model::validateMultiple($messages)) { foreach ($messages as $message) { $message->save(false); } Yii::$app->session->setFlash('crudMessage', 'Your item has been updated.'); return $this->refresh(); } return $this->render('index', ['messages' => $messages, 'languages' => $languages, 'categories' => $categories, 'currentLanguage' => $currentLanguage, 'currentCategory' => $currentCategory]); }
/** * @inheritdoc */ public static function initMessages($category, $language) { $messageIds = MessageSource::getMessageIdsByCategory($category); $translations = Message::find()->select('source_id')->andWhere(['IN', 'source_id', $messageIds])->andWhere(['language' => $language])->all(); $translationIds = array_map(function ($translation) { return $translation->source_id; }, $translations); $translationsToCreate = array_diff($messageIds, $translationIds); foreach ($translationsToCreate as $translationId) { $message = new Message(); $message->source_id = $translationId; $message->language = $language; $message->translation = ''; $message->save(); } return true; }