diff --git a/src/Backend.php b/src/Backend.php index 22417d2..3d7117a 100644 --- a/src/Backend.php +++ b/src/Backend.php @@ -15,7 +15,6 @@ declare(strict_types=1); namespace Dotclear\Plugin\filesAlias; use dcAdmin; -use dcAuth; use dcCore; use dcFavorites; use dcNsProcess; @@ -36,23 +35,32 @@ class Backend extends dcNsProcess return false; } + // nullsafe + 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()), dcPage::getPF(My::id() . '/icon.svg'), preg_match('/' . preg_quote(dcCore::app()->adminurl->get('admin.plugin.' . My::id())) . '(&.*)?$/', $_SERVER['REQUEST_URI']), - dcCore::app()->auth->check(dcCore::app()->auth->makePermissions([dcAuth::PERMISSION_CONTENT_ADMIN]), dcCore::app()->blog->id) + dcCore::app()->auth->check(dcCore::app()->auth->makePermissions([dcCore::app()->auth::PERMISSION_CONTENT_ADMIN]), dcCore::app()->blog->id) ); dcCore::app()->addBehavior('adminDashboardFavoritesV2', function (dcFavorites $favs): void { + // nullsafe + 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()), 'small-icon' => dcPage::getPF(My::id() . '/icon.svg'), 'large-icon' => dcPage::getPF(My::id() . '/icon.svg'), 'permissions' => dcCore::app()->auth->makePermissions([ - dcAuth::PERMISSION_USAGE, - dcAuth::PERMISSION_CONTENT_ADMIN, + dcCore::app()->auth::PERMISSION_USAGE, + dcCore::app()->auth::PERMISSION_CONTENT_ADMIN, ]), ]); }); diff --git a/src/Manage.php b/src/Manage.php index a4a5b1d..08299a9 100644 --- a/src/Manage.php +++ b/src/Manage.php @@ -14,7 +14,6 @@ declare(strict_types=1); namespace Dotclear\Plugin\filesAlias; -use dcAuth; use dcCore; use dcMedia; use dcNsProcess; @@ -37,12 +36,14 @@ class Manage extends dcNsProcess { public static function init(): bool { - static::$init = defined('DC_CONTEXT_ADMIN') && dcCore::app()->auth->check( - dcCore::app()->auth->makePermissions([ - dcAuth::PERMISSION_ADMIN, - ]), - dcCore::app()->blog->id - ); + static::$init = defined('DC_CONTEXT_ADMIN') + && !is_null(dcCore::app()->auth) && !is_null(dcCore::app()->blog) // nullsafe + && dcCore::app()->auth->check( + dcCore::app()->auth->makePermissions([ + dcCore::app()->auth::PERMISSION_ADMIN, + ]), + dcCore::app()->blog->id + ); return static::$init; } @@ -53,11 +54,16 @@ class Manage extends dcNsProcess return false; } + // nullsafe + if (is_null(dcCore::app()->blog) || is_null(dcCore::app()->adminurl)) { + return false; + } + if (!(dcCore::app()->media instanceof dcMedia)) { dcCore::app()->media = new dcMedia(); } - # Update aliases + // Update aliases if (isset($_POST['a']) && is_array($_POST['a'])) { try { Utils::updateAliases($_POST['a']); @@ -68,7 +74,7 @@ class Manage extends dcNsProcess } } - # New alias + // New alias if (isset($_POST['filesalias_url'])) { $url = empty($_POST['filesalias_url']) ? PallazzoTools::rand_uniqid() : $_POST['filesalias_url']; @@ -132,6 +138,11 @@ class Manage extends dcNsProcess private static function displayAliasForm(): void { + // nullsafe + if (is_null(dcCore::app()->blog) || is_null(dcCore::app()->adminurl) || is_null(dcCore::app()->media)) { + return; + } + echo dcPage::breadcrumb([ Html::escapeHTML(dcCore::app()->blog->name) => '', @@ -175,6 +186,11 @@ class Manage extends dcNsProcess private static function displayAliasList(): void { + // nullsafe + if (is_null(dcCore::app()->blog) || is_null(dcCore::app()->adminurl) || is_null(dcCore::app()->media)) { + return; + } + $aliases = Utils::getAliases(); echo diff --git a/src/UrlHandler.php b/src/UrlHandler.php index 914335b..d682f66 100644 --- a/src/UrlHandler.php +++ b/src/UrlHandler.php @@ -22,6 +22,11 @@ class UrlHandler extends dcUrlHandlers { public static function alias(string $args): void { + // nullsafe + if (is_null(dcCore::app()->ctx)) { + return; + } + $delete = false; dcCore::app()->ctx->__set('filealias', Utils::getAlias($args)); diff --git a/src/Utils.php b/src/Utils.php index f68d67f..a62d194 100644 --- a/src/Utils.php +++ b/src/Utils.php @@ -23,20 +23,26 @@ class Utils { public static function getAliases(): dcRecord { + // nullsafe + $blog_id = is_null(dcCore::app()->blog) ? '' : dcCore::app()->blog->id; + return new dcRecord(dcCore::app()->con->select( 'SELECT filesalias_url, filesalias_destination, filesalias_password, filesalias_disposable ' . 'FROM ' . dcCore::app()->prefix . My::ALIAS_TABLE_NAME . ' ' . - "WHERE blog_id = '" . dcCore::app()->con->escapeStr(dcCore::app()->blog->id) . "' " . + "WHERE blog_id = '" . dcCore::app()->con->escapeStr($blog_id) . "' " . 'ORDER BY filesalias_url ASC ' )); } public static function getAlias(string $url): dcRecord { + // nullsafe + $blog_id = is_null(dcCore::app()->blog) ? '' : dcCore::app()->blog->id; + return new dcRecord(dcCore::app()->con->select( 'SELECT filesalias_url, filesalias_destination, filesalias_password, filesalias_disposable ' . 'FROM ' . dcCore::app()->prefix . My::ALIAS_TABLE_NAME . ' ' . - "WHERE blog_id = '" . dcCore::app()->con->escapeStr(dcCore::app()->blog->id) . "' " . + "WHERE blog_id = '" . dcCore::app()->con->escapeStr($blog_id) . "' " . "AND filesalias_url = '" . dcCore::app()->con->escapeStr($url) . "' " . 'ORDER BY filesalias_url ASC ' )); @@ -73,8 +79,11 @@ class Utils throw new Exception(__('File destination is empty.')); } + // nullsafe + $blog_id = is_null(dcCore::app()->blog) ? '' : dcCore::app()->blog->id; + $cur = dcCore::app()->con->openCursor(dcCore::app()->prefix . My::ALIAS_TABLE_NAME); - $cur->setField('blog_id', (string) dcCore::app()->blog->id); + $cur->setField('blog_id', $blog_id); $cur->setField('filesalias_url', (string) $url); $cur->setField('filesalias_destination', (string) $destination); $cur->setField('filesalias_password', $password); @@ -84,23 +93,34 @@ class Utils public static function deleteAliases(): void { + // nullsafe + $blog_id = is_null(dcCore::app()->blog) ? '' : dcCore::app()->blog->id; + dcCore::app()->con->execute( 'DELETE FROM ' . dcCore::app()->prefix . My::ALIAS_TABLE_NAME . ' ' . - "WHERE blog_id = '" . dcCore::app()->con->escapeStr(dcCore::app()->blog->id) . "' " + "WHERE blog_id = '" . dcCore::app()->con->escapeStr($blog_id) . "' " ); } public static function deleteAlias(string $url): void { + // nullsafe + $blog_id = is_null(dcCore::app()->blog) ? '' : dcCore::app()->blog->id; + dcCore::app()->con->execute( 'DELETE FROM ' . dcCore::app()->prefix . My::ALIAS_TABLE_NAME . ' ' . - "WHERE blog_id = '" . dcCore::app()->con->escapeStr(dcCore::app()->blog->id) . "' " . + "WHERE blog_id = '" . dcCore::app()->con->escapeStr($blog_id) . "' " . "AND filesalias_url = '" . dcCore::app()->con->escapeStr($url) . "' " ); } public static function getMediaId(string $target): int { + // nullsafe + if (is_null(dcCore::app()->blog)) { + return 0; + } + $strReq = 'SELECT media_id ' . 'FROM ' . dcCore::app()->prefix . dcMedia::MEDIA_TABLE_NAME . ' ' . "WHERE media_path = '" . dcCore::app()->con->escapeStr((string) dcCore::app()->blog->settings->get('system')->get('public_path')) . "' " .