diff --git a/module/news/changes.md b/module/news/changes.md index 601af4aa..f7d25c0e 100644 --- a/module/news/changes.md +++ b/module/news/changes.md @@ -1,3 +1,5 @@ +# Version 4.4 +- Intl date Formats # Version 4.3 - Multilinguisme # Version 4.23 diff --git a/module/news/news.php b/module/news/news.php index 764ababb..7a1dd3bc 100644 --- a/module/news/news.php +++ b/module/news/news.php @@ -18,12 +18,14 @@ class news extends common const VERSION = '4.3'; const REALNAME = 'News'; - const DATADIRECTORY = self::DATA_DIR . 'news/'; + const DATADIRECTORY = self::DATA_DIR . 'news/'; public static $actions = [ 'add' => self::GROUP_MODERATOR, - 'config' => self::GROUP_MODERATOR, // Edition des news - 'option' => self::GROUP_MODERATOR, // paramétrage des news + 'config' => self::GROUP_MODERATOR, + // Edition des news + 'option' => self::GROUP_MODERATOR, + // paramétrage des news 'delete' => self::GROUP_MODERATOR, 'edit' => self::GROUP_MODERATOR, 'index' => self::GROUP_VISITOR, @@ -61,24 +63,24 @@ class news extends common public static $nbrCol = 1; public static $height = [ - -1 => 'Article complet', - 1000 => '1000 caractères', - 800 => '800 caractères', - 600 => '600 caractères', - 400 => '400 caractères', - 200 => '200 caractères', + -1 => 'Article complet', + 1000 => '1000 caractères', + 800 => '800 caractères', + 600 => '600 caractères', + 400 => '400 caractères', + 200 => '200 caractères', ]; public static $borderWidth = [ - 0 => 'Aucune', - '0.1em' => 'Très fine', - '0.15em' => 'Fine', - '0.2em' => 'Très petite', - '0.25em' => 'Petite', + 0 => 'Aucune', + '0.1em' => 'Très fine', + '0.15em' => 'Fine', + '0.2em' => 'Très petite', + '0.25em' => 'Petite', ]; public static $borderStyle = [ - 'none' => 'Aucune', + 'none' => 'Aucune', 'solid' => 'Tiret' ]; @@ -87,6 +89,25 @@ class news extends common // Nombre d'articles dans la page de config: public static $itemsperPage = 8; + public static $dateFormats = [ + '%d %B %Y' => 'DD MMMM YYYY', + '%d/%m/%Y' => 'DD/MM/YYYY', + '%m/%d/%Y' => 'MM/DD/YYYY', + '%d/%m/%y' => 'DD/MM/YY', + '%m/%d/%y' => 'MM/DD/YY', + '%d-%m-%Y' => 'DD-MM-YYYY', + '%m-%d-%Y' => 'MM-DD-YYYY', + '%d-%m-%y' => 'DD-MM-YY', + '%m-%d-%y' => 'MM-DD-YY', + ]; + public static $timeFormats = [ + '%H:%M' => 'HH:MM', + '%I:%M %p' => "HH:MM tt", + ]; + + public static $timeFormat = ''; + public static $dateFormat = ''; + /** * Flux RSS */ @@ -115,11 +136,11 @@ class news extends common foreach ($newsIdsPublishedOns as $newsId => $newsPublishedOn) { if ($newsPublishedOn <= time() and $newsIdsStates[$newsId]) { $newsArticle = $feeds->createNewItem(); - $author = $this->signature($this->getData(['module', $this->getUrl(0), 'posts', $newsId, 'userId'])); + $author = $this->signature($this->getData(['module', $this->getUrl(0), 'posts', $newsId, 'userId'])); $newsArticle->addElementArray([ - 'title' => $this->getData(['module', $this->getUrl(0), 'posts', $newsId, 'title']), - 'link' => helper::baseUrl() . $this->getUrl(0) . '/' . $newsId . '#' . $newsId, - 'description' => $this->getData(['module', $this->getUrl(0), 'posts', $newsId, 'content']) + 'title' => $this->getData(['module', $this->getUrl(0), 'posts', $newsId, 'title']), + 'link' => helper::baseUrl() . $this->getUrl(0) . '/' . $newsId . '#' . $newsId, + 'description' => $this->getData(['module', $this->getUrl(0), 'posts', $newsId, 'content']) ]); $newsArticle->setAuthor($author, 'no@mail.com'); $newsArticle->setId(helper::baseUrl() . $this->getUrl(0) . '/' . $newsId . '#' . $newsId); @@ -147,14 +168,19 @@ class news extends common $newsId = helper::increment($this->getInput('newsAddTitle', helper::FILTER_ID), (array) $this->getData(['module', $this->getUrl(0), 'posts'])); $publishedOn = $this->getInput('newsAddPublishedOn', helper::FILTER_DATETIME, true); $publishedOff = $this->getInput('newsAddPublishedOff') ? $this->getInput('newsAddPublishedOff', helper::FILTER_DATETIME) : ''; - $this->setData(['module', $this->getUrl(0), 'posts', $newsId, [ - 'content' => $this->getInput('newsAddContent', null), - 'publishedOn' => $publishedOn, - 'publishedOff' => $publishedOff, - 'state' => $this->getInput('newsAddState', helper::FILTER_BOOLEAN), - 'title' => $this->getInput('newsAddTitle', helper::FILTER_STRING_SHORT, true), - 'userId' => $this->getInput('newsAddUserId', helper::FILTER_ID, true) - ]]); + $this->setData([ + 'module', $this->getUrl(0), + 'posts', + $newsId, + [ + 'content' => $this->getInput('newsAddContent', null), + 'publishedOn' => $publishedOn, + 'publishedOff' => $publishedOff, + 'state' => $this->getInput('newsAddState', helper::FILTER_BOOLEAN), + 'title' => $this->getInput('newsAddTitle', helper::FILTER_STRING_SHORT, true), + 'userId' => $this->getInput('newsAddUserId', helper::FILTER_ID, true) + ] + ]); // Valeurs en sortie $this->addOutput([ 'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config', @@ -195,12 +221,15 @@ class news extends common $pagination = helper::pagination($newsIds, $this->getUrl(), self::$itemsperPage); // Liste des pages self::$pages = $pagination['pages']; + // Format de temps + self::$dateFormat = $this->getData(['module', $this->getUrl(0), 'config', 'dateFormat']); + self::$timeFormat = $this->getData(['module', $this->getUrl(0), 'config', 'timeFormat']); // News en fonction de la pagination for ($i = $pagination['first']; $i < $pagination['last']; $i++) { // Met en forme le tableau - $dateOn = helper::dateUTF8('%d %B %Y', $this->getData(['module', $this->getUrl(0), 'posts', $newsIds[$i], 'publishedOn'])) . ' - ' . helper::dateUTF8('%H:%M', $this->getData(['module', $this->getUrl(0), 'posts', $newsIds[$i], 'publishedOn'])); + $dateOn = helper::dateUTF8(self::$dateFormat, $this->getData(['module', $this->getUrl(0), 'posts', $newsIds[$i], 'publishedOn'])) . ' - ' . helper::dateUTF8(self::$timeFormat, $this->getData(['module', $this->getUrl(0), 'posts', $newsIds[$i], 'publishedOn'])); if ($this->getData(['module', $this->getUrl(0), 'posts', $newsIds[$i], 'publishedOff'])) { - $dateOff = helper::dateUTF8('%d %B %Y', $this->getData(['module', $this->getUrl(0), 'posts', $newsIds[$i], 'publishedOff'])) . ' - ' . helper::dateUTF8('%H:%M', $this->getData(['module', $this->getUrl(0), 'posts', $newsIds[$i], 'publishedOff'])); + $dateOff = helper::dateUTF8(self::$dateFormat, $this->getData(['module', $this->getUrl(0), 'posts', $newsIds[$i], 'publishedOff'])) . ' - ' . helper::dateUTF8(self::$timeFormat, $this->getData(['module', $this->getUrl(0), 'posts', $newsIds[$i], 'publishedOff'])); } else { $dateOff = 'Permanent'; } @@ -236,9 +265,9 @@ class news extends common if ($this->isPost()) { // Générer la feuille de CSS - $style = '.newsFrame {'; - $style .= 'border-right:' . $this->getInput('newsThemeBorderStyle', helper::FILTER_STRING_SHORT) . ' ' . $this->getInput('newsThemeBorderColor') . ' ' . $this->getInput('newsThemeBorderWidth', helper::FILTER_STRING_SHORT) . ';'; - $style .= 'border-left:' . $this->getInput('newsThemeBorderStyle', helper::FILTER_STRING_SHORT) . ' ' . $this->getInput('newsThemeBorderColor') . ' ' . $this->getInput('newsThemeBorderWidth', helper::FILTER_STRING_SHORT) . ';'; + $style = '.newsFrame {'; + $style .= 'border-right:' . $this->getInput('newsThemeBorderStyle', helper::FILTER_STRING_SHORT) . ' ' . $this->getInput('newsThemeBorderColor') . ' ' . $this->getInput('newsThemeBorderWidth', helper::FILTER_STRING_SHORT) . ';'; + $style .= 'border-left:' . $this->getInput('newsThemeBorderStyle', helper::FILTER_STRING_SHORT) . ' ' . $this->getInput('newsThemeBorderColor') . ' ' . $this->getInput('newsThemeBorderWidth', helper::FILTER_STRING_SHORT) . ';'; $style .= 'background-color:' . $this->getInput('newsThemeBackgroundColor') . ';'; $style .= '}'; @@ -251,22 +280,32 @@ class news extends common // Fin feuille de style - $this->setData(['module', $this->getUrl(0), 'theme', [ - 'style' => $success ? self::DATADIRECTORY . $this->getUrl(0) . '/theme.css' : '', - 'borderStyle' => $this->getInput('newsThemeBorderStyle', helper::FILTER_STRING_SHORT), - 'borderColor' => $this->getInput('newsThemeBorderColor'), - 'borderWidth' => $this->getInput('newsThemeBorderWidth', helper::FILTER_STRING_SHORT), - 'backgroundColor' => $this->getInput('newsThemeBackgroundColor') - ]]); + $this->setData([ + 'module', $this->getUrl(0), + 'theme', + [ + 'style' => $success ? self::DATADIRECTORY . $this->getUrl(0) . '/theme.css' : '', + 'borderStyle' => $this->getInput('newsThemeBorderStyle', helper::FILTER_STRING_SHORT), + 'borderColor' => $this->getInput('newsThemeBorderColor'), + 'borderWidth' => $this->getInput('newsThemeBorderWidth', helper::FILTER_STRING_SHORT), + 'backgroundColor' => $this->getInput('newsThemeBackgroundColor') + ] + ]); - $this->setData(['module', $this->getUrl(0), 'config', [ - 'feeds' => $this->getInput('newsOptionShowFeeds', helper::FILTER_BOOLEAN), - 'feedsLabel' => $this->getInput('newsOptionFeedslabel', helper::FILTER_STRING_SHORT), - 'itemsperPage' => $this->getInput('newsOptionItemsperPage', helper::FILTER_INT, true), - 'itemsperCol' => $this->getInput('newsOptionItemsperCol', helper::FILTER_INT, true), - 'height' => $this->getInput('newsOptionHeight', helper::FILTER_INT, true), - 'versionData' => $this->getData(['module', $this->getUrl(0), 'config', 'versionData']) - ]]); + $this->setData([ + 'module', $this->getUrl(0), + 'config', + [ + 'feeds' => $this->getInput('newsOptionShowFeeds', helper::FILTER_BOOLEAN), + 'feedsLabel' => $this->getInput('newsOptionFeedslabel', helper::FILTER_STRING_SHORT), + 'itemsperPage' => $this->getInput('newsOptionItemsperPage', helper::FILTER_INT, true), + 'itemsperCol' => $this->getInput('newsOptionItemsperCol', helper::FILTER_INT, true), + 'height' => $this->getInput('newsOptionHeight', helper::FILTER_INT, true), + 'dateFormat' => $this->getInput('newsOptionDateFormat'), + 'timeFormat' => $this->getInput('newsOptionTimeFormat'), + 'versionData' => $this->getData(['module', $this->getUrl(0), 'config', 'versionData']) + ] + ]); // Valeurs en sortie @@ -334,7 +373,7 @@ class news extends common elseif ($this->getUrl(3) !== $_SESSION['csrf']) { // Valeurs en sortie $this->addOutput([ - 'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config', + 'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config', 'notification' => helper::translate('Action interdite') ]); } @@ -384,14 +423,19 @@ class news extends common } $publishedOn = $this->getInput('newsEditPublishedOn', helper::FILTER_DATETIME, true); $publishedOff = $this->getInput('newsEditPublishedOff') ? $this->getInput('newsEditPublishedOff', helper::FILTER_DATETIME) : ''; - $this->setData(['module', $this->getUrl(0), 'posts', $newsId, [ - 'content' => $this->getInput('newsEditContent', null), - 'publishedOn' => $publishedOn, - 'publishedOff' => $publishedOff < $publishedOn ? '' : $publishedOff, - 'state' => $this->getInput('newsEditState', helper::FILTER_BOOLEAN), - 'title' => $this->getInput('newsEditTitle', helper::FILTER_STRING_SHORT, true), - 'userId' => $this->getInput('newsEditUserId', helper::FILTER_ID, true) - ]]); + $this->setData([ + 'module', $this->getUrl(0), + 'posts', + $newsId, + [ + 'content' => $this->getInput('newsEditContent', null), + 'publishedOn' => $publishedOn, + 'publishedOff' => $publishedOff < $publishedOn ? '' : $publishedOff, + 'state' => $this->getInput('newsEditState', helper::FILTER_BOOLEAN), + 'title' => $this->getInput('newsEditTitle', helper::FILTER_STRING_SHORT, true), + 'userId' => $this->getInput('newsEditUserId', helper::FILTER_ID, true) + ] + ]); // Valeurs en sortie $this->addOutput([ 'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config', @@ -442,11 +486,11 @@ class news extends common } // L'article existe else { - self::$articleSignature = $this->signature($this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(1), 'userId'])); + self::$articleSignature = $this->signature($this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(1), 'userId'])); // Valeurs en sortie $this->addOutput([ 'showBarEditButton' => true, - 'title' => $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(1), 'title']), + 'title' => $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(1), 'title']), 'view' => 'article' ]); } @@ -461,7 +505,7 @@ class news extends common if ( $newsPublishedOn <= time() and $newsIdsStates[$newsId] and - // date de péremption tenant des champs non définis + // date de péremption tenant des champs non définis (!is_integer($newsIdsPublishedOff) or $newsIdsPublishedOff > time() ) @@ -487,7 +531,7 @@ class news extends common $content = substr($this->getData(['module', $this->getUrl(0), 'posts', $newsIds[$i], 'content']), 0, $this->getData(['module', $this->getUrl(0), 'config', 'height'])); // Ne pas couper un mot $lastSpace = strrpos($content, ' ', -1); - self::$news[$newsIds[$i]]['content'] = substr(strip_tags($content, '

'), 0, $lastSpace); + self::$news[$newsIds[$i]]['content'] = substr(strip_tags($content, '

'), 0, $lastSpace); } // Mise en forme de la signature self::$news[$newsIds[$i]]['userId'] = $this->signature($this->getData(['module', $this->getUrl(0), 'posts', $newsIds[$i], 'userId'])); @@ -498,8 +542,8 @@ class news extends common 'showPageContent' => true, 'view' => 'index', 'style' => file_exists($this->getData(['module', $this->getUrl(0), 'theme', 'style'])) - ? $this->getData(['module', $this->getUrl(0), 'theme', 'style']) - : '' + ? $this->getData(['module', $this->getUrl(0), 'theme', 'style']) + : '' ]); } } @@ -538,7 +582,7 @@ class news extends common if ( $this->getData(['module', $this->getUrl(0), 'config']) === NULL || $this->getData(['module', $this->getUrl(0), 'theme']) === NULL - || !file_exists(self::DATADIRECTORY . $this->getUrl(0) . '/theme.css') + || !file_exists(self::DATADIRECTORY . $this->getUrl(0) . '/theme.css') ) { $this->init(); } @@ -562,7 +606,7 @@ class news extends common // Mettre à jour la version $this->setData(['module', $this->getUrl(0), 'config', 'versionData', '3.3']); } - // Mise à jour 3.4 + // Mise à jour 4.4 if (version_compare($versionData, '3.4', '<')) { // Effacer le style précédent unlink(self::DATADIRECTORY . $this->getUrl(0) . '/theme.css'); @@ -572,6 +616,14 @@ class news extends common // Mettre à jour la version $this->setData(['module', $this->getUrl(0), 'config', 'versionData', '3.4']); } + // Mise à jour 3.4 + if (version_compare($versionData, '4.4', '<')) { + $this->setData(['module', $this->getUrl(0), 'config', 'dateFormat', '%d %B %Y']); + $this->setData(['module', $this->getUrl(0), 'config', 'timeFormat', '%H:%M']); + // Mettre à jour la version + $this->setData(['module', $this->getUrl(0), 'config', 'versionData', '3.4']); + } + } /** @@ -590,7 +642,7 @@ class news extends common if ($this->getData(['module', $this->getUrl(0), 'theme']) === null) { // Données de thème $this->setData(['module', $this->getUrl(0), 'theme', init::$defaultTheme]); - $this->setData(['module', $this->getUrl(0), 'theme', 'style', self::DATADIRECTORY . $this->getUrl(0) . '/theme.css']); + $this->setData(['module', $this->getUrl(0), 'theme', 'style', self::DATADIRECTORY . $this->getUrl(0) . '/theme.css']); } // Dossier de l'instance @@ -599,17 +651,17 @@ class news extends common } // Check la présence de la feuille de style - if (!file_exists(self::DATADIRECTORY . $this->getUrl(0) . '/theme.css')) { + if (!file_exists(self::DATADIRECTORY . $this->getUrl(0) . '/theme.css')) { // Générer la feuille de CSS - $style = '.newsFrame {'; - $style .= 'border:' . $this->getData(['module', $this->getUrl(0), 'theme', 'borderStyle']) . ' ' . $this->getData(['module', $this->getUrl(0), 'theme', 'borderColor']) . ' ' . $this->getData(['module', $this->getUrl(0), 'theme', 'borderWidth']) . ';'; + $style = '.newsFrame {'; + $style .= 'border:' . $this->getData(['module', $this->getUrl(0), 'theme', 'borderStyle']) . ' ' . $this->getData(['module', $this->getUrl(0), 'theme', 'borderColor']) . ' ' . $this->getData(['module', $this->getUrl(0), 'theme', 'borderWidth']) . ';'; $style .= 'background-color:' . $this->getData(['module', $this->getUrl(0), 'theme', 'backgroundColor']) . ';'; $style .= '}'; // Sauver la feuille de style file_put_contents(self::DATADIRECTORY . $this->getUrl(0) . '/theme.css', $style); // Stocker le nom de la feuille de style - $this->setData(['module', $this->getUrl(0), 'theme', 'style', self::DATADIRECTORY . $this->getUrl(0) . '/theme.css']); + $this->setData(['module', $this->getUrl(0), 'theme', 'style', self::DATADIRECTORY . $this->getUrl(0) . '/theme.css']); } } -} +} \ No newline at end of file diff --git a/module/news/ressource/defaultdata.php b/module/news/ressource/defaultdata.php index e67aadbb..ed048238 100644 --- a/module/news/ressource/defaultdata.php +++ b/module/news/ressource/defaultdata.php @@ -6,7 +6,9 @@ class init extends news { 'itemsperPage' => 8, 'itemsperCol' => 12, 'height' => -1, - 'versionData' => '3.4' + 'versionData' => '3.5', + 'dateFormat' => '%d %B %Y', + 'timeFormat' =>'%H:%M', ]; public static $defaultTheme = [ diff --git a/module/news/view/option/option.php b/module/news/view/option/option.php index 877d81c8..59246e19 100644 --- a/module/news/view/option/option.php +++ b/module/news/view/option/option.php @@ -14,7 +14,39 @@

-

Paramètres du module

+

+
+
+ 'Nombre de colonnes', + 'selected' => $this->getData(['module', $this->getUrl(0),'config', 'itemsperCol']) + ]); ?> +
+
+ 'Articles par page', + 'selected' => $this->getData(['module', $this->getUrl(0),'config', 'itemsperPage']) + ]); ?> +
+
+ 'Abrégé de l\'article', + 'selected' => $this->getData(['module', $this->getUrl(0),'config', 'height']) + ]); ?> +
+
+ 'Format des dates', + 'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'dateFormat']) + ]); ?> +
+
+ 'Format des heures', + 'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'timeFormat']) + ]); ?> +
+
-
-
- 'Nombre de colonnes', - 'selected' => $this->getData(['module', $this->getUrl(0),'config', 'itemsperCol']) - ]); ?> -
-
- 'Articles par page', - 'selected' => $this->getData(['module', $this->getUrl(0),'config', 'itemsperPage']) - ]); ?> -
-
- 'Abrégé de l\'article', - 'selected' => $this->getData(['module', $this->getUrl(0),'config', 'height']) - ]); ?> -
-
-

Thème du module

+