From 44fd97418a0cb700263785c73112687a14fa6dfe Mon Sep 17 00:00:00 2001 From: Fady Mondy Date: Wed, 30 Oct 2024 18:11:03 +0300 Subject: [PATCH] =?UTF-8?q?first=20commit=20=F0=9F=94=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.json | 11 +++- .../2010_02_13_134649_create_metas_table.php | 42 +++++++++++++ ..._13_134649_create_accounts_metas_table.php | 43 ------------- resources/lang/ar/messages.php | 9 ++- resources/lang/en/messages.php | 9 ++- resources/views/table-columns/value.blade.php | 8 +++ src/Filament/Pages/.gitkeep | 0 .../RelationManager/MetaRelationManager.php | 59 ++++++++++++++++++ src/Filament/Resources/.gitkeep | 0 src/Filament/Widgets/.gitkeep | 0 src/FilamentMetaServiceProvider.php | 23 ++++--- src/Models/Meta.php | 60 +++++++++++++++++++ src/Traits/HasMeta.php | 43 +++++++++++++ 13 files changed, 251 insertions(+), 56 deletions(-) create mode 100644 database/migrations/2010_02_13_134649_create_metas_table.php delete mode 100644 database/migrations/2023_02_13_134649_create_accounts_metas_table.php create mode 100644 resources/views/table-columns/value.blade.php delete mode 100644 src/Filament/Pages/.gitkeep create mode 100644 src/Filament/RelationManager/MetaRelationManager.php delete mode 100644 src/Filament/Resources/.gitkeep delete mode 100644 src/Filament/Widgets/.gitkeep create mode 100644 src/Models/Meta.php create mode 100644 src/Traits/HasMeta.php diff --git a/composer.json b/composer.json index 2f667f5..812f6cc 100644 --- a/composer.json +++ b/composer.json @@ -5,7 +5,12 @@ "keywords": [ "php", "laravel", - "template" + "meta", + "filamentphp", + "model", + "relation", + "relation manager", + "pluggable model" ], "license": "MIT", "autoload": { @@ -48,7 +53,9 @@ }, "require": { "php": "^8.1|^8.2", - "tomatophp/console-helpers": "^1.1" + "tomatophp/console-helpers": "^1.1", + "filament/filament": "^3.2", + "genealabs/laravel-model-caching": "^11.0" }, "require-dev": { "laravel/pint": "^1.18", diff --git a/database/migrations/2010_02_13_134649_create_metas_table.php b/database/migrations/2010_02_13_134649_create_metas_table.php new file mode 100644 index 0000000..1906c19 --- /dev/null +++ b/database/migrations/2010_02_13_134649_create_metas_table.php @@ -0,0 +1,42 @@ +id(); + + $table->string('model_id'); + $table->string('model_type'); + + $table->string('connected_id')->nullable(); + $table->string('connected_type')->nullable(); + + $table->string('key')->index(); + $table->json('value')->nullable(); + + $table->timestamps(); + }); + + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('metas'); + } +}; diff --git a/database/migrations/2023_02_13_134649_create_accounts_metas_table.php b/database/migrations/2023_02_13_134649_create_accounts_metas_table.php deleted file mode 100644 index dba3048..0000000 --- a/database/migrations/2023_02_13_134649_create_accounts_metas_table.php +++ /dev/null @@ -1,43 +0,0 @@ -id(); - - $table->unsignedBigInteger('model_id')->nullable(); - $table->string('model_type')->nullable(); - - $table->foreignId('account_id')->references('id')->on('accounts')->onDelete('cascade'); - $table->string('key')->index(); - $table->json('value')->nullable(); - $table->timestamps(); - }); - } - - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - if(config('filament-accounts.features.meta')) { - Schema::dropIfExists('accounts_metas'); - } - } -}; diff --git a/resources/lang/ar/messages.php b/resources/lang/ar/messages.php index ca5d8ed..bdf423e 100644 --- a/resources/lang/ar/messages.php +++ b/resources/lang/ar/messages.php @@ -1,5 +1,12 @@ "المعلومات", + "single" => "معلومة", + "create" => "إضافة معلومة", + "columns" => [ + "model" => "النموذج", + "key" => "المفتاح", + "value" => "القيمة" + ], ]; diff --git a/resources/lang/en/messages.php b/resources/lang/en/messages.php index ca5d8ed..ee68c27 100644 --- a/resources/lang/en/messages.php +++ b/resources/lang/en/messages.php @@ -1,5 +1,12 @@ "Metas", + "single" => "Meta", + "create" => "Create Meta", + "columns" => [ + "model" => "Model", + "key" => "Key", + "value" => "Value" + ], ]; diff --git a/resources/views/table-columns/value.blade.php b/resources/views/table-columns/value.blade.php new file mode 100644 index 0000000..6da983e --- /dev/null +++ b/resources/views/table-columns/value.blade.php @@ -0,0 +1,8 @@ + + @if(is_array($getState())) + {{ json_encode($getState(), JSON_PRETTY_PRINT) }} + @else + {{ $getState() }} + @endif + + diff --git a/src/Filament/Pages/.gitkeep b/src/Filament/Pages/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/Filament/RelationManager/MetaRelationManager.php b/src/Filament/RelationManager/MetaRelationManager.php new file mode 100644 index 0000000..09f2e91 --- /dev/null +++ b/src/Filament/RelationManager/MetaRelationManager.php @@ -0,0 +1,59 @@ +schema([ + Forms\Components\TextInput::make('key') + ->label(trans('filament-meta::messages.columns.key')) + ->required() + ->maxLength(255), + Forms\Components\TextInput::make('value') + ->label(trans('filament-meta::messages.columns.value')) + ]); + } + + public function table(Table $table): Table + { + return $table + ->headerActions([ + CreateAction::make() + ]) + ->columns([ + Tables\Columns\TextColumn::make('key') + ->label(trans('filament-meta::messages.columns.key')) + ->sortable(), + Tables\Columns\TextColumn::make('value') + ->label(trans('filament-meta::messages.columns.value')) + ->view('filament-meta::table-columns.value') + ]) + ->headerActions([ + Tables\Actions\CreateAction::make() + ]) + ->filters([ + + ]) + ->actions([ + Tables\Actions\ViewAction::make(), + Tables\Actions\EditAction::make(), + Tables\Actions\DeleteAction::make(), + ]) + ->bulkActions([ + Tables\Actions\BulkActionGroup::make([ + Tables\Actions\DeleteBulkAction::make(), + ]), + ]); + } +} diff --git a/src/Filament/Resources/.gitkeep b/src/Filament/Resources/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/Filament/Widgets/.gitkeep b/src/Filament/Widgets/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/FilamentMetaServiceProvider.php b/src/FilamentMetaServiceProvider.php index c50bd5e..6667882 100644 --- a/src/FilamentMetaServiceProvider.php +++ b/src/FilamentMetaServiceProvider.php @@ -3,6 +3,8 @@ namespace TomatoPHP\FilamentMeta; use Illuminate\Support\ServiceProvider; +use Livewire\Livewire; +use TomatoPHP\FilamentMeta\Filament\RelationManager\MetaRelationManager; class FilamentMetaServiceProvider extends ServiceProvider @@ -13,41 +15,44 @@ public function register(): void $this->commands([ \TomatoPHP\FilamentMeta\Console\FilamentMetaInstall::class, ]); - + //Register Config file $this->mergeConfigFrom(__DIR__.'/../config/filament-meta.php', 'filament-meta'); - + //Publish Config $this->publishes([ __DIR__.'/../config/filament-meta.php' => config_path('filament-meta.php'), ], 'filament-meta-config'); - + //Register Migrations $this->loadMigrationsFrom(__DIR__.'/../database/migrations'); - + //Publish Migrations $this->publishes([ __DIR__.'/../database/migrations' => database_path('migrations'), ], 'filament-meta-migrations'); //Register views $this->loadViewsFrom(__DIR__.'/../resources/views', 'filament-meta'); - + //Publish Views $this->publishes([ __DIR__.'/../resources/views' => resource_path('views/vendor/filament-meta'), ], 'filament-meta-views'); - + //Register Langs $this->loadTranslationsFrom(__DIR__.'/../resources/lang', 'filament-meta'); - + //Publish Lang $this->publishes([ __DIR__.'/../resources/lang' => base_path('lang/vendor/filament-meta'), ], 'filament-meta-lang'); - + //Register Routes $this->loadRoutesFrom(__DIR__.'/../routes/web.php'); - + + + Livewire::component('tomato-p-h-p.filament-meta.filament.relation-manager.meta-relation-manage', MetaRelationManager::class); + } public function boot(): void diff --git a/src/Models/Meta.php b/src/Models/Meta.php new file mode 100644 index 0000000..d4aa857 --- /dev/null +++ b/src/Models/Meta.php @@ -0,0 +1,60 @@ + 'array', + ]; + + /** + * @return MorphTo + */ + public function model(): MorphTo + { + return $this->morphTo(); + } + + + /** + * @return MorphTo + */ + public function connected(): MorphTo + { + return $this->morphTo(); + } +} diff --git a/src/Traits/HasMeta.php b/src/Traits/HasMeta.php new file mode 100644 index 0000000..6a16d80 --- /dev/null +++ b/src/Traits/HasMeta.php @@ -0,0 +1,43 @@ +morphMany('TomatoPHP\FilamentMeta\Models\Meta', 'model'); + } + + + /** + * @param string $key + * @param mixed $value + * @return mixed + */ + public function meta(string $key, mixed $value=null): mixed + { + if($value!==null){ + if($value === 'null'){ + return $this->modelMeta()->updateOrCreate(['key' => $key], ['value' => null]); + } + else { + return $this->modelMeta()->updateOrCreate(['key' => $key], ['value' => $value]); + } + } + else { + $meta = $this->modelMeta()->where('key', $key)->first(); + if($meta){ + return $meta->value; + } + else { + return $this->modelMeta()->updateOrCreate(['key' => $key], ['value' => null]); + } + } + } +}