diff --git a/reservation.inc b/reservation.inc index 0db3e7c..11e8e22 100644 --- a/reservation.inc +++ b/reservation.inc @@ -18,7 +18,7 @@ function reserve_form_reserve_reservation_form_alter(array &$form, FormStateInte // Retrieve an array which contains the path pieces. $current_path = \Drupal::service('path.current')->getPath(); $path_args = explode('/', $current_path); - + // for case of std reservation add form - this should likely be blocked; but leave for development if (count($path_args) <= 3) return; @@ -28,6 +28,22 @@ function reserve_form_reserve_reservation_form_alter(array &$form, FormStateInte $path_args = explode('/', $_GET['path'] ); $length = 30 * $_GET['count']; }; + $user = \Drupal::currentUser(); + $user_roles = $user->getRoles(); + //Allow users with the 'add reservation extended' to book unlimited number + //of reservations.' + $book_extended = FALSE; + //Allow administrators to create as many reservations as needed. + if (in_array('administrator', $user_roles)) { + $book_extended = TRUE; + } + //Allow perm 'add reservations extended' to add as many as needed. + $roles_permissions = user_role_permissions($user_roles); + foreach ($roles_permissions as $role_key => $permissions) { + if (in_array('add reservations extended', $permissions)) { + $book_extended = TRUE; + } + } //if (user_access('administer site configuration') && isset($_GET['edit']) && $_GET['edit'] == 'standard') { // return; @@ -61,9 +77,38 @@ function reserve_form_reserve_reservation_form_alter(array &$form, FormStateInte $year = reserve_which_year($month, $day); $yyyymmdd = date('Y-m-d', strtotime($year . '-' . $month . '-' . $day)); $d = $yyyymmdd . ' 00:00:00'; - } - $entity = entity_load($entity_type, $eid); + if (reserve_daily_max_exceeded($yyyymmdd) && !$book_extended) { + $form = array(); + $form['message'] = [ + '#type' => 'markup', + '#weight' => -25, + '#markup' => ' +
+
', + ]; + return; + } + $config = \Drupal::config('reserve.settings'); + $max_per_user = $config->get('reservations_per_user'); + if (count(reserve_user_reservations()) > $max_per_user + && !$book_extended) { + $form = array(); + $form['message'] = [ + '#type' => 'markup', + '#weight' => -25, + '#markup' => ' +
+
', + ]; + return; + } + } + $entity = \Drupal::entityTypeManager()->getStorage($entity_type)->load($eid); $bundle = $entity->bundle(); $date = date('l, M d, Y', strtotime($d)); $time = reserve_display_time($t); @@ -96,12 +141,17 @@ function reserve_form_reserve_reservation_form_alter(array &$form, FormStateInte $form['reservable_content_type']['#access'] = false; // in prep for having better lockout of having slot taken by another user; let's also hide Length - $form['reservation_length']['#access'] = false; + // Lets not hide the length so mobile users can pick a length. + //$form['reservation_length']['#access'] = false; // hide other fields we don't want to show $form['user_id']['#access'] = false; $form['reservation_series_id']['#access'] = false; $form['reservation_ebundle']['#access'] = false; + if(!$book_extended){ + $form['reservation_repeat_type']['#access'] = FALSE; + $form['reservation_repeat_until']['#access'] = FALSE; + } } // if we are editing; let's do some extra things: @@ -222,7 +272,7 @@ function reserve_form_reserve_reservation_form_alter(array &$form, FormStateInte */ function reserve_form_reserve_reservation_delete_form_alter(array &$form, FormStateInterface $form_state) { // Retrieve an array which contains the path pieces. - $refer_path = $_SERVER[HTTP_REFERER]; + $refer_path = $_SERVER['HTTP_REFERER']; $path_args = explode('/', $refer_path); $month = $path_args[6]; @@ -231,12 +281,18 @@ function reserve_form_reserve_reservation_delete_form_alter(array &$form, FormSt $year = reserve_which_year($month, $day); $yyyymmdd = date('Y-m-d', strtotime($year . '-' . $month . '-' . $day)); - $form['ebundle'] = ['#type' => 'hidden', '#value' => $ebundle]; $form['month'] = ['#type' => 'hidden', '#value' => date('m', strtotime($yyyymmdd))]; $form['day'] = ['#type' => 'hidden', '#value' => date('d', strtotime($yyyymmdd))]; + $form['actions']['submit']['#submit'][] = 'reserve_return_to_home_page'; +} - $form['actions']['submit']['#submit'][] = 'reserve_return_to_reservations_page'; +/** + * Custom submit handler for login form. + */ +function reserve_return_to_home_page($form, FormStateInterface $form_state) { + $url = Url::fromRoute(''); + $form_state->setRedirectUrl($url); } /** diff --git a/reserve.inc b/reserve.inc index 4fc9059..a90f132 100644 --- a/reserve.inc +++ b/reserve.inc @@ -25,11 +25,9 @@ function reserve_categories($ebundle = null) { $ids = array_filter($fconfig['categories']); } else { - $ids = Drupal::service('entity.query') - ->get('reserve_category') - ->condition('status', TRUE) - //->sort('reserve_display_order', 'ASC') - ->execute(); + $query = \Drupal::service('entity_type.manager') + ->getStorage('reserve_category')->getQuery(); + $ids = $query->condition('status', TRUE)->execute(); } $cats = \Drupal::entityTypeManager()->getStorage('reserve_category')->loadMultiple($ids); @@ -59,9 +57,9 @@ function reserve_categories($ebundle = null) { function reserve_entities($ebundle) { $entity_type = ebundle_split($ebundle, 'type'); $bundle = ebundle_split($ebundle, 'bundle'); - $query = Drupal::service('entity.query') - ->get($entity_type) - ->condition('status', TRUE); + $query = \Drupal::service('entity_type.manager') + ->getStorage($entity_type)->getQuery(); + $query->condition('status', TRUE); if ($entity_type != $bundle) { $query->condition('type', $bundle); @@ -805,9 +803,8 @@ function reserve_valid_lengths($rid, $ebundle, $yyyy_mmdd, $time, $id = NULL, $a $start_time = $search_item['start_time']; $conflicts_found = false; - - $query = Drupal::service('entity.query') - ->get('reserve_reservation') + $query = \Drupal::service('entity_type.manager') + ->getStorage('reserve_reservation')->getQuery() ->condition('reservation_date', $date . '%', 'LIKE') ->condition('reservation_time', $start_time) ->condition('reservable_id', $rid) @@ -926,24 +923,21 @@ function reserve_valid_lengths($rid, $ebundle, $yyyy_mmdd, $time, $id = NULL, $a * FALSE - the maximum has not been exceeded. */ function reserve_daily_max_exceeded($yyyy_mmdd) { - global $user; + $user = \Drupal::currentUser(); $config = \Drupal::config('reserve.settings'); - $max = $config->get('reservations_per_day'); if (!$max) { return FALSE; } - $record_count = 0; - if ($user->uid) { - $ids = \Drupal::service('entity.query') - ->get('reserve_reservation') - ->condition('user_id', $user->id) - ->condition('reservation_date', 'value', $yyyy_mmdd . '%', 'like') + if ($user->id()) { + $ids = \Drupal::service('entity_type.manager') + ->getStorage('reserve_reservation')->getQuery() + ->condition('user_id', $user->id()) + ->condition('reservation_date', $yyyy_mmdd . '%', 'like') ->execute(); $record_count = count($ids); } - if ($record_count < $max) { return FALSE; } @@ -970,9 +964,8 @@ function reserve_user_reservations() { if ($user->id()) { $earliest_date = date('Y-m-d', strtotime(date('Y-m-d'))); $latest_date = date('Y-m-d', strtotime("now +13 days")); - - $ids = \Drupal::service('entity.query') - ->get('reserve_reservation') + $ids = \Drupal::service('entity_type.manager') + ->getStorage('reserve_reservation')->getQuery() ->condition('user_id', $user->id()) ->condition('reservation_date', $earliest_date, '>=') ->condition('reservation_date', $latest_date, '<=') @@ -1032,7 +1025,7 @@ function reserve_yyyymmdd($month, $day) { */ function reserve_get_reserve_bundles() { $bundles = array(); - $fieldmap = \Drupal::entityManager()->getFieldMap(); + $fieldmap = \Drupal::service('entity_field.manager')->getFieldMap(); foreach ($fieldmap as $entity_type => $typedef) { foreach ($typedef as $field) { if ($field['type'] == 'reserve_category') { @@ -1050,7 +1043,7 @@ function reserve_get_reserve_bundles() { * OR specific field name if $ebundle is provided (e.g. node.room) */ function reserve_category_fields($ebundle = NULL) { - $fieldmap = \Drupal::entityManager()->getFieldMap(); + $fieldmap = \Drupal::service('entity_field.manager')->getFieldMap(); $fields = []; foreach ($fieldmap as $entity_type => $typedef) { foreach ($typedef as $name => $field) { @@ -1071,8 +1064,9 @@ function reserve_category_fields($ebundle = NULL) { function ebundle_split($ebundle, $part) { $ebits = explode('.', $ebundle); - if ($part == 'type') return $ebits[0]; - if ($part == 'bundle') return $ebits[1]; + if ($part == 'type' && isset($ebits[0])) return $ebits[0]; + if ($part == 'bundle' && isset($ebits[1])) return $ebits[1]; + return NULL; } /* @@ -1112,7 +1106,7 @@ function reserve_which_year($month, $day) { * used for Allowed Values for Reservation.reservable_content_type field */ function reserve_site_entity_types() { - $types = \Drupal::entityManager()->getEntityTypeLabels(TRUE); + $types = \Drupal::service('entity_type.repository')->getEntityTypeLabels(TRUE); return $types['Content']; } diff --git a/reserve.info.yml b/reserve.info.yml index b112d65..6975375 100644 --- a/reserve.info.yml +++ b/reserve.info.yml @@ -1,8 +1,8 @@ name: Reserve type: module description: Reservation system. -core: 8.x package: Reserve +core_version_requirement: ^8 || ^9 dependencies: - drupal:views - drupal:options diff --git a/reserve.series.inc b/reserve.series.inc index ecdb5a5..bf075ac 100644 --- a/reserve.series.inc +++ b/reserve.series.inc @@ -36,7 +36,8 @@ function reserve_reserve_reservation_insert($entity) { $length = $entity->reservation_length->getString(); $rid = $entity->reservable_id->getString(); $rtype = $entity->reservable_content_type->getString(); - $ebundle = $rtype . '.' . entity_load($rtype, $rid)->bundle(); + $ebundle = $rtype . '.' . \Drupal::entityTypeManager() + ->getStorage($rtype)->load($rid)->bundle(); $day = date('l', strtotime($start)); $msg = ''; @@ -85,12 +86,12 @@ function reserve_reserve_reservation_insert($entity) { // lets spit out some useful msgs // first clear the msg stating we just created the reservation entity - drupal_get_messages('status'); - drupal_set_message(t('Your reservation series has been booked.')); - drupal_set_message($msg); + \Drupal::messenger()->addStatus('status'); + \Drupal::messenger()->addStatus(t('Your reservation series has been booked.')); + \Drupal::messenger()->addStatus($msg); if (count($failed)) { $dates = Markup::create('
' . implode('
', $failed)); - drupal_set_message(t('The following dates were not booked due to scheduling conflicts: %dates', array('%dates' => $dates)), 'warning'); + \Drupal::messenger()->addWarning(t('The following dates were not booked due to scheduling conflicts: %dates', array('%dates' => $dates))); } } @@ -122,12 +123,13 @@ function reserve_reserve_reservation_update($entity) { $length = $entity->reservation_length->getString(); $rid = $entity->reservable_id->getString(); $rtype = $entity->reservable_content_type->getString(); - $ebundle = $rtype . '.' . entity_load($rtype, $rid)->bundle(); + $ebundle = $rtype . '.' . \Drupal::entityTypeManager() + ->getStorage($rtype)->load($rid)->bundle(); $private = $entity->reservation_private->getString(); // grab all reservations in this series except the one being submitted - $ids = \Drupal::service('entity.query') - ->get('reserve_reservation') + $ids = \Drupal::service('entity_type.manager') + ->getStorage('reserve_reservation')->getQuery() ->condition('status', TRUE) ->condition('reservation_series_id', $sid) ->condition('id', $entity->id(), '!=') @@ -156,10 +158,10 @@ function reserve_reserve_reservation_update($entity) { } // lets spit out some useful msgs - drupal_set_message(t('Your reservation series has been modified.')); + \Drupal::messenger()->addStatus(t('Your reservation series has been modified.')); if (count($failed)) { $dates = Markup::create('
' . implode('
', $failed)); - drupal_set_message(t('NOTE: The following dates did not have their length changed due to scheduling conflicts: %dates', array('%dates' => $dates)), 'warning'); + \Drupal::messenger()->addStatus(t('NOTE: The following dates did not have their length changed due to scheduling conflicts: %dates', array('%dates' => $dates))); } } @@ -179,8 +181,8 @@ function reserve_reserve_reservation_delete($entity) { function _reserve_series_delete($entity) { $sid = $entity->get('reservation_series_id')->getString(); // grab all reservations in this series - $ids = \Drupal::service('entity.query') - ->get('reserve_reservation') + $ids = \Drupal::service('entity_type.manager') + ->getStorage('reserve_reservation')->getQuery() ->condition('reservation_series_id', $sid) ->execute(); $results = \Drupal::entityTypeManager()->getStorage('reserve_reservation')->loadMultiple($ids); @@ -188,5 +190,5 @@ function _reserve_series_delete($entity) { $result->delete(); } $title = $entity->get('name')->getString(); - drupal_set_message(t('The reservation series @title was deleted.', array('@title' => $title))); + \Drupal::messenger()->addStatus(t('The reservation series @title was deleted.', array('@title' => $title))); } diff --git a/src/Controller/CalendarController.php b/src/Controller/CalendarController.php index 1724719..8570f11 100644 --- a/src/Controller/CalendarController.php +++ b/src/Controller/CalendarController.php @@ -36,13 +36,17 @@ class CalendarController extends ControllerBase { public function calendarTitle($ebundle) { $bundle = ebundle_split($ebundle, 'bundle'); - return t('@bundle Calendar', array('@bundle' => ucwords($bundle))); + $type = ebundle_split($ebundle, 'type'); + $bundles = \Drupal::service('entity_type.bundle.info')->getBundleInfo($type); + $titlePrefix = isset($bundles[$bundle]) ? $bundles[$bundle]['label'] : $bundle; + return t('@bundle Calendar', array('@bundle' => ucwords($titlePrefix))); } private function getBundleCalendar($ebundle, $selected_month = null, $selected_day = null) { $config = \Drupal::config('reserve.settings'); // likely no need for this as not used anywhere else; but maybe for external modules global $yyyy_mmdd; + //$entity_type = ebundle_split($ebundle, 'type'); //$bundle = ebundle_split($ebundle, 'bundle'); @@ -57,7 +61,7 @@ class CalendarController extends ControllerBase { // if no Categories left; we should not bother with the rest of this if (!count($categories)) { - drupal_set_message(t('There are no configured Reserve Categories. Please contact the System Administrator'), 'warning'); + \Drupal::messenger()->addWarning(t('There are no configured Reserve Categories. Please contact the System Administrator')); return ''; } @@ -67,15 +71,22 @@ class CalendarController extends ControllerBase { // Determine which day has been selected by the user. If the user has entered a url that specifies a day outside of the // allowable reservation window, then set the current day as the selected day. $yyyy_mmdd = $dates[0]['yyyymmdd']; + $day_selected = false; foreach ($dates as $day) { if ($day['selected']) { $yyyy_mmdd = $day['yyyymmdd']; + $day_selected = TRUE; } } if ($yyyy_mmdd == $dates[0]['yyyymmdd']) { $dates[0]['selected'] = TRUE; $dates[0]['today'] = TRUE; } + if(!$day_selected) { + \Drupal::messenger()->addWarning(t('You have chosen a date to far in the ' + . 'future. Please choose a date within 14 days of today. The Calendar' + . ' view below has defaulted to todays date.')); + } // a bit hacky; but we need to store what the calendar is using for its date so we can use this in theme functions later //$_SESSION['reservations_current_day'] = $yyyy_mmdd; @@ -171,8 +182,8 @@ class CalendarController extends ControllerBase { } $results = array(); - $ids = \Drupal::service('entity.query') - ->get('reserve_reservation') + $ids = \Drupal::service('entity_type.manager') + ->getStorage('reserve_reservation')->getQuery() ->condition('status', TRUE) ->condition('reservation_date', $yyyy_mmdd . '%', 'like') ->condition('reservation_ebundle', $ebundle) @@ -357,7 +368,7 @@ class CalendarController extends ControllerBase { $variables['#reserve_room_instructions_text'] = $config->get('reserve_instructions') ? $config->get('reserve_instructions') : t('To make a reservation, click on the desired time/day in the calendar below. You will be asked to login.'); $variables['#arrow'] = base_path() . drupal_get_path('module', 'reserve') . '/images/arrow-icon.png'; - $variables['#date'] = format_date(strtotime($month . ' ' . $xday . ', ' . $year), 'custom', 'l, F d, Y'); + $variables['#date'] = \Drupal::service('date.formatter')->format(strtotime($month . ' ' . $xday . ', ' . $year), 'custom', 'l, F d, Y'); $variables['#date_picker'] = \Drupal::formBuilder()->getForm('Drupal\reserve\Form\CalendarDatePicker'); $field = reserve_category_fields($ebundle); @@ -494,7 +505,8 @@ class CalendarController extends ControllerBase { // The time slot has a reservation that can be edited by the current user. if ($id = $reservations[$rid][$time]['id']) { - $reservation = entity_load('reserve_reservation', $id); + $reservation = \Drupal::entityTypeManager() + ->getStorage('reserve_reservation')->load($id); $viewable_class = $reservation->access('update') ? 'viewable' : ''; if ($viewable_class == 'viewable') { $options = array_merge_recursive($modal, array( diff --git a/src/Controller/ReservePermissions.php b/src/Controller/ReservePermissions.php index 5a23065..b2e14fe 100644 --- a/src/Controller/ReservePermissions.php +++ b/src/Controller/ReservePermissions.php @@ -4,7 +4,7 @@ namespace Drupal\reserve\Controller; use Drupal\Core\DependencyInjection\ContainerInjectionInterface; -use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\StringTranslation\StringTranslationTrait; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -13,19 +13,19 @@ class ReservePermissions implements ContainerInjectionInterface { use StringTranslationTrait; /** - * The entity manager. + * The entity type manager. * - * @var \Drupal\Core\Entity\EntityManagerInterface + * @var \Drupal\Core\Entity\EntityTypeManagerInterface */ protected $entityManager; /** * Constructs a TaxonomyViewsIntegratorPermissions instance. * - * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_manager * The entity manager. */ - public function __construct(EntityManagerInterface $entity_manager) { + public function __construct(EntityTypeManagerInterface $entity_manager) { $this->entityManager = $entity_manager; } @@ -33,7 +33,7 @@ class ReservePermissions implements ContainerInjectionInterface { * {@inheritdoc} */ public static function create(ContainerInterface $container) { - return new static($container->get('entity.manager')); + return new static($container->get('entity_type.manager')); } /** diff --git a/src/Form/CalendarDatePicker.php b/src/Form/CalendarDatePicker.php index 9cd892b..0015cee 100644 --- a/src/Form/CalendarDatePicker.php +++ b/src/Form/CalendarDatePicker.php @@ -49,7 +49,7 @@ class CalendarDatePicker extends FormBase { public function submitForm(array &$form, FormStateInterface $form_state) { // Display result. foreach ($form_state->getValues() as $key => $value) { - drupal_set_message($key . ': ' . $value); + \Drupal::messenger()->addStatus($key . ': ' . $value); } } diff --git a/src/Form/ReserveCategoryForm.php b/src/Form/ReserveCategoryForm.php index 557c971..749bfaa 100644 --- a/src/Form/ReserveCategoryForm.php +++ b/src/Form/ReserveCategoryForm.php @@ -34,13 +34,13 @@ class ReserveCategoryForm extends ContentEntityForm { switch ($status) { case SAVED_NEW: - drupal_set_message($this->t('Created the %label Reservation Category.', [ + \Drupal::messenger()->addStatus($this->t('Created the %label Reservation Category.', [ '%label' => $entity->label(), ])); break; default: - drupal_set_message($this->t('Saved the %label Reservation Category.', [ + \Drupal::messenger()->addStatus($this->t('Saved the %label Reservation Category.', [ '%label' => $entity->label(), ])); } diff --git a/src/Form/ReserveDailyHoursForm.php b/src/Form/ReserveDailyHoursForm.php index 54e8e5f..a380586 100644 --- a/src/Form/ReserveDailyHoursForm.php +++ b/src/Form/ReserveDailyHoursForm.php @@ -245,6 +245,6 @@ class ReserveDailyHoursForm extends ConfigFormBase { $this->config('reserve.monthly_hours') ->set($yyyy_mm, $updated_mo_hours) ->save(); - drupal_set_message($confirmation); + \Drupal::messenger()->addStatus($confirmation); } } diff --git a/src/Form/ReserveDefaultHoursForm.php b/src/Form/ReserveDefaultHoursForm.php index a539aa1..98b744c 100644 --- a/src/Form/ReserveDefaultHoursForm.php +++ b/src/Form/ReserveDefaultHoursForm.php @@ -296,13 +296,13 @@ class ReserveDefaultHoursForm extends ConfigFormBase { $this->config('reserve.default_hours') ->set('data', $default_hours) ->save(); - drupal_set_message($confirmation); + \Drupal::messenger()->addStatus ($confirmation); // save updated monthly override hours $this->config('reserve.monthly_hours') ->set('data', $monthly_hours) ->save(); - drupal_set_message(t('Daily overrides updated with new defaults.')); + \Drupal::messenger()->addStatus(t('Daily overrides updated with new defaults.')); } } diff --git a/src/Form/ReserveReservationForm.php b/src/Form/ReserveReservationForm.php index 7194384..e137cbd 100644 --- a/src/Form/ReserveReservationForm.php +++ b/src/Form/ReserveReservationForm.php @@ -34,13 +34,13 @@ class ReserveReservationForm extends ContentEntityForm { switch ($status) { case SAVED_NEW: - drupal_set_message($this->t('Created the %label Reservation.', [ + \Drupal::messenger()->addStatus ($this->t('Created the %label Reservation.', [ '%label' => $entity->label(), ])); break; default: - drupal_set_message($this->t('Saved the %label Reservation.', [ + \Drupal::messenger()->addStatus($this->t('Saved the %label Reservation.', [ '%label' => $entity->label(), ])); } diff --git a/src/Form/ReserveSettingsForm.php b/src/Form/ReserveSettingsForm.php index ce3242e..701523b 100644 --- a/src/Form/ReserveSettingsForm.php +++ b/src/Form/ReserveSettingsForm.php @@ -177,7 +177,7 @@ class ReserveSettingsForm extends ConfigFormBase { $this->config('reserve.settings')->set($key, $value); } $this->config('reserve.settings')->save(); - drupal_set_message(RESERVE_SAVE_CONFIRMATION_MSG); + \Drupal::messenger()->addStatus(RESERVE_SAVE_CONFIRMATION_MSG); } } diff --git a/src/ReserveCategoryListBuilder.php b/src/ReserveCategoryListBuilder.php index 4a8a917..7e5d8bf 100644 --- a/src/ReserveCategoryListBuilder.php +++ b/src/ReserveCategoryListBuilder.php @@ -6,6 +6,7 @@ use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityListBuilder; use Drupal\Core\Routing\LinkGeneratorTrait; use Drupal\Core\Url; +use Drupal\Core\Link; /** * Defines a class to build a listing of reservation categories. @@ -14,7 +15,6 @@ use Drupal\Core\Url; */ class ReserveCategoryListBuilder extends EntityListBuilder { - use LinkGeneratorTrait; /** * {@inheritdoc} @@ -31,14 +31,14 @@ class ReserveCategoryListBuilder extends EntityListBuilder { public function buildRow(EntityInterface $entity) { /* @var $entity \Drupal\reserve\Entity\ReserveCategory */ $row['id'] = $entity->id(); - $row['name'] = $this->l( + $row['name'] = Link::fromTextAndUrl( $entity->label(), new Url( 'entity.reserve_category.edit_form', array( 'reserve_category' => $entity->id(), ) ) - ); + )->toString(); return $row + parent::buildRow($entity); } diff --git a/src/ReserveReservationAccessControlHandler.php b/src/ReserveReservationAccessControlHandler.php index 7aab60e..fc01557 100644 --- a/src/ReserveReservationAccessControlHandler.php +++ b/src/ReserveReservationAccessControlHandler.php @@ -36,6 +36,9 @@ class ReserveReservationAccessControlHandler extends EntityAccessControlHandler case 'delete': $access = AccessResult::allowedIfHasPermission($account, 'delete any reservation'); + if (!$access->isAllowed() && $account->hasPermission('delete own reservation')) { + $access = $access->orIf(AccessResult::allowedIf($account->id() == $entity->getOwnerId())->cachePerUser()->addCacheableDependency($entity)); + } break; // Unknown operation, no opinion. diff --git a/src/ReserveReservationListBuilder.php b/src/ReserveReservationListBuilder.php index b2af230..68a91d7 100644 --- a/src/ReserveReservationListBuilder.php +++ b/src/ReserveReservationListBuilder.php @@ -6,6 +6,7 @@ use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityListBuilder; use Drupal\Core\Routing\LinkGeneratorTrait; use Drupal\Core\Url; +use Drupal\Core\Link; /** * Defines a class to build a listing of reservations. @@ -14,7 +15,6 @@ use Drupal\Core\Url; */ class ReserveReservationListBuilder extends EntityListBuilder { - use LinkGeneratorTrait; /** * {@inheritdoc} @@ -31,14 +31,14 @@ class ReserveReservationListBuilder extends EntityListBuilder { public function buildRow(EntityInterface $entity) { /* @var $entity \Drupal\reserve\Entity\ReserveReservation */ $row['id'] = $entity->id(); - $row['name'] = $this->l( + $row['name'] = Link::fromTextAndUrl( $entity->label(), new Url( 'entity.reserve_reservation.edit_form', array( 'reserve_reservation' => $entity->id(), ) ) - ); + )->toString(); return $row + parent::buildRow($entity); }