From 08207dd2dfcb1494219a0100944d0aaf04924d4c Mon Sep 17 00:00:00 2001 From: Owen Bush <ojb@ukhhf.co.uk> Date: Thu, 28 Mar 2019 17:33:10 -0600 Subject: [PATCH] Added cloning --- recurring_events.module | 17 +++++++++++++++++ recurring_events.permissions.yml | 21 +++++++++++++++++++++ recurring_events.routing.yml | 16 +++++++++++++++- src/Entity/EventInstance.php | 2 -- src/EventInstanceAccessControlHandler.php | 3 --- 5 files changed, 53 insertions(+), 6 deletions(-) diff --git a/recurring_events.module b/recurring_events.module index e2704dbd..31285b70 100644 --- a/recurring_events.module +++ b/recurring_events.module @@ -6,6 +6,7 @@ */ use Drupal\Core\Routing\RouteMatchInterface; +use Drupal\Core\Entity\EntityInterface; /** * Implements hook_help(). @@ -22,3 +23,19 @@ function recurring_events_help($route_name, RouteMatchInterface $route_match) { default: } } + +/** + * Implements hook_entity_operation(). + */ +function recurring_events_entity_operation(EntityInterface $entity) { + $operations = []; + if ($entity->getEntityTypeId() == 'eventseries' || $entity->getEntityTypeId() == 'eventinstance') { + $operations['clone'] = [ + 'title' => t('Clone'), + 'weight' => 50, + 'url' => $entity->toUrl('clone-form'), + ]; + } + + return $operations; +} diff --git a/recurring_events.permissions.yml b/recurring_events.permissions.yml index 28af1d21..fa37cd70 100644 --- a/recurring_events.permissions.yml +++ b/recurring_events.permissions.yml @@ -19,6 +19,27 @@ administer eventseries entity: description: 'Make changes to the event series entity type.' restrict access: true +# Event Instance Entities. +view eventinstance entity: + title: 'View eventinstance entity' + description: 'View existing event instance entities' +view unpublished eventinstance entity: + title: 'View unpublished eventinstance entity' + description: 'View exisiting unpublished event instance entities' +edit eventinstance entity: + title: 'Edit eventinstance entity' + description: 'Modify existing event instance entities' +delete eventinstance entity: + title: 'Delete eventinstance entity' + description: 'Delete existing event instance entities' +clone eventinstance entity: + title: 'Clone eventinstance entity' + description: 'Clone existing event instance entities' +administer eventinstance entity: + title: 'Administer eventinstance entity' + description: 'Make changes to the event instance entity type.' + restrict access: true + # Event Series Administration. administer eventseries: title: 'Administer eventseries' diff --git a/recurring_events.routing.yml b/recurring_events.routing.yml index 185ce19f..e6920792 100644 --- a/recurring_events.routing.yml +++ b/recurring_events.routing.yml @@ -54,7 +54,7 @@ entity.eventseries.clone_form: path: '/events/series/{eventseries}/clone' defaults: _entity_form: eventseries.clone - _title_callback: '\Drupal\recurring_events\Controller\EventSeriesController::getCloneTitle' + _title: 'Clone Event Series' requirements: _entity_access: 'eventseries.clone' eventseries: \d+ @@ -116,6 +116,20 @@ entity.eventinstance.delete_form: eventinstance: type: entity:eventinstance +# Clone an EventInstance. +entity.eventinstance.clone_form: + path: '/events/{eventinstance}/clone' + defaults: + # Calls the form.clone controller, defined in the Event Instance entity. + _entity_form: eventinstance.clone + _title: Clone Event Instance + requirements: + _entity_access: 'eventinstance.clone' + options: + parameters: + eventinstance: + type: entity:eventinstance + # Event Instance table list route. entity.eventinstance.collection: path: '/events' diff --git a/src/Entity/EventInstance.php b/src/Entity/EventInstance.php index 90b37361..3b249165 100644 --- a/src/Entity/EventInstance.php +++ b/src/Entity/EventInstance.php @@ -81,7 +81,6 @@ use Drupal\user\UserInterface; * "delete" = "Drupal\recurring_events\Form\EventInstanceDeleteForm", * "default" = "Drupal\recurring_events\Form\EventInstanceForm", * "clone" = "Drupal\recurring_events\Form\EventInstanceCloneForm", - * "contact" = "Drupal\recurring_events\Form\EventInstanceContactRegistrationsForm", * }, * "access" = "Drupal\recurring_events\EventInstanceAccessControlHandler", * }, @@ -113,7 +112,6 @@ use Drupal\user\UserInterface; * "version-history" = "/events/{eventinstance}/revisions", * "revision" = "/events/{eventinstance}/revisions/{eventinstance_revision}/view", * "clone-form" = "/events/{eventinstance}/clone", - * "contact-form" = "/events/{eventinstance}/registration/contact", * }, * field_ui_base_route = "eventinstance.settings", * ) diff --git a/src/EventInstanceAccessControlHandler.php b/src/EventInstanceAccessControlHandler.php index 23f21b56..9a8ecabb 100644 --- a/src/EventInstanceAccessControlHandler.php +++ b/src/EventInstanceAccessControlHandler.php @@ -37,9 +37,6 @@ class EventInstanceAccessControlHandler extends EntityAccessControlHandler { case 'clone': return AccessResult::allowedIfHasPermission($account, 'clone eventinstance entity'); - - case 'contact': - return AccessResult::allowedIfHasPermission($account, 'contact eventinstance registration entities'); } return AccessResult::allowed(); } -- GitLab