public function safeUp()
 {
     // Load application languages
     $languages = Yii::$app->params['languages'];
     // Create SEO settings
     $seoSettings = ['seo/meta/title' => ['label' => 'Metatag - Title', 'value' => 'Title', 'translateable' => 1], 'seo/meta/description' => ['label' => 'Metatag - Description', 'value' => 'Description', 'translateable' => 1], 'seo/meta/keywords' => ['label' => 'Metatag - Keywords', 'value' => 'Keywords', 'translateable' => 1], 'seo/analytics/email-google-account' => ['label' => 'E-mailadres Google account', 'value' => '*****@*****.**', 'translateable' => 0]];
     foreach ($seoSettings as $k => $v) {
         // Create setting
         $setting = new Setting(['key' => $k, 'category_id' => 2, 'label' => $v['label'], 'type' => Setting::TYPE_USER_DEFINED, 'template' => Setting::TEMPLATE_TEXT, 'translateable' => $v['translateable']]);
         // Set values
         foreach ($languages as $languageId => $languageName) {
             $setting->translate($languageId)->value = $v['value'];
         }
         $setting->save(false);
     }
     // Create Social settings
     $socialSettings = ['social/facebook' => ['label' => 'Facebook account', 'value' => 'https://www.facebook.com', 'translateable' => 1], 'social/twitter' => ['label' => 'Twitter account', 'value' => 'https://www.twitter.com/', 'translateable' => 1], 'social/google+' => ['label' => 'Google+ account', 'value' => 'https://plus.google.com', 'translateable' => 1], 'social/linkedin' => ['label' => 'LinkedIn account', 'value' => 'https://www.linkedin.com/', 'translateable' => 1]];
     foreach ($socialSettings as $k => $v) {
         // Create setting
         $setting = new Setting(['key' => $k, 'category_id' => 3, 'label' => $v['label'], 'type' => Setting::TYPE_USER_DEFINED, 'template' => Setting::TEMPLATE_TEXT, 'translateable' => $v['translateable']]);
         // Set values
         foreach ($languages as $languageId => $languageName) {
             $setting->translate($languageId)->value = $v['value'];
         }
         $setting->save(false);
     }
 }
 /**
  * Lists all Seo models.
  * @return mixed
  */
 public function actionIndex()
 {
     $languages = Yii::$app->params['languages'];
     $tags = ['title' => Setting::findOne(['key' => 'seo/meta/title']), 'description' => Setting::findOne(['key' => 'seo/meta/description']), 'keywords' => Setting::findOne(['key' => 'seo/meta/keywords'])];
     if (Yii::$app->request->getIsPost()) {
         $post = Yii::$app->request->post();
         try {
             // Load the models
             $title = Setting::findOne(['key' => 'seo/meta/title']);
             $description = Setting::findOne(['key' => 'seo/meta/description']);
             $keywords = Setting::findOne(['key' => 'seo/meta/keywords']);
             // Wrap the everything in a database transaction
             $transaction = Yii::$app->db->beginTransaction();
             // Update the values
             foreach ($languages as $languageId => $languageName) {
                 // Update 'seo/meta/title'
                 $title->translate($languageId)->value = $post['title'][$languageId];
                 // Update 'seo/meta/description'
                 $description->translate($languageId)->value = $post['description'][$languageId];
                 // Update 'seo/meta/keywords'
                 $keywords->translate($languageId)->value = $post['keywords'][$languageId];
             }
             if (!$title->save()) {
                 return $this->render('settings', ['tags' => $tags]);
             }
             if (!$description->save()) {
                 return $this->render('settings', ['tags' => $tags]);
             }
             if (!$keywords->save()) {
                 return $this->render('settings', ['tags' => $tags]);
             }
             $transaction->commit();
             // Set flash message
             Yii::$app->getSession()->setFlash('seo', Yii::t('app', 'The settings have been updated'));
             return $this->redirect(['index']);
         } catch (\Exception $e) {
             return $this->render('settings', ['tags' => $tags, 'errors' => $e->getMessage()]);
         }
     }
     return $this->render('settings', ['tags' => $tags]);
 }
 /**
  * Creates data provider instance with search query applied
  * @return ActiveDataProvider
  */
 public function search($params)
 {
     $query = Setting::find();
     //$query->andFilterWhere(['language' => Yii::$app->language]);
     $dataProvider = new ActiveDataProvider(['query' => $query, 'pagination' => ['pageSize' => 50]]);
     // Join the entity model as a relation
     $query->joinWith(['category']);
     // A normal user is only allowed to view the 'user-defined' settings
     if (!Yii::$app->user->can('Superadmin')) {
         $query->andFilterWhere(['type' => Setting::TYPE_USER_DEFINED]);
     }
     // enable sorting for the label attribute
     $dataProvider->sort->attributes['label'] = ['asc' => ['label' => SORT_ASC], 'desc' => ['label' => SORT_DESC]];
     // enable sorting for the related column
     $dataProvider->sort->attributes['category.name'] = ['asc' => ['settings_categories.name' => SORT_ASC], 'desc' => ['settings_categories.name' => SORT_DESC]];
     $dataProvider->sort->defaultOrder = ['category.name' => SORT_ASC, 'label' => SORT_ASC];
     if (!($this->load($params) && $this->validate())) {
         return $dataProvider;
     }
     $query->andFilterWhere(['key' => $this->key]);
     $query->andFilterWhere(['like', 'label', $this->label])->andFilterWhere(['LIKE', 'settings_categories.name', $this->getAttribute('category.name')]);
     return $dataProvider;
 }
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getSetting()
 {
     return $this->hasOne(Setting::className(), ['id' => 'setting_id']);
 }
 /**
  * Finds the Setting model based on its primary key value.
  * If the model is not found, a 404 HTTP exception will be thrown.
  * @param string $id
  * @return Setting the loaded model
  * @throws NotFoundHttpException if the model cannot be found
  */
 protected function findModel($id)
 {
     if (($model = Setting::findOne($id)) !== null) {
         return $model;
     } else {
         throw new NotFoundHttpException(Yii::t('app', 'The requested item does not exist'));
     }
 }