From 81f84c3e053e0dd821d373ba0bd2f2e5ff3b6fbd Mon Sep 17 00:00:00 2001 From: MamlukiSn Date: Tue, 29 Jun 2021 00:56:51 +0300 Subject: [PATCH] Fix edit links for referenced modules with route prefixes --- config/twill.php | 10 ++++++++++ src/Helpers/routes_helpers.php | 33 +++++++++++++++++++++++++++++++++ src/Models/File.php | 4 ++-- src/Models/Media.php | 4 ++-- 4 files changed, 47 insertions(+), 4 deletions(-) diff --git a/config/twill.php b/config/twill.php index 17614ccb9..f840d3d1f 100644 --- a/config/twill.php +++ b/config/twill.php @@ -194,4 +194,14 @@ 'zh-Hans', 'ru', ], + /* + |-------------------------------------------------------------------------- + | Admin Module route prefixes + |-------------------------------------------------------------------------- + | + | Used to link modules referenced by medias and files and that have route prefixes + | + */ + 'module_route_prefixes' => [ + ], ]; diff --git a/src/Helpers/routes_helpers.php b/src/Helpers/routes_helpers.php index 54808d5c9..28e81e4d0 100644 --- a/src/Helpers/routes_helpers.php +++ b/src/Helpers/routes_helpers.php @@ -80,3 +80,36 @@ function isActiveNavigation($navigationElement, $navigationKey, $activeNavigatio return $urlsAreMatching; } } + +if (!function_exists('moduleRouteExists')) { + /** + * @param string $moduleName + * @param string $prefix + * @param string $action + * @param array $parameters + * @param bool $absolute + * @return bool + */ + function moduleRouteExists($moduleName, $prefix, $action) + { + // Fix module name case + $moduleName = Str::camel($moduleName); + + // Create base route name + $routeName = 'admin.' . ($prefix ? $prefix . '.' : ''); + + // Prefix it with module name only if prefix doesn't contains it already + if ( + config('twill.allow_duplicates_on_route_names', true) || + ($prefix !== $moduleName && + !Str::endsWith($prefix, '.' . $moduleName)) + ) { + $routeName .= "{$moduleName}."; + } + + // Add the action name + $routeName .= $action; + + return Route::has($routeName); + } +} diff --git a/src/Models/File.php b/src/Models/File.php index bcef2acc4..20798427b 100755 --- a/src/Models/File.php +++ b/src/Models/File.php @@ -90,7 +90,7 @@ public function getOwnerDetails() 'titleKey' => $model->titleKey, 'model'=>$model, 'module'=>$module, - 'edit' => moduleRoute($module, config('twill.block_editor.browser_route_prefixes.' . $module), 'edit', $model->id), + 'edit' => moduleRouteExists($module,config('twill.module_route_prefixes.' . $module),'edit', $model->id ) ? moduleRoute($module, config('twill.module_route_prefixes.' . $module), 'edit', $model->id) : null, ] : []; } @@ -102,7 +102,7 @@ public function getOwnerDetails() 'titleKey' => $item->titleKey, 'model'=>$item, 'module'=>$module, - 'edit' => moduleRoute($module, config('twill.block_editor.browser_route_prefixes.' . $module), 'edit', $item->id), + 'edit' => moduleRouteExists($module,config('twill.module_route_prefixes.' . $module),'edit', $item->id ) ? moduleRoute($module, config('twill.module_route_prefixes.' . $module), 'edit', $item->id) : null, ]; })->filter()->values()->toArray(); diff --git a/src/Models/Media.php b/src/Models/Media.php index dc0ba295b..1e50185e2 100755 --- a/src/Models/Media.php +++ b/src/Models/Media.php @@ -175,7 +175,7 @@ public function getOwnerDetails() 'titleKey' => $model->titleKey, 'model'=>$model, 'module'=>$module, - 'edit' => moduleRoute($module, config('twill.block_editor.browser_route_prefixes.' . $module), 'edit', $model->id), + 'edit' => moduleRouteExists($module,config('twill.module_route_prefixes.' . $module),'edit', $model->id ) ? moduleRoute($module, config('twill.module_route_prefixes.' . $module), 'edit', $model->id) : null, ] : []; } @@ -187,7 +187,7 @@ public function getOwnerDetails() 'titleKey' => $item->titleKey, 'model'=>$item, 'module'=>$module, - 'edit' => moduleRoute($module, config('twill.block_editor.browser_route_prefixes.' . $module), 'edit', $item->id), + 'edit' => moduleRouteExists($module,config('twill.module_route_prefixes.' . $module),'edit', $item->id ) ? moduleRoute($module, config('twill.module_route_prefixes.' . $module), 'edit', $item->id) : null, ]; })->filter()->values()->toArray();