modification de la logique, la partie publique ne prend en compte que la date publication
81 lines
3.3 KiB
PHP
81 lines
3.3 KiB
PHP
<?php
|
|
class Stories {
|
|
private static $storiesDir = __DIR__ . '/../stories/';
|
|
|
|
public static function getAll() {
|
|
$stories = [];
|
|
foreach (glob(self::$storiesDir . '*.json') as $file) {
|
|
$story = json_decode(file_get_contents($file), true);
|
|
$stories[] = $story;
|
|
}
|
|
return $stories;
|
|
}
|
|
|
|
public static function get($id) {
|
|
$file = self::$storiesDir . $id . '.json';
|
|
if (!file_exists($file)) {
|
|
return null;
|
|
}
|
|
return json_decode(file_get_contents($file), true);
|
|
}
|
|
|
|
public static function formatDate($date) {
|
|
if (strlen($date) > 10) { // Si la date contient aussi l'heure
|
|
$datetime = DateTime::createFromFormat('Y-m-d H:i:s', $date);
|
|
return $datetime ? $datetime->format('d/m/Y H:i') : '';
|
|
} else { // Pour les anciennes dates sans heure
|
|
$datetime = DateTime::createFromFormat('Y-m-d', $date);
|
|
return $datetime ? $datetime->format('d/m/Y') : '';
|
|
}
|
|
}
|
|
|
|
public static function save($story) {
|
|
// Mise à jour de la date standard pour tout changement
|
|
$story['updated'] = date('Y-m-d H:i:s');
|
|
|
|
// Vérification si c'est une création initiale
|
|
$isNew = !file_exists(self::$storiesDir . $story['id'] . '.json');
|
|
|
|
// Vérification si un nouveau chapitre a été ajouté ou un chapitre est passé de draft à publié
|
|
$existingStory = $isNew ? null : self::get($story['id']);
|
|
$updatePublicDate = $isNew; // Déjà true si c'est un nouveau roman
|
|
|
|
if (!$isNew && isset($existingStory['chapters']) && isset($story['chapters'])) {
|
|
// Vérifier les nouveaux chapitres ou changements de statut
|
|
foreach ($story['chapters'] as $chapter) {
|
|
$found = false;
|
|
foreach ($existingStory['chapters'] as $oldChapter) {
|
|
if ($oldChapter['id'] === $chapter['id']) {
|
|
$found = true;
|
|
// Chapitre passé de brouillon à publié
|
|
if (($oldChapter['draft'] ?? false) && !($chapter['draft'] ?? false)) {
|
|
$updatePublicDate = true;
|
|
// Ajouter une date de publication au chapitre
|
|
$chapter['published'] = date('Y-m-d H:i:s');
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
// Nouveau chapitre
|
|
if (!$found && !($chapter['draft'] ?? false)) {
|
|
$updatePublicDate = true;
|
|
// S'assurer que le nouveau chapitre a une date de publication
|
|
if (!isset($chapter['published'])) {
|
|
$chapter['published'] = date('Y-m-d H:i:s');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Mettre à jour la date publique si nécessaire
|
|
if ($updatePublicDate) {
|
|
$story['publicUpdated'] = date('Y-m-d H:i:s');
|
|
} else if (!isset($story['publicUpdated'])) {
|
|
// S'assurer que le champ existe
|
|
$story['publicUpdated'] = $story['created'] ?? date('Y-m-d H:i:s');
|
|
}
|
|
|
|
$file = self::$storiesDir . $story['id'] . '.json';
|
|
return file_put_contents($file, json_encode($story, JSON_PRETTY_PRINT));
|
|
}
|
|
} |