| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 | <?phpnamespace App\Http\Controllers\Admin;use App\Shop\Admins\Requests\CreateEmployeeRequest;use App\Shop\Admins\Requests\UpdateEmployeeRequest;use App\Shop\Employees\Repositories\EmployeeRepository;use App\Shop\Employees\Repositories\Interfaces\EmployeeRepositoryInterface;use App\Shop\Roles\Repositories\RoleRepositoryInterface;use App\Http\Controllers\Controller;use Illuminate\Support\Facades\Hash;class EmployeeController extends Controller{    /**     * @var EmployeeRepositoryInterface     */    private $employeeRepo;    /**     * @var RoleRepositoryInterface     */    private $roleRepo;    /**     * EmployeeController constructor.     *     * @param EmployeeRepositoryInterface $employeeRepository     * @param RoleRepositoryInterface $roleRepository     */    public function __construct(        EmployeeRepositoryInterface $employeeRepository,        RoleRepositoryInterface $roleRepository    ) {        $this->employeeRepo = $employeeRepository;        $this->roleRepo = $roleRepository;    }    /**     * Display a listing of the resource.     *     * @return \Illuminate\Http\Response     */    public function index()    {        $list = $this->employeeRepo->listEmployees('created_at', 'desc');        return view('admin.employees.list', [            'employees' => $this->employeeRepo->paginateArrayResults($list->all())        ]);    }    /**     * Show the form for creating a new resource.     *     * @return \Illuminate\Http\Response     */    public function create()    {        $roles = $this->roleRepo->listRoles();        return view('admin.employees.create', compact('roles'));    }    /**     * Store a newly created resource in storage.     *     * @param  CreateEmployeeRequest $request     *     * @return \Illuminate\Http\Response     */    public function store(CreateEmployeeRequest $request)    {        $employee = $this->employeeRepo->createEmployee($request->all());        if ($request->has('role')) {            $employeeRepo = new EmployeeRepository($employee);            $employeeRepo->syncRoles([$request->input('role')]);        }        return redirect()->route('admin.employees.index');    }    /**     * Display the specified resource.     *     * @param  int $id     *     * @return \Illuminate\Http\Response     */    public function show(int $id)    {        $employee = $this->employeeRepo->findEmployeeById($id);        return view('admin.employees.show', ['employee' => $employee]);    }    /**     * Show the form for editing the specified resource.     *     * @param  int $id     *     * @return \Illuminate\Http\Response     */    public function edit(int $id)    {        $employee = $this->employeeRepo->findEmployeeById($id);        $roles = $this->roleRepo->listRoles('created_at', 'desc');        $isCurrentUser = $this->employeeRepo->isAuthUser($employee);        return view(            'admin.employees.edit',            [                'employee' => $employee,                'roles' => $roles,                'isCurrentUser' => $isCurrentUser,                'selectedIds' => $employee->roles()->pluck('role_id')->all()            ]        );    }    /**     * Update the specified resource in storage.     *     * @param UpdateEmployeeRequest $request     * @param  int $id     *     * @return \Illuminate\Http\Response     */    public function update(UpdateEmployeeRequest $request, $id)    {        $employee = $this->employeeRepo->findEmployeeById($id);        $isCurrentUser = $this->employeeRepo->isAuthUser($employee);        $empRepo = new EmployeeRepository($employee);        $empRepo->updateEmployee($request->except('_token', '_method', 'password'));        if ($request->has('password') && !empty($request->input('password'))) {            $employee->password = Hash::make($request->input('password'));            $employee->save();        }        if ($request->has('roles') and !$isCurrentUser) {            $employee->roles()->sync($request->input('roles'));        } elseif (!$isCurrentUser) {            $employee->roles()->detach();        }        return redirect()->route('admin.employees.edit', $id)            ->with('message', 'Update successful');    }    /**     * Remove the specified resource from storage.     *     * @param  int $id     *     * @return \Illuminate\Http\Response     * @throws \Exception     */    public function destroy(int $id)    {        $employee = $this->employeeRepo->findEmployeeById($id);        $employeeRepo = new EmployeeRepository($employee);        $employeeRepo->deleteEmployee();        return redirect()->route('admin.employees.index')->with('message', 'Delete successful');    }    /**     * @param $id     *     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View     */    public function getProfile($id)    {        $employee = $this->employeeRepo->findEmployeeById($id);        return view('admin.employees.profile', ['employee' => $employee]);    }    /**     * @param UpdateEmployeeRequest $request     * @param $id     *     * @return \Illuminate\Http\RedirectResponse     */    public function updateProfile(UpdateEmployeeRequest $request, $id)    {        $employee = $this->employeeRepo->findEmployeeById($id);        $update = new EmployeeRepository($employee);        $update->updateEmployee($request->except('_token', '_method', 'password'));        if ($request->has('password') && $request->input('password') != '') {            $update->updateEmployee($request->only('password'));        }        return redirect()->route('admin.employee.profile', $id)            ->with('message', 'Update successful');    }}
 |