From 231f45c2628f7e21b90f78100f853c2a400b8b98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Denis=20Duli=C3=A7i?= Date: Sat, 17 Apr 2021 01:29:18 +0300 Subject: [PATCH] added admin/portal/signed route macros --- app/Abstracts/Http/PaymentController.php | 6 +- app/Console/Stubs/Modules/routes/admin.stub | 16 ++--- app/Console/Stubs/Modules/routes/portal.stub | 16 +++-- app/Http/Controllers/Portal/Invoices.php | 4 +- app/Providers/Route.php | 67 ++++++++++++++++++++ resources/assets/js/views/portal/invoices.js | 2 +- tests/Feature/FeatureTestCase.php | 6 +- 7 files changed, 92 insertions(+), 25 deletions(-) diff --git a/app/Abstracts/Http/PaymentController.php b/app/Abstracts/Http/PaymentController.php index 5d4ce543b..c22045b39 100644 --- a/app/Abstracts/Http/PaymentController.php +++ b/app/Abstracts/Http/PaymentController.php @@ -139,14 +139,14 @@ abstract class PaymentController extends BaseController public function getNotifyUrl($invoice) { - return route('portal.invoices.' . $this->alias . '.notify', $invoice->id); + return route('portal.' . $this->alias . '.invoices.notify', $invoice->id); } public function getModuleUrl($invoice, $suffix) { return $this->user - ? route('portal.invoices.' . $this->alias . '.' . $suffix, $invoice->id) - : URL::signedRoute('signed.invoices.' . $this->alias . '.' . $suffix, [$invoice->id, 'company_id' => $invoice->company_id]); + ? route('portal.' . $this->alias . '.invoices.' . $suffix, $invoice->id) + : URL::signedRoute('signed.' . $this->alias . '.invoices.' . $suffix, [$invoice->id]); } public function getLogger() diff --git a/app/Console/Stubs/Modules/routes/admin.stub b/app/Console/Stubs/Modules/routes/admin.stub index e3b0fc21c..db3c8b634 100644 --- a/app/Console/Stubs/Modules/routes/admin.stub +++ b/app/Console/Stubs/Modules/routes/admin.stub @@ -2,12 +2,12 @@ use Illuminate\Support\Facades\Route; -Route::group([ - 'middleware' => 'admin', - 'as' => '$ALIAS$.', - 'namespace' => '$MODULE_NAMESPACE$\$STUDLY_NAME$\Http\Controllers' -], function () { - Route::prefix('$ALIAS$')->group(function() { - // Route::get('/', 'Main@index'); - }); +/** + * 'admin' middleware and '$ALIAS$' prefix applied to all routes (including names) + * + * @see \App\Providers\Route::register + */ + +Route::admin('$ALIAS$', function () { + Route::get('/', 'Main@index'); }); diff --git a/app/Console/Stubs/Modules/routes/portal.stub b/app/Console/Stubs/Modules/routes/portal.stub index 238ebe11c..16a20fd58 100644 --- a/app/Console/Stubs/Modules/routes/portal.stub +++ b/app/Console/Stubs/Modules/routes/portal.stub @@ -2,11 +2,13 @@ use Illuminate\Support\Facades\Route; -Route::group([ - 'prefix' => 'portal', - 'middleware' => 'portal', - 'namespace' => '$MODULE_NAMESPACE$\$STUDLY_NAME$\Http\Controllers' -], function () { - // Route::get('invoices/{invoice}/$ALIAS$', 'Main@show')->name('portal.invoices.$ALIAS$.show'); - // Route::post('invoices/{invoice}/$ALIAS$/confirm', 'Main@confirm')->name('portal.invoices.$ALIAS$.confirm'); +/** + * 'portal' middleware and 'portal/$ALIAS$' prefix applied to all routes (including names) + * + * @see \App\Providers\Route::register + */ + +Route::portal('$ALIAS$', function () { + // Route::get('invoices/{invoice}', 'Main@show')->name('invoices.show'); + // Route::post('invoices/{invoice}/confirm', 'Main@confirm')->name('invoices.confirm'); }); diff --git a/app/Http/Controllers/Portal/Invoices.php b/app/Http/Controllers/Portal/Invoices.php index 261bb7c7b..68e96f3c0 100644 --- a/app/Http/Controllers/Portal/Invoices.php +++ b/app/Http/Controllers/Portal/Invoices.php @@ -108,7 +108,7 @@ class Invoices extends Controller public function signed(Document $invoice) { if (empty($invoice)) { - redirect()->route('login'); + return redirect()->route('login'); } $payment_actions = []; @@ -119,7 +119,7 @@ class Invoices extends Controller $codes = explode('.', $payment_method_key); if (!isset($payment_actions[$codes[0]])) { - $payment_actions[$codes[0]] = URL::signedRoute('signed.invoices.' . $codes[0] . '.show', [$invoice->id]); + $payment_actions[$codes[0]] = URL::signedRoute('signed.' . $codes[0] . '.invoices.show', [$invoice->id]); } } diff --git a/app/Providers/Route.php b/app/Providers/Route.php index f1234a578..b32ed9df8 100644 --- a/app/Providers/Route.php +++ b/app/Providers/Route.php @@ -28,6 +28,73 @@ class Route extends Provider */ protected $namespace = 'App\Http\Controllers'; + /** + * Register any application services. + * + * @return void + */ + public function register() + { + parent::register(); + + Facade::macro('module', function ($alias, $routes, $attrs) { + $attributes = [ + 'middleware' => $attrs['middleware'], + ]; + + if (isset($attrs['namespace'])) { + // null means don't add + if (!is_null($attrs['namespace'])) { + $attributes['namespace'] = $attrs['namespace']; + } + } else { + $attributes['namespace'] = 'Modules\\' . module($alias)->getStudlyName() . '\Http\Controllers'; + } + + if (isset($attrs['prefix'])) { + // null means don't add + if (!is_null($attrs['prefix'])) { + $attributes['prefix'] = '{company_id}/' . $attrs['prefix']; + } + } else { + $attributes['prefix'] = '{company_id}/' . $alias; + } + + if (isset($attrs['as'])) { + // null means don't add + if (!is_null($attrs['as'])) { + $attributes['as'] = $attrs['as']; + } + } else { + $attributes['as'] = $alias . '.'; + } + + return Facade::group($attributes, $routes); + }); + + Facade::macro('admin', function ($alias, $routes, $attributes = []) { + return Facade::module($alias, $routes, array_merge([ + 'middleware' => 'admin', + ], $attributes)); + }); + + Facade::macro('portal', function ($alias, $routes, $attributes = []) { + return Facade::module($alias, $routes, array_merge([ + 'middleware' => 'portal', + 'prefix' => 'portal/' . $alias, + 'as' => 'portal.' . $alias . '.', + ], $attributes)); + }); + + Facade::macro('signed', function ($alias, $routes, $attributes = []) { + return Facade::module($alias, $routes, array_merge([ + 'middleware' => 'signed', + 'prefix' => 'signed/' . $alias, + 'as' => 'signed.' . $alias . '.', + ], $attributes)); + }); + } + /** * Define the routes for the application. * diff --git a/resources/assets/js/views/portal/invoices.js b/resources/assets/js/views/portal/invoices.js index fb5905be7..5b6764a71 100644 --- a/resources/assets/js/views/portal/invoices.js +++ b/resources/assets/js/views/portal/invoices.js @@ -55,7 +55,7 @@ const app = new Vue({ let method = payment_method.split('.'); - let path = url + '/portal/invoices/' + this.form.document_id + '/' + method[0]; + let path = url + '/portal/' + method[0] + '/invoices/' + this.form.document_id; this.method_show_html = Vue.component('payment-method-confirm', function (resolve, reject) { resolve({ diff --git a/tests/Feature/FeatureTestCase.php b/tests/Feature/FeatureTestCase.php index f79a90d3e..f431a7103 100644 --- a/tests/Feature/FeatureTestCase.php +++ b/tests/Feature/FeatureTestCase.php @@ -27,8 +27,6 @@ abstract class FeatureTestCase extends TestCase // Disable debugbar config(['debugbar.enabled', false]); - - app('url')->defaults(['company_id' => $this->company->id]); } /** @@ -46,10 +44,10 @@ abstract class FeatureTestCase extends TestCase if ($company) { $company->makeCurrent(); - - app('url')->defaults(['company_id' => $company->id]); } + app('url')->defaults(['company_id' => company_id()]); + return $this->actingAs($user); }