mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-06-25 16:19:19 +02:00
À propos: contacts flexibles, liens sidebar éditables, grille contacts admin, et bouton supprimer
- Contacts: on peut laisser vide le nom OU le rôle (plus besoin des deux) - Sidebar: les liens « site de l'erg » et « code source » sont éditables depuis /admin/contenus-edit.php?slug=about - Admin: les champs Nom/Email/Lien des contacts s'affichent en grille 3 colonnes - Admin: icône corbeille (admin-icon-btn--delete) pour supprimer un contact, avec réindexation automatique - Database::getAproposContent() gère maintenant les valeurs string (URLs) en plus des arrays - Database::saveAproposContent() accepte array|string
This commit is contained in:
@@ -26,10 +26,14 @@ class AboutController
|
||||
}
|
||||
$contacts = $db->getAproposContent('contacts');
|
||||
$contacts = is_array($contacts) && !empty($contacts) ? $contacts : null;
|
||||
$ergSiteUrl = $db->getAproposContent('erg_site_url');
|
||||
$sourceCodeUrl = $db->getAproposContent('source_code_url');
|
||||
} catch (Exception $e) {
|
||||
ErrorHandler::log('about_page', $e);
|
||||
$rawContent = $this->defaultContent;
|
||||
$contacts = null;
|
||||
$ergSiteUrl = null;
|
||||
$sourceCodeUrl = null;
|
||||
}
|
||||
|
||||
$converter = new CommonMarkConverter(['html_input' => 'strip']);
|
||||
@@ -38,6 +42,8 @@ class AboutController
|
||||
'currentNav' => 'apropos',
|
||||
'aboutHtml' => EmailObfuscator::obfuscateHtml($converter->convert($rawContent)->getContent()),
|
||||
'contacts' => $contacts,
|
||||
'ergSiteUrl' => $ergSiteUrl,
|
||||
'sourceCodeUrl' => $sourceCodeUrl,
|
||||
'pageTitle' => 'À Propos – XAMXAM',
|
||||
'metaDescription' => "À propos de XAMXAM, le répertoire des mémoires de fin d'études de l'erg – École de Recherches Graphiques de Bruxelles.",
|
||||
'extraCss' => ['/assets/css/apropos.css'],
|
||||
|
||||
@@ -2732,8 +2732,8 @@ class Database
|
||||
|
||||
/**
|
||||
* Get an apropos content value by key.
|
||||
* @param string $key 'contacts', 'credits', or 'erg_url'
|
||||
* @return array|string|null JSON-decoded array for contacts/credits, string for erg_url
|
||||
* @param string $key 'contacts', 'credits', 'erg_site_url', 'source_code_url'
|
||||
* @return array|string|null JSON-decoded value (array for contacts, string for URLs)
|
||||
*/
|
||||
public function getAproposContent(string $key)
|
||||
{
|
||||
@@ -2745,13 +2745,28 @@ class Database
|
||||
}
|
||||
|
||||
$decoded = json_decode($row['value'], true);
|
||||
return is_array($decoded) ? $decoded : null;
|
||||
if (is_array($decoded)) {
|
||||
return $decoded;
|
||||
}
|
||||
if (is_string($decoded)) {
|
||||
return $decoded;
|
||||
}
|
||||
// Legacy: raw URL strings stored before JSON encoding was enforced
|
||||
if (is_string($row['value']) && $row['value'] !== '') {
|
||||
$trimmed = trim($row['value']);
|
||||
if (filter_var($trimmed, FILTER_VALIDATE_URL)) {
|
||||
return $trimmed;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save an apropos content value by key (contacts JSON).
|
||||
* Save an apropos content value by key.
|
||||
* @param string $key
|
||||
* @param array|string $value Array for structured data (contacts), string for URLs
|
||||
*/
|
||||
public function saveAproposContent(string $key, array $value): void
|
||||
public function saveAproposContent(string $key, $value): void
|
||||
{
|
||||
$storedValue = json_encode($value, JSON_UNESCAPED_UNICODE);
|
||||
$stmt = $this->pdo->prepare(
|
||||
|
||||
Reference in New Issue
Block a user