diff --git a/CHANGELOG.md b/CHANGELOG.md index 754b54b..816463a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ -2022.04.27.1 - dev -- [ ] fix wrong timezone on admin vs public expired date +2022.11.20 +- fix compatibility with Dotclear 2.24 (required) +- fix wrong timezone on admin vs public expired date 2022.04.27 - require Dotclear 2.21.3 diff --git a/README.md b/README.md index c9397e4..1349de4 100644 --- a/README.md +++ b/README.md @@ -3,11 +3,10 @@ [![Release](https://img.shields.io/github/v/release/JcDenis/postExpired)](https://github.com/JcDenis/postExpired/releases) [![Date](https://img.shields.io/github/release-date/JcDenis/postExpired)](https://github.com/JcDenis/postExpired/releases) [![Issues](https://img.shields.io/github/issues/JcDenis/postExpired)](https://github.com/JcDenis/postExpired/issues) -[![Dotclear](https://img.shields.io/badge/dotclear-v2.20-blue.svg)](https://fr.dotclear.org/download) +[![Dotclear](https://img.shields.io/badge/dotclear-v2.24-blue.svg)](https://fr.dotclear.org/download) [![Dotaddict](https://img.shields.io/badge/dotaddict-official-green.svg)](https://plugins.dotaddict.org/dc2/details/postExpired) [![License](https://img.shields.io/github/license/JcDenis/postExpired)](https://github.com/JcDenis/postExpired/blob/master/LICENSE) - ## WHAT IS POSTEXPIRED ? Post expired is a plugin for the open-source @@ -21,7 +20,7 @@ to change some options of a post at a given time. postExpired requires: * contentadmin permissions - * Dotclear 2.21.3 + * Dotclear 2.24 ## USAGE @@ -43,8 +42,8 @@ Notes: * License : [GNU GPL v2](https://www.gnu.org/licenses/old-licenses/lgpl-2.0.html) * Source & contribution : [GitHub Page](https://github.com/JcDenis/postExpired) - * Packages & details: [Dotaddict Page](https://plugins.dotaddict.org/dc2/details/postExpired) - * Discuss & help: [Dotclear Forum](https://forum.dotclear.org/viewtopic.php?id=42305) + * Packages & details : [Dotaddict Page](https://plugins.dotaddict.org/dc2/details/postExpired) + * Discuss & help : [Dotclear Forum](https://forum.dotclear.org/viewtopic.php?id=42305) ## CONTRIBUTORS diff --git a/_admin.php b/_admin.php index e750500..6f7447b 100644 --- a/_admin.php +++ b/_admin.php @@ -1,16 +1,15 @@ getVersion('postExpired') != dcCore::app()->plugins->moduleIn # Check user right if (!dcCore::app()->auth->check(dcCore::app()->auth->makePermissions([ - dcAuth::PERMISSION_CONTENT_ADMIN, - ]), dcCore::app()->blog->id) + dcAuth::PERMISSION_CONTENT_ADMIN, +]), dcCore::app()->blog->id) ) { return null; } @@ -87,33 +86,33 @@ class adminBehaviorPostExpired { /** * Add actions to posts page combo - * + * * @param dcPostsActionsPage $ap dcPostsActionsPage instance */ public static function adminPostsActions(dcPostsActions $pa) { $pa->addAction( - array( - __('Expired entries') => array( - __('Add expired date') => 'post_expired_add' - ) - ), - array('adminBehaviorPostExpired', 'callbackAdd') + [ + __('Expired entries') => [ + __('Add expired date') => 'post_expired_add', + ], + ], + ['adminBehaviorPostExpired', 'callbackAdd'] ); $pa->addAction( - array( - __('Expired entries') => array( - __('Remove expired date') => 'post_expired_remove' - ) - ), - array('adminBehaviorPostExpired', 'callbackRemove') + [ + __('Expired entries') => [ + __('Remove expired date') => 'post_expired_remove', + ], + ], + ['adminBehaviorPostExpired', 'callbackRemove'] ); } /** * Add javascript for date field and toggle - * + * * @return string HTML head */ public static function adminPostHeaders() @@ -123,7 +122,7 @@ class adminBehaviorPostExpired /** * Add form to post sidebar - * + * * @param ArrayObject $main_items Main items * @param ArrayObject $sidebar_items Sidebar items * @param record $post Post record or null @@ -134,18 +133,18 @@ class adminBehaviorPostExpired return null; } - $sidebar_items['post_expired'] = array( + $sidebar_items['post_expired'] = [ 'title' => __('Expired date'), 'items' => self::fieldsPostExpired( $post->post_type, $post->post_id - ) - ); + ), + ]; } /** * Delete expired date on post edition - * + * * @param integer $post_id Post id */ public static function adminBeforePostDelete($post_id) @@ -155,7 +154,7 @@ class adminBehaviorPostExpired /** * Add expired date on post edition - * + * * @param cursor $cur Current post cursor * @param integer $post_id Post id */ @@ -175,7 +174,7 @@ class adminBehaviorPostExpired /** * Posts actions callback to add expired date - * + * * @param dcPostsActions $pa dcPostsActions instance * @param ArrayObject $post _POST actions */ @@ -194,7 +193,7 @@ class adminBehaviorPostExpired || !empty($post['post_expired_selected']) || !empty($post['post_expired_comment']) || !empty($post['post_expired_trackback']))) { - foreach($posts_ids as $post_id) { + foreach ($posts_ids as $post_id) { self::delPostExpired($post_id); self::setPostExpired($post_id, $post); } @@ -208,11 +207,11 @@ class adminBehaviorPostExpired $posts = $pa->getRS(); $pa->beginPage( - dcPage::breadcrumb(array( + dcPage::breadcrumb([ html::escapeHTML(dcCore::app()->blog->name) => '', - $pa->getCallerTitle() => $pa->getRedirection(true), - __('Add expired date to this selection') => '' - )), + $pa->getCallerTitle() => $pa->getRedirection(true), + __('Add expired date to this selection') => '', + ]), //dcPage::jsDatePicker() . self::adminPostHeaders() ); @@ -225,7 +224,7 @@ class adminBehaviorPostExpired dcCore::app()->formNonce() . $pa->getHiddenFields() . - form::hidden(array('action'), 'post_expired_add') . + form::hidden(['action'], 'post_expired_add') . '

' . ''; @@ -235,7 +234,7 @@ class adminBehaviorPostExpired /** * Posts actions callback to add expired date - * + * * @param dcPostsActions $pa dcPostsActions instance * @param ArrayObject $post _POST actions */ @@ -248,7 +247,7 @@ class adminBehaviorPostExpired } # Delete expired date - foreach($posts_ids as $post_id) { + foreach ($posts_ids as $post_id) { self::delPostExpired($post_id); } @@ -258,7 +257,7 @@ class adminBehaviorPostExpired /** * Delete expired date - * + * * @param integer $post_id Post id */ protected static function delPostExpired($post_id) @@ -268,43 +267,38 @@ class adminBehaviorPostExpired /** * Save expired date - * + * * @param integer $post_id Post id * @param array $post _POST fields */ protected static function setPostExpired($post_id, $post) { - $post_expired = array( - 'status'=> '', - 'category'=> '', - 'selected'=> '', - 'comment'=> '', + $post_expired = [ + 'status' => '', + 'category' => '', + 'selected' => '', + 'comment' => '', 'trackback' => '', - 'date'=> date( + 'date' => date( 'Y-m-d H:i:00', strtotime($post['post_expired_date']) - ) - ); + ), + ]; if (!empty($post['post_expired_status'])) { - $post_expired['status'] = - (string) $post['post_expired_status']; + $post_expired['status'] = (string) $post['post_expired_status']; } if (!empty($post['post_expired_category'])) { - $post_expired['category'] = - (string) $post['post_expired_category']; + $post_expired['category'] = (string) $post['post_expired_category']; } if (!empty($post['post_expired_selected'])) { - $post_expired['selected'] = - (string) $post['post_expired_selected']; + $post_expired['selected'] = (string) $post['post_expired_selected']; } if (!empty($post['post_expired_comment'])) { - $post_expired['comment'] = - (string) $post['post_expired_comment']; + $post_expired['comment'] = (string) $post['post_expired_comment']; } if (!empty($post['post_expired_trackback'])) { - $post_expired['trackback'] = - (string) $post['post_expired_trackback']; + $post_expired['trackback'] = (string) $post['post_expired_trackback']; } dcCore::app()->meta->setPostMeta( @@ -316,20 +310,19 @@ class adminBehaviorPostExpired /** * Expired date form fields - * + * * @param string $post_type Posts type * @return array Array of HTML form fields */ protected static function fieldsPostExpired($post_type, $post_id = null) { - $fields = $post_expired = array(); + $fields = $post_expired = []; if ($post_id) { - $rs = dcCore::app()->meta->getMetadata([ 'meta_type' => 'post_expired', - 'post_id' => $post_id, - 'limit' => 1 + 'post_id' => $post_id, + 'limit' => 1, ]); if (!$rs->isEmpty()) { @@ -337,8 +330,7 @@ class adminBehaviorPostExpired } } - $fields['post_expired_date'] = - '

' . form::datetime('post_expired_date', [ 'default' => html::escapeHTML(dt::str('%Y-%m-%dT%H:%M', strtotime($post_expired['date'] ?? 0))), @@ -346,61 +338,55 @@ class adminBehaviorPostExpired ]) . '

'; - $fields['post_expired_status'] = - '
' . __('On this date, change:') . '
' . + $fields['post_expired_status'] = '
' . __('On this date, change:') . '
' . '

' . form::combo( 'post_expired_status', self::statusCombo(), - empty($post_expired['status']) ? + empty($post_expired['status']) ? '' : $post_expired['status'] ) . '

'; if ($post_type == 'post') { - - $fields['post_expired_category'] = - '

' . form::combo( 'post_expired_category', self::categoriesCombo( dcCore::app()->blog->getCategories( - array('post_type' => 'post') + ['post_type' => 'post'] ) ), - empty($post_expired['category']) ? + empty($post_expired['category']) ? '' : $post_expired['category'] ) . '

'; - $fields['post_expired_selected'] = - '

' . form::combo( 'post_expired_selected', self::selectedCombo(), - empty($post_expired['selected']) ? + empty($post_expired['selected']) ? '' : $post_expired['selected'] ) . '

'; } - $fields['post_expired_comment'] = - '

' . form::combo( 'post_expired_comment', self::commentCombo(), - empty($post_expired['comment']) ? + empty($post_expired['comment']) ? '' : $post_expired['comment'] ) . '

'; - $fields['post_expired_trackback'] = - '

' . form::combo( 'post_expired_trackback', self::trackbackCombo(), - empty($post_expired['trackback']) ? + empty($post_expired['trackback']) ? '' : $post_expired['trackback'] ) . '

'; @@ -409,29 +395,30 @@ class adminBehaviorPostExpired /** * Custom categories combo - * + * * @param dcRecord $categories Categories recordset * @return array Categorires combo */ protected static function categoriesCombo(dcRecord $categories) { # Getting categories - $categories_combo = array( - __('Not changed') => '', - __('Uncategorized') => '!' - ); + $categories_combo = [ + __('Not changed') => '', + __('Uncategorized') => '!', + ]; + try { $categories = dcCore::app()->blog->getCategories( - array('post_type' => 'post') + ['post_type' => 'post'] ); while ($categories->fetch()) { $categories_combo[] = new formSelectOption( - str_repeat('  ', $categories->level - 1) . '• '. html::escapeHTML($categories->cat_title), - '!'.$categories->cat_id + str_repeat('  ', $categories->level - 1) . '• ' . html::escapeHTML($categories->cat_title), + '!' . $categories->cat_id ); } } catch (Exception $e) { - return array(); + return []; } return $categories_combo; @@ -439,58 +426,58 @@ class adminBehaviorPostExpired /** * Custom status combo - * + * * @return array Status combo */ protected static function statusCombo() { - return array( + return [ __('Not changed') => '', - __('Published') => '!1', - __('Pending') => '!-2', - __('Unpublished') => '!0' - ); + __('Published') => '!1', + __('Pending') => '!-2', + __('Unpublished') => '!0', + ]; } /** * Custom selection combo - * + * * @return array Selection combo */ protected static function selectedCombo() { - return array( - __('Not changed') => '', - __('Selected') => '!1', - __('Not selected') => '!0' - ); + return [ + __('Not changed') => '', + __('Selected') => '!1', + __('Not selected') => '!0', + ]; } /** * Custom comment status combo - * + * * @return array Comment status combo */ protected static function commentCombo() { - return array( + return [ __('Not changed') => '', - __('Opened') => '!1', - __('Closed') => '!0' - ); + __('Opened') => '!1', + __('Closed') => '!0', + ]; } /** * Custom trackback status combo - * + * * @return array Trackback status combo */ protected static function trackbackCombo() { - return array( + return [ __('Not changed') => '', - __('Opened') => '!1', - __('Closed') => '!0' - ); + __('Opened') => '!1', + __('Closed') => '!0', + ]; } -} \ No newline at end of file +} diff --git a/_define.php b/_define.php index cdcb8e8..7299054 100644 --- a/_define.php +++ b/_define.php @@ -1,34 +1,33 @@ registerModule( 'Expired entries', - 'Change entries options at a given date', + 'Change entries options at a given date', 'Jean-Christian Denis and Contributors', '2022.11.12', [ - 'requires' => [['core', '2.24']], - 'permissions' => dcCore::app()->auth->makePermissions([ + 'requires' => [['core', '2.24']], + 'permissions' => dcCore::app()->auth->makePermissions([ dcAuth::PERMISSION_USAGE, dcAuth::PERMISSION_CONTENT_ADMIN, ]), - 'type' => 'plugin', - 'support' => 'https://github.com/JcDenis/postExpired', - 'details' => 'https://plugins.dotaddict.org/dc2/details/postExpired', - 'repository' => 'https://raw.githubusercontent.com/JcDenis/postExpired/master/dcstore.xml' + 'type' => 'plugin', + 'support' => 'https://github.com/JcDenis/postExpired', + 'details' => 'https://plugins.dotaddict.org/dc2/details/postExpired', + 'repository' => 'https://raw.githubusercontent.com/JcDenis/postExpired/master/dcstore.xml', ] -); \ No newline at end of file +); diff --git a/_install.php b/_install.php index 1cdf951..2a0511d 100644 --- a/_install.php +++ b/_install.php @@ -1,16 +1,15 @@ error->add($e->getMessage()); return false; -} \ No newline at end of file +} diff --git a/_prepend.php b/_prepend.php index bb19e86..e45a22d 100644 --- a/_prepend.php +++ b/_prepend.php @@ -1,16 +1,15 @@ $v) { + $out = []; + foreach ($in as $k => $v) { $out[] = $k . '|' . $v; } @@ -36,17 +35,17 @@ function encodePostExpired($in) /** * Decode Expired Date settings - * + * * @param string $in "Serialized" options * @return array Array of options */ function decodePostExpired($in) { - $out = array(); - foreach(explode(';', $in) as $v) { - $v = explode('|', $v); + $out = []; + foreach (explode(';', $in) as $v) { + $v = explode('|', $v); $out[$v[0]] = $v[1]; } return $out; -} \ No newline at end of file +} diff --git a/_public.php b/_public.php index f510b4d..0d7ac86 100644 --- a/_public.php +++ b/_public.php @@ -1,16 +1,15 @@ url->type, array('default', 'feed'))) { +if (in_array(dcCore::app()->url->type, ['default', 'feed'])) { dcCore::app()->addBehavior( 'publicBeforeDocumentV2', ['publicBehaviorPostExpired', 'publicBeforeDocument'] @@ -55,7 +54,6 @@ class publicBehaviorPostExpired { /** * Check if there are expired dates - * */ public static function publicBeforeDocument() { @@ -67,7 +65,7 @@ class publicBehaviorPostExpired 'ON META.post_id = P.post_id ' . "WHERE blog_id = '" . dcCore::app()->con->escape(dcCore::app()->blog->id) . "' " . // Removed for quick compatibility with some plugins - //"AND P.post_type = 'post' " . + //"AND P.post_type = 'post' " . "AND META.meta_type = 'post_expired' " ); @@ -84,18 +82,17 @@ class publicBehaviorPostExpired # Loop through marked posts $updated = false; - while($posts->fetch()) { - + while ($posts->fetch()) { # Decode meta record $post_expired = decodePostExpired($posts->meta_id); # Check if post is outdated - $now_tz = $now + dt::getTimeOffset($posts->post_tz, $now); + $now_tz = $now + dt::getTimeOffset($posts->post_tz, $now); $meta_tz = strtotime($post_expired['date']); if ($now_tz > $meta_tz) { # Delete meta for expired date dcCore::app()->auth->sudo( - array(dcCore::app()->meta, 'delPostMeta'), + [dcCore::app()->meta, 'delPostMeta'], $posts->post_id, 'post_expired' ); @@ -105,36 +102,40 @@ class publicBehaviorPostExpired $post_cur->post_upddt = date('Y-m-d H:i:s', $now_tz); # Loop through actions - foreach($post_expired as $k => $v) { + foreach ($post_expired as $k => $v) { if (empty($v)) { continue; } # values are prefixed by "!" - $v = (integer) substr($v, 1); + $v = (int) substr($v, 1); # Put value in post cursor - switch($k) - { + switch($k) { case 'status': $post_cur->post_status = $v; - break; + + break; case 'category': $post_cur->cat_id = $v ? $v : null; - break; + + break; case 'selected': $post_cur->post_selected = $v; - break; + + break; case 'comment': $post_cur->post_open_comment = $v; - break; + + break; case 'trackback': $post_cur->post_open_tb = $v; - break; + + break; } } @@ -156,7 +157,7 @@ class publicBehaviorPostExpired /** * Extends posts record with expired date - * + * * @param dcRecord $rs Post recordset */ public static function coreBlogGetPosts(dcRecord $rs) @@ -174,7 +175,7 @@ class rsExtPostExpiredPublic extends rsExtPost { /** * Retrieve expired date of a post - * + * * @param record $rs Post recordset * @return string Expired date or null */ @@ -183,15 +184,15 @@ class rsExtPostExpiredPublic extends rsExtPost if (!$rs->postexpired[$rs->post_id]) { //memory $rs_date = $rs->core->meta->getMetadata([ 'meta_type' => 'post_expired', - 'post_id'=> $rs->post_id, - 'limit'=> 1 + 'post_id' => $rs->post_id, + 'limit' => 1, ]); if ($rs_date->isEmpty()) { return null; } - $v = decodePostExpired($rs_date->meta_id); + $v = decodePostExpired($rs_date->meta_id); $rs->postexpired[$rs->post_id] = $v['date']; } @@ -208,48 +209,48 @@ class tplPostExpired { /** * Template condition to check if there is an expired date - * + * * @param array $attr Block attributes * @param string $content Block content */ public static function EntryExpiredIf($attr, $content) { - $if = array(); - $operator = isset($attr['operator']) ? + $if = []; + $operator = isset($attr['operator']) ? self::getOperator($attr['operator']) : '&&'; if (isset($attr['has_date'])) { - $sign = (boolean) $attr['has_date'] ? '!' : '='; + $sign = (bool) $attr['has_date'] ? '!' : '='; $if[] = '(null ' . $sign . '== dcCore::app()->ctx->posts->postExpiredDate())'; } else { $if[] = '(null !== dcCore::app()->ctx->posts->postExpiredDate())'; } - return - "\n" . + return + '\n" . $content . "\n"; } /** * Template for expired date - * + * * @param array $attr Value attributes */ public static function EntryExpiredDate($attr) { - $format = !empty($attr['format']) ? + $format = !empty($attr['format']) ? addslashes($attr['format']) : ''; $f = dcCore::app()->tpl->getFilters($attr); if (!empty($attr['rfc822'])) { - $res = sprintf($f, "dt::rfc822(strtotime(dcCore::app()->ctx->posts->postExpiredDate()),dcCore::app()->ctx->posts->post_tz)"); + $res = sprintf($f, 'dt::rfc822(strtotime(dcCore::app()->ctx->posts->postExpiredDate()),dcCore::app()->ctx->posts->post_tz)'); } elseif (!empty($attr['iso8601'])) { - $res = sprintf($f, "dt::iso8601(strtotime(dcCore::app()->ctx->posts->postExpiredDate(),dcCore::app()->ctx->posts->post_tz)"); + $res = sprintf($f, 'dt::iso8601(strtotime(dcCore::app()->ctx->posts->postExpiredDate(),dcCore::app()->ctx->posts->post_tz)'); } elseif ($format) { $res = sprintf($f, "dt::dt2str('" . $format . "',dcCore::app()->ctx->posts->postExpiredDate())"); } else { - $res = sprintf($f, "dt::dt2str(dcCore::app()->blog->settings->system->date_format,dcCore::app()->ctx->posts->postExpiredDate())"); + $res = sprintf($f, 'dt::dt2str(dcCore::app()->blog->settings->system->date_format,dcCore::app()->ctx->posts->postExpiredDate())'); } return 'ctx->posts->postExpiredDate()) { echo ' . $res . '; } ?>'; @@ -257,29 +258,30 @@ class tplPostExpired /** * Template for expired time - * + * * @param array $attr Value attributes */ public static function EntryExpiredTime($attr) { - return + return 'ctx->posts->postExpiredDate()) { echo ' . sprintf( - dcCore::app()->tpl->getFilters($attr), "dt::dt2str(" . - (!empty($attr['format']) ? - "'" . addslashes($attr['format']) . "'" : "dcCore::app()->blog->settings->system->time_format" - ) . ",dcCore::app()->ctx->posts->postExpiredDate())" + dcCore::app()->tpl->getFilters($attr), + 'dt::dt2str(' . + ( + !empty($attr['format']) ? + "'" . addslashes($attr['format']) . "'" : 'dcCore::app()->blog->settings->system->time_format' + ) . ',dcCore::app()->ctx->posts->postExpiredDate())' ) . '; } ?>'; } /** * Parse tempalte attributes oprerator - * + * * @param string $op Operator */ protected static function getOperator($op) { - switch (strtolower($op)) - { + switch (strtolower($op)) { case 'or': case '||': return '||'; @@ -289,4 +291,4 @@ class tplPostExpired return '&&'; } } -} \ No newline at end of file +} diff --git a/dcstore.xml b/dcstore.xml index 3b6e937..b0c9752 100644 --- a/dcstore.xml +++ b/dcstore.xml @@ -1,12 +1,13 @@ + - -Billets périmés -2022.04.27 -Jean-Christian Denis and Contributors -Change entries options at a given date -https://github.com/JcDenis/postExpired/releases/download/v2022.04.27/plugin-postExpired.zip -2.121 -https://plugins.dotaddict.org/dc2/details/postExpired -https://github.com/JcDenis/postExpired - - \ No newline at end of file + + Expired entries + 2022.11.12 + Jean-Christian Denis and Contributors + Change entries options at a given date + https://github.com/JcDenis/postExpired/releases/download/v2022.11.12/plugin-postExpired.zip + 2.24 + https://plugins.dotaddict.org/dc2/details/postExpired + https://github.com/JcDenis/postExpired + + diff --git a/locales/fr/main.lang.php b/locales/fr/main.lang.php deleted file mode 100644 index 4ada102..0000000 --- a/locales/fr/main.lang.php +++ /dev/null @@ -1,60 +0,0 @@ -