From b292cf7090f8039f6b7d1a2200772ced34dd7c1e Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sat, 16 Sep 2023 18:25:08 +0100 Subject: [PATCH] Extracted icon helper, aligned container resolution Also updated breadcrumb view composer to current standards. Closes #4553 --- app/Access/Controllers/ThrottlesLogins.php | 2 +- app/App/HomeController.php | 4 +- .../Providers/ViewTweaksServiceProvider.php | 2 +- app/App/helpers.php | 39 ++----------------- app/Entities/BreadcrumbsViewComposer.php | 20 +++------- app/Entities/Tools/TrashCan.php | 2 +- app/Users/Models/User.php | 2 +- app/Util/SvgIcon.php | 39 +++++++++++++++++++ 8 files changed, 54 insertions(+), 56 deletions(-) create mode 100644 app/Util/SvgIcon.php diff --git a/app/Access/Controllers/ThrottlesLogins.php b/app/Access/Controllers/ThrottlesLogins.php index 2a066dab5..25c3452f2 100644 --- a/app/Access/Controllers/ThrottlesLogins.php +++ b/app/Access/Controllers/ThrottlesLogins.php @@ -71,7 +71,7 @@ trait ThrottlesLogins */ protected function limiter(): RateLimiter { - return app(RateLimiter::class); + return app()->make(RateLimiter::class); } /** diff --git a/app/App/HomeController.php b/app/App/HomeController.php index 667af80d3..24b7c3ed8 100644 --- a/app/App/HomeController.php +++ b/app/App/HomeController.php @@ -78,14 +78,14 @@ class HomeController extends Controller } if ($homepageOption === 'bookshelves') { - $shelves = app(BookshelfRepo::class)->getAllPaginated(18, $commonData['listOptions']->getSort(), $commonData['listOptions']->getOrder()); + $shelves = app()->make(BookshelfRepo::class)->getAllPaginated(18, $commonData['listOptions']->getSort(), $commonData['listOptions']->getOrder()); $data = array_merge($commonData, ['shelves' => $shelves]); return view('home.shelves', $data); } if ($homepageOption === 'books') { - $books = app(BookRepo::class)->getAllPaginated(18, $commonData['listOptions']->getSort(), $commonData['listOptions']->getOrder()); + $books = app()->make(BookRepo::class)->getAllPaginated(18, $commonData['listOptions']->getSort(), $commonData['listOptions']->getOrder()); $data = array_merge($commonData, ['books' => $books]); return view('home.books', $data); diff --git a/app/App/Providers/ViewTweaksServiceProvider.php b/app/App/Providers/ViewTweaksServiceProvider.php index 16b5c1f97..10593ac8b 100644 --- a/app/App/Providers/ViewTweaksServiceProvider.php +++ b/app/App/Providers/ViewTweaksServiceProvider.php @@ -25,7 +25,7 @@ class ViewTweaksServiceProvider extends ServiceProvider // Custom blade view directives Blade::directive('icon', function ($expression) { - return ""; + return "toHtml(); ?>"; }); } } diff --git a/app/App/helpers.php b/app/App/helpers.php index b59a63448..af6dbcfc3 100644 --- a/app/App/helpers.php +++ b/app/App/helpers.php @@ -49,7 +49,7 @@ function userCan(string $permission, Model $ownable = null): bool } // Check permission on ownable item - $permissions = app(PermissionApplicator::class); + $permissions = app()->make(PermissionApplicator::class); return $permissions->checkOwnableUserAccess($ownable, $permission); } @@ -60,7 +60,7 @@ function userCan(string $permission, Model $ownable = null): bool */ function userCanOnAny(string $action, string $entityClass = ''): bool { - $permissions = app(PermissionApplicator::class); + $permissions = app()->make(PermissionApplicator::class); return $permissions->checkUserHasEntityPermissionOnAny($action, $entityClass); } @@ -72,7 +72,7 @@ function userCanOnAny(string $action, string $entityClass = ''): bool */ function setting(string $key = null, $default = null) { - $settingService = resolve(SettingService::class); + $settingService = app()->make(SettingService::class); if (is_null($key)) { return $settingService; @@ -97,39 +97,6 @@ function theme_path(string $path = ''): ?string return base_path('themes/' . $theme . ($path ? DIRECTORY_SEPARATOR . $path : $path)); } -/** - * Get fetch an SVG icon as a string. - * Checks for icons defined within a custom theme before defaulting back - * to the 'resources/assets/icons' folder. - * - * Returns an empty string if icon file not found. - */ -function icon(string $name, array $attrs = []): string -{ - $attrs = array_merge([ - 'class' => 'svg-icon', - 'data-icon' => $name, - 'role' => 'presentation', - ], $attrs); - $attrString = ' '; - foreach ($attrs as $attrName => $attr) { - $attrString .= $attrName . '="' . $attr . '" '; - } - - $iconPath = resource_path('icons/' . $name . '.svg'); - $themeIconPath = theme_path('icons/' . $name . '.svg'); - - if ($themeIconPath && file_exists($themeIconPath)) { - $iconPath = $themeIconPath; - } elseif (!file_exists($iconPath)) { - return ''; - } - - $fileContents = file_get_contents($iconPath); - - return str_replace('entityContextManager = $entityContextManager; + public function __construct( + protected ShelfContext $shelfContext + ) { } /** * Modify data when the view is composed. - * - * @param View $view */ - public function compose(View $view) + public function compose(View $view): void { $crumbs = $view->getData()['crumbs']; $firstCrumb = $crumbs[0] ?? null; + if ($firstCrumb instanceof Book) { - $shelf = $this->entityContextManager->getContextualShelfForBook($firstCrumb); + $shelf = $this->shelfContext->getContextualShelfForBook($firstCrumb); if ($shelf) { array_unshift($crumbs, $shelf); $view->with('crumbs', $crumbs); diff --git a/app/Entities/Tools/TrashCan.php b/app/Entities/Tools/TrashCan.php index 3c497024f..08276230c 100644 --- a/app/Entities/Tools/TrashCan.php +++ b/app/Entities/Tools/TrashCan.php @@ -197,7 +197,7 @@ class TrashCan $page->allRevisions()->delete(); // Delete Attached Files - $attachmentService = app(AttachmentService::class); + $attachmentService = app()->make(AttachmentService::class); foreach ($page->attachments as $attachment) { $attachmentService->deleteFile($attachment); } diff --git a/app/Users/Models/User.php b/app/Users/Models/User.php index 1eeacfe2e..232ea8832 100644 --- a/app/Users/Models/User.php +++ b/app/Users/Models/User.php @@ -374,7 +374,7 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon */ public function refreshSlug(): string { - $this->slug = app(SlugGenerator::class)->generate($this); + $this->slug = app()->make(SlugGenerator::class)->generate($this); return $this->slug; } diff --git a/app/Util/SvgIcon.php b/app/Util/SvgIcon.php new file mode 100644 index 000000000..ce6e1c23e --- /dev/null +++ b/app/Util/SvgIcon.php @@ -0,0 +1,39 @@ + 'svg-icon', + 'data-icon' => $this->name, + 'role' => 'presentation', + ], $this->attrs); + + $attrString = ' '; + foreach ($attrs as $attrName => $attr) { + $attrString .= $attrName . '="' . $attr . '" '; + } + + $iconPath = resource_path('icons/' . $this->name . '.svg'); + $themeIconPath = theme_path('icons/' . $this->name . '.svg'); + + if ($themeIconPath && file_exists($themeIconPath)) { + $iconPath = $themeIconPath; + } elseif (!file_exists($iconPath)) { + return ''; + } + + $fileContents = file_get_contents($iconPath); + + return str_replace('