[ 'class' => AccessControl::className(), 'rules' => [ [ 'actions' => [ 'login', 'error', ], 'allow' => true, ], [ 'allow' => true, 'roles' => [ '@' ], ], ], ], ]; } /** * Action to configure sitemap of the website * * @return string */ public function actionIndex() { return $this->render('index'); } /** * Action to configure sitemap of the website * * @return string */ public function actionUpdate() { /** * @var Sitemap $sitemap */ $request = \Yii::$app->request; // ***** Generate SitemapDynamic models for every entity in Sitemap component $sitemap = \Yii::$app->get('sitemap'); $entities = $sitemap->entities; /** * @var SitemapDynamic[] $entity_models */ $entity_models = []; foreach ($entities as $entity) { $entity_model = new SitemapDynamic(); $entity_model->entity = $entity[ 'class' ]; $entity_model->status = SitemapDynamic::STATUS_DISABLED; $entity_models[] = $entity_model; } // ***** <<< End if ($request->isPost) { $success = false; // ***** Create SitemapStatic models from POST and delete existing $models = []; $index = 1; foreach ($request->post('SitemapStatic') as $item) { $model = new SitemapStatic(); if ($model->load($item, '') && $model->validate()) { $model->id = $index++; $models[] = $model; } } if (!empty( $models )) { $old = SitemapStatic::find() ->all(); foreach ($old as $item) { $item->delete(); } foreach ($models as $model) { $model->save(false); $success = true; } } // ***** <<< End // ***** Create SitemapDynamic models from POST and delete existing /** * @var SitemapDynamic[] $old_entity_models */ $old_entity_models = SitemapDynamic::find() ->all(); foreach ($old_entity_models as $old_entity_model) { $old_entity_model->delete(); } $index = 1; $entity_models = []; foreach ($request->post('SitemapDynamic') as $item) { $entity = new SitemapDynamic(); if ($entity->load($item, '') && $entity->validate()) { $entity->id = $index++; $entity->save(false); $entity_models[] = $entity; $success = true; } } if ($success) { if ($request->post('action', '') == 'generate') { if ($sitemap->generateXML()) { \Yii::$app->session->setFlash( 'success', \Yii::t( 'core', 'Sitemap generated to ' . \Yii::getAlias( $sitemap->path . '.' ) ) ); } } return $this->redirect([ 'index' ]); } // ***** <<< End } else { // ***** Find existing SitemapStatic models $models = SitemapStatic::find() ->all(); if (empty( $models )) { $models = [ new SitemapStatic() ]; } // ***** <<< End // ***** Fill SitemapDynamic models from Sitemap component with existing models /** * @var SitemapDynamic[] $old_entity_models */ $old_entity_models = SitemapDynamic::find() ->indexBy('entity') ->all(); foreach ($entity_models as $index => $entity_model) { if (isset( $old_entity_models[ $entity_model->entity ] )) { $entity_model->status = $old_entity_models[ $entity_model->entity ]->status; $entity_model->priority = $old_entity_models[ $entity_model->entity ]->priority; $entity_model->frequency = $old_entity_models[ $entity_model->entity ]->frequency; } } // ***** <<< End } return $this->render( 'update', [ 'models' => $models, 'entity_models' => $entity_models, ] ); } /** * Create activeField for static sitemap * * @return string */ public function actionCreateStatic() { $content = ''; $request = \Yii::$app->request; $formId = $request->get('formId'); $count = $request->get('count'); if (empty( $formId ) || empty( $count )) { return $this->renderContent($content); } $model = new SitemapStatic(); $form = new ActiveForm(); $content .= $form->field( $model, "[$count]url", [ 'options' => [ 'class' => 'form-group col-xs-5 col-sm-6', ], ] ) ->textInput() ->render(); $content .= $form->field( $model, "[$count]frequency", [ 'options' => [ 'class' => 'form-group col-xs-3 col-sm-3', ], ] ) ->dropDownList( [ 'always' => 'always', 'hourly' => 'hourly', 'daily' => 'daily', 'weekly' => 'weekly', 'monthly' => 'monthly', 'yearly' => 'yearly', 'never' => 'never', ] ) ->render(); $content .= $form->field( $model, "[$count]priority", [ 'options' => [ 'class' => 'form-group col-xs-3 col-sm-2', ], ] ) ->textInput() ->render(); $content .= Html::icon( 'minus', [ 'class' => 'col-xs-1 field-group-remove', 'onclick' => 'sitemap_remove(this)', ] ); foreach ($form->attributes as $index => $attribute) { $content .= Html::script("$('#w0').yiiActiveForm('add', " . Json::htmlEncode($attribute) . ");"); } $content = Html::tag( 'div', $content, [ 'class' => 'row field-group', ] ); $this->layout = false; return $this->renderContent($content); } /** * Generate sitemap XML to Sitemap::$path * * @return bool */ public function actionGenerate() { $response = \Yii::$app->response; $response->format = $response::FORMAT_JSON; /** * @var Sitemap $sitemap */ $sitemap = \Yii::$app->get('sitemap'); return $sitemap->generateXML(); } }