From a365c94e9e4fc461c0f7dc277f7efb38e90a0cb2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?ANDRE=20s=C3=A9bastien?= <sandre@afi-sa.fr>
Date: Mon, 7 Apr 2025 17:15:19 +0200
Subject: [PATCH] hotline_222323_bad_format_date_on_redmine

---
 VERSIONS_HOTLINE/222323                       |  1 +
 .../View/Helper/Redmine/IssueJournal.php      | 12 ++++---
 .../ZendAfi/View/Helper/Redmine/Issues.php    | 34 +++++++++----------
 .../controllers/RedmineControllerTest.php     | 29 ++++++++++++----
 tests/fixtures/RedmineFixtures.php            |  2 +-
 5 files changed, 48 insertions(+), 30 deletions(-)
 create mode 100644 VERSIONS_HOTLINE/222323

diff --git a/VERSIONS_HOTLINE/222323 b/VERSIONS_HOTLINE/222323
new file mode 100644
index 00000000000..3f32f20f525
--- /dev/null
+++ b/VERSIONS_HOTLINE/222323
@@ -0,0 +1 @@
+ - correctif #222323 : Administration : Assistance : Les dates sont maintenant affichées au bon format.
\ No newline at end of file
diff --git a/library/ZendAfi/View/Helper/Redmine/IssueJournal.php b/library/ZendAfi/View/Helper/Redmine/IssueJournal.php
index a30273dd920..e6e65a3cc69 100644
--- a/library/ZendAfi/View/Helper/Redmine/IssueJournal.php
+++ b/library/ZendAfi/View/Helper/Redmine/IssueJournal.php
@@ -70,10 +70,14 @@ class ZendAfi_View_Helper_Redmine_IssueJournal extends ZendAfi_View_Helper_BaseH
   }
 
 
-  protected function renderDate($event) {
-    $time = Class_Date::parseTimeWithFormat($event['created_on'], "yyyy-MM-ee'T'HH:mm:ss'Z'");
-
-    return $this->_tag('td', Class_Date::timestampToFormat($time, "ee/MM/yyyy 'à' HH:mm:ss"));
+  protected function renderDate(array $event): string
+  {
+    $time = Class_Date::parseTimeWithFormat($event['created_on'],
+                                            "yyyy-MM-dd'T'HH:mm:ss'Z'");
+
+    return $this->_tag('td',
+                       Class_Date::timestampToFormat($time,
+                                                     "dd/MM/yyyy 'à' HH:mm:ss"));
   }
 
 
diff --git a/library/ZendAfi/View/Helper/Redmine/Issues.php b/library/ZendAfi/View/Helper/Redmine/Issues.php
index ef5cb801c4b..543b631db18 100644
--- a/library/ZendAfi/View/Helper/Redmine/Issues.php
+++ b/library/ZendAfi/View/Helper/Redmine/Issues.php
@@ -20,13 +20,13 @@
  */
 
 
-class ZendAfi_View_Helper_Redmine_Issues extends ZendAfi_View_Helper_BaseHelper {
-  /**
-   * @param $library Class_Bib
-   * @param $issues Class_WebService_Redmine_Issues
-   */
-  public function Redmine_Issues($library, $issues) {
-    if (!Class_AdminVar::isRedmineEnabled() || !$issues)
+class ZendAfi_View_Helper_Redmine_Issues extends ZendAfi_View_Helper_BaseHelper
+{
+
+  public function Redmine_Issues(Class_Bib $library,
+                                 Class_WebService_Redmine_Issues $issues): string
+  {
+    if ( ! Class_AdminVar::isRedmineEnabled() || ! $issues || $issues->isEmpty())
       return '';
 
     $script_loader = Class_ScriptLoader::getInstance()
@@ -41,11 +41,10 @@ return $this->_tag('div',
                    ['id' => 'issues_list']);
   }
 
-
-  protected function renderIssues($library, $issues, $label) {
-    if (!$issues)
-      return '';
-
+  protected function renderIssues(Class_Bib $library,
+                                  Class_WebService_Redmine_Issues $issues,
+                                  string $label): string
+  {
     $editAction = fn($issue) => $this->view->tagAnchor(['module' => 'admin',
                                    'controller' => 'redmine',
                                    'action' => 'edit-issue',
@@ -55,13 +54,12 @@ return $this->_tag('div',
 
     $status_renderer = fn($model) => $model->getstatus()['name'];
 
-    $date_renderer = function($model): string {
-      $time = Class_Date::parseTimeWithFormat($model->getcreated_on(), "yyyy-MM-ee'T'HH:mm:ss'Z'");
-
-      return Class_Date::timestampToFormat($time, 'ee/MM/yyyy');
-    };
+    $date_renderer = fn($model) => Class_Date::dateToFormat(substr((string) $model->getcreated_on(), 0, 10),
+                                                            'dd/MM/yyyy');
 
-    return $this->_tag('h2', $label . $this->_tag('small', count($issues), ['style' => 'margin-left: 1em;']))
+    return $this->_tag('h2', $label . $this->_tag('small',
+                                                  $issues->count(),
+                                                  ['style' => 'margin-left: 1em;']))
       . $this->_tag('div',
                     $this->view->tagModelTable($issues,
                                                [$this->_('Numéro'), $this->_('Sujet'),
diff --git a/tests/application/modules/admin/controllers/RedmineControllerTest.php b/tests/application/modules/admin/controllers/RedmineControllerTest.php
index 873401e6eb9..3d555b1e6b1 100644
--- a/tests/application/modules/admin/controllers/RedmineControllerTest.php
+++ b/tests/application/modules/admin/controllers/RedmineControllerTest.php
@@ -297,8 +297,16 @@ class Admin_RedmineControllerIndexTest extends Admin_RedmineControllerWithApiTes
 
 
   /** @test */
-  public function tix34247DateShouldBePresent() {
-    $this->assertXPathContentContains('//td', '04/12/2015');
+  public function tix34247DateShouldBePresent()
+  {
+    $this->assertXPathContentContains('//tr[1]/td', '04/12/2015');
+  }
+
+
+  /** @test */
+  public function tix34248DateShouldBePresent()
+  {
+    $this->assertXPathContentContains('//tr[3]/td', '20/01/2025');
   }
 
 
@@ -537,7 +545,8 @@ abstract class Admin_RedmineControllerFixtureAbstractTest
 
 
 class Admin_RedmineControllerEditIssue34248Test
-  extends Admin_RedmineControllerFixtureAbstractTest {
+  extends Admin_RedmineControllerFixtureAbstractTest
+{
 
   public function setUp(): void
   {
@@ -546,19 +555,25 @@ class Admin_RedmineControllerEditIssue34248Test
     $this->dispatch('admin/redmine/edit-issue/id_lib/1/id/34248');
   }
 
-
   /** @test */
-  public function selectedStatusShouldBeAffecteHotline() {
+  public function selectedStatusShouldBeAffecteHotline()
+  {
     $this->assertXPathContentContains('//select[@name="status_id"]//option[@selected="selected"]',
                                       'Affecté hotline');
   }
 
-
   /** @test */
-  public function statusQuestionClientShouldBeAvailable() {
+  public function statusQuestionClientShouldBeAvailable()
+  {
     $this->assertXPathContentContains('//select[@name="status_id"]//option[not(@selected)]',
                                       'Question au client');
   }
+
+  /** @test */
+  public function date29092015ShouldBePresent()
+  {
+    $this->assertXpathContentContains('//tr[1]/td', '07/01/2016 à 11:12:45');
+  }
 }
 
 
diff --git a/tests/fixtures/RedmineFixtures.php b/tests/fixtures/RedmineFixtures.php
index 4aac063424b..92e21806f63 100644
--- a/tests/fixtures/RedmineFixtures.php
+++ b/tests/fixtures/RedmineFixtures.php
@@ -153,7 +153,7 @@ class RedmineFixtures {
                                 ['id' => 11,
                                  'name' => 'Phase',
                                  'value' => '']],
-            'created_on' => '2015-12-04T09:19:11Z',
+            'created_on' => '2025-01-20T09:25:00Z',
             'updated_on' => '2015-12-04T09:25:42Z',
             'story_points' => ''];
   }
-- 
GitLab