From 1eeb6541166ea49e8b0bddcc0045a9f548cf6251 Mon Sep 17 00:00:00 2001 From: Jean-Christian Denis Date: Sun, 23 Apr 2023 13:47:24 +0200 Subject: [PATCH] use Database helper --- src/BackendBehaviors.php | 136 ++++++++++++++++++++++++-------------- src/FrontendBehaviors.php | 12 ++-- src/RsExtPostExpired.php | 20 +++--- 3 files changed, 102 insertions(+), 66 deletions(-) diff --git a/src/BackendBehaviors.php b/src/BackendBehaviors.php index 5518878..52e49e4 100644 --- a/src/BackendBehaviors.php +++ b/src/BackendBehaviors.php @@ -16,11 +16,13 @@ namespace Dotclear\Plugin\postExpired; use ArrayObject; use DateTimeZone; -use cursor; use dcCore; use dcPostsActions; use dcPage; -use dcRecord; +use Dotclear\Database\{ + Cursor, + MetaRecord +}; use Dotclear\Helper\Html\Form\{ Datetime, Form, @@ -43,9 +45,9 @@ use Exception; class BackendBehaviors { /** - * Add actions to posts page combo + * Add actions to posts page combo. * - * @param dcPostsActions $pa dcPostsActions instance + * @param dcPostsActions $pa dcPostsActions instance */ public static function adminPostsActions(dcPostsActions $pa): void { @@ -69,9 +71,9 @@ class BackendBehaviors } /** - * Add javascript for date field and toggle + * Add javascript for date field and toggle. * - * @return string HTML head + * @return string HTML head */ public static function adminPostHeaders(): string { @@ -79,13 +81,13 @@ class BackendBehaviors } /** - * Add form to post sidebar + * Add form to post sidebar. * - * @param ArrayObject $main_items Main items - * @param ArrayObject $sidebar_items Sidebar items - * @param ?dcRecord $post Post record or null + * @param ArrayObject $main_items Main items + * @param ArrayObject $sidebar_items Sidebar items + * @param ?MetaRecord $post Post record or null */ - public static function adminPostFormItems(ArrayObject $main_items, ArrayObject $sidebar_items, ?dcRecord $post): void + public static function adminPostFormItems(ArrayObject $main_items, ArrayObject $sidebar_items, ?MetaRecord $post): void { if ($post === null) { return; @@ -102,9 +104,9 @@ class BackendBehaviors } /** - * Delete expired date on post edition + * Delete expired date on post edition. * - * @param integer $post_id Post id + * @param int $post_id Post id */ public static function adminBeforePostDelete(int $post_id): void { @@ -112,12 +114,12 @@ class BackendBehaviors } /** - * Add expired date on post edition + * Add expired date on post edition. * - * @param cursor $cur Current post cursor - * @param integer $post_id Post id + * @param Cursor $cur Current post Cursor + * @param int $post_id Post id */ - public static function adminAfterPostSave(cursor $cur, int $post_id): void + public static function adminAfterPostSave(Cursor $cur, int $post_id): void { self::delPostExpired($post_id); @@ -132,20 +134,25 @@ class BackendBehaviors } /** - * Posts actions callback to add expired date + * Posts actions callback to add expired date. * - * @param dcPostsActions $pa dcPostsActions instance - * @param ArrayObject $post _POST actions + * @param dcPostsActions $pa dcPostsActions instance + * @param ArrayObject $post _POST actions */ public static function callbackAdd(dcPostsActions $pa, ArrayObject $post): void { - # No entry + // nullsafe + if (is_null(dcCore::app()->blog)) { + return; + } + + // No entry $posts_ids = $pa->getIDs(); if (empty($posts_ids)) { throw new Exception(__('No entry selected')); } - # Add epired date + // Add epired date if (!empty($post['post_expired_date']) && (!empty($post['post_expired_status']) || !empty($post['post_expired_category']) @@ -160,9 +167,9 @@ class BackendBehaviors dcPage::addSuccessNotice(__('Expired date added.')); $pa->redirect(true); - # Display form + // Display form } else { - # Get records to know post type + // Get records to know post type $posts = $pa->getRS(); $pa->beginPage( @@ -194,20 +201,20 @@ class BackendBehaviors } /** - * Posts actions callback to add expired date + * Posts actions callback to add expired date. * - * @param dcPostsActions $pa dcPostsActions instance - * @param ArrayObject $post _POST actions + * @param dcPostsActions $pa dcPostsActions instance + * @param ArrayObject $post _POST actions */ public static function callbackRemove(dcPostsActions $pa, ArrayObject $post): void { - # No entry + // No entry $posts_ids = $pa->getIDs(); if (empty($posts_ids)) { throw new Exception(__('No entry selected')); } - # Delete expired date + // Delete expired date foreach ($posts_ids as $post_id) { self::delPostExpired($post_id); } @@ -217,9 +224,9 @@ class BackendBehaviors } /** - * Delete expired date + * Delete expired date. * - * @param integer $post_id Post id + * @param int $post_id Post id */ private static function delPostExpired(int $post_id): void { @@ -227,10 +234,10 @@ class BackendBehaviors } /** - * Save expired date + * Save expired date. * - * @param integer $post_id Post id - * @param ArrayObject $post _POST fields + * @param int $post_id Post id + * @param ArrayObject $post _POST fields */ private static function setPostExpired(int $post_id, ArrayObject $post): void { @@ -267,15 +274,20 @@ class BackendBehaviors } /** - * Expired date form fields + * Expired date form fields. * * @param string $post_type Posts type * @param null|int $post_id Post ID * @param bool $render Render fileds to HTML - * @return array Array of object form fields + * @return array Array of object form fields */ private static function fieldsPostExpired(string $post_type, ?int $post_id = null, bool $render = true): array { + // nullsafe + if (is_null(dcCore::app()->blog)) { + return []; + } + $fields = $post_expired = []; if ($post_id) { @@ -338,14 +350,20 @@ class BackendBehaviors } /** - * Custom categories combo + * Custom categories combo. * - * @param dcRecord $categories Categories recordset - * @return array Categorires combo + * @param MetaRecord $categories Categories recordset + * + * @return array Categorires combo */ - private static function categoriesCombo(dcRecord $categories): array + private static function categoriesCombo(MetaRecord $categories): array { - # Getting categories + // nullsafe + if (is_null(dcCore::app()->blog)) { + return []; + } + + // Getting categories $categories_combo = [ __('Not changed') => '', __('Uncategorized') => '!', @@ -369,9 +387,9 @@ class BackendBehaviors } /** - * Custom status combo + * Custom status combo. * - * @return array Status combo + * @return array Status combo */ private static function statusCombo(): array { @@ -384,9 +402,9 @@ class BackendBehaviors } /** - * Custom selection combo + * Custom selection combo. * - * @return array Selection combo + * @return array Selection combo */ private static function selectedCombo(): array { @@ -398,9 +416,9 @@ class BackendBehaviors } /** - * Custom comment status combo + * Custom comment status combo. * - * @return array Comment status combo + * @return array Comment status combo */ private static function commentCombo(): array { @@ -412,9 +430,9 @@ class BackendBehaviors } /** - * Custom trackback status combo + * Custom trackback status combo. * - * @return array Trackback status combo + * @return array Trackback status combo */ private static function trackbackCombo(): array { @@ -425,17 +443,33 @@ class BackendBehaviors ]; } + /** + * Change a date from user timezone to UTC. + * + * @param string $date The date + * + * @return string The UTC date + */ private static function dateFromUser(string $date): string { - $d = date_create($date, new DateTimeZone(dcCore::app()->auth->getInfo('user_tz'))); + $u = is_null(dcCore::app()->auth) ? 'UTC' : dcCore::app()->auth->getInfo('user_tz'); + $d = date_create($date, new DateTimeZone($u)); return $d ? date_format($d->setTimezone(new DateTimeZone('UTC')), 'Y-m-d H:i:00') : ''; } + /** + * Change a date from UTC to user timezone. + * + * @param string $date The UTC date + * + * @return string The date + */ private static function dateToUser(string $date): string { + $u = is_null(dcCore::app()->auth) ? 'UTC' : dcCore::app()->auth->getInfo('user_tz'); $d = date_create($date, new DateTimeZone('UTC')); - return $d ? date_format($d->setTimezone(new DateTimeZone(dcCore::app()->auth->getInfo('user_tz'))), 'Y-m-d\TH:i') : ''; + return $d ? date_format($d->setTimezone(new DateTimeZone($u)), 'Y-m-d\TH:i') : ''; } } diff --git a/src/FrontendBehaviors.php b/src/FrontendBehaviors.php index 4eb23bb..5f91f5c 100644 --- a/src/FrontendBehaviors.php +++ b/src/FrontendBehaviors.php @@ -18,7 +18,7 @@ use DateTimeZone; use dcBlog; use dcCore; use dcMeta; -use dcRecord; +use Dotclear\Database\MetaRecord; /** * @ingroup DC_PLUGIN_POSTEXPIRED @@ -53,7 +53,7 @@ class FrontendBehaviors $utc = new DateTimeZone('UTC'); $now_tz = (int) date_format(date_create('now', $utc), 'U'); - # Prepared post cursor + # Prepared post Cursor $post_cur = dcCore::app()->con->openCursor(dcCore::app()->prefix . dcBlog::POST_TABLE_NAME); # Loop through marked posts @@ -74,7 +74,7 @@ class FrontendBehaviors My::META_TYPE ); - # Prepare post cursor + # Prepare post Cursor $post_cur->clean(); $post_cur->setField('post_upddt', date('Y-m-d H:i:s', $now_tz)); @@ -87,7 +87,7 @@ class FrontendBehaviors # values are prefixed by "!" $v = (int) substr($v, 1); - # Put value in post cursor + # Put value in post Cursor switch($k) { case 'status': $post_cur->setField('post_status', $v); @@ -135,9 +135,9 @@ class FrontendBehaviors /** * Extends posts record with expired date * - * @param dcRecord $rs Post recordset + * @param MetaRecord $rs Post recordset */ - public static function coreBlogGetPosts(dcRecord $rs): void + public static function coreBlogGetPosts(MetaRecord $rs): void { $rs->extend('rsExtPostExpired'); } diff --git a/src/RsExtPostExpired.php b/src/RsExtPostExpired.php index d223938..b42a74c 100644 --- a/src/RsExtPostExpired.php +++ b/src/RsExtPostExpired.php @@ -15,7 +15,7 @@ declare(strict_types=1); namespace Dotclear\Plugin\postExpired; use dcCore; -use dcRecord; +use Dotclear\Database\MetaRecord; use rsExtPost; /** @@ -25,17 +25,19 @@ use rsExtPost; */ class rsExtPostExpired extends rsExtPost { + /** @var array $memory Memory to prevent redondant call */ protected static array $memory = []; /** - * Retrieve expired date of a post + * Retrieve expired date of a post. * - * @param dcRecord $rs Post recordset - * @return string Expired date or null + * @param MetaRecord $rs Post recordset + * + * @return string Expired date or null */ - public static function postExpiredDate(dcRecord $rs): string + public static function postExpiredDate(MetaRecord $rs): string { - if (!self::$memory[$rs->f('post_id')]) { //memory + if (!static::$memory[$rs->f('post_id')]) { $rs_date = dcCore::app()->meta->getMetadata([ 'meta_type' => My::META_TYPE, 'post_id' => $rs->f('post_id'), @@ -46,10 +48,10 @@ class rsExtPostExpired extends rsExtPost return ''; } - $v = My::decode($rs_date->f('meta_id')); - self::$memory[$rs->f('post_id')] = $v['date']; + $v = My::decode($rs_date->f('meta_id')); + static::$memory[$rs->f('post_id')] = $v['date']; } - return self::$memory[$rs->f('post_id')]; + return static::$memory[$rs->f('post_id')]; } }