From 8714bcfb61ab7f55925f9598682d86debd870f15 Mon Sep 17 00:00:00 2001 From: s j <sj@1729.be> Date: Fri, 7 Oct 2022 11:12:10 +0200 Subject: [PATCH] imp: subevent inline entity form --- resource_planning.services.yml | 4 ++++ src/Entity/Event.php | 3 +++ src/EventService.php | 40 ++++++++++++++++++++++++++++++++ src/EventServiceInterface.php | 15 ++++++++++++ src/Form/EventInlineForm.php | 42 +++++++++++++++++++++++----------- 5 files changed, 91 insertions(+), 13 deletions(-) create mode 100644 src/EventService.php create mode 100644 src/EventServiceInterface.php diff --git a/resource_planning.services.yml b/resource_planning.services.yml index 630000e..896a823 100644 --- a/resource_planning.services.yml +++ b/resource_planning.services.yml @@ -8,6 +8,10 @@ services: class: Drupal\resource_planning\CalendarService arguments: ['@entity_type.manager'] + resource_planning.event: + class: Drupal\resource_planning\EventService + arguments: ['@entity_type.manager'] + resource_planning.conflict: class: Drupal\resource_planning\ConflictService arguments: ['@database', '@entity_type.manager'] diff --git a/src/Entity/Event.php b/src/Entity/Event.php index ad5d350..dccc8f1 100644 --- a/src/Entity/Event.php +++ b/src/Entity/Event.php @@ -248,6 +248,9 @@ class Event extends ContentEntityBase implements EventInterface { ->setCardinality(BaseFieldDefinition::CARDINALITY_UNLIMITED) ->setSettings([ 'target_type' => 'rp_event', + 'handler_settings' => [ + 'target_bundles' => array_keys(\Drupal::service('resource_planning.event')->getSubEventBundles()), + ], ]) ->setDisplayOptions('form', [ 'type' => 'inline_entity_form_complex', diff --git a/src/EventService.php b/src/EventService.php new file mode 100644 index 0000000..0653890 --- /dev/null +++ b/src/EventService.php @@ -0,0 +1,40 @@ +<?php + +namespace Drupal\resource_planning; + +use Drupal\Core\Entity\EntityTypeManagerInterface; + +use Drupal\resource_planning\Entity\EventType; + +/** + * The Event Service. + */ +class EventService implements EventServiceInterface { + + /** + * The entity type manager. + * + * @var \Drupal\Core\Entity\EntityTypeManagerInterface + */ + protected $entityTypeManager; + + /** + * Constructs a new EventService object. + */ + public function __construct(EntityTypeManagerInterface $entity_type_manager) { + $this->entityTypeManager = $entity_type_manager; + } + + /** + * {@inheritdoc} + */ + public function getSubEventBundles() { + return array_filter( + EventType::loadMultiple(), + function ($type) { + return $type->isSubEventType(); + } + ); + } + +} diff --git a/src/EventServiceInterface.php b/src/EventServiceInterface.php new file mode 100644 index 0000000..2fa8a10 --- /dev/null +++ b/src/EventServiceInterface.php @@ -0,0 +1,15 @@ +<?php + +namespace Drupal\resource_planning; + +/** + * The EventService Interface. + */ +interface EventServiceInterface { + + /** + * {@inheritdoc} + */ + public function getSubEventBundles(); + +} diff --git a/src/Form/EventInlineForm.php b/src/Form/EventInlineForm.php index e06b125..3c1b131 100644 --- a/src/Form/EventInlineForm.php +++ b/src/Form/EventInlineForm.php @@ -5,6 +5,10 @@ namespace Drupal\resource_planning\Form; use Drupal\Core\Form\FormStateInterface; use Drupal\inline_entity_form\Form\EntityInlineForm; +use Drupal\Core\Datetime\DrupalDateTime; +use Drupal\datetime\Plugin\Field\FieldType\DateTimeItemInterface; + + /** * Defines the inline form for event. */ @@ -26,18 +30,17 @@ class EventInlineForm extends EntityInlineForm { */ public function getTableFields($bundles) { $fields = parent::getTableFields($bundles); - /* - $fields['start'] = [ - 'type' => 'field', - 'label' => $this->t('Start'), - 'weight' => 2, + unset($fields['label']); + $fields['calendar_id'] = [ + 'type' => 'field', + 'label' => $this->t('Calendar'), + 'weight' => 1, ]; - $fields['end'] = [ - 'type' => 'field', - 'label' => $this->t('End'), - 'weight' => 3, + $fields['date'] = [ + 'type' => 'field', + 'label' => $this->t('Date'), + 'weight' => 3, ]; - */ return $fields; } @@ -48,6 +51,19 @@ class EventInlineForm extends EntityInlineForm { $entity_form = parent::entityForm($entity_form, $form_state); $entity_form['#entity_builders'][] = [get_class($this), 'buildLine']; + $parent_entity = $form_state->getBuildInfo()['callback_object']->getEntity(); + $date = new DrupalDateTime( + $parent_entity->get('date')->value, + DateTimeItemInterface::STORAGE_TIMEZONE + ); + $end_date = new DrupalDateTime( + $parent_entity->get('date')->end_value, + DateTimeItemInterface::STORAGE_TIMEZONE + ); + + $entity_form['date']['widget'][0]['value']['#default_value'] = $date; + $entity_form['date']['widget'][0]['end_value']['#default_value'] = $end_date; + // Do not show child_ids on sub_events. unset($entity_form['name']); unset($entity_form['child_ids']); @@ -64,9 +80,9 @@ class EventInlineForm extends EntityInlineForm { $form = $form_state->getFormObject(); // Set backreference. $line->set( - 'parent_id', - $form->getEntity() - ); + 'parent_id', + $form->getEntity() + ); } } -- GitLab