Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions .github/workflows/test-runner.yml
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
name: Tests

on:
# Run testing on all push and pull requests for the main branch that have committed changes in PHP files
# Run testing on all push and pull requests that have committed changes in PHP files
push:
branches: [ "main" ]
paths:
- '**.php'
- '**/*.php'
pull_request:
branches: [ "main" ]
paths:
- '**.php'
- '**/*.php'
# Make it possible to run the workflow manually
workflow_dispatch:

Expand Down
9 changes: 3 additions & 6 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,11 @@
},
"require": {
"php": "^8.2",
"bezhansalleh/filament-shield": "^3.3",
"bezhansalleh/filament-shield": "^4.0",
"datalinx/php-utils": "^2.5",
"eclipsephp/common": "dev-main",
"filament/filament": "^3.3",
"filament/spatie-laravel-translatable-plugin": "^3.3",
"filament/filament": "^4.0",
"lara-zeus/spatie-translatable": "^1.0",
"laravel/framework": "^11.0|^12.0",
"spatie/laravel-package-tools": "^1.19",
"spatie/laravel-translatable": "^6.11"
Expand Down Expand Up @@ -88,8 +88,5 @@
"Eclipse\\World\\EclipseWorldServiceProvider"
]
}
},
"suggest": {
"tangodev-it/filament-emoji-picker": "Show a emoji picker for country flag input"
}
}
86 changes: 86 additions & 0 deletions config/filament-shield.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
<?php

return [
'shield_resource' => [
'slug' => 'shield/roles',
'show_model_path' => true,
'cluster' => null,
'tabs' => [
'pages' => true,
'widgets' => true,
'resources' => true,
'custom_permissions' => true,
],
],

'tenant_model' => \Eclipse\Core\Models\Site::class,

'auth_provider_model' => \Eclipse\Core\Models\User::class,

'super_admin' => [
'enabled' => true,
'name' => 'super_admin',
'define_via_gate' => false,
'intercept_gate' => 'before',
],

'panel_user' => [
'enabled' => true,
'name' => 'panel_user',
],

'permissions' => [
'separator' => '_',
'case' => 'lower_snake',
'generate' => true,
],

'policies' => [
'path' => app_path('Policies'),
'merge' => false,
'generate' => true,
'methods' => [
'viewAny', 'view', 'create', 'update', 'restore', 'restoreAny',
'replicate', 'reorder', 'delete', 'deleteAny', 'forceDelete', 'forceDeleteAny',
],
'single_parameter_methods' => [
'viewAny', 'create', 'deleteAny', 'forceDeleteAny', 'restoreAny', 'reorder',
],
],

'localization' => [
'enabled' => false,
'key' => 'filament-shield::filament-shield',
],

'resources' => [
'subject' => 'model',
'manage' => [],
'exclude' => [],
],

'pages' => [
'subject' => 'class',
'prefix' => 'view',
'exclude' => [
],
],

'widgets' => [
'subject' => 'class',
'prefix' => 'view',
'exclude' => [
],
],

'custom_permissions' => [
],

'discovery' => [
'discover_all_resources' => false,
'discover_all_widgets' => false,
'discover_all_pages' => false,
],

'register_role_policy' => true,
];
81 changes: 81 additions & 0 deletions src/EclipseWorldServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@
use Eclipse\World\Console\Commands\ImportCommand;
use Eclipse\World\Console\Commands\ImportPostsCommand;
use Eclipse\World\Console\Commands\ImportTariffCodesCommand;
use Eclipse\World\Filament\Resources\CountryResource;
use Eclipse\World\Filament\Resources\CurrencyResource;
use Eclipse\World\Filament\Resources\PostResource;
use Eclipse\World\Filament\Resources\RegionResource;
use Eclipse\World\Filament\Resources\TariffCodeResource;
use Spatie\LaravelPackageTools\Package;
use Spatie\LaravelPackageTools\PackageServiceProvider;

Expand All @@ -25,4 +30,80 @@ public function configurePackage(Package $package): void
->discoversMigrations()
->runsMigrations();
}

public function boot(): void
{
parent::boot();

// Merge per-resource abilities into the effective config
$this->app->booted(function () {
$manage = config('filament-shield.resources.manage', []);

$pluginManage = [
CountryResource::class => [
'viewAny',
'view',
'create',
'update',
'restore',
'restoreAny',
'delete',
'deleteAny',
'forceDelete',
'forceDeleteAny',
],
RegionResource::class => [
'viewAny',
'view',
'create',
'update',
'restore',
'restoreAny',
'delete',
'deleteAny',
'forceDelete',
'forceDeleteAny',
],
CurrencyResource::class => [
'viewAny',
'view',
'create',
'update',
'restore',
'restoreAny',
'delete',
'deleteAny',
'forceDelete',
'forceDeleteAny',
],
TariffCodeResource::class => [
'viewAny',
'view',
'create',
'update',
'restore',
'restoreAny',
'delete',
'deleteAny',
'forceDelete',
'forceDeleteAny',
],
PostResource::class => [
'viewAny',
'view',
'create',
'update',
'restore',
'restoreAny',
'delete',
'deleteAny',
'forceDelete',
'forceDeleteAny',
],
];

$manage = array_replace_recursive($manage, $pluginManage);
config()->set('filament-shield.resources.manage', $manage);
});
}
}
2 changes: 1 addition & 1 deletion src/Filament/Clusters/World.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

class World extends Cluster
{
protected static ?string $navigationIcon = 'heroicon-s-map';
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-s-map';

public static function getNavigationLabel(): string
{
Expand Down
68 changes: 28 additions & 40 deletions src/Filament/Clusters/World/Resources/CountryResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,46 +2,49 @@

namespace Eclipse\World\Filament\Clusters\World\Resources;

use BezhanSalleh\FilamentShield\Contracts\HasShieldPermissions;
use Closure;
use Eclipse\World\Filament\Clusters\World;
use Eclipse\World\Filament\Clusters\World\Resources\CountryResource\Pages;
use Eclipse\World\Filament\Clusters\World\Resources\CountryResource\Pages\ListCountries;
use Eclipse\World\Models\Country;
use Eclipse\World\Models\CountryInSpecialRegion;
use Eclipse\World\Models\Region;
use Filament\Actions\ActionGroup;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Actions\ForceDeleteAction;
use Filament\Actions\ForceDeleteBulkAction;
use Filament\Actions\RestoreAction;
use Filament\Actions\RestoreBulkAction;
use Filament\Forms\Components\DatePicker;
use Filament\Forms\Components\Repeater;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables\Actions\ActionGroup;
use Filament\Tables\Actions\BulkActionGroup;
use Filament\Tables\Actions\DeleteAction;
use Filament\Tables\Actions\DeleteBulkAction;
use Filament\Tables\Actions\EditAction;
use Filament\Tables\Actions\ForceDeleteAction;
use Filament\Tables\Actions\ForceDeleteBulkAction;
use Filament\Tables\Actions\RestoreAction;
use Filament\Tables\Actions\RestoreBulkAction;
use Filament\Schemas\Schema;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Filters\SelectFilter;
use Filament\Tables\Filters\TrashedFilter;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use TangoDevIt\FilamentEmojiPicker\EmojiPickerAction;

class CountryResource extends Resource implements HasShieldPermissions
class CountryResource extends Resource
{
protected static ?string $model = Country::class;

protected static ?string $slug = 'countries';

protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-rectangle-stack';

protected static ?string $cluster = World::class;

public static function form(Form $form): Form
public static function form(Schema $schema): Schema
{
return $form
->schema([
return $schema
->components([
TextInput::make('id')
->required()
->length(2)
Expand All @@ -57,7 +60,7 @@ public static function form(Form $form): Form
->label(__('eclipse-world::countries.form.flag.label'))
->suffixAction(function () {
if (class_exists('\TangoDevIt\FilamentEmojiPicker\EmojiPickerAction')) {
return \TangoDevIt\FilamentEmojiPicker\EmojiPickerAction::make('emoji-flag');
return EmojiPickerAction::make('emoji-flag');
}

return null;
Expand Down Expand Up @@ -98,7 +101,7 @@ public static function form(Form $form): Form
->label(__('eclipse-world::countries.form.special_regions.region_label'))
->rules([
function ($get) {
return function (string $attribute, $value, \Closure $fail) use ($get) {
return function (string $attribute, $value, Closure $fail) use ($get) {
if (! $value) {
return;
}
Expand All @@ -111,7 +114,7 @@ function ($get) {
}

// Check for any existing membership with same country and region
$query = \Eclipse\World\Models\CountryInSpecialRegion::where('country_id', $countryId)
$query = CountryInSpecialRegion::where('country_id', $countryId)
->where('region_id', $value);

// Exclude current record when editing
Expand All @@ -120,7 +123,7 @@ function ($get) {
}

if ($query->exists()) {
$regionName = \Eclipse\World\Models\Region::find($value)?->name ?? __('eclipse-world::countries.validation.unknown_region');
$regionName = Region::find($value)?->name ?? __('eclipse-world::countries.validation.unknown_region');
$fail(__('eclipse-world::countries.validation.duplicate_special_region_membership', [
'region' => $regionName,
]));
Expand Down Expand Up @@ -195,7 +198,7 @@ public static function table(Table $table): Table
SelectFilter::make('special_regions')
->label(__('eclipse-world::countries.filters.special_region.label'))
->options(function () {
return \Eclipse\World\Models\Region::where('is_special', true)
return Region::where('is_special', true)
->pluck('name', 'id')
->toArray();
})
Expand All @@ -217,7 +220,7 @@ public static function table(Table $table): Table
->preload(),
TrashedFilter::make(),
])
->actions([
->recordActions([
EditAction::make()
->label(__('eclipse-world::countries.actions.edit.label'))
->modalHeading(__('eclipse-world::countries.actions.edit.heading')),
Expand All @@ -236,7 +239,7 @@ public static function table(Table $table): Table
])),
]),
])
->bulkActions([
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make()
->label(__('eclipse-world::countries.actions.delete.label')),
Expand All @@ -251,7 +254,7 @@ public static function table(Table $table): Table
public static function getPages(): array
{
return [
'index' => Pages\ListCountries::route('/'),
'index' => ListCountries::route('/'),
];
}

Expand All @@ -263,21 +266,6 @@ public static function getEloquentQuery(): Builder
]);
}

public static function getPermissionPrefixes(): array
{
return [
'view_any',
'create',
'update',
'restore',
'restore_any',
'delete',
'delete_any',
'force_delete',
'force_delete_any',
];
}

public static function getNavigationLabel(): string
{
return __('eclipse-world::countries.nav_label');
Expand Down
Loading
Loading