From cf313e750fda739c3ced20028dc27286694ab82c Mon Sep 17 00:00:00 2001 From: fatihalp Date: Tue, 3 Mar 2026 18:40:42 +0300 Subject: [PATCH] Remove policy restrictions for guys --- .../Filament/Resources/ListingResource.php | 83 +++++- .../Filament/Resources/LocationResource.php | 9 +- Modules/Category/Policies/CategoryPolicy.php | 70 ----- .../Http/Controllers/ListingController.php | 17 +- Modules/Listing/Policies/ListingPolicy.php | 70 ----- Modules/Location/Policies/CountryPolicy.php | 70 ----- app/Models/User.php | 4 - app/Policies/CmsCategoryPolicy.php | 70 ----- app/Policies/CmsCommentPolicy.php | 70 ----- app/Policies/CmsPagePolicy.php | 70 ----- app/Policies/CmsPostPolicy.php | 70 ----- app/Policies/MediaCollectionPolicy.php | 70 ----- app/Policies/RolePolicy.php | 70 ----- .../TallcmsContactSubmissionPolicy.php | 70 ----- app/Policies/TallcmsMediaPolicy.php | 70 ----- app/Policies/TallcmsMenuPolicy.php | 70 ----- app/Policies/UserPolicy.php | 67 ----- app/Providers/AppServiceProvider.php | 9 + resources/views/home.blade.php | 281 ++++++++++++------ resources/views/layouts/app.blade.php | 223 ++++++++++---- routes/web.php | 3 + 21 files changed, 475 insertions(+), 1061 deletions(-) delete mode 100644 Modules/Category/Policies/CategoryPolicy.php delete mode 100644 Modules/Listing/Policies/ListingPolicy.php delete mode 100644 Modules/Location/Policies/CountryPolicy.php delete mode 100644 app/Policies/CmsCategoryPolicy.php delete mode 100644 app/Policies/CmsCommentPolicy.php delete mode 100644 app/Policies/CmsPagePolicy.php delete mode 100644 app/Policies/CmsPostPolicy.php delete mode 100644 app/Policies/MediaCollectionPolicy.php delete mode 100644 app/Policies/RolePolicy.php delete mode 100644 app/Policies/TallcmsContactSubmissionPolicy.php delete mode 100644 app/Policies/TallcmsMediaPolicy.php delete mode 100644 app/Policies/TallcmsMenuPolicy.php delete mode 100644 app/Policies/UserPolicy.php diff --git a/Modules/Admin/Filament/Resources/ListingResource.php b/Modules/Admin/Filament/Resources/ListingResource.php index 8292f52bb..1fddf6f56 100644 --- a/Modules/Admin/Filament/Resources/ListingResource.php +++ b/Modules/Admin/Filament/Resources/ListingResource.php @@ -10,22 +10,29 @@ use Cheesegrits\FilamentGoogleMaps\Fields\Map; use Filament\Actions\Action; use Filament\Actions\DeleteAction; use Filament\Actions\EditAction; +use Filament\Forms\Components\DatePicker; use Filament\Forms\Components\Select; use Filament\Forms\Components\SpatieMediaLibraryFileUpload; use Filament\Forms\Components\Textarea; use Filament\Forms\Components\TextInput; use Filament\Forms\Components\Toggle; use Filament\Resources\Resource; +use Filament\Schemas\Components\Utilities\Get; use Filament\Schemas\Schema; use Filament\Tables\Columns\IconColumn; use Filament\Tables\Columns\SpatieMediaLibraryImageColumn; use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Filters\Filter; +use Filament\Tables\Filters\SelectFilter; +use Filament\Tables\Filters\TernaryFilter; use Filament\Tables\Table; +use Illuminate\Database\Eloquent\Builder; use Modules\Admin\Filament\Resources\ListingResource\Pages; use Modules\Category\Models\Category; use Modules\Listing\Models\Listing; use Modules\Listing\Support\ListingPanelHelper; -use Tapp\FilamentCountryCodeField\Forms\Components\CountryCodeSelect; +use Modules\Location\Models\City; +use Modules\Location\Models\Country; use UnitEnum; use Ysfkaya\FilamentPhoneInput\Forms\PhoneInput; @@ -49,16 +56,37 @@ class ListingResource extends Resource ->default(fn () => ListingPanelHelper::defaultCurrency()) ->required(), Select::make('category_id')->label('Category')->options(fn () => Category::where('is_active', true)->pluck('name', 'id'))->searchable()->nullable(), + Select::make('user_id')->relationship('user', 'email')->label('Owner')->searchable()->preload()->nullable(), StateFusionSelect::make('status')->required(), PhoneInput::make('contact_phone')->defaultCountry(CountryCodeManager::defaultCountryIso2())->nullable(), TextInput::make('contact_email')->email()->maxLength(255), Toggle::make('is_featured')->default(false), - TextInput::make('city')->maxLength(100), - CountryCodeSelect::make('country') + Select::make('country') ->label('Country') - ->default(fn () => CountryCodeManager::defaultCountryCode()) - ->formatStateUsing(fn ($state): ?string => CountryCodeManager::countryCodeFromLabelOrCode($state)) - ->dehydrateStateUsing(fn ($state, ?Listing $record): ?string => CountryCodeManager::normalizeStoredCountry($state ?? $record?->country)), + ->options(fn (): array => Country::query() + ->orderBy('name') + ->pluck('name', 'name') + ->all()) + ->searchable() + ->preload() + ->live() + ->afterStateUpdated(fn ($state, $set) => $set('city', null)) + ->nullable(), + Select::make('city') + ->label('City') + ->options(function (Get $get): array { + $country = $get('country'); + + return City::query() + ->where('is_active', true) + ->when($country, fn (Builder $query, string $country): Builder => $query->whereHas('country', fn (Builder $countryQuery): Builder => $countryQuery->where('name', $country))) + ->orderBy('name') + ->pluck('name', 'name') + ->all(); + }) + ->searchable() + ->preload() + ->nullable(), Map::make('location') ->label('Location') ->visible(fn (): bool => ListingPanelHelper::googleMapsEnabled()) @@ -90,15 +118,58 @@ class ListingResource extends Resource TextColumn::make('id')->sortable(), TextColumn::make('title')->searchable()->sortable()->limit(40), TextColumn::make('category.name')->label('Category'), + TextColumn::make('user.email')->label('Owner')->searchable()->toggleable(), TextColumn::make('price') ->currency(fn (Listing $record): string => $record->currency ?: ListingPanelHelper::defaultCurrency()) ->sortable(), StateFusionSelectColumn::make('status'), IconColumn::make('is_featured')->boolean()->label('Featured'), TextColumn::make('city'), + TextColumn::make('country'), TextColumn::make('created_at')->dateTime()->sortable(), ])->filters([ StateFusionSelectFilter::make('status'), + SelectFilter::make('category_id') + ->label('Category') + ->relationship('category', 'name') + ->searchable() + ->preload(), + SelectFilter::make('user_id') + ->label('Owner') + ->relationship('user', 'email') + ->searchable() + ->preload(), + SelectFilter::make('country') + ->options(fn (): array => Country::query() + ->orderBy('name') + ->pluck('name', 'name') + ->all()) + ->searchable(), + SelectFilter::make('city') + ->options(fn (): array => City::query() + ->orderBy('name') + ->pluck('name', 'name') + ->all()) + ->searchable(), + TernaryFilter::make('is_featured')->label('Featured'), + Filter::make('created_at') + ->label('Created Date') + ->schema([ + DatePicker::make('from')->label('From'), + DatePicker::make('until')->label('Until'), + ]) + ->query(fn (Builder $query, array $data): Builder => $query + ->when($data['from'] ?? null, fn (Builder $query, string $date): Builder => $query->whereDate('created_at', '>=', $date)) + ->when($data['until'] ?? null, fn (Builder $query, string $date): Builder => $query->whereDate('created_at', '<=', $date))), + Filter::make('price') + ->label('Price Range') + ->schema([ + TextInput::make('min')->numeric()->label('Min'), + TextInput::make('max')->numeric()->label('Max'), + ]) + ->query(fn (Builder $query, array $data): Builder => $query + ->when($data['min'] ?? null, fn (Builder $query, string $amount): Builder => $query->where('price', '>=', (float) $amount)) + ->when($data['max'] ?? null, fn (Builder $query, string $amount): Builder => $query->where('price', '<=', (float) $amount))), ])->actions([ EditAction::make(), Action::make('activities') diff --git a/Modules/Admin/Filament/Resources/LocationResource.php b/Modules/Admin/Filament/Resources/LocationResource.php index b9b5d437c..de4cb56be 100644 --- a/Modules/Admin/Filament/Resources/LocationResource.php +++ b/Modules/Admin/Filament/Resources/LocationResource.php @@ -11,6 +11,7 @@ use Filament\Resources\Resource; use Filament\Schemas\Schema; use Filament\Tables\Columns\IconColumn; use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Filters\TernaryFilter; use Filament\Tables\Table; use Modules\Admin\Filament\Resources\LocationResource\Pages; use Modules\Location\Models\Country; @@ -22,6 +23,8 @@ class LocationResource extends Resource protected static string | BackedEnum | null $navigationIcon = 'heroicon-o-globe-alt'; protected static string | UnitEnum | null $navigationGroup = 'Settings'; protected static ?string $label = 'Country'; + protected static ?string $pluralLabel = 'Countries'; + protected static ?int $navigationSort = 2; public static function form(Schema $schema): Schema { @@ -38,9 +41,13 @@ class LocationResource extends Resource return $table->columns([ TextColumn::make('id')->sortable(), TextColumn::make('name')->searchable()->sortable(), - TextColumn::make('code'), + TextColumn::make('code')->searchable()->sortable(), TextColumn::make('phone_code'), + TextColumn::make('cities_count')->counts('cities')->label('Cities')->sortable(), IconColumn::make('is_active')->boolean(), + TextColumn::make('created_at')->dateTime()->sortable()->toggleable(isToggledHiddenByDefault: true), + ])->filters([ + TernaryFilter::make('is_active')->label('Active'), ])->actions([ EditAction::make(), Action::make('activities') diff --git a/Modules/Category/Policies/CategoryPolicy.php b/Modules/Category/Policies/CategoryPolicy.php deleted file mode 100644 index b8ca9cb74..000000000 --- a/Modules/Category/Policies/CategoryPolicy.php +++ /dev/null @@ -1,70 +0,0 @@ -can('ViewAny:Category'); - } - - public function view(AuthUser $authUser, Category $category): bool - { - return $authUser->can('View:Category'); - } - - public function create(AuthUser $authUser): bool - { - return $authUser->can('Create:Category'); - } - - public function update(AuthUser $authUser, Category $category): bool - { - return $authUser->can('Update:Category'); - } - - public function delete(AuthUser $authUser, Category $category): bool - { - return $authUser->can('Delete:Category'); - } - - public function restore(AuthUser $authUser, Category $category): bool - { - return $authUser->can('Restore:Category'); - } - - public function forceDelete(AuthUser $authUser, Category $category): bool - { - return $authUser->can('ForceDelete:Category'); - } - - public function forceDeleteAny(AuthUser $authUser): bool - { - return $authUser->can('ForceDeleteAny:Category'); - } - - public function restoreAny(AuthUser $authUser): bool - { - return $authUser->can('RestoreAny:Category'); - } - - public function replicate(AuthUser $authUser, Category $category): bool - { - return $authUser->can('Replicate:Category'); - } - - public function reorder(AuthUser $authUser): bool - { - return $authUser->can('Reorder:Category'); - } - -} \ No newline at end of file diff --git a/Modules/Listing/Http/Controllers/ListingController.php b/Modules/Listing/Http/Controllers/ListingController.php index 67d7a51ad..5ff7611ed 100644 --- a/Modules/Listing/Http/Controllers/ListingController.php +++ b/Modules/Listing/Http/Controllers/ListingController.php @@ -8,10 +8,23 @@ class ListingController extends Controller { public function index() { + $search = trim((string) request('search', '')); + $listings = Listing::query() ->publicFeed() - ->paginate(12); - return view('listing::index', compact('listings')); + ->when($search !== '', function ($query) use ($search): void { + $query->where(function ($searchQuery) use ($search): void { + $searchQuery + ->where('title', 'like', "%{$search}%") + ->orWhere('description', 'like', "%{$search}%") + ->orWhere('city', 'like', "%{$search}%") + ->orWhere('country', 'like', "%{$search}%"); + }); + }) + ->paginate(12) + ->withQueryString(); + + return view('listing::index', compact('listings', 'search')); } public function show(Listing $listing) diff --git a/Modules/Listing/Policies/ListingPolicy.php b/Modules/Listing/Policies/ListingPolicy.php deleted file mode 100644 index 9f21e044f..000000000 --- a/Modules/Listing/Policies/ListingPolicy.php +++ /dev/null @@ -1,70 +0,0 @@ -can('ViewAny:Listing'); - } - - public function view(AuthUser $authUser, Listing $listing): bool - { - return $authUser->can('View:Listing'); - } - - public function create(AuthUser $authUser): bool - { - return $authUser->can('Create:Listing'); - } - - public function update(AuthUser $authUser, Listing $listing): bool - { - return $authUser->can('Update:Listing'); - } - - public function delete(AuthUser $authUser, Listing $listing): bool - { - return $authUser->can('Delete:Listing'); - } - - public function restore(AuthUser $authUser, Listing $listing): bool - { - return $authUser->can('Restore:Listing'); - } - - public function forceDelete(AuthUser $authUser, Listing $listing): bool - { - return $authUser->can('ForceDelete:Listing'); - } - - public function forceDeleteAny(AuthUser $authUser): bool - { - return $authUser->can('ForceDeleteAny:Listing'); - } - - public function restoreAny(AuthUser $authUser): bool - { - return $authUser->can('RestoreAny:Listing'); - } - - public function replicate(AuthUser $authUser, Listing $listing): bool - { - return $authUser->can('Replicate:Listing'); - } - - public function reorder(AuthUser $authUser): bool - { - return $authUser->can('Reorder:Listing'); - } - -} \ No newline at end of file diff --git a/Modules/Location/Policies/CountryPolicy.php b/Modules/Location/Policies/CountryPolicy.php deleted file mode 100644 index 9478c17c7..000000000 --- a/Modules/Location/Policies/CountryPolicy.php +++ /dev/null @@ -1,70 +0,0 @@ -can('ViewAny:Country'); - } - - public function view(AuthUser $authUser, Country $country): bool - { - return $authUser->can('View:Country'); - } - - public function create(AuthUser $authUser): bool - { - return $authUser->can('Create:Country'); - } - - public function update(AuthUser $authUser, Country $country): bool - { - return $authUser->can('Update:Country'); - } - - public function delete(AuthUser $authUser, Country $country): bool - { - return $authUser->can('Delete:Country'); - } - - public function restore(AuthUser $authUser, Country $country): bool - { - return $authUser->can('Restore:Country'); - } - - public function forceDelete(AuthUser $authUser, Country $country): bool - { - return $authUser->can('ForceDelete:Country'); - } - - public function forceDeleteAny(AuthUser $authUser): bool - { - return $authUser->can('ForceDeleteAny:Country'); - } - - public function restoreAny(AuthUser $authUser): bool - { - return $authUser->can('RestoreAny:Country'); - } - - public function replicate(AuthUser $authUser, Country $country): bool - { - return $authUser->can('Replicate:Country'); - } - - public function reorder(AuthUser $authUser): bool - { - return $authUser->can('Reorder:Country'); - } - -} \ No newline at end of file diff --git a/app/Models/User.php b/app/Models/User.php index 42b5d0f48..439139757 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -46,10 +46,6 @@ class User extends Authenticatable implements FilamentUser, HasTenants, HasAvata public function canAccessPanel(Panel $panel): bool { - if ((string) $this->status !== 'active') { - return false; - } - return match ($panel->getId()) { 'admin' => $this->hasRole('admin'), 'partner' => true, diff --git a/app/Policies/CmsCategoryPolicy.php b/app/Policies/CmsCategoryPolicy.php deleted file mode 100644 index 241735ab6..000000000 --- a/app/Policies/CmsCategoryPolicy.php +++ /dev/null @@ -1,70 +0,0 @@ -can('ViewAny:CmsCategory'); - } - - public function view(AuthUser $authUser, CmsCategory $cmsCategory): bool - { - return $authUser->can('View:CmsCategory'); - } - - public function create(AuthUser $authUser): bool - { - return $authUser->can('Create:CmsCategory'); - } - - public function update(AuthUser $authUser, CmsCategory $cmsCategory): bool - { - return $authUser->can('Update:CmsCategory'); - } - - public function delete(AuthUser $authUser, CmsCategory $cmsCategory): bool - { - return $authUser->can('Delete:CmsCategory'); - } - - public function restore(AuthUser $authUser, CmsCategory $cmsCategory): bool - { - return $authUser->can('Restore:CmsCategory'); - } - - public function forceDelete(AuthUser $authUser, CmsCategory $cmsCategory): bool - { - return $authUser->can('ForceDelete:CmsCategory'); - } - - public function forceDeleteAny(AuthUser $authUser): bool - { - return $authUser->can('ForceDeleteAny:CmsCategory'); - } - - public function restoreAny(AuthUser $authUser): bool - { - return $authUser->can('RestoreAny:CmsCategory'); - } - - public function replicate(AuthUser $authUser, CmsCategory $cmsCategory): bool - { - return $authUser->can('Replicate:CmsCategory'); - } - - public function reorder(AuthUser $authUser): bool - { - return $authUser->can('Reorder:CmsCategory'); - } - -} \ No newline at end of file diff --git a/app/Policies/CmsCommentPolicy.php b/app/Policies/CmsCommentPolicy.php deleted file mode 100644 index bfd5c148c..000000000 --- a/app/Policies/CmsCommentPolicy.php +++ /dev/null @@ -1,70 +0,0 @@ -can('ViewAny:CmsComment'); - } - - public function view(AuthUser $authUser, CmsComment $cmsComment): bool - { - return $authUser->can('View:CmsComment'); - } - - public function create(AuthUser $authUser): bool - { - return $authUser->can('Create:CmsComment'); - } - - public function update(AuthUser $authUser, CmsComment $cmsComment): bool - { - return $authUser->can('Update:CmsComment'); - } - - public function delete(AuthUser $authUser, CmsComment $cmsComment): bool - { - return $authUser->can('Delete:CmsComment'); - } - - public function restore(AuthUser $authUser, CmsComment $cmsComment): bool - { - return $authUser->can('Restore:CmsComment'); - } - - public function forceDelete(AuthUser $authUser, CmsComment $cmsComment): bool - { - return $authUser->can('ForceDelete:CmsComment'); - } - - public function forceDeleteAny(AuthUser $authUser): bool - { - return $authUser->can('ForceDeleteAny:CmsComment'); - } - - public function restoreAny(AuthUser $authUser): bool - { - return $authUser->can('RestoreAny:CmsComment'); - } - - public function replicate(AuthUser $authUser, CmsComment $cmsComment): bool - { - return $authUser->can('Replicate:CmsComment'); - } - - public function reorder(AuthUser $authUser): bool - { - return $authUser->can('Reorder:CmsComment'); - } - -} \ No newline at end of file diff --git a/app/Policies/CmsPagePolicy.php b/app/Policies/CmsPagePolicy.php deleted file mode 100644 index 2c3f555f1..000000000 --- a/app/Policies/CmsPagePolicy.php +++ /dev/null @@ -1,70 +0,0 @@ -can('ViewAny:CmsPage'); - } - - public function view(AuthUser $authUser, CmsPage $cmsPage): bool - { - return $authUser->can('View:CmsPage'); - } - - public function create(AuthUser $authUser): bool - { - return $authUser->can('Create:CmsPage'); - } - - public function update(AuthUser $authUser, CmsPage $cmsPage): bool - { - return $authUser->can('Update:CmsPage'); - } - - public function delete(AuthUser $authUser, CmsPage $cmsPage): bool - { - return $authUser->can('Delete:CmsPage'); - } - - public function restore(AuthUser $authUser, CmsPage $cmsPage): bool - { - return $authUser->can('Restore:CmsPage'); - } - - public function forceDelete(AuthUser $authUser, CmsPage $cmsPage): bool - { - return $authUser->can('ForceDelete:CmsPage'); - } - - public function forceDeleteAny(AuthUser $authUser): bool - { - return $authUser->can('ForceDeleteAny:CmsPage'); - } - - public function restoreAny(AuthUser $authUser): bool - { - return $authUser->can('RestoreAny:CmsPage'); - } - - public function replicate(AuthUser $authUser, CmsPage $cmsPage): bool - { - return $authUser->can('Replicate:CmsPage'); - } - - public function reorder(AuthUser $authUser): bool - { - return $authUser->can('Reorder:CmsPage'); - } - -} \ No newline at end of file diff --git a/app/Policies/CmsPostPolicy.php b/app/Policies/CmsPostPolicy.php deleted file mode 100644 index 163b01fc3..000000000 --- a/app/Policies/CmsPostPolicy.php +++ /dev/null @@ -1,70 +0,0 @@ -can('ViewAny:CmsPost'); - } - - public function view(AuthUser $authUser, CmsPost $cmsPost): bool - { - return $authUser->can('View:CmsPost'); - } - - public function create(AuthUser $authUser): bool - { - return $authUser->can('Create:CmsPost'); - } - - public function update(AuthUser $authUser, CmsPost $cmsPost): bool - { - return $authUser->can('Update:CmsPost'); - } - - public function delete(AuthUser $authUser, CmsPost $cmsPost): bool - { - return $authUser->can('Delete:CmsPost'); - } - - public function restore(AuthUser $authUser, CmsPost $cmsPost): bool - { - return $authUser->can('Restore:CmsPost'); - } - - public function forceDelete(AuthUser $authUser, CmsPost $cmsPost): bool - { - return $authUser->can('ForceDelete:CmsPost'); - } - - public function forceDeleteAny(AuthUser $authUser): bool - { - return $authUser->can('ForceDeleteAny:CmsPost'); - } - - public function restoreAny(AuthUser $authUser): bool - { - return $authUser->can('RestoreAny:CmsPost'); - } - - public function replicate(AuthUser $authUser, CmsPost $cmsPost): bool - { - return $authUser->can('Replicate:CmsPost'); - } - - public function reorder(AuthUser $authUser): bool - { - return $authUser->can('Reorder:CmsPost'); - } - -} \ No newline at end of file diff --git a/app/Policies/MediaCollectionPolicy.php b/app/Policies/MediaCollectionPolicy.php deleted file mode 100644 index 6c34fa853..000000000 --- a/app/Policies/MediaCollectionPolicy.php +++ /dev/null @@ -1,70 +0,0 @@ -can('ViewAny:MediaCollection'); - } - - public function view(AuthUser $authUser, MediaCollection $mediaCollection): bool - { - return $authUser->can('View:MediaCollection'); - } - - public function create(AuthUser $authUser): bool - { - return $authUser->can('Create:MediaCollection'); - } - - public function update(AuthUser $authUser, MediaCollection $mediaCollection): bool - { - return $authUser->can('Update:MediaCollection'); - } - - public function delete(AuthUser $authUser, MediaCollection $mediaCollection): bool - { - return $authUser->can('Delete:MediaCollection'); - } - - public function restore(AuthUser $authUser, MediaCollection $mediaCollection): bool - { - return $authUser->can('Restore:MediaCollection'); - } - - public function forceDelete(AuthUser $authUser, MediaCollection $mediaCollection): bool - { - return $authUser->can('ForceDelete:MediaCollection'); - } - - public function forceDeleteAny(AuthUser $authUser): bool - { - return $authUser->can('ForceDeleteAny:MediaCollection'); - } - - public function restoreAny(AuthUser $authUser): bool - { - return $authUser->can('RestoreAny:MediaCollection'); - } - - public function replicate(AuthUser $authUser, MediaCollection $mediaCollection): bool - { - return $authUser->can('Replicate:MediaCollection'); - } - - public function reorder(AuthUser $authUser): bool - { - return $authUser->can('Reorder:MediaCollection'); - } - -} \ No newline at end of file diff --git a/app/Policies/RolePolicy.php b/app/Policies/RolePolicy.php deleted file mode 100644 index a2a3263ef..000000000 --- a/app/Policies/RolePolicy.php +++ /dev/null @@ -1,70 +0,0 @@ -can('ViewAny:Role'); - } - - public function view(AuthUser $authUser, Role $role): bool - { - return $authUser->can('View:Role'); - } - - public function create(AuthUser $authUser): bool - { - return $authUser->can('Create:Role'); - } - - public function update(AuthUser $authUser, Role $role): bool - { - return $authUser->can('Update:Role'); - } - - public function delete(AuthUser $authUser, Role $role): bool - { - return $authUser->can('Delete:Role'); - } - - public function restore(AuthUser $authUser, Role $role): bool - { - return $authUser->can('Restore:Role'); - } - - public function forceDelete(AuthUser $authUser, Role $role): bool - { - return $authUser->can('ForceDelete:Role'); - } - - public function forceDeleteAny(AuthUser $authUser): bool - { - return $authUser->can('ForceDeleteAny:Role'); - } - - public function restoreAny(AuthUser $authUser): bool - { - return $authUser->can('RestoreAny:Role'); - } - - public function replicate(AuthUser $authUser, Role $role): bool - { - return $authUser->can('Replicate:Role'); - } - - public function reorder(AuthUser $authUser): bool - { - return $authUser->can('Reorder:Role'); - } - -} \ No newline at end of file diff --git a/app/Policies/TallcmsContactSubmissionPolicy.php b/app/Policies/TallcmsContactSubmissionPolicy.php deleted file mode 100644 index 627faab3c..000000000 --- a/app/Policies/TallcmsContactSubmissionPolicy.php +++ /dev/null @@ -1,70 +0,0 @@ -can('ViewAny:TallcmsContactSubmission'); - } - - public function view(AuthUser $authUser, TallcmsContactSubmission $tallcmsContactSubmission): bool - { - return $authUser->can('View:TallcmsContactSubmission'); - } - - public function create(AuthUser $authUser): bool - { - return $authUser->can('Create:TallcmsContactSubmission'); - } - - public function update(AuthUser $authUser, TallcmsContactSubmission $tallcmsContactSubmission): bool - { - return $authUser->can('Update:TallcmsContactSubmission'); - } - - public function delete(AuthUser $authUser, TallcmsContactSubmission $tallcmsContactSubmission): bool - { - return $authUser->can('Delete:TallcmsContactSubmission'); - } - - public function restore(AuthUser $authUser, TallcmsContactSubmission $tallcmsContactSubmission): bool - { - return $authUser->can('Restore:TallcmsContactSubmission'); - } - - public function forceDelete(AuthUser $authUser, TallcmsContactSubmission $tallcmsContactSubmission): bool - { - return $authUser->can('ForceDelete:TallcmsContactSubmission'); - } - - public function forceDeleteAny(AuthUser $authUser): bool - { - return $authUser->can('ForceDeleteAny:TallcmsContactSubmission'); - } - - public function restoreAny(AuthUser $authUser): bool - { - return $authUser->can('RestoreAny:TallcmsContactSubmission'); - } - - public function replicate(AuthUser $authUser, TallcmsContactSubmission $tallcmsContactSubmission): bool - { - return $authUser->can('Replicate:TallcmsContactSubmission'); - } - - public function reorder(AuthUser $authUser): bool - { - return $authUser->can('Reorder:TallcmsContactSubmission'); - } - -} \ No newline at end of file diff --git a/app/Policies/TallcmsMediaPolicy.php b/app/Policies/TallcmsMediaPolicy.php deleted file mode 100644 index 509c12e15..000000000 --- a/app/Policies/TallcmsMediaPolicy.php +++ /dev/null @@ -1,70 +0,0 @@ -can('ViewAny:TallcmsMedia'); - } - - public function view(AuthUser $authUser, TallcmsMedia $tallcmsMedia): bool - { - return $authUser->can('View:TallcmsMedia'); - } - - public function create(AuthUser $authUser): bool - { - return $authUser->can('Create:TallcmsMedia'); - } - - public function update(AuthUser $authUser, TallcmsMedia $tallcmsMedia): bool - { - return $authUser->can('Update:TallcmsMedia'); - } - - public function delete(AuthUser $authUser, TallcmsMedia $tallcmsMedia): bool - { - return $authUser->can('Delete:TallcmsMedia'); - } - - public function restore(AuthUser $authUser, TallcmsMedia $tallcmsMedia): bool - { - return $authUser->can('Restore:TallcmsMedia'); - } - - public function forceDelete(AuthUser $authUser, TallcmsMedia $tallcmsMedia): bool - { - return $authUser->can('ForceDelete:TallcmsMedia'); - } - - public function forceDeleteAny(AuthUser $authUser): bool - { - return $authUser->can('ForceDeleteAny:TallcmsMedia'); - } - - public function restoreAny(AuthUser $authUser): bool - { - return $authUser->can('RestoreAny:TallcmsMedia'); - } - - public function replicate(AuthUser $authUser, TallcmsMedia $tallcmsMedia): bool - { - return $authUser->can('Replicate:TallcmsMedia'); - } - - public function reorder(AuthUser $authUser): bool - { - return $authUser->can('Reorder:TallcmsMedia'); - } - -} \ No newline at end of file diff --git a/app/Policies/TallcmsMenuPolicy.php b/app/Policies/TallcmsMenuPolicy.php deleted file mode 100644 index 464eadbf4..000000000 --- a/app/Policies/TallcmsMenuPolicy.php +++ /dev/null @@ -1,70 +0,0 @@ -can('ViewAny:TallcmsMenu'); - } - - public function view(AuthUser $authUser, TallcmsMenu $tallcmsMenu): bool - { - return $authUser->can('View:TallcmsMenu'); - } - - public function create(AuthUser $authUser): bool - { - return $authUser->can('Create:TallcmsMenu'); - } - - public function update(AuthUser $authUser, TallcmsMenu $tallcmsMenu): bool - { - return $authUser->can('Update:TallcmsMenu'); - } - - public function delete(AuthUser $authUser, TallcmsMenu $tallcmsMenu): bool - { - return $authUser->can('Delete:TallcmsMenu'); - } - - public function restore(AuthUser $authUser, TallcmsMenu $tallcmsMenu): bool - { - return $authUser->can('Restore:TallcmsMenu'); - } - - public function forceDelete(AuthUser $authUser, TallcmsMenu $tallcmsMenu): bool - { - return $authUser->can('ForceDelete:TallcmsMenu'); - } - - public function forceDeleteAny(AuthUser $authUser): bool - { - return $authUser->can('ForceDeleteAny:TallcmsMenu'); - } - - public function restoreAny(AuthUser $authUser): bool - { - return $authUser->can('RestoreAny:TallcmsMenu'); - } - - public function replicate(AuthUser $authUser, TallcmsMenu $tallcmsMenu): bool - { - return $authUser->can('Replicate:TallcmsMenu'); - } - - public function reorder(AuthUser $authUser): bool - { - return $authUser->can('Reorder:TallcmsMenu'); - } - -} \ No newline at end of file diff --git a/app/Policies/UserPolicy.php b/app/Policies/UserPolicy.php deleted file mode 100644 index 10cdce3e3..000000000 --- a/app/Policies/UserPolicy.php +++ /dev/null @@ -1,67 +0,0 @@ -can('ViewAny:User'); - } - - public function view(AuthUser $authUser): bool - { - return $authUser->can('View:User'); - } - - public function create(AuthUser $authUser): bool - { - return $authUser->can('Create:User'); - } - - public function update(AuthUser $authUser): bool - { - return $authUser->can('Update:User'); - } - - public function delete(AuthUser $authUser): bool - { - return $authUser->can('Delete:User'); - } - - public function restore(AuthUser $authUser): bool - { - return $authUser->can('Restore:User'); - } - - public function forceDelete(AuthUser $authUser): bool - { - return $authUser->can('ForceDelete:User'); - } - - public function forceDeleteAny(AuthUser $authUser): bool - { - return $authUser->can('ForceDeleteAny:User'); - } - - public function restoreAny(AuthUser $authUser): bool - { - return $authUser->can('RestoreAny:User'); - } - - public function replicate(AuthUser $authUser): bool - { - return $authUser->can('Replicate:User'); - } - - public function reorder(AuthUser $authUser): bool - { - return $authUser->can('Reorder:User'); - } - -} \ No newline at end of file diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 7befa18bc..861d4d2d9 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\Gate; use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Storage; @@ -23,6 +24,14 @@ class AppServiceProvider extends ServiceProvider public function boot(): void { + Gate::before(function ($user): null | bool { + if (method_exists($user, 'hasRole') && $user->hasRole('admin')) { + return true; + } + + return null; + }); + Route::pattern('tenant', '[0-9]+'); View::addNamespace('app', resource_path('views')); diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index 538a9f32b..446a120f4 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -1,95 +1,210 @@ @extends('app::layouts.app') @section('content') -
-
-

{{ __('messages.find_what_you_need') }}

-

{{ __('messages.hero_subtitle') }}

-
-
- - -
-
-
-
-
-
-
-
{{ $listingCount ?? 0 }}
Active Listings
-
{{ $categoryCount ?? 0 }}
Categories
-
{{ $userCount ?? 0 }}
Users
+@php + $menuCategories = $categories->take(8); + $heroListing = $featuredListings->first() ?? $recentListings->first(); + $heroImage = $heroListing?->getFirstMediaUrl('listing-images'); + $listingCards = $recentListings->take(6); + $trendGradients = [ + 'from-emerald-500 to-teal-600', + 'from-rose-500 to-pink-600', + 'from-fuchsia-500 to-rose-600', + 'from-sky-500 to-blue-600', + 'from-amber-500 to-orange-600', + 'from-cyan-500 to-indigo-600', + 'from-red-500 to-rose-600', + 'from-violet-500 to-purple-600', + ]; +@endphp + +
+
+ -
-
-
-

{{ __('messages.browse_categories') }}

-
- @foreach($categories as $category) - -
{{ $category->icon ?? '📦' }}
-
{{ $category->name }}
-
- @endforeach -
- -
-@if($featuredListings->count()) -
-
-

⭐ Featured Listings

-
- @foreach($featuredListings as $listing) -
-
- + + +
+
+
+
+
+

OpenClassify Marketplace

+

+ İlan ücreti ödemeden ürününü hızla sat! +

+

+ {{ __('messages.hero_subtitle') }} +

+ -
-

{{ $listing->title }}

-

{{ $listing->price ? number_format($listing->price, 0).' '.$listing->currency : 'Free' }}

-

{{ $listing->city }}

- View Details +
+ + + +
+
+
+
+
+

OpenClassify

+

Ürün, kategori, satıcı ara

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ @if($heroImage) + {{ $heroListing?->title }} + @else +
+ 🚗 +

Görsel eklendiğinde burada öne çıkan ilan yer alacak.

+
+ @endif +
+
+
+
+ +
+
+

Trend Kategoriler

+ Tümünü Gör +
+
+ @foreach($menuCategories as $index => $category) + +
+ {{ $category->icon ?? '📦' }} +
+
+

{{ $category->name }}

+
+
@endforeach
-
-
-@endif -
-
-

{{ __('messages.recent_listings') }}

- View all → -
-
- @foreach($recentListings as $listing) -
-
- -
-
-

{{ $listing->title }}

-

{{ $listing->price ? number_format($listing->price, 0).' '.$listing->currency : 'Free' }}

-
-

{{ $listing->city }}

-

{{ $listing->created_at->diffForHumans() }}

-
- View + + +
+
+

Popüler İkinci El İlanlar

+
- @endforeach -
-
-
-
-

{{ __('messages.sell_something') }}

-

Post your first listing for free!

- @auth - Post a Free Ad - @else - Get Started Free - @endauth -
+
+ @forelse($listingCards as $listing) + @php + $listingImage = $listing->getFirstMediaUrl('listing-images'); + $priceLabel = $listing->price ? number_format((float) $listing->price, 0).' '.$listing->currency : __('messages.free'); + $locationLabel = trim(collect([$listing->city, $listing->country])->filter()->join(', ')); + @endphp +
+
+ @if($listingImage) + {{ $listing->title }} + @else +
+ + + +
+ @endif +
+ @if($listing->is_featured) + Öne Çıkan + @endif + Büyük İlan +
+ +
+
+
+ Elden al, kartla öde! +
+
+
+

{{ $priceLabel }}

+

{{ $listing->title }}

+
+ 12 taksit +
+
+ {{ $locationLabel !== '' ? $locationLabel : 'Konum belirtilmedi' }} + {{ $listing->created_at->diffForHumans() }} +
+ + İlan detayını aç + + + + +
+
+ @empty +
+ Henüz ilan bulunmuyor. +
+ @endforelse +
+ + +
+
+
+

{{ __('messages.sell_something') }}

+

Dakikalar içinde ücretsiz ilan oluştur, binlerce alıcıya ulaş.

+
+ @auth + + Hemen İlan Ver + + @else + + Ücretsiz Başla + + @endauth +
+
@endsection diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 0486a862c..94f5ca7d3 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -10,12 +10,24 @@ $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; + $partnerCreateRoute = route('partner.listings.create'); $partnerDashboardRoute = auth()->check() ? route('filament.partner.pages.dashboard', ['tenant' => auth()->id()]) : $partnerLoginRoute; + $availableLocales = config('app.available_locales', ['en']); + $localeLabels = [ + 'en' => 'English', + 'tr' => 'Türkçe', + 'ar' => 'العربية', + 'zh' => '中文', + 'es' => 'Español', + 'fr' => 'Français', + 'de' => 'Deutsch', + 'pt' => 'Português', + 'ru' => 'Русский', + 'ja' => '日本語', + ]; + $isHomePage = request()->routeIs('home'); @endphp @@ -25,89 +37,184 @@ {{ $siteName }} @hasSection('title') - @yield('title') @endif - - + + - -