From 1e7544e585d59fa92afa839dbda66cbee9fc0557 Mon Sep 17 00:00:00 2001 From: Jean-Christian Denis Date: Thu, 20 Apr 2023 20:41:50 +0200 Subject: [PATCH] cosmetic nullsafe fix --- src/Backend.php | 11 +++++++++++ src/Frontend.php | 13 +++++++++++-- src/Manage.php | 11 +++++++++++ src/Widgets.php | 35 +++++++++++++++++------------------ 4 files changed, 50 insertions(+), 20 deletions(-) diff --git a/src/Backend.php b/src/Backend.php index e397059..5661f6d 100644 --- a/src/Backend.php +++ b/src/Backend.php @@ -26,6 +26,7 @@ class Backend extends dcNsProcess { static::$init = defined('DC_CONTEXT_ADMIN') && My::phpCompliant() + && !is_null(dcCore::app()->auth) && !is_null(dcCore::app()->blog) // nullsafe PHP < 8.0 && dcCore::app()->auth->check(dcCore::app()->auth->makePermissions([ dcCore::app()->auth::PERMISSION_CONTENT_ADMIN, ]), dcCore::app()->blog->id); @@ -39,6 +40,11 @@ class Backend extends dcNsProcess return false; } + // nullsafe PHP < 8.0 + if (is_null(dcCore::app()->auth) || is_null(dcCore::app()->blog) || is_null(dcCore::app()->adminurl)) { + return false; + } + dcCore::app()->menu[dcAdmin::MENU_BLOG]->addItem( My::name(), dcCore::app()->adminurl->get('admin.plugin.' . My::id()), @@ -54,6 +60,11 @@ class Backend extends dcNsProcess dcCore::app()->addBehaviors([ 'adminDashboardFavoritesV2' => function (dcFavorites $favs): void { + // nullsafe PHP < 8.0 + if (is_null(dcCore::app()->auth) || is_null(dcCore::app()->adminurl)) { + return; + } + $favs->register(My::id(), [ 'title' => My::name(), 'url' => dcCore::app()->adminurl->get('admin.plugin.' . My::id()), diff --git a/src/Frontend.php b/src/Frontend.php index bfe9253..f3b4e4b 100644 --- a/src/Frontend.php +++ b/src/Frontend.php @@ -43,8 +43,7 @@ class Frontend extends dcNsProcess # Redirect if needed if (isset($_GET['theme'])) { - $p = '/(\?|&)theme(=.*)?$/'; - Http::redirect(preg_replace($p, '', Http::getSelfURI())); + Http::redirect((string) preg_replace('/(\?|&)theme(=.*)?$/', '', Http::getSelfURI())); } # Switch theme @@ -63,6 +62,11 @@ class Frontend extends dcNsProcess protected static function cookieSuffix(): string { + // nullsafe PHP < 8.0 + if (is_null(dcCore::app()->blog)) { + return ''; + } + return base_convert(dcCore::app()->blog->uid, 16, 36); } @@ -75,6 +79,11 @@ class Frontend extends dcNsProcess public static function switchTheme(string $theme): void { + // nullsafe PHP < 8.0 + if (is_null(dcCore::app()->blog)) { + return; + } + if (dcCore::app()->blog->settings->get(My::id())->get('mt_exclude')) { if (in_array($theme, explode('/', dcCore::app()->blog->settings->get(My::id())->get('mt_exclude')))) { return; diff --git a/src/Manage.php b/src/Manage.php index 6afb76e..cc1601f 100644 --- a/src/Manage.php +++ b/src/Manage.php @@ -38,6 +38,7 @@ class Manage extends dcNsProcess { static::$init = defined('DC_CONTEXT_ADMIN') && My::phpCompliant() + && !is_null(dcCore::app()->auth) && !is_null(dcCore::app()->blog) // nullsafe PHP < 8.0 && dcCore::app()->auth->check(dcCore::app()->auth->makePermissions([ dcCore::app()->auth::PERMISSION_CONTENT_ADMIN, ]), dcCore::app()->blog->id); @@ -51,6 +52,11 @@ class Manage extends dcNsProcess return false; } + // nullsafe PHP < 8.0 + if (is_null(dcCore::app()->auth) || is_null(dcCore::app()->blog) || is_null(dcCore::app()->adminurl)) { + return false; + } + try { $s = dcCore::app()->blog->settings->get(My::id()); @@ -108,6 +114,11 @@ class Manage extends dcNsProcess return; } + // nullsafe PHP < 8.0 + if (is_null(dcCore::app()->blog) || is_null(dcCore::app()->adminurl)) { + return; + } + $models = new ArrayObject(My::distributedModels()); dcCore::app()->callBehavior('arlequinAddModels', $models); diff --git a/src/Widgets.php b/src/Widgets.php index 65bd3fc..80eae8a 100644 --- a/src/Widgets.php +++ b/src/Widgets.php @@ -45,9 +45,15 @@ class Widgets return ''; } - $model = json_decode((string) dcCore::app()->blog->settings->get(My::id())->get('model'), true); - $names = self::getNames(); - if (!is_array($model) || empty($names)) { + // nullsafe PHP < 8.0 + if (is_null(dcCore::app()->blog)) { + return ''; + } + + $model = json_decode((string) dcCore::app()->blog->settings->get(My::id())->get('model'), true); + $exclude = explode(';', (string) dcCore::app()->blog->settings->get(My::id())->get('exclude')); + $modules = array_diff_key(dcCore::app()->themes->getDefines(['state' => dcModuleDefine::STATE_ENABLED], true), array_flip($exclude)); + if (!is_array($model) || empty($modules)) { return ''; } @@ -68,8 +74,8 @@ class Widgets } $res = ''; - foreach ($names as $k => $v) { - if ($k == dcCore::app()->public->theme) { + foreach ($modules as $id => $module) { + if ($id == dcCore::app()->public->theme) { $format = $model['a_html']; } else { $format = $model['e_html']; @@ -78,21 +84,21 @@ class Widgets if ($replace) { $e_url = preg_replace( '/(\\?|&)(theme\\=)([^&]*)/', - '$1${2}' . addcslashes($k, '$\\'), - $e_url + '$1${2}' . addcslashes($id, '$\\'), + (string) $e_url ); $val = ''; } else { - $val = Html::escapeHTML(rawurlencode($k)); + $val = Html::escapeHTML(rawurlencode($id)); } $res .= sprintf( $format, $e_url, $ext, $val, - Html::escapeHTML($v['name']), - Html::escapeHTML($v['desc']), - Html::escapeHTML($k) + Html::escapeHTML($module['name']), + Html::escapeHTML($module['desc']), + Html::escapeHTML($id) ); } @@ -108,11 +114,4 @@ class Widgets ($w->title ? $w->renderTitle(Html::escapeHTML($w->title)) : '') . sprintf($model['s_html'], $s_url, $res) ); } - - public static function getNames(): array - { - $exclude = explode(';', (string) dcCore::app()->blog->settings->get(My::id())->get('exclude')); - - return array_diff_key(dcCore::app()->themes->getDefines(['state' => dcModuleDefine::STATE_ENABLED], true), array_flip($exclude)); - } }