fix: use IntlDateFormatter instead of strftime

This CL introduces breaking changes, since it uses non-constant static
variable initializers, which are only available since PHP 8.3. Thus, the
codebase now only supports PHP 8.3 (and the docs have been modified to
reflect this and the fact that the Intl extension is necessary).

Fixed: hores:2
GitOrigin-RevId: 9a91312c96b90fa4c9ae5fc5f6e972fd95c9cd57
diff --git a/src/inc/incidents.php b/src/inc/incidents.php
index b558ed9..7bda42d 100644
--- a/src/inc/incidents.php
+++ b/src/inc/incidents.php
@@ -486,13 +486,13 @@
 
       if (!count($to)) return 0;
 
-      $subject = "Incidencia del tipo \"".security::htmlsafe($incidenttype["name"])."\" creada para ".security::htmlsafe($workerName)." el ".strftime("%d %b %Y", $sday);
+      $subject = "Incidencia del tipo \"".security::htmlsafe($incidenttype["name"])."\" creada para ".security::htmlsafe($workerName)." el ".date::getShortDate($sday);
       $body = mail::bodyTemplate("<p>Hola,</p>
       <p>Este es un mensaje automático para avisarte de que ".security::htmlsafe(people::userData("name"))." ha introducido la siguiente incidencia en el sistema de registro horario:</p>
       <ul>
         <li><b>Trabajador:</b> ".security::htmlsafe($workerName)."</li>
         <li><b>Motivo:</b> ".security::htmlsafe($incidenttype["name"])."</li>
-        <li><b>Fecha:</b> ".strftime("%d %b %Y", $sday)." ".(($sbegins == 0 && $sends == self::ENDOFDAY) ? "(todo el día)": schedules::sec2time($sbegins)."-".schedules::sec2time($sends))."</li>".
+        <li><b>Fecha:</b> ".date::getShortDate($sday)." ".(($sbegins == 0 && $sends == self::ENDOFDAY) ? "(todo el día)": schedules::sec2time($sbegins)."-".schedules::sec2time($sends))."</li>".
         (!empty($details) ? "<li><b>Observaciones:</b> <span style='white-space: pre-wrap;'>".security::htmlsafe($details)."</span></li>" : "").
       "</ul>
       <p style='font-size: 11px;'>Has recibido este mensaje porque estás configurado como persona responsable de la categoría a la que pertenece este trabajador o eres el administrador del sistema.</p>");
@@ -568,9 +568,9 @@
           "email" => $workerEmail,
           "name" => $workerName
         )];
-        $subject = "Incidencia del ".strftime("%d %b %Y", $incident["day"])." ".($value == 1 ? "verificada" : "rechazada");
+        $subject = "Incidencia del ".date::getShortDate($incident["day"])." ".($value == 1 ? "verificada" : "rechazada");
         $body = mail::bodyTemplate("<p>Bienvenido ".security::htmlsafe($workerName).",</p>
-        <p>Este es un mensaje automático para avisarte de que la incidencia que introduciste para el día ".strftime("%d de %B de %Y", $incident["day"])." ha sido ".($value == 1 ? "aceptada" : "rechazada").".</p><p>Puedes ver el estado de todas tus incidencias en el <a href='".security::htmlsafe($conf["fullPath"])."'>aplicativo web</a>.</p>");
+        <p>Este es un mensaje automático para avisarte de que la incidencia que introduciste para el día ".date::getLongDate($incident["day"])." ha sido ".($value == 1 ? "aceptada" : "rechazada").".</p><p>Puedes ver el estado de todas tus incidencias en el <a href='".security::htmlsafe($conf["fullPath"])."'>aplicativo web</a>.</p>");
 
         mail::send($to, [], $subject, $body);
       }