/** * 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]); }
/** * @return \yii\db\ActiveQuery */ public static function getMessageIdsByCategory($category) { $messages = MessageSource::getMessagesByCategory($category); $ids = array_map(function ($message) { return $message->id; }, $messages); return $ids; }
/** * @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; }
<div class="message-source-form"> <?php $form = ActiveForm::begin(['id' => 'message-source-form', 'validateOnBlur' => false, 'enableClientValidation' => false]); ?> <div class="row"> <div class="col-md-9"> <div class="panel panel-default"> <div class="panel-body"> <div class="row"> <div class="col-md-6"> <?php $categories = ArrayHelper::merge(MessageSource::getCategories(), [' ' => Yii::t('yee/translation', 'Create New Category')]); ?> <?php echo $form->field($model, 'category')->dropDownList($categories, ['prompt' => '']); ?> </div> <div class="col-md-6"> <div class="form-group new-category-group"> <label class="control-label" for="new-category"><?php echo Yii::t('yee/translation', 'New Category Name'); ?> </label> <input type="text" id="new-category" class="form-control" name="category" value="<?php echo Yii::$app->getRequest()->post('category');