diff --git a/config/schema/views_daterange_cte.schema.yml b/config/schema/views_daterange_cte.schema.yml new file mode 100644 index 0000000000000000000000000000000000000000..6ea4d670eb501b6466b7c2d08e63150a9459f213 --- /dev/null +++ b/config/schema/views_daterange_cte.schema.yml @@ -0,0 +1,14 @@ +views_daterange_cte.daterange_date.*: + type: config_entity + label: Daterange date + mapping: + id: + type: string + label: ID + label: + type: label + label: Label + uuid: + type: string + description: + type: string diff --git a/src/DaterangeDateInterface.php b/src/DaterangeDateInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..6e1651d963a6cd06142b23beb25880f13d62630e --- /dev/null +++ b/src/DaterangeDateInterface.php @@ -0,0 +1,14 @@ +<?php + +declare(strict_types=1); + +namespace Drupal\views_daterange_cte; + +use Drupal\Core\Config\Entity\ConfigEntityInterface; + +/** + * Provides an interface defining a daterange date entity type. + */ +interface DaterangeDateInterface extends ConfigEntityInterface { + +} diff --git a/src/DaterangeDateListBuilder.php b/src/DaterangeDateListBuilder.php new file mode 100644 index 0000000000000000000000000000000000000000..8149d0d56b828a171d2291f5bf0cab1da0c6e511 --- /dev/null +++ b/src/DaterangeDateListBuilder.php @@ -0,0 +1,36 @@ +<?php + +declare(strict_types=1); + +namespace Drupal\views_daterange_cte; + +use Drupal\Core\Config\Entity\ConfigEntityListBuilder; +use Drupal\Core\Entity\EntityInterface; + +/** + * Provides a listing of daterange dates. + */ +final class DaterangeDateListBuilder extends ConfigEntityListBuilder { + + /** + * {@inheritdoc} + */ + public function buildHeader(): array { + $header['label'] = $this->t('Label'); + $header['id'] = $this->t('Machine name'); + $header['status'] = $this->t('Status'); + return $header + parent::buildHeader(); + } + + /** + * {@inheritdoc} + */ + public function buildRow(EntityInterface $entity): array { + /** @var \Drupal\views_daterange_cte\DaterangeDateInterface $entity */ + $row['label'] = $entity->label(); + $row['id'] = $entity->id(); + $row['status'] = $entity->status() ? $this->t('Enabled') : $this->t('Disabled'); + return $row + parent::buildRow($entity); + } + +} diff --git a/src/Entity/DaterangeDate.php b/src/Entity/DaterangeDate.php new file mode 100644 index 0000000000000000000000000000000000000000..c55e1dee974011fa7756edf53d6db956450852f2 --- /dev/null +++ b/src/Entity/DaterangeDate.php @@ -0,0 +1,68 @@ +<?php + +declare(strict_types=1); + +namespace Drupal\views_daterange_cte\Entity; + +use Drupal\Core\Config\Entity\ConfigEntityBase; +use Drupal\views_daterange_cte\DaterangeDateInterface; + +/** + * Defines the daterange date entity type. + * + * @ConfigEntityType( + * id = "daterange_date", + * label = @Translation("Daterange date"), + * label_collection = @Translation("Daterange dates"), + * label_singular = @Translation("daterange date"), + * label_plural = @Translation("daterange dates"), + * label_count = @PluralTranslation( + * singular = "@count daterange date", + * plural = "@count daterange dates", + * ), + * handlers = { + * "list_builder" = "Drupal\views_daterange_cte\DaterangeDateListBuilder", + * "form" = { + * "add" = "Drupal\views_daterange_cte\Form\DaterangeDateForm", + * "edit" = "Drupal\views_daterange_cte\Form\DaterangeDateForm", + * "delete" = "Drupal\Core\Entity\EntityDeleteForm", + * }, + * }, + * config_prefix = "daterange_date", + * admin_permission = "administer daterange_date", + * links = { + * "collection" = "/admin/structure/daterange-date", + * "add-form" = "/admin/structure/daterange-date/add", + * "edit-form" = "/admin/structure/daterange-date/{daterange_date}", + * "delete-form" = "/admin/structure/daterange-date/{daterange_date}/delete", + * }, + * entity_keys = { + * "id" = "id", + * "label" = "label", + * "uuid" = "uuid", + * }, + * config_export = { + * "id", + * "label", + * "description", + * }, + * ) + */ +final class DaterangeDate extends ConfigEntityBase implements DaterangeDateInterface { + + /** + * The example ID. + */ + protected string $id; + + /** + * The example label. + */ + protected string $label; + + /** + * The example description. + */ + protected string $description; + +} diff --git a/src/Form/DaterangeDateForm.php b/src/Form/DaterangeDateForm.php new file mode 100644 index 0000000000000000000000000000000000000000..de77f13aaf65f0a8007bef15413df74523e1c17f --- /dev/null +++ b/src/Form/DaterangeDateForm.php @@ -0,0 +1,71 @@ +<?php + +declare(strict_types=1); + +namespace Drupal\views_daterange_cte\Form; + +use Drupal\Core\Entity\EntityForm; +use Drupal\Core\Form\FormStateInterface; +use Drupal\views_daterange_cte\Entity\DaterangeDate; + +/** + * Daterange date form. + */ +final class DaterangeDateForm extends EntityForm { + + /** + * {@inheritdoc} + */ + public function form(array $form, FormStateInterface $form_state): array { + + $form = parent::form($form, $form_state); + + $form['label'] = [ + '#type' => 'textfield', + '#title' => $this->t('Label'), + '#maxlength' => 255, + '#default_value' => $this->entity->label(), + '#required' => TRUE, + ]; + + $form['id'] = [ + '#type' => 'machine_name', + '#default_value' => $this->entity->id(), + '#machine_name' => [ + 'exists' => [DaterangeDate::class, 'load'], + ], + '#disabled' => !$this->entity->isNew(), + ]; + + $form['status'] = [ + '#type' => 'checkbox', + '#title' => $this->t('Enabled'), + '#default_value' => $this->entity->status(), + ]; + + $form['description'] = [ + '#type' => 'textarea', + '#title' => $this->t('Description'), + '#default_value' => $this->entity->get('description'), + ]; + + return $form; + } + + /** + * {@inheritdoc} + */ + public function save(array $form, FormStateInterface $form_state): int { + $result = parent::save($form, $form_state); + $message_args = ['%label' => $this->entity->label()]; + $this->messenger()->addStatus( + match($result) { + \SAVED_NEW => $this->t('Created new example %label.', $message_args), + \SAVED_UPDATED => $this->t('Updated example %label.', $message_args), + } + ); + $form_state->setRedirectUrl($this->entity->toUrl('collection')); + return $result; + } + +} diff --git a/views_daterange_cte.links.action.yml b/views_daterange_cte.links.action.yml new file mode 100644 index 0000000000000000000000000000000000000000..631fe23b3dbc798225e1220d44c435e2cf72393d --- /dev/null +++ b/views_daterange_cte.links.action.yml @@ -0,0 +1,5 @@ +entity.daterange_date.add_form: + route_name: 'entity.daterange_date.add_form' + title: 'Add daterange date' + appears_on: + - entity.daterange_date.collection diff --git a/views_daterange_cte.links.menu.yml b/views_daterange_cte.links.menu.yml new file mode 100644 index 0000000000000000000000000000000000000000..5a9221bc52cf9370ecdfe91975b083f2f686c1d5 --- /dev/null +++ b/views_daterange_cte.links.menu.yml @@ -0,0 +1,5 @@ +entity.daterange_date.overview: + title: Daterange dates + parent: system.admin_structure + description: 'List of daterange dates to extend site functionality.' + route_name: entity.daterange_date.collection diff --git a/views_daterange_cte.module b/views_daterange_cte.module index ba9b3f69f1da1a534ef795c55e6a60bc40d51075..14fdcd4c7be92c47c5b39c498568fa919b3dfd8e 100644 --- a/views_daterange_cte.module +++ b/views_daterange_cte.module @@ -31,6 +31,7 @@ function views_daterange_cte_help($route_name, RouteMatchInterface $route_match) function views_daterange_cte_views_data() { $data = []; $data['cte_daterange']['table']['name'] = 'cte_daterange'; + $data['cte_daterange']['table']['entity type'] = 'daterange_date'; $data['cte_daterange']['table']['group'] = t('Daterange'); $data['cte_daterange']['table']['base'] = [ 'title' => t('Daterange'), diff --git a/views_daterange_cte.permissions.yml b/views_daterange_cte.permissions.yml new file mode 100644 index 0000000000000000000000000000000000000000..c38a76adf94abe9513b71c609c48383c5a41adbf --- /dev/null +++ b/views_daterange_cte.permissions.yml @@ -0,0 +1,2 @@ +administer daterange_date: + title: 'Administer daterange date' diff --git a/views_daterange_cte.routing.yml b/views_daterange_cte.routing.yml new file mode 100644 index 0000000000000000000000000000000000000000..8890c4f3fe8d6547676d24ff492c333e068ff34a --- /dev/null +++ b/views_daterange_cte.routing.yml @@ -0,0 +1,31 @@ +entity.daterange_date.collection: + path: '/admin/structure/daterange-date' + defaults: + _entity_list: 'daterange_date' + _title: 'Daterange date configuration' + requirements: + _permission: 'administer daterange_date' + +entity.daterange_date.add_form: + path: '/admin/structure/daterange_date/add' + defaults: + _entity_form: 'daterange_date.add' + _title: 'Add a daterange date' + requirements: + _permission: 'administer daterange_date' + +entity.daterange_date.edit_form: + path: '/admin/structure/daterange-date/{daterange_date}' + defaults: + _entity_form: 'daterange_date.edit' + _title: 'Edit a daterange date' + requirements: + _permission: 'administer daterange_date' + +entity.daterange_date.delete_form: + path: '/admin/structure/daterange-date/{daterange_date}/delete' + defaults: + _entity_form: 'daterange_date.delete' + _title: 'Delete a daterange date' + requirements: + _permission: 'administer daterange_date'