From 9897ba44ed50da58ff5a8a452ce21b5a0a2e2be6 Mon Sep 17 00:00:00 2001 From: Yousef Bajawi Date: Sun, 23 Oct 2016 17:38:45 +0300 Subject: [PATCH] Issue #1054616 : Add option to reverse order in admin view --- config/schema/entityqueue.schema.yml | 3 +++ src/Entity/EntityQueue.php | 8 ++++++++ src/EntityQueueInterface.php | 1 + src/Form/EntityQueueForm.php | 6 +++++- src/Form/EntitySubqueueForm.php | 17 +++++++++++++++++ 5 files changed, 34 insertions(+), 1 deletion(-) diff --git a/config/schema/entityqueue.schema.yml b/config/schema/entityqueue.schema.yml index 8c6cef9..fd21d85 100644 --- a/config/schema/entityqueue.schema.yml +++ b/config/schema/entityqueue.schema.yml @@ -41,3 +41,6 @@ entityqueue.entity_queue.*: act_as_queue: type: boolean label: 'Act as queue' + reverse_in_admin: + type: boolean + label: 'Reverse order in admin view' diff --git a/src/Entity/EntityQueue.php b/src/Entity/EntityQueue.php index 54cfef3..7113b25 100644 --- a/src/Entity/EntityQueue.php +++ b/src/Entity/EntityQueue.php @@ -87,6 +87,7 @@ class EntityQueue extends ConfigEntityBundleBase implements EntityQueueInterface 'min_size' => 0, 'max_size' => 0, 'act_as_queue' => FALSE, + 'reverse_in_admin' => FALSE, ]; /** @@ -141,6 +142,13 @@ class EntityQueue extends ConfigEntityBundleBase implements EntityQueueInterface /** * {@inheritdoc} */ + public function getReverseInAdmin() { + return $this->queue_settings['reverse_in_admin']; + } + + /** + * {@inheritdoc} + */ public function getEntitySettings() { return $this->entity_settings; } diff --git a/src/EntityQueueInterface.php b/src/EntityQueueInterface.php index 2af3e74..245918f 100644 --- a/src/EntityQueueInterface.php +++ b/src/EntityQueueInterface.php @@ -87,6 +87,7 @@ interface EntityQueueInterface extends ConfigEntityInterface { * - min_size: The minimum number of items that this queue can hold. * - max_size: The maximum number of items that this queue can hold. * - act_as_queue: The behavior of exceeding the maximum number of queue + * - reverse_in_admin: Show in reverse order in admin view * items. */ public function getQueueSettings(); diff --git a/src/Form/EntityQueueForm.php b/src/Form/EntityQueueForm.php index 5a49679..5781011 100644 --- a/src/Form/EntityQueueForm.php +++ b/src/Form/EntityQueueForm.php @@ -160,7 +160,11 @@ class EntityQueueForm extends BundleEntityFormBase { ], ], ]; - + $form['queue_settings']['reverse_in_admin'] = [ + '#type' => 'checkbox', + '#default_value' => $queue->getReverseInAdmin(), + '#title' => $this->t('Reverse order in admin view'), + ]; // We have to duplicate all the code from // \Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem::fieldSettingsForm() // because field settings forms are not easily embeddable. diff --git a/src/Form/EntitySubqueueForm.php b/src/Form/EntitySubqueueForm.php index 68000f5..3652255 100644 --- a/src/Form/EntitySubqueueForm.php +++ b/src/Form/EntitySubqueueForm.php @@ -52,6 +52,12 @@ class EntitySubqueueForm extends ContentEntityForm { * {@inheritdoc} */ public function form(array $form, FormStateInterface $form_state) { + // Reverse in admin form is queue is set to 'Reverse order in admin view' + if($this->entity->getQueue()->getReverseInAdmin()) { + $subqueue_items = $this->entity->get('items'); + $items_values = $subqueue_items->getValue(); + $subqueue_items->setValue(array_reverse($items_values)); + } $form = parent::form($form, $form_state); $form['#title'] = $this->t('Edit subqueue %label', ['%label' => $this->entity->label()]); @@ -155,6 +161,11 @@ class EntitySubqueueForm extends ContentEntityForm { $items_widget->extractFormValues($subqueue_items, $form, $form_state); $items_values = $subqueue_items->getValue(); + // Revert reverse in admin form is queue is set to 'Reverse order in admin view' + if($entity->getQueue()->getReverseInAdmin()) { + $items_values = array_reverse($items_values); + } + switch ($op) { case 'reverse': $subqueue_items->setValue(array_reverse($items_values)); @@ -221,6 +232,12 @@ class EntitySubqueueForm extends ContentEntityForm { */ public function save(array $form, FormStateInterface $form_state) { $subqueue = $this->entity; + // Revert reverse in admin form in queue + if($subqueue->getQueue()->getReverseInAdmin()) { + $subqueue_items = $subqueue->get('items'); + $items_values = $subqueue_items->getValue(); + $subqueue_items->setValue(array_reverse($items_values)); + } $status = $subqueue->save(); $edit_link = $subqueue->toLink($this->t('Edit'), 'edit-form')->toString(); -- 1.9.1