From 3428bd3e439371e9940202c7925f5f3aae31d3e6 Mon Sep 17 00:00:00 2001 From: fatihalp Date: Tue, 3 Mar 2026 17:29:59 +0300 Subject: [PATCH] Konsolide et Filament V5 partner kim --- .../Http/Controllers/ListingController.php | 35 ++++------- .../Listing/resources/views/create.blade.php | 56 ------------------ Modules/Listing/routes/web.php | 2 +- .../Auth/PartnerAuthGatewayController.php | 27 +++++++++ .../Partner/DashboardController.php | 18 ------ .../Controllers/Partner/ListingController.php | 14 ----- app/Providers/AppServiceProvider.php | 18 ++++++ .../PartnerSocialRegistrationAvailability.php | 48 +++++++++++++++ .../auth/registration-disabled.blade.php | 23 ++++++++ resources/views/errors/403.blade.php | 4 +- resources/views/layouts/app.blade.php | 26 ++++---- resources/views/partner/dashboard.blade.php | 59 ------------------- .../views/partner/listings/index.blade.php | 32 ---------- routes/auth.php | 19 +----- routes/web.php | 23 +++++--- 15 files changed, 165 insertions(+), 239 deletions(-) delete mode 100644 Modules/Listing/resources/views/create.blade.php create mode 100644 app/Http/Controllers/Auth/PartnerAuthGatewayController.php delete mode 100644 app/Http/Controllers/Partner/DashboardController.php delete mode 100644 app/Http/Controllers/Partner/ListingController.php create mode 100644 app/Support/PartnerSocialRegistrationAvailability.php create mode 100644 resources/views/auth/registration-disabled.blade.php delete mode 100644 resources/views/partner/dashboard.blade.php delete mode 100644 resources/views/partner/listings/index.blade.php diff --git a/Modules/Listing/Http/Controllers/ListingController.php b/Modules/Listing/Http/Controllers/ListingController.php index a3be4b4a0..67d7a51ad 100644 --- a/Modules/Listing/Http/Controllers/ListingController.php +++ b/Modules/Listing/Http/Controllers/ListingController.php @@ -2,10 +2,7 @@ namespace Modules\Listing\Http\Controllers; use App\Http\Controllers\Controller; -use Illuminate\Http\Request; -use Illuminate\Validation\Rule; use Modules\Listing\Models\Listing; -use Modules\Listing\Support\ListingPanelHelper; class ListingController extends Controller { @@ -24,29 +21,21 @@ class ListingController extends Controller public function create() { - return view('listing::create', [ - 'currencies' => ListingPanelHelper::currencyCodes(), - ]); + if (! auth()->check()) { + return redirect()->route('filament.partner.auth.login'); + } + + return redirect()->route('filament.partner.resources.listings.create', ['tenant' => auth()->id()]); } - public function store(Request $request) + public function store() { - $currencies = ListingPanelHelper::currencyCodes(); + if (! auth()->check()) { + return redirect()->route('filament.partner.auth.login'); + } - $data = $request->validate([ - 'title' => 'required|string|min:3|max:255', - 'description' => 'nullable|string', - 'price' => 'nullable|numeric|min:0', - 'currency' => ['nullable', 'string', 'size:3', Rule::in($currencies)], - 'city' => 'nullable|string|max:120', - 'country' => 'nullable|string|max:120', - 'category_id' => 'nullable|integer', - 'contact_email' => 'nullable|email', - 'contact_phone' => 'nullable|string', - ]); - - $listing = Listing::createFromFrontend($data, auth()->id()); - - return redirect()->route('listings.show', $listing)->with('success', 'Listing created!'); + return redirect() + ->route('filament.partner.resources.listings.create', ['tenant' => auth()->id()]) + ->with('success', 'Use the Partner Panel to create listings.'); } } diff --git a/Modules/Listing/resources/views/create.blade.php b/Modules/Listing/resources/views/create.blade.php deleted file mode 100644 index 357d34cef..000000000 --- a/Modules/Listing/resources/views/create.blade.php +++ /dev/null @@ -1,56 +0,0 @@ -@extends('app::layouts.app') -@section('content') -
-
-

Post a New Listing

-
- @csrf -
- - - @error('title')

{{ $message }}

@enderror -
-
- - -
-
- - - @error('price')

{{ $message }}

@enderror -
-
- - - @error('currency')

{{ $message }}

@enderror -
-
- - - @error('city')

{{ $message }}

@enderror -
-
- - - @error('country')

{{ $message }}

@enderror -
-
- - - @error('contact_email')

{{ $message }}

@enderror -
-
- - - @error('contact_phone')

{{ $message }}

@enderror -
- -
-
-
-@endsection diff --git a/Modules/Listing/routes/web.php b/Modules/Listing/routes/web.php index 380e6491d..1c3966ecd 100644 --- a/Modules/Listing/routes/web.php +++ b/Modules/Listing/routes/web.php @@ -5,6 +5,6 @@ use Modules\Listing\Http\Controllers\ListingController; Route::middleware('web')->prefix('listings')->name('listings.')->group(function () { Route::get('/', [ListingController::class, 'index'])->name('index'); Route::get('/create', [ListingController::class, 'create'])->name('create'); - Route::post('/', [ListingController::class, 'store'])->name('store')->middleware('auth'); + Route::post('/', [ListingController::class, 'store'])->name('store'); Route::get('/{listing}', [ListingController::class, 'show'])->name('show'); }); diff --git a/app/Http/Controllers/Auth/PartnerAuthGatewayController.php b/app/Http/Controllers/Auth/PartnerAuthGatewayController.php new file mode 100644 index 000000000..ea6b69bde --- /dev/null +++ b/app/Http/Controllers/Auth/PartnerAuthGatewayController.php @@ -0,0 +1,27 @@ +route('filament.partner.auth.login'); + } + + public function register(): RedirectResponse | Response + { + if (PartnerSocialRegistrationAvailability::isAvailable()) { + return redirect() + ->route('filament.partner.auth.login') + ->with('success', __('Registration is available via social login providers.')); + } + + return response()->view('auth.registration-disabled', status: Response::HTTP_FORBIDDEN); + } +} diff --git a/app/Http/Controllers/Partner/DashboardController.php b/app/Http/Controllers/Partner/DashboardController.php deleted file mode 100644 index dc7d80e49..000000000 --- a/app/Http/Controllers/Partner/DashboardController.php +++ /dev/null @@ -1,18 +0,0 @@ -id())->latest()->paginate(10); - $stats = [ - 'total' => Listing::where('user_id', auth()->id())->count(), - 'active' => Listing::where('user_id', auth()->id())->where('status', 'active')->count(), - ]; - return view('partner.dashboard', compact('myListings', 'stats')); - } -} diff --git a/app/Http/Controllers/Partner/ListingController.php b/app/Http/Controllers/Partner/ListingController.php deleted file mode 100644 index 091df87a6..000000000 --- a/app/Http/Controllers/Partner/ListingController.php +++ /dev/null @@ -1,14 +0,0 @@ -id())->latest()->paginate(15); - return view('partner.listings.index', compact('listings')); - } -} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index f522381a6..7befa18bc 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -7,6 +7,7 @@ use App\Settings\GeneralSettings; use BezhanSalleh\LanguageSwitch\LanguageSwitch; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\Event; +use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\View; @@ -22,8 +23,25 @@ class AppServiceProvider extends ServiceProvider public function boot(): void { + Route::pattern('tenant', '[0-9]+'); View::addNamespace('app', resource_path('views')); + app()->booted(function (): void { + foreach (app('router')->getRoutes() as $route) { + $name = $route->getName(); + + if (! is_string($name) || ! str_starts_with($name, 'filament.partner.')) { + continue; + } + + if (! str_contains($route->uri(), '{tenant}')) { + continue; + } + + $route->where('tenant', '[0-9]+'); + } + }); + $fallbackName = config('app.name', 'OpenClassify'); $fallbackLocale = config('app.locale', 'en'); $fallbackCurrencies = $this->normalizeCurrencies(config('app.currencies', ['USD'])); diff --git a/app/Support/PartnerSocialRegistrationAvailability.php b/app/Support/PartnerSocialRegistrationAvailability.php new file mode 100644 index 000000000..32bd51bd1 --- /dev/null +++ b/app/Support/PartnerSocialRegistrationAvailability.php @@ -0,0 +1,48 @@ + + */ + private const PROVIDERS = ['google', 'facebook', 'apple']; + + public static function isAvailable(): bool + { + foreach (self::PROVIDERS as $provider) { + if (self::providerEnabled($provider) && self::providerCredentialsReady($provider)) { + return true; + } + } + + return false; + } + + private static function providerEnabled(string $provider): bool + { + try { + /** @var GeneralSettings $settings */ + $settings = app(GeneralSettings::class); + + return match ($provider) { + 'google' => (bool) ($settings->enable_google_login ?? false), + 'facebook' => (bool) ($settings->enable_facebook_login ?? false), + 'apple' => (bool) ($settings->enable_apple_login ?? false), + default => false, + }; + } catch (Throwable) { + return (bool) config("services.{$provider}.enabled", false); + } + } + + private static function providerCredentialsReady(string $provider): bool + { + return filled(config("services.{$provider}.client_id")) + && filled(config("services.{$provider}.client_secret")); + } +} diff --git a/resources/views/auth/registration-disabled.blade.php b/resources/views/auth/registration-disabled.blade.php new file mode 100644 index 000000000..77185cc9d --- /dev/null +++ b/resources/views/auth/registration-disabled.blade.php @@ -0,0 +1,23 @@ +@extends('app::layouts.app') + +@section('title', 'Registration Disabled') + +@section('content') +
+
+

Registration is currently disabled

+

+ Partner registration is available only when at least one social login provider is enabled by the admin. +

+ + +
+
+@endsection diff --git a/resources/views/errors/403.blade.php b/resources/views/errors/403.blade.php index 5a47fa522..ae0fcb43b 100644 --- a/resources/views/errors/403.blade.php +++ b/resources/views/errors/403.blade.php @@ -18,14 +18,14 @@ @auth -
+ @csrf
@else - + Giriş Yap @endauth diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index e41f388de..0486a862c 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -7,6 +7,15 @@ $whatsappNumber = $generalSettings['whatsapp'] ?? null; $whatsappDigits = preg_replace('/\D+/', '', (string) $whatsappNumber); $whatsappUrl = $whatsappDigits !== '' ? 'https://wa.me/' . $whatsappDigits : null; + $partnerLoginRoute = route('filament.partner.auth.login'); + $partnerRegisterRoute = route('register'); + $partnerLogoutRoute = route('filament.partner.auth.logout'); + $partnerCreateRoute = auth()->check() + ? route('filament.partner.resources.listings.create', ['tenant' => auth()->id()]) + : $partnerLoginRoute; + $partnerDashboardRoute = auth()->check() + ? route('filament.partner.pages.dashboard', ['tenant' => auth()->id()]) + : $partnerLoginRoute; @endphp @@ -19,11 +28,6 @@ -@php - $partnerCreateRoute = auth()->check() && \Illuminate\Support\Facades\Route::has('filament.partner.resources.listings.create') - ? route('filament.partner.resources.listings.create', ['tenant' => auth()->id()]) - : route('listings.create'); -@endphp