From 3c12ca8fdca40c98561a622433e5d238e2fcccdb Mon Sep 17 00:00:00 2001 From: Aaron Ferris <ferrit444@gmail.com> Date: Sat, 22 Feb 2025 14:04:13 +0000 Subject: [PATCH 1/5] Issue 3508432: add a sort by date option to the undo overview --- src/Controller/ScannerController.php | 48 +++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/src/Controller/ScannerController.php b/src/Controller/ScannerController.php index 9697bc1..556b9cc 100644 --- a/src/Controller/ScannerController.php +++ b/src/Controller/ScannerController.php @@ -8,16 +8,28 @@ use Drupal\Core\Link; use Symfony\Component\DependencyInjection\ContainerInterface; use Drupal\Core\Datetime\DateFormatter; use Drupal\Core\Database\Connection; +use Symfony\Component\HttpFoundation\RequestStack; /** * Controller for Search and Replace module. */ class ScannerController extends ControllerBase { + /** + * The request stack. + * + * @var \Symfony\Component\HttpFoundation\RequestStack + */ + protected $requestStack; + /** * Class constructor. + * + * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack + * The request stack. */ - public function __construct(protected DateFormatter $dateFormatter, protected Connection $database) { + public function __construct(protected DateFormatter $dateFormatter, protected Connection $database, RequestStack $request_stack) { + $this->requestStack = $request_stack; } /** @@ -29,6 +41,7 @@ class ScannerController extends ControllerBase { // Load the service required to construct this class. $container->get('date.formatter'), $container->get('database'), + $container->get('request_stack') ); } @@ -42,7 +55,11 @@ class ScannerController extends ControllerBase { $query = $this->database->query('SELECT * from {scanner} WHERE undone = 0'); $results = $query->fetchAll(); $header = [ - $this->t('Date'), + [ + 'data' => $this->t('Date'), + 'sortable' => TRUE, + 'field' => 'date', + ], $this->t('Searched'), $this->t('Replaced'), $this->t('Count'), @@ -50,11 +67,15 @@ class ScannerController extends ControllerBase { ]; $rows = []; + $sort_order = $this->requestStack->getCurrentRequest()->query->get('sort', 'asc'); // Build the rows of the table. foreach ($results as $result) { $undo_link = Link::fromTextAndUrl($this->t('Undo'), Url::fromUri("internal:/admin/content/scanner/undo/$result->undo_id/confirm"))->toString(); $rows[] = [ - $this->dateFormatter->format($result->time), + [ + 'date' => $result->time, + 'data' => $this->dateFormatter->format($result->time), + ], $result->searched, $result->replaced, $result->count, @@ -65,9 +86,28 @@ class ScannerController extends ControllerBase { return [ '#type' => 'table', '#header' => $header, - '#rows' => $rows, + '#rows' => $this->getSortedRows($rows, $sort_order), '#attributes' => NULL, ]; } + /** + * Sort the rows based on date. + * + * @param array $rows + * The rows. + * @param sring $sort_order + * The sort order. + * + * @return array + * The sorted rows. + */ + private function getSortedRows($rows, $sort_order): array { + usort($rows, function($a, $b) use ($sort_order) { + return $sort_order == 'asc' ? $a[0]['date'] - $b[0]['date'] : $b[0]['date'] - $a[0]['date']; + }); + + return $rows; + } + } -- GitLab From c23f727a856e8c3b6e2aab71b05544ca351acf08 Mon Sep 17 00:00:00 2001 From: Aaron Ferris <ferrit444@gmail.com> Date: Sat, 22 Feb 2025 14:16:32 +0000 Subject: [PATCH 2/5] Issue 3508432: simplify sort --- src/Controller/ScannerController.php | 35 ++++++++-------------------- 1 file changed, 10 insertions(+), 25 deletions(-) diff --git a/src/Controller/ScannerController.php b/src/Controller/ScannerController.php index 556b9cc..0200dea 100644 --- a/src/Controller/ScannerController.php +++ b/src/Controller/ScannerController.php @@ -71,11 +71,8 @@ class ScannerController extends ControllerBase { // Build the rows of the table. foreach ($results as $result) { $undo_link = Link::fromTextAndUrl($this->t('Undo'), Url::fromUri("internal:/admin/content/scanner/undo/$result->undo_id/confirm"))->toString(); - $rows[] = [ - [ - 'date' => $result->time, - 'data' => $this->dateFormatter->format($result->time), - ], + $rows[$result->time] = [ + 'date' => $this->dateFormatter->format($result->time), $result->searched, $result->replaced, $result->count, @@ -83,31 +80,19 @@ class ScannerController extends ControllerBase { ]; } + if ($sort_order === 'asc') { + ksort($rows); + } + else { + krsort($rows); + } + return [ '#type' => 'table', '#header' => $header, - '#rows' => $this->getSortedRows($rows, $sort_order), + '#rows' => $rows, '#attributes' => NULL, ]; } - /** - * Sort the rows based on date. - * - * @param array $rows - * The rows. - * @param sring $sort_order - * The sort order. - * - * @return array - * The sorted rows. - */ - private function getSortedRows($rows, $sort_order): array { - usort($rows, function($a, $b) use ($sort_order) { - return $sort_order == 'asc' ? $a[0]['date'] - $b[0]['date'] : $b[0]['date'] - $a[0]['date']; - }); - - return $rows; - } - } -- GitLab From 511daa6a1f4678250d500c7fe3f27cbfa80bf35e Mon Sep 17 00:00:00 2001 From: Aaron Ferris <ferrit444@gmail.com> Date: Sat, 22 Feb 2025 14:39:03 +0000 Subject: [PATCH 3/5] Issue 3508432: use consistent constructor params --- src/Controller/ScannerController.php | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/src/Controller/ScannerController.php b/src/Controller/ScannerController.php index 0200dea..8a98a96 100644 --- a/src/Controller/ScannerController.php +++ b/src/Controller/ScannerController.php @@ -15,21 +15,10 @@ use Symfony\Component\HttpFoundation\RequestStack; */ class ScannerController extends ControllerBase { - /** - * The request stack. - * - * @var \Symfony\Component\HttpFoundation\RequestStack - */ - protected $requestStack; - /** * Class constructor. - * - * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack - * The request stack. */ - public function __construct(protected DateFormatter $dateFormatter, protected Connection $database, RequestStack $request_stack) { - $this->requestStack = $request_stack; + public function __construct(protected DateFormatter $dateFormatter, protected Connection $database, protected RequestStack $requestStack) { } /** -- GitLab From 61f58860ccbd3462bda313739de7316661d3ae1c Mon Sep 17 00:00:00 2001 From: Aaron Ferris <ferrit444@gmail.com> Date: Sun, 23 Feb 2025 12:46:17 +0000 Subject: [PATCH 4/5] Issue 3508432: add the sort to the query --- src/Controller/ScannerController.php | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/Controller/ScannerController.php b/src/Controller/ScannerController.php index 8a98a96..421cdab 100644 --- a/src/Controller/ScannerController.php +++ b/src/Controller/ScannerController.php @@ -41,7 +41,8 @@ class ScannerController extends ControllerBase { * A render array (table). */ public function undoListing(): array { - $query = $this->database->query('SELECT * from {scanner} WHERE undone = 0'); + $sort_order = $this->requestStack->getCurrentRequest()->query->get('sort', 'asc'); + $query = $this->database->query("SELECT * from {scanner} WHERE undone = 0 ORDER BY time $sort_order"); $results = $query->fetchAll(); $header = [ [ @@ -55,8 +56,6 @@ class ScannerController extends ControllerBase { $this->t('Operation'), ]; $rows = []; - - $sort_order = $this->requestStack->getCurrentRequest()->query->get('sort', 'asc'); // Build the rows of the table. foreach ($results as $result) { $undo_link = Link::fromTextAndUrl($this->t('Undo'), Url::fromUri("internal:/admin/content/scanner/undo/$result->undo_id/confirm"))->toString(); @@ -69,13 +68,6 @@ class ScannerController extends ControllerBase { ]; } - if ($sort_order === 'asc') { - ksort($rows); - } - else { - krsort($rows); - } - return [ '#type' => 'table', '#header' => $header, -- GitLab From b5485df7467a810583e876e6d94d653a199db2f4 Mon Sep 17 00:00:00 2001 From: Stephen Mustgrave <smustgrave@gmail.com> Date: Fri, 21 Mar 2025 17:09:34 -0400 Subject: [PATCH 5/5] pipeline fix --- src/Controller/ScannerController.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Controller/ScannerController.php b/src/Controller/ScannerController.php index 421cdab..af5f616 100644 --- a/src/Controller/ScannerController.php +++ b/src/Controller/ScannerController.php @@ -61,10 +61,10 @@ class ScannerController extends ControllerBase { $undo_link = Link::fromTextAndUrl($this->t('Undo'), Url::fromUri("internal:/admin/content/scanner/undo/$result->undo_id/confirm"))->toString(); $rows[$result->time] = [ 'date' => $this->dateFormatter->format($result->time), - $result->searched, - $result->replaced, - $result->count, - $undo_link, + 'searched' => $result->searched, + 'replaced' => $result->replaced, + 'count' => $result->count, + 'undo_link' => $undo_link, ]; } -- GitLab