File: /var/www/ipsremont-demo/app/Http/Controllers/ConstructorController.php
<?php
namespace App\Http\Controllers;
use App\Http\Requests\Constructor\CopyRoleRequest;
use App\Http\Requests\Constructor\IndexRoleRequest;
use App\Http\Requests\Constructor\UpdateRoleRequest;
use App\Http\Requests\IdRequest;
use App\Models\Permission;
use App\Models\Role;
use App\Services\User\RoleService;
use Illuminate\Http\RedirectResponse;
use Illuminate\Contracts\View\Factory;
class ConstructorController extends Controller
{
/** @var string */
protected string $permission = Permission::constructor;
/**
* ConstructorController constructor.
*/
public function __construct()
{
parent::__construct();
$this->service = new RoleService();
}
public function index(IndexRoleRequest $request)
{
$data = $this->service->search($request);
$columns = Role::columns();
$usersRoute = [Role::service => 'services.index', Role::manager => 'users.index'];
$typeNames = Role::getEditableTypesNames();
return view('constructor.list', compact('data', 'columns', 'usersRoute', 'typeNames'));
}
public function copy(IdRequest $request)
{
$model = RoleService::getForConstructor($request->id);
$validate = new CopyRoleRequest();
$permissionsAvailable = RoleService::getPermissionsByType($model->type);
$rolePermissions = $model->permissions->pluck('id')->toArray();
return view('constructor.copy', compact( 'model', 'validate', 'permissionsAvailable', 'rolePermissions'));
}
/**
* Store a newly created resource in storage.
*
* @param CopyRoleRequest $request
* @return RedirectResponse
*/
public function store(CopyRoleRequest $request)
{
$this->service->save($request);
return redirect()->route('constructor.index')
->with(["messageSuccess" => __('roles.messageCreate')]);
}
/**
* Show the form for editing the specified resource.
*
* @param IdRequest $request
* @return Application|Factory|Response|View
*/
public function edit(IdRequest $request)
{
$model = RoleService::getForConstructor($request->id);
$validate = new UpdateRoleRequest();
$permissionsAvailable = RoleService::getPermissionsByType($model->type);
$rolePermissions = $model->permissions->pluck('id')->toArray();
return view('constructor.edit', compact('model', 'validate', 'permissionsAvailable', 'rolePermissions'));
}
/**
* Update the specified resource in storage.
*
* @param UpdateRoleRequest $request
* @return RedirectResponse
*/
public function update(UpdateRoleRequest $request)
{
$this->service->update($request);
return redirect()->route('constructor.index')
->with(["messageSuccess" => __('roles.messageUpdate')]);
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return RedirectResponse
*/
public function delete($id)
{
$this->service->delete($id);
return redirect()->route('constructor.index')->with(["messageSuccess" => __('roles.messageDelete')]);
}
}