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