Skip to content
Open
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
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,65 @@
namespace App\Http\Backoffice\Handlers\GuestUsers;

use App\Http\Backoffice\Handlers\Handler;
use App\Http\Backoffice\Permission;
use App\Http\Backoffice\Requests\GuestUsers\GuestUserCreateRequest;
use App\Http\Kernel;
use Illuminate\Http\Request;
use Illuminate\Routing\Router;
use WorkshopBackoffice\Enumerables\Country;

class GuestUserCreateFormHandler extends Handler
{
public function __invoke()
{
// TODO: Implement __invoke() method.
$title = 'create user';

$form = $this->buildForm(
security()->url()->to(GuestUserCreateHandler::route()),
$title,
Request::METHOD_POST,
security()->url()->to(GuestUserListHandler::route()),
);

return view()->make('backoffice::create', [
'title' => $title,
'form' => $form,
]);
}

public static function defineRoute(Router $router): void
{
$backofficePrefix = config('backoffice.global_url_prefix');

$router->get("$backofficePrefix/guests/users/create", [
'uses' => self::class,
'permission' => Permission::GUEST_USER_CREATE,
])
->name(self::class)
->middleware([Kernel::BACKOFFICE_LISTING]);
}

public static function route(): string
{
return route(self::class);
}

public function buildForm(string $target, string $label, string $method, string $cancelAction = '', array $options = [])
{
$form = backoffice()->form($target, $label, $method, $cancelAction, $options);

$form->setSubmitLabel('add');
$inputs = $form->inputs();

$profileInputs = $inputs->collection();
$profileInputs->text(GuestUserCreateRequest::FIRST_NAME, 'First Name')->setRequired();
$profileInputs->text('lastName', 'Last Name')->setRequired();
$profileInputs->dropdown('country', 'country', Country::getAllValuesTranslated());
$profileInputs->textarea('description', 'description');
$profileInputs->date('birthday', 'birthday');

$inputs->composite('', $profileInputs)->changeView('backoffice::inputs.labeled-composite');

return $form;
}
}
27 changes: 24 additions & 3 deletions app/Http/Backoffice/Handlers/GuestUsers/GuestUserCreateHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,38 @@
namespace App\Http\Backoffice\Handlers\GuestUsers;

use App\Http\Backoffice\Handlers\Handler;
use App\Http\Backoffice\Permission;
use App\Http\Backoffice\Requests\GuestUsers\GuestUserCreateRequest;
use App\Http\Kernel;
use Illuminate\Routing\Router;
use WorkshopBackoffice\Services\GuestUserService;

class GuestUserCreateHandler extends Handler
{
public function __invoke()
public function __invoke(GuestUserCreateRequest $request, GuestUserService $service)
{
// TODO: Implement __invoke() method.
$request->validate();

$service->create($request);

return redirect()->to(GuestUserListHandler::route())
->with('success', 'user created');
}

public static function defineRoute(Router $router): void
{
// TODO: Implement defineRoute() method.
$backofficePrefix = config('backoffice.global_url_prefix');

$router->post("$backofficePrefix/guests/users/create", [
'uses' => self::class,
'permission' => Permission::GUEST_USER_CREATE,
])
->name(self::class)
->middleware([Kernel::BACKOFFICE_LISTING]);
}

public static function route(): string
{
return route(self::class);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,77 @@
namespace App\Http\Backoffice\Handlers\GuestUsers;

use App\Http\Backoffice\Handlers\Handler;
use App\Http\Backoffice\Permission;
use Illuminate\Http\Request;
use Illuminate\Routing\Router;
use Ramsey\Uuid\Uuid;
use WorkshopBackoffice\Enumerables\Country;
use WorkshopBackoffice\Services\GuestUserService;

class GuestUserEditFormHandler extends Handler
{
public function __invoke(string $id, GuestUserService $service)
{
$user = $service->find(Uuid::fromString($id));

$form = $this->buildForm(
url()->to(GuestUserEditHandler::route($user->getId())),
fa('plus') . ' edit user',
Request::METHOD_PUT,
url()->to(GuestUserListHandler::route()),
[
]
);

$form->fill([
'firstName' => $user->getName()->getFirstName(),
'lastName' => $user->getName()->getLastName(),
'country' => $user->getCountry()->getValue(),
'description' => $user->getDescription(),
'birthday' => $user->getBirthdate(),
]);

return view()->make('backoffice::edit', [
'title' => 'edit user',
'form' => $form,
]);
}

public static function defineRoute(Router $router): void
{
// TODO: Implement defineRoute() method.
$backofficePrefix = config('backoffice.global_url_prefix');

$router->get("$backofficePrefix/guests/users/{id}", [
'uses' => self::class,
'permission' => Permission::GUEST_USER_EDIT,
])
->name(self::class)
->middleware([\App\Http\Kernel::BACKOFFICE_LISTING]);
}

public static function route(string $id)
{
return route(static::class, [
'id' => $id,
]);
}

public function buildForm(string $target, string $label, string $method = 'POST', string $cancelAction = '', array $options = [])
{
$form = backoffice()->form($target, $label, $method, $cancelAction, $options);

$form->setSubmitLabel('edit');
$inputs = $form->inputs();

$profileInputs = $inputs->collection();
$profileInputs->text('firstName', 'First Name')->setRequired();
$profileInputs->text('lastName', 'Last Name')->setRequired();
$profileInputs->dropdown('country', 'country', Country::getAllValuesTranslated());
$profileInputs->textarea('description', 'description');
$profileInputs->date('birthday', 'birthday');

$inputs->composite('', $profileInputs)->changeView('backoffice::inputs.labeled-composite');

return $form;
}
}
26 changes: 23 additions & 3 deletions app/Http/Backoffice/Handlers/GuestUsers/GuestUserEditHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,37 @@
namespace App\Http\Backoffice\Handlers\GuestUsers;

use App\Http\Backoffice\Handlers\Handler;
use App\Http\Backoffice\Permission;
use App\Http\Backoffice\Requests\GuestUsers\GuestUserEditRequest;
use App\Http\Kernel;
use Illuminate\Routing\Router;
use WorkshopBackoffice\Services\GuestUserService;

class GuestUserEditHandler extends Handler
{
public function __invoke()
public function __invoke(GuestUserEditRequest $request, GuestUserService $service)
{
// TODO: Implement __invoke() method.
$service->update($request->id(), $request);

return redirect()->to(url()->to(GuestUserListHandler::route()))->with('success', 'user updated');
}

public static function defineRoute(Router $router): void
{
// TODO: Implement defineRoute() method.
$backofficePrefix = config('backoffice.global_url_prefix');

$router->put("$backofficePrefix/guests/users/{id}", [
'uses' => self::class,
'permission' => Permission::GUEST_USER_EDIT,
])
->name(self::class)
->middleware([Kernel::BACKOFFICE_LISTING]);
}

public static function route(\Ramsey\Uuid\UuidInterface $id): string
{
return route(static::class, [
'id' => $id,
]);
}
}
86 changes: 83 additions & 3 deletions app/Http/Backoffice/Handlers/GuestUsers/GuestUserListHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,38 @@
use App\Http\Backoffice\Handlers\Dashboard\DashboardHandler;
use App\Http\Backoffice\Handlers\Handler;
use App\Http\Backoffice\Permission;
use App\Http\Backoffice\Requests\GuestUsers\GuestUserListRequest;
use App\Http\Kernel;
use Digbang\Backoffice\Listings\Listing;
use Digbang\Backoffice\Support\Breadcrumb;
use Digbang\Security\Exceptions\SecurityException;
use Illuminate\Contracts\View\View;
use Illuminate\Support\Collection;
use WorkshopBackoffice\Entities\GuestUser;
use WorkshopBackoffice\Repositories\Criteria\GuestUsers\GuestUserFilter;
use WorkshopBackoffice\Repositories\Criteria\GuestUsers\GuestUserSorting;
use WorkshopBackoffice\Repositories\GuestUserRepository;

class GuestUserListHandler extends Handler
{
public function __invoke(): View
public function __invoke(GuestUserListRequest $request, GuestUserRepository $repository): View
{
$listing = $this->listing();

/** @var GuestUserFilter $filter */
$filter = $request->getFilter();

/** @var GuestUserSorting $sorting */
$sorting = $request->getSorting();

$data = $repository->filter($filter, $sorting, $request->getPaginationData()->getLimit(), $request->getPaginationData()->getOffset());

$listing->fill($data);
$this->buildListActions($listing, $request);

return view()->make('backoffice::index', [
'title' => trans('backoffice::auth.users'),
'list' => [],
'list' => $listing,
'breadcrumb' => $this->breadcrumb(),
]);
}
Expand All @@ -25,7 +46,7 @@ public static function defineRoute(\Illuminate\Routing\Router $router): void
$backofficePrefix = config('backoffice.global_url_prefix');

$router
->get("$backofficePrefix/guests/", [
->get("$backofficePrefix/guests/users", [
'uses' => self::class,
'permission' => Permission::GUEST_USER_LIST,
])
Expand All @@ -38,6 +59,65 @@ public static function route(): string
return route(self::class);
}

public function listing(): Listing
{
$listing = backoffice()->listing([
'firstName' => 'firstName',
'lastName' => 'lastName',
'country' => 'country',
'id',
]);

$listing->columns()
->hide(['id'])
->sortable(['firstName', 'lastName']);

$listing->addValueExtractor('firstName', function (GuestUser $user) {
return $user->getName()->getFirstName();
});

$listing->addValueExtractor('lastName', fn (GuestUser $user) => $user->getName()->getLastName());

$listing->addValueExtractor('country', fn (GuestUser $user) => $user->getCountry()->getValue());

$listing->addValueExtractor('id', fn (GuestUser $user) => $user->getId());

return $listing;
}

public function buildListActions(Listing $listing, GuestUserListRequest $request)
{
$actions = backoffice()->actions();

try {
$actions->link(
url()->to(GuestUserCreateFormHandler::route()),
fa('plus') . ' add user',
[
'class' => 'btn btn-primary',
]
);
} catch (SecurityException $exception) {
}

$listing->setActions($actions);

$rowActions = backoffice()->actions();

$rowActions->link(function (Collection $collection) {
try {
return url()->to(GuestUserEditFormHandler::route($collection->get('id')));
} catch (SecurityException $exception) {
}
}, fa('edit'), [
'data-toggle' => 'tooltip',
'data-placement' => 'top',
'title' => 'edit',
]);

$listing->setRowActions($rowActions);
}

private function breadcrumb(): Breadcrumb
{
return backoffice()->breadcrumb([
Expand Down
2 changes: 2 additions & 0 deletions app/Http/Backoffice/Permission.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,6 @@ final class Permission
public const GUEST_CATEGORY_DELETE = 'backoffice.guest_categories.delete';

public const GUEST_USER_LIST = 'backoffice.guest_users.list';
public const GUEST_USER_CREATE = 'backoffice.guest_users.create';
public const GUEST_USER_EDIT = 'backoffice.guest_users.edit';
}
Loading