From 37963ce30693b810070888fd237ae8bb2c8e01e7 Mon Sep 17 00:00:00 2001 From: qbinka Date: Sun, 22 Dec 2024 08:06:57 +0100 Subject: [PATCH] hotfix --- app/Filament/Resources/HelpdeskResource.php | 25 ++-- .../HelpdeskResource/Pages/CreateHelpdesk.php | 13 ++ .../HelpdeskResource/Pages/ListHelpdesks.php | 9 ++ app/Filament/Resources/PaymentResource.php | 19 ++- app/Filament/Resources/UserResource.php | 18 +-- .../Resources/UserResource/Pages/EditUser.php | 12 ++ app/Models/Helpdesk.php | 1 - app/Models/Message.php | 2 +- app/Models/User.php | 11 ++ composer.json | 1 + composer.lock | 111 +++++++++++++++++- .../resources/helpdesk/messages.blade.php | 40 ++++--- resources/views/layouts/app.blade.php | 1 + routes/web.php | 13 ++ 14 files changed, 220 insertions(+), 56 deletions(-) create mode 100644 resources/views/layouts/app.blade.php diff --git a/app/Filament/Resources/HelpdeskResource.php b/app/Filament/Resources/HelpdeskResource.php index fac41cc..b096eb5 100644 --- a/app/Filament/Resources/HelpdeskResource.php +++ b/app/Filament/Resources/HelpdeskResource.php @@ -12,6 +12,8 @@ use Filament\Forms\Components\TextInput; use Filament\Forms\Components\Select; use App\Filament\Resources\HelpdeskResource\RelationManagers\MessagesRelationManager; +use Filament\Forms\Components\Textarea; +use Filament\Forms\Components\Hidden; class HelpdeskResource extends Resource { @@ -25,25 +27,15 @@ public static function form(Form $form): Form { return $form ->schema([ - Select::make('user_id') - ->relationship('user', 'email') - ->required() - ->label('Użytkownik'), TextInput::make('title') ->label('Temat zgłoszenia') ->required(), - TextInput::make('ticket_id') - ->label('Numer zgłoszenia') - ->required(), - Select::make('status') - ->label('Status') - ->options([ - 'new' => 'Nowe', - 'waiting_for_support' => 'Oczekuje na helpdesk', - 'waiting_for_customer' => 'Oczekuje na klienta', - 'closed' => 'Zamknięte' - ]) - ->required(), + Hidden::make('user_id') + ->default(fn() => auth()->id()), + Hidden::make('status') + ->default('new'), + Hidden::make('ticket_id') + ->default('TIC-' . \Illuminate\Support\Str::random(8)) ]); } @@ -97,7 +89,6 @@ public static function getPages(): array ]; } - public static function getEloquentQuery(): \Illuminate\Database\Eloquent\Builder { $query = parent::getEloquentQuery(); diff --git a/app/Filament/Resources/HelpdeskResource/Pages/CreateHelpdesk.php b/app/Filament/Resources/HelpdeskResource/Pages/CreateHelpdesk.php index 749a5a0..d591935 100644 --- a/app/Filament/Resources/HelpdeskResource/Pages/CreateHelpdesk.php +++ b/app/Filament/Resources/HelpdeskResource/Pages/CreateHelpdesk.php @@ -4,8 +4,21 @@ use App\Filament\Resources\HelpdeskResource; use Filament\Resources\Pages\CreateRecord; +use Filament\Notifications\Notification; class CreateHelpdesk extends CreateRecord { protected static string $resource = HelpdeskResource::class; + + protected function afterCreate(): void + { + Notification::make() + ->success() + ->title('Utworzono zgłoszenie') + ->body('Kliknij na "Odpowiedz" by dodać pierwszą wiadomość') + ->persistent() + ->send(); + + $this->redirect($this->getResource()::getUrl('view', ['record' => $this->record])); + } } diff --git a/app/Filament/Resources/HelpdeskResource/Pages/ListHelpdesks.php b/app/Filament/Resources/HelpdeskResource/Pages/ListHelpdesks.php index a6d453f..55ee6d5 100644 --- a/app/Filament/Resources/HelpdeskResource/Pages/ListHelpdesks.php +++ b/app/Filament/Resources/HelpdeskResource/Pages/ListHelpdesks.php @@ -3,8 +3,17 @@ use App\Filament\Resources\HelpdeskResource; use Filament\Resources\Pages\ListRecords; +use Filament\Actions; class ListHelpdesks extends ListRecords { protected static string $resource = HelpdeskResource::class; + + protected function getHeaderActions(): array + { + return [ + Actions\CreateAction::make() + ->label('Nowe zgłoszenie') + ]; + } } diff --git a/app/Filament/Resources/PaymentResource.php b/app/Filament/Resources/PaymentResource.php index 7193a88..f9cd34b 100755 --- a/app/Filament/Resources/PaymentResource.php +++ b/app/Filament/Resources/PaymentResource.php @@ -60,12 +60,24 @@ public static function table(Table $table): Table TextColumn::make('received_at') ->label('Data wpłynięcia') ->dateTime('d.m.Y H:i') - ->sortable(), + ->sortable() + ->searchable(), + + TextColumn::make('user.name') + ->label('Imię i nazwisko') + ->visible(fn() => auth()->user()->isAdmin()) + ->searchable(), + + TextColumn::make('user.email') + ->label('Email') + ->visible(fn() => auth()->user()->isAdmin()) + ->searchable(), TextColumn::make('amount') ->label('Kwota') ->money('pln') - ->sortable(), + ->sortable() + ->searchable(), TextColumn::make('payment_type') ->label('Metoda płatności') @@ -98,8 +110,7 @@ public static function table(Table $table): Table Tables\Actions\DeleteBulkAction::make() ->label('Usuń zaznaczone'), ]), - ]); - } + ]); } public static function getPages(): array { diff --git a/app/Filament/Resources/UserResource.php b/app/Filament/Resources/UserResource.php index f08ee90..f6f6db2 100644 --- a/app/Filament/Resources/UserResource.php +++ b/app/Filament/Resources/UserResource.php @@ -15,6 +15,7 @@ use Filament\Forms\Components\Checkbox; use Filament\Forms\Components\Toggle; use App\Filament\Resources\UserResource\Pages; +use STS\FilamentImpersonate\Tables\Actions\Impersonate; class UserResource extends Resource { @@ -23,30 +24,21 @@ class UserResource extends Resource protected static ?string $navigationLabel = 'Użytkownicy'; protected static ?string $modelLabel = 'Użytkownik'; protected static ?string $pluralModelLabel = 'Użytkownicy'; - public static function table(Table $table): Table { return $table ->columns([ - TextColumn::make('name') - ->label('Nazwa') - ->searchable(), - TextColumn::make('email') - ->label('Email') - ->searchable(), + TextColumn::make('name')->label('Nazwa'), + TextColumn::make('email')->label('Email'), IconColumn::make('is_admin') ->boolean() ->label('Administrator'), ]) ->actions([ - Action::make('impersonate') - ->label('Zaloguj jako') - ->icon('heroicon-o-identification') - ->action(fn (User $user) => auth()->login($user)) - ->visible(fn () => auth()->user()->isAdmin()) + Impersonate::make(), ]); } - + public static function getNavigationGroup(): ?string { return 'Administracja'; diff --git a/app/Filament/Resources/UserResource/Pages/EditUser.php b/app/Filament/Resources/UserResource/Pages/EditUser.php index 8835591..6fcc62d 100644 --- a/app/Filament/Resources/UserResource/Pages/EditUser.php +++ b/app/Filament/Resources/UserResource/Pages/EditUser.php @@ -4,7 +4,19 @@ use App\Filament\Resources\UserResource; use Filament\Resources\Pages\EditRecord; +use STS\FilamentImpersonate\Pages\Actions\Impersonate; + class EditUser extends EditRecord { protected static string $resource = UserResource::class; + + protected function getActions(): array +{ + return [ + Impersonate::make()->record($this->getRecord()) + ]; +} } + + + diff --git a/app/Models/Helpdesk.php b/app/Models/Helpdesk.php index 3afc4b2..9f01053 100644 --- a/app/Models/Helpdesk.php +++ b/app/Models/Helpdesk.php @@ -10,7 +10,6 @@ class Helpdesk extends Model protected $fillable = [ 'title', - 'content', 'ticket_id', 'status', 'conversation' diff --git a/app/Models/Message.php b/app/Models/Message.php index c708f99..2e75532 100644 --- a/app/Models/Message.php +++ b/app/Models/Message.php @@ -9,7 +9,7 @@ class Message extends Model protected $fillable = [ 'subject_id', 'content', - 'direction', // incoming/outgoing + 'direction', 'email' ]; diff --git a/app/Models/User.php b/app/Models/User.php index 468389b..941b6b6 100755 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -71,4 +71,15 @@ public function isAdmin(): bool { return $this->is_admin; } + + +public function canImpersonate() +{ + return $this->isAdmin(); +} + +public function canBeImpersonated() +{ + return true; +} } \ No newline at end of file diff --git a/composer.json b/composer.json index 9637ac4..1cfe7ea 100755 --- a/composer.json +++ b/composer.json @@ -13,6 +13,7 @@ "filament/filament": "^3.2", "laravel/framework": "^11.9", "laravel/tinker": "^2.9", + "stechstudio/filament-impersonate": "^3.15", "webklex/laravel-imap": "^4.1" }, "require-dev": { diff --git a/composer.lock b/composer.lock index 7217edc..4bf1b4e 100755 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "081b1c2f8731a952482e373649785211", + "content-hash": "27cfd6677f12aabac74ef893dafd1cf7", "packages": [ { "name": "anourvalar/eloquent-serialize", @@ -2483,6 +2483,73 @@ }, "time": "2024-06-26T13:09:29+00:00" }, + { + "name": "lab404/laravel-impersonate", + "version": "1.7.5", + "source": { + "type": "git", + "url": "https://github.com/404labfr/laravel-impersonate.git", + "reference": "82cad73700a8699d63de169bb41abd5ae283e9a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/404labfr/laravel-impersonate/zipball/82cad73700a8699d63de169bb41abd5ae283e9a8", + "reference": "82cad73700a8699d63de169bb41abd5ae283e9a8", + "shasum": "" + }, + "require": { + "laravel/framework": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0", + "php": "^7.2 | ^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.3.3", + "orchestra/testbench": "^4.0 | ^5.0 | ^6.0 | ^7.0 | ^8.0 | ^9.0", + "phpunit/phpunit": "^7.5 | ^8.0 | ^9.0 | ^10.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Lab404\\Impersonate\\ImpersonateServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Lab404\\Impersonate\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marceau Casals", + "email": "marceau@casals.fr" + } + ], + "description": "Laravel Impersonate is a plugin that allows to you to authenticate as your users.", + "keywords": [ + "auth", + "impersonate", + "impersonation", + "laravel", + "laravel-package", + "laravel-plugin", + "package", + "plugin", + "user" + ], + "support": { + "issues": "https://github.com/404labfr/laravel-impersonate/issues", + "source": "https://github.com/404labfr/laravel-impersonate/tree/1.7.5" + }, + "time": "2024-03-11T14:26:14+00:00" + }, { "name": "laravel/framework", "version": "v11.20.0", @@ -5410,6 +5477,48 @@ ], "time": "2024-03-20T07:29:11+00:00" }, + { + "name": "stechstudio/filament-impersonate", + "version": "3.15", + "source": { + "type": "git", + "url": "https://github.com/stechstudio/filament-impersonate.git", + "reference": "1214583c9637bf941cc0ea0f260884c0fce65fe3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/stechstudio/filament-impersonate/zipball/1214583c9637bf941cc0ea0f260884c0fce65fe3", + "reference": "1214583c9637bf941cc0ea0f260884c0fce65fe3", + "shasum": "" + }, + "require": { + "filament/filament": "^3.0", + "lab404/laravel-impersonate": "^1.7" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "STS\\FilamentImpersonate\\FilamentImpersonateServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "STS\\FilamentImpersonate\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A Filament package to impersonate your users.", + "support": { + "issues": "https://github.com/stechstudio/filament-impersonate/issues", + "source": "https://github.com/stechstudio/filament-impersonate/tree/3.15" + }, + "time": "2024-12-03T17:20:46+00:00" + }, { "name": "swagger-api/swagger-ui", "version": "v5.18.2", diff --git a/resources/views/filament/resources/helpdesk/messages.blade.php b/resources/views/filament/resources/helpdesk/messages.blade.php index bc158f6..f96a9aa 100644 --- a/resources/views/filament/resources/helpdesk/messages.blade.php +++ b/resources/views/filament/resources/helpdesk/messages.blade.php @@ -1,23 +1,25 @@ -
-
-

Historia konwersacji

-
- -
- @foreach($messages as $message) -
-
-
- {{ $message->email }} -
-
- {{ $message->created_at->format('d.m.Y H:i') }} -
+
+ @foreach($messages as $message) +
$message->direction === 'incoming', + 'mr-12 bg-emerald-100 dark:bg-emerald-950/50' => $message->direction === 'outgoing', + ])> +
+
$message->direction === 'incoming', + 'text-emerald-700 dark:text-emerald-400' => $message->direction === 'outgoing', + ])> + {{ $message->email }}
-
- {{ $message->content }} +
+ {{ $message->created_at->format('d.m.Y H:i') }}
- @endforeach -
+
+ {{ $message->content }} +
+
+ @endforeach
diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php new file mode 100644 index 0000000..8cb8669 --- /dev/null +++ b/resources/views/layouts/app.blade.php @@ -0,0 +1 @@ + diff --git a/routes/web.php b/routes/web.php index 86a06c5..18f5887 100755 --- a/routes/web.php +++ b/routes/web.php @@ -1,7 +1,20 @@ group(function () { + Route::get('/impersonate/{user}', function (User $user) { + auth()->user()->impersonate($user); + return redirect('/admin'); + })->name('impersonate.start'); + + Route::get('/impersonate/stop', function () { + auth()->user()->leaveImpersonation(); + return redirect('/admin'); + })->name('impersonate.stop'); +});