From 69bb2da18aaf55e88dc4e448cacad511ce35c3a3 Mon Sep 17 00:00:00 2001 From: Spitfire Date: Mon, 20 Jan 2025 14:38:59 -0600 Subject: [PATCH 1/3] Resume Subscription button --- .../Settings/SubscriptionController.php | 42 +++++++++++++++++++ app/Jobs/SubscriptionEndJob.php | 4 +- app/Models/UserLog.php | 1 + app/Services/SubscriptionService.php | 6 +++ lang/en/settings.php | 2 + .../settings/subscription/index.blade.php | 12 ++++-- .../settings/subscription/renew.blade.php | 22 ++++++++++ routes/settings.php | 1 + 8 files changed, 85 insertions(+), 5 deletions(-) create mode 100644 resources/views/settings/subscription/renew.blade.php diff --git a/app/Http/Controllers/Settings/SubscriptionController.php b/app/Http/Controllers/Settings/SubscriptionController.php index 79037db3e7..9680542cd6 100644 --- a/app/Http/Controllers/Settings/SubscriptionController.php +++ b/app/Http/Controllers/Settings/SubscriptionController.php @@ -15,6 +15,7 @@ use App\Services\Users\CurrencyService; use App\Services\Users\EmailValidationService; use App\Models\User; +use App\Models\UserLog; use Exception; use Illuminate\Http\Request; use Illuminate\Support\Arr; @@ -115,6 +116,10 @@ public function change(Request $request, Tier $tier) // If the user has a cancelled sub still ending if ($user->subscribed('kanka') && $user->subscription('kanka')->onGracePeriod() && !$user->hasPayPal()) { + if ($tier->isCurrent($user)) { + return view('settings.subscription.renew') + ->with('user', $user); + } return view('settings.subscription.change_blocked') ->with('user', $user); } @@ -169,6 +174,43 @@ public function change(Request $request, Tier $tier) )); } + public function renew(Request $request) + { + try { + $this->subscription->user($request->user()) + ->renew(); + $request->user()->log(UserLog::TYPE_SUB_RENEW); + + $flash = 'subscribed'; + $routeOptions = ['success' => 1]; + + return redirect() + ->route('settings.subscription', $routeOptions) + ->withSuccess(__('settings.subscription.success.' . $flash)) + ->with('sub_tracking', $flash) + ->with('sub_value', $this->subscription->subscriptionValue()) + ; + } catch (IncompletePayment $exception) { + session()->put('subscription_callback', $request->get('payment_id')); + return redirect()->route( + 'cashier.payment', + // @phpstan-ignore-next-line + [$exception->payment->id, 'redirect' => route('settings.subscription.callback')] + ); + } catch (TranslatableException $e) { + return redirect() + ->route('settings.subscription') + ->with('error_raw', $e->getTranslatedMessage()) + ; + } catch (Exception $e) { + // Error? json + return response()->json([ + 'error' => true, + 'message' => $e->getMessage(), + ]); + } + } + /** * Subscribe */ diff --git a/app/Jobs/SubscriptionEndJob.php b/app/Jobs/SubscriptionEndJob.php index 2ad75bd4a1..8ec11374ea 100644 --- a/app/Jobs/SubscriptionEndJob.php +++ b/app/Jobs/SubscriptionEndJob.php @@ -47,8 +47,8 @@ public function handle() { /** @var ?User $user */ $user = User::find($this->userId); - if (empty($user) || $this->userId == 27078) { - // User deleted their account already. + if (empty($user) || $this->userId == 27078 || $user->subscribed('kanka')) { + // User deleted their account already or renewed their subscription. return; } diff --git a/app/Models/UserLog.php b/app/Models/UserLog.php index b92082c01e..2149cdab71 100644 --- a/app/Models/UserLog.php +++ b/app/Models/UserLog.php @@ -33,6 +33,7 @@ class UserLog extends Model public const TYPE_SUB_DOWNGRADE = 13; public const TYPE_SUB_FAIL = 15; public const TYPE_SUB_PAYPAL = 16; + public const TYPE_SUB_RENEW = 17; public const TYPE_CAMPAIGN_NEW = 20; public const TYPE_CAMPAIGN_JOIN = 21; diff --git a/app/Services/SubscriptionService.php b/app/Services/SubscriptionService.php index 532fb04a45..e4537f3382 100644 --- a/app/Services/SubscriptionService.php +++ b/app/Services/SubscriptionService.php @@ -195,6 +195,12 @@ public function subscribe(string $paymentID): self return $this; } + public function renew(): void + { + $this->user->subscription('kanka')->resume(); + } + + /** * Setup the user's pledge, role, discord * @return $this diff --git a/lang/en/settings.php b/lang/en/settings.php index ad3936fbf7..9828625bcd 100644 --- a/lang/en/settings.php +++ b/lang/en/settings.php @@ -143,6 +143,7 @@ 'cancel' => [ 'grace' => [ 'text' => 'Your subscription is already set to end on :date, after which your premium campaigns will revert to standard campaigns and other benefits related to supporting Kanka will be disabled.', + 'renew' => 'However, you can choose to renew your subscription to enjoy the benefits without interruptions.', 'title' => 'Grace period', ], 'options' => [ @@ -244,6 +245,7 @@ 'actions' => [ 'cancel' => 'Cancel subscription', 'downgrading' => 'Please contact us for downgrading', + 'renew' => 'Renew subscription', 'rollback' => 'Change to Kobold', 'subscribe' => 'Change to :tier monthly', 'subscribe_annual' => 'Change to :tier yearly', diff --git a/resources/views/settings/subscription/index.blade.php b/resources/views/settings/subscription/index.blade.php index e908afd51c..41b867264a 100644 --- a/resources/views/settings/subscription/index.blade.php +++ b/resources/views/settings/subscription/index.blade.php @@ -115,9 +115,15 @@ @if (!$tier->isFree() && $tier->isCurrent($user) && $user->subscribed('kanka') && !$hasManual)
- - {{ __('settings.subscription.subscription.actions.cancel') }} - + @if ($user->subscription('kanka')?->onGracePeriod()) + + {{ __('settings.subscription.subscription.actions.renew') }} + + @else + + {{ __('settings.subscription.subscription.actions.cancel') }} + + @endif
@endif diff --git a/resources/views/settings/subscription/renew.blade.php b/resources/views/settings/subscription/renew.blade.php new file mode 100644 index 0000000000..aadb6ee367 --- /dev/null +++ b/resources/views/settings/subscription/renew.blade.php @@ -0,0 +1,22 @@ + +@php + $endDate = $user->subscription('kanka')->ends_at->isoFormat('MMMM D, Y'); +@endphp + + {{ __('settings.subscription.cancel.grace.title') }} + + +
+ +

+ {!! __('settings.subscription.cancel.grace.text', ['date' => '' . $endDate . ''])!!} +

+

+ {!! __('settings.subscription.cancel.grace.renew')!!} +

+
+ + + {{ __('settings.subscription.subscription.actions.renew') }} + +
diff --git a/routes/settings.php b/routes/settings.php index 1820670ecd..a2d9e23f62 100644 --- a/routes/settings.php +++ b/routes/settings.php @@ -62,6 +62,7 @@ Route::get('/subscription', [SubscriptionController::class, 'index'])->name('settings.subscription'); Route::get('/subscription/change/{tier}', [SubscriptionController::class, 'change'])->name('settings.subscription.change'); +Route::get('/subscription/renew', [SubscriptionController::class, 'renew'])->name('settings.subscription.renew'); Route::get('/subscription/callback', [SubscriptionController::class, 'callback'])->name('settings.subscription.callback'); Route::post('/subscription/change/{tier}', [SubscriptionController::class, 'subscribe'])->name('settings.subscription.subscribe'); Route::get('/subscription/unsubscribe', [CancellationController::class, 'index'])->name('settings.subscription.unsubscribe'); From 53f90c04162cddefe3ee3ae16e5b4badbee0d96e Mon Sep 17 00:00:00 2001 From: spitfire305 Date: Mon, 20 Jan 2025 20:41:19 +0000 Subject: [PATCH 2/3] Fix styling --- app/Enums/Permission.php | 1 - app/Http/Controllers/CrudController.php | 1 - .../Settings/SubscriptionController.php | 18 +++++------ app/Models/Scopes/AclScope.php | 1 - app/Policies/MiscPolicy.php | 5 ---- app/Services/Entity/PrivacyService.php | 1 - app/Services/Permissions/EntityPermission.php | 30 +++++++++---------- app/Services/SearchService.php | 2 -- app/Traits/GuestAuthTrait.php | 1 - ...16_164318_add_dashboard_entity_type_id.php | 3 +- ...175851_migrate_widgets_to_entity_types.php | 7 ++--- ...25_01_17_161652_add_parent_to_entities.php | 3 +- routes/campaigns/campaign.php | 8 ++--- 13 files changed, 32 insertions(+), 49 deletions(-) diff --git a/app/Enums/Permission.php b/app/Enums/Permission.php index 4179019958..28daef3e34 100644 --- a/app/Enums/Permission.php +++ b/app/Enums/Permission.php @@ -24,4 +24,3 @@ enum Permission: int case PostTemplates = 18; case Bookmarks = 19; } - diff --git a/app/Http/Controllers/CrudController.php b/app/Http/Controllers/CrudController.php index e8bcdf679c..0ddecfe9ef 100644 --- a/app/Http/Controllers/CrudController.php +++ b/app/Http/Controllers/CrudController.php @@ -695,7 +695,6 @@ protected function hasLimitCheck(bool $value = true): self /** * Load a list of templates the user can create new entities from - * @param MiscModel $model */ protected function loadTemplates(EntityType $entityType): Collection { diff --git a/app/Http/Controllers/Settings/SubscriptionController.php b/app/Http/Controllers/Settings/SubscriptionController.php index 9680542cd6..9affa9387a 100644 --- a/app/Http/Controllers/Settings/SubscriptionController.php +++ b/app/Http/Controllers/Settings/SubscriptionController.php @@ -179,17 +179,17 @@ public function renew(Request $request) try { $this->subscription->user($request->user()) ->renew(); - $request->user()->log(UserLog::TYPE_SUB_RENEW); + $request->user()->log(UserLog::TYPE_SUB_RENEW); - $flash = 'subscribed'; - $routeOptions = ['success' => 1]; + $flash = 'subscribed'; + $routeOptions = ['success' => 1]; - return redirect() - ->route('settings.subscription', $routeOptions) - ->withSuccess(__('settings.subscription.success.' . $flash)) - ->with('sub_tracking', $flash) - ->with('sub_value', $this->subscription->subscriptionValue()) - ; + return redirect() + ->route('settings.subscription', $routeOptions) + ->withSuccess(__('settings.subscription.success.' . $flash)) + ->with('sub_tracking', $flash) + ->with('sub_value', $this->subscription->subscriptionValue()) + ; } catch (IncompletePayment $exception) { session()->put('subscription_callback', $request->get('payment_id')); return redirect()->route( diff --git a/app/Models/Scopes/AclScope.php b/app/Models/Scopes/AclScope.php index ed2d645b1c..1b32f62c8d 100644 --- a/app/Models/Scopes/AclScope.php +++ b/app/Models/Scopes/AclScope.php @@ -5,7 +5,6 @@ use App\Enums\Permission; use App\Facades\CampaignLocalization; use App\Facades\Permissions; -use App\Models\CampaignPermission; use App\Models\Entity; use App\Models\Post; use App\Models\MiscModel; diff --git a/app/Policies/MiscPolicy.php b/app/Policies/MiscPolicy.php index 2fe0580b0c..b16f3c4bb6 100644 --- a/app/Policies/MiscPolicy.php +++ b/app/Policies/MiscPolicy.php @@ -2,17 +2,12 @@ namespace App\Policies; -use App\Facades\CampaignLocalization; -use App\Facades\UserCache; use App\Models\Campaign; use App\Facades\EntityPermission; -use App\Models\CampaignPermission; use App\Models\Entity; use App\Models\MiscModel; -use App\Models\Post; use App\Models\User; use Illuminate\Auth\Access\HandlesAuthorization; -use Illuminate\Support\Facades\Auth; class MiscPolicy { diff --git a/app/Services/Entity/PrivacyService.php b/app/Services/Entity/PrivacyService.php index 03360a73f3..56664fb29a 100644 --- a/app/Services/Entity/PrivacyService.php +++ b/app/Services/Entity/PrivacyService.php @@ -3,7 +3,6 @@ namespace App\Services\Entity; use App\Enums\Permission; -use App\Models\CampaignPermission; use App\Models\CampaignRole; use App\Models\Entity; use App\Models\User; diff --git a/app/Services/Permissions/EntityPermission.php b/app/Services/Permissions/EntityPermission.php index 5b45b10442..8fe8dfa705 100644 --- a/app/Services/Permissions/EntityPermission.php +++ b/app/Services/Permissions/EntityPermission.php @@ -18,10 +18,10 @@ class EntityPermission { - use UserAware; + use CampaignAware; use EntityAware; use EntityTypeAware; - use CampaignAware; + use UserAware; protected array $cached = []; @@ -64,18 +64,18 @@ public function can(Permission $permission): bool $perm = $this->cached[$key]; } -// dump('module permission'); -// dump($key); -// dump($this->cached); + // dump('module permission'); + // dump($key); + // dump($this->cached); if (!isset($this->entity)) { -// dd('no entity'); + // dd('no entity'); return $perm; } // Search for entity $entityKey = '_' . $permission->value . '_' . $this->entity->id; -// dump('check entity'); -// dd($entityKey); + // dump('check entity'); + // dd($entityKey); if (isset($this->cached[$entityKey])) { return $this->cached[$entityKey]; } @@ -108,10 +108,10 @@ public function hasPermission( } $key = $entityType . '_' . $action; -// if ($action === 1) { -// dump($key = $entityType . '_' . $action); -// dump($this->cached); -// } + // if ($action === 1) { + // dump($key = $entityType . '_' . $action); + // dump($this->cached); + // } $perm = false; if (isset($this->cached[$key]) && $this->cached[$key]) { @@ -120,8 +120,8 @@ public function hasPermission( // Check if we have permission to do this action for exactly this entity if (!empty($entity)) { -// dump('i have an entity?'); -// dump($entity); + // dump('i have an entity?'); + // dump($entity); //Check if $entity is an entity type. if (isset($entity->type_id)) { @@ -131,7 +131,7 @@ public function hasPermission( //dump('misc object'); $entityKey = '_' . $action . '_' . $entity->id; } -// dump('entity key ' . $entityKey); + // dump('entity key ' . $entityKey); if (isset($this->cached[$entityKey])) { $perm = $this->cached[$entityKey]; } diff --git a/app/Services/SearchService.php b/app/Services/SearchService.php index 7f603d568e..1a40bb551f 100644 --- a/app/Services/SearchService.php +++ b/app/Services/SearchService.php @@ -4,7 +4,6 @@ use App\Facades\Avatar; use App\Facades\Mentions; -use App\Facades\Module; use App\Models\Calendar; use App\Models\Entity; use App\Models\EntityAsset; @@ -12,7 +11,6 @@ use App\Models\MiscModel; use App\Services\Entity\NewService; use App\Traits\CampaignAware; -use App\Traits\EntityTypeAware; use App\Traits\UserAware; use Illuminate\Support\Collection; use Illuminate\Support\Str; diff --git a/app/Traits/GuestAuthTrait.php b/app/Traits/GuestAuthTrait.php index 29b8e72ea7..852884f1bd 100644 --- a/app/Traits/GuestAuthTrait.php +++ b/app/Traits/GuestAuthTrait.php @@ -5,7 +5,6 @@ use App\Enums\Permission; use App\Facades\CampaignLocalization; use App\Facades\EntityPermission; -use App\Models\CampaignPermission; use App\Models\Entity; trait GuestAuthTrait diff --git a/database/migrations/2025_01_16_164318_add_dashboard_entity_type_id.php b/database/migrations/2025_01_16_164318_add_dashboard_entity_type_id.php index 1737caa786..5461d9e619 100644 --- a/database/migrations/2025_01_16_164318_add_dashboard_entity_type_id.php +++ b/database/migrations/2025_01_16_164318_add_dashboard_entity_type_id.php @@ -4,8 +4,7 @@ use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; -return new class extends Migration -{ +return new class () extends Migration { /** * Run the migrations. */ diff --git a/database/migrations/2025_01_16_175851_migrate_widgets_to_entity_types.php b/database/migrations/2025_01_16_175851_migrate_widgets_to_entity_types.php index cc9f3a242c..9b0385cf1c 100644 --- a/database/migrations/2025_01_16_175851_migrate_widgets_to_entity_types.php +++ b/database/migrations/2025_01_16_175851_migrate_widgets_to_entity_types.php @@ -1,18 +1,15 @@ get() as $entityType) { + foreach (App\Models\EntityType::default()->get() as $entityType) { DB::statement("UPDATE campaign_dashboard_widgets SET entity_type_id = " . $entityType->id . " WHERE config like '%\"entity\":\"" . $entityType->code . "\"%'"); diff --git a/database/migrations/2025_01_17_161652_add_parent_to_entities.php b/database/migrations/2025_01_17_161652_add_parent_to_entities.php index 20ed1ea083..f90e8e94dc 100644 --- a/database/migrations/2025_01_17_161652_add_parent_to_entities.php +++ b/database/migrations/2025_01_17_161652_add_parent_to_entities.php @@ -4,8 +4,7 @@ use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; -return new class extends Migration -{ +return new class () extends Migration { /** * Run the migrations. */ diff --git a/routes/campaigns/campaign.php b/routes/campaigns/campaign.php index 2197eb8e56..7df2677210 100644 --- a/routes/campaigns/campaign.php +++ b/routes/campaigns/campaign.php @@ -143,8 +143,8 @@ // The campaign management subpages Route::get('/w/{campaign}/overview', 'Crud\CampaignController@show')->name('overview'); Route::get('/w/{campaign}/modules', 'Campaign\ModuleController@index')->name('campaign.modules'); -Route::post('/w/{campaign}/modules/toggle/{entity_type}', [\App\Http\Controllers\Campaign\ModuleController::class, 'toggle'])->name('campaign.modules.toggle'); -Route::post('/w/{campaign}/features/toggle/{module}', [\App\Http\Controllers\Campaign\ModuleController::class, 'toggleFeature'])->name('campaign.features.toggle'); +Route::post('/w/{campaign}/modules/toggle/{entity_type}', [App\Http\Controllers\Campaign\ModuleController::class, 'toggle'])->name('campaign.modules.toggle'); +Route::post('/w/{campaign}/features/toggle/{module}', [App\Http\Controllers\Campaign\ModuleController::class, 'toggleFeature'])->name('campaign.features.toggle'); //Route::get('/w/{campaign}/entity_types/create', [\App\Http\Controllers\Campaign\EntityTypeController::class, 'create'])->name('campaign.entity_types.create'); @@ -152,9 +152,9 @@ // //Route::get('/w/{campaign}/entity_types/{entity_type}/edit', [\App\Http\Controllers\Campaign\EntityTypeController::class, 'edit'])->name('campaign.entity_types.edit'); //Route::patch('/w/{campaign}/entity_types/{entity_type}/update', [\App\Http\Controllers\Campaign\EntityTypeController::class, 'update'])->name('campaign.entity_types.update'); -Route::post('/w/{campaign}/entity_types/{entity_type}/toggle', [\App\Http\Controllers\Campaign\EntityTypeController::class, 'toggle'])->name('entity_types.toggle'); +Route::post('/w/{campaign}/entity_types/{entity_type}/toggle', [App\Http\Controllers\Campaign\EntityTypeController::class, 'toggle'])->name('entity_types.toggle'); //Route::delete('/w/{campaign}/entity_types/{entity_type}/delete', [\App\Http\Controllers\Campaign\EntityTypeController::class, 'delete'])->name('campaign.entity_types.destroy'); -Route::get('/w/{campaign}/entity_types/{entity_type}/confirm', [\App\Http\Controllers\Campaign\EntityTypeController::class, 'confirm'])->name('entity_types.confirm'); +Route::get('/w/{campaign}/entity_types/{entity_type}/confirm', [App\Http\Controllers\Campaign\EntityTypeController::class, 'confirm'])->name('entity_types.confirm'); Route::get('/w/{campaign}/campaign-theme', 'Campaign\StyleController@theme')->name('campaign-theme'); Route::post('/w/{campaign}/campaign-theme', 'Campaign\StyleController@themeSave')->name('campaign-theme.save'); From 4abb003ede7bb75dd6b888eeec144f0967d0af0d Mon Sep 17 00:00:00 2001 From: ilestis Date: Mon, 20 Jan 2025 15:25:52 -0600 Subject: [PATCH 3/3] Tweaks --- .../Settings/SubscriptionController.php | 13 +++---- lang/en/settings.php | 2 -- lang/en/subscriptions/renew.php | 10 ++++++ .../settings/subscription/index.blade.php | 2 +- .../settings/subscription/renew.blade.php | 34 ++++++++++++------- routes/settings.php | 2 +- 6 files changed, 41 insertions(+), 22 deletions(-) create mode 100644 lang/en/subscriptions/renew.php diff --git a/app/Http/Controllers/Settings/SubscriptionController.php b/app/Http/Controllers/Settings/SubscriptionController.php index 9affa9387a..ab6ebf1cc0 100644 --- a/app/Http/Controllers/Settings/SubscriptionController.php +++ b/app/Http/Controllers/Settings/SubscriptionController.php @@ -176,19 +176,20 @@ public function change(Request $request, Tier $tier) public function renew(Request $request) { + if ($request->ajax()) { + return response()->json([]); + } try { - $this->subscription->user($request->user()) + $this->subscription + ->user($request->user()) ->renew(); $request->user()->log(UserLog::TYPE_SUB_RENEW); - $flash = 'subscribed'; - $routeOptions = ['success' => 1]; + $routeOptions = []; return redirect() ->route('settings.subscription', $routeOptions) - ->withSuccess(__('settings.subscription.success.' . $flash)) - ->with('sub_tracking', $flash) - ->with('sub_value', $this->subscription->subscriptionValue()) + ->withSuccess(__('subscriptions.renew.success')) ; } catch (IncompletePayment $exception) { session()->put('subscription_callback', $request->get('payment_id')); diff --git a/lang/en/settings.php b/lang/en/settings.php index 9828625bcd..ad3936fbf7 100644 --- a/lang/en/settings.php +++ b/lang/en/settings.php @@ -143,7 +143,6 @@ 'cancel' => [ 'grace' => [ 'text' => 'Your subscription is already set to end on :date, after which your premium campaigns will revert to standard campaigns and other benefits related to supporting Kanka will be disabled.', - 'renew' => 'However, you can choose to renew your subscription to enjoy the benefits without interruptions.', 'title' => 'Grace period', ], 'options' => [ @@ -245,7 +244,6 @@ 'actions' => [ 'cancel' => 'Cancel subscription', 'downgrading' => 'Please contact us for downgrading', - 'renew' => 'Renew subscription', 'rollback' => 'Change to Kobold', 'subscribe' => 'Change to :tier monthly', 'subscribe_annual' => 'Change to :tier yearly', diff --git a/lang/en/subscriptions/renew.php b/lang/en/subscriptions/renew.php new file mode 100644 index 0000000000..c4699caea2 --- /dev/null +++ b/lang/en/subscriptions/renew.php @@ -0,0 +1,10 @@ + 'Subscription renewal', + 'helper' => 'However, you can choose to renew your subscription to enjoy the benefits without interruptions.', + 'success' => '', + 'actions' => [ + 'renew' => 'Renew subscription', + ], +]; diff --git a/resources/views/settings/subscription/index.blade.php b/resources/views/settings/subscription/index.blade.php index 41b867264a..4834c1fe35 100644 --- a/resources/views/settings/subscription/index.blade.php +++ b/resources/views/settings/subscription/index.blade.php @@ -117,7 +117,7 @@
@if ($user->subscription('kanka')?->onGracePeriod()) - {{ __('settings.subscription.subscription.actions.renew') }} + {{ __('subscriptions/renew.actions.renew') }} @else diff --git a/resources/views/settings/subscription/renew.blade.php b/resources/views/settings/subscription/renew.blade.php index aadb6ee367..0dae9442a3 100644 --- a/resources/views/settings/subscription/renew.blade.php +++ b/resources/views/settings/subscription/renew.blade.php @@ -3,20 +3,30 @@ $endDate = $user->subscription('kanka')->ends_at->isoFormat('MMMM D, Y'); @endphp - {{ __('settings.subscription.cancel.grace.title') }} + {{ __('subscriptions/renew.title') }} diff --git a/routes/settings.php b/routes/settings.php index a2d9e23f62..fd6753a153 100644 --- a/routes/settings.php +++ b/routes/settings.php @@ -62,7 +62,7 @@ Route::get('/subscription', [SubscriptionController::class, 'index'])->name('settings.subscription'); Route::get('/subscription/change/{tier}', [SubscriptionController::class, 'change'])->name('settings.subscription.change'); -Route::get('/subscription/renew', [SubscriptionController::class, 'renew'])->name('settings.subscription.renew'); +Route::post('/subscription/renew', [SubscriptionController::class, 'renew'])->name('settings.subscription.renew'); Route::get('/subscription/callback', [SubscriptionController::class, 'callback'])->name('settings.subscription.callback'); Route::post('/subscription/change/{tier}', [SubscriptionController::class, 'subscribe'])->name('settings.subscription.subscribe'); Route::get('/subscription/unsubscribe', [CancellationController::class, 'index'])->name('settings.subscription.unsubscribe');