diff --git a/src/Controller/TourUIController.php b/src/Controller/TourUIController.php index 95f5c7c..a20ba32 100644 --- a/src/Controller/TourUIController.php +++ b/src/Controller/TourUIController.php @@ -6,6 +6,7 @@ use Drupal\Core\Controller\ControllerBase; use Drupal\Core\Extension\ModuleHandlerInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\JsonResponse; +use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; /** @@ -67,4 +68,34 @@ class TourUIController extends ControllerBase { } + public function enable($tour) { + return $this->setStatus($tour, true); + } + + public function disable($tour) { + return $this->setStatus($tour, false); + } + + /** + * Set status of given tour. + * + * @param string $tour Tour ID + * @param bool $status + * + * @return \Symfony\Component\HttpFoundation\RedirectResponse + * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException + * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException + * @throws \Drupal\Core\Entity\EntityStorageException + */ + protected function setStatus($tour, $status) { + $entity = \Drupal::entityTypeManager() + ->getStorage('tour') + ->load($tour); + $entity->set('status', $status); + $entity->save(); + + return new RedirectResponse('/admin/config/user-interface/tour'); + } + + } diff --git a/src/TourListBuilder.php b/src/TourListBuilder.php index 8bd0b50..a7fce49 100644 --- a/src/TourListBuilder.php +++ b/src/TourListBuilder.php @@ -5,6 +5,7 @@ namespace Drupal\tour_ui; use Drupal\Core\Entity\EntityListBuilder; use Drupal\Core\Entity\EntityInterface; use Drupal\Component\Utility\Html; +use Drupal\Core\Url; /** * Provides a listing of tours. @@ -16,6 +17,7 @@ class TourListBuilder extends EntityListBuilder { */ public function buildHeader() { $row['id'] = t('Id'); + $row['status'] = t('Status'); $row['label'] = t('Label'); $row['routes'] = t('routes'); $row['tips'] = t('Number of tips'); @@ -35,6 +37,7 @@ class TourListBuilder extends EntityListBuilder { $row = parent::buildRow($entity); $data['id'] = Html::escape($entity->id()); + $data['status'] = Html::escape( $entity->status() ? 'Enabled' : 'Disabled'); $data['label'] = Html::escape($entity->label()); // Include the routes this tour is used on. $routes_name = []; @@ -74,10 +77,25 @@ class TourListBuilder extends EntityListBuilder { 'url' => $entity->toUrl('edit-form'), 'weight' => 1, ]; + + if ($entity->status()) { + $operations['disable'] = [ + 'title' => t('Disable'), + 'url' => Url::fromRoute('entity.tour.disable', ['tour' => $entity->id()]), + 'weight' => 2, + ]; + } + else { + $operations['enable'] = [ + 'title' => t('Enable'), + 'url' => Url::fromRoute('entity.tour.enable', ['tour' => $entity->id()]), + 'weight' => 3, + ]; + } $operations['delete'] = [ 'title' => t('Delete'), 'url' => $entity->toUrl('delete-form'), - 'weight' => 2, + 'weight' => 40, ]; return $operations; diff --git a/tour_ui.routing.yml b/tour_ui.routing.yml index 40813e9..ead1878 100644 --- a/tour_ui.routing.yml +++ b/tour_ui.routing.yml @@ -22,6 +22,20 @@ entity.tour.edit_form: requirements: _permission: 'administer tour' +entity.tour.enable: + path: '/admin/config/user-interface/tour/manage/{tour}/enable' + defaults: + _controller: '\Drupal\tour_ui\Controller\TourUIController::enable' + requirements: + _permission: 'administer tour' + +entity.tour.disable: + path: '/admin/config/user-interface/tour/manage/{tour}/disable' + defaults: + _controller: '\Drupal\tour_ui\Controller\TourUIController::disable' + requirements: + _permission: 'administer tour' + entity.tour.delete_form: path: '/admin/config/user-interface/tour/manage/{tour}/delete' defaults: