HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers10/hours.komma.pro/app/Komma/Settings/Users/UserController.php
<?php

namespace App\Komma\Settings\users;

use App\Http\Controllers\Controller;
use App\Http\Requests\CreateUserRequest;
use App\Komma\ActivityLog\ActivityLogRepository;
use App\Komma\Messages\MessageController;
use App\Komma\Roles\Role;
use App\Mail\SetPasswordMail;
use Illuminate\Foundation\Auth\ResetsPasswords;
use Illuminate\Http\Request;
use App\Komma\Users\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\URL;

class UserController extends Controller
{
    use ResetsPasswords;
    private $messageController;
    private $activityLogRepository;

    public function __construct(MessageController $messageController, ActivityLogRepository $activityLogRepository)
    {
        $this->middleware('auth');
//        $this->middleware('permission:view_settings');
        $this->messageController = $messageController;
        $this->activityLogRepository = $activityLogRepository;
    }


    /**
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function index()
    {
        //get all roles
        $users = User::withTrashed()->with('Roles')->orderBy('deleted_at', 'asc')->orderBy('name', 'asc')->get();

        //return
        return view('settings.users.index', compact('users'));
    }


    /**
     * Create new user
     *
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function create()
    {
        $roles = Role::where('id', '>=', auth()->user()->Roles->first()->id)->get();

        //return
        return view('settings.users.register', ['roles' => $roles]);
    }

    /**
     * Store a new user
     *
     * @param  CreateUserRequest  $request
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
     */
    public function store(CreateUserRequest $request)
    {
        $user = User::create([
            'name' => $request->input('name'),
            'email' => $request->input('email'),
            'contract' => $request->input('contract'),
            'factTarget' => $request->input('factTarget'),
            'prodTarget' => $request->input('prodTarget'),
        ]);

        $user->Roles()->save(Role::find($request->input('role')));

        Mail::to($user->email)->send(new SetPasswordMail($user, URL::temporarySignedRoute('password.set-password', now()->addDays(7), ['user' => $user->id])));

        return redirect('/instellingen/users');
    }

    /**
     * Resend the set password mail
     *
     * @param  User  $user
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
     */
    public function resendSetPassword(User $user)
    {
        Mail::to($user->email)->send(new SetPasswordMail($user, URL::temporarySignedRoute('password.set-password', now()->addDays(7), ['user' => $user->id])));
        return redirect('/instellingen/users/' . $user->id. '/edit')->with('message', 'Wachtwoord instellen mail opnieuw verzonden.'); 
    }

    /**
     * @param $user
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function edit($user)
    {
        //find user
        $user = User::find($user);
        //get all roles without "projectleider"
        $roles = Role::where('name', '!=', 'project_leader')->select('id', 'label')->get();

        //return
        return view('settings.users.edit', compact('user', 'roles'));
    }

    /**
     * Update user
     *
     * @param  Request  $request
     * @param $user
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
     * @throws \Illuminate\Validation\ValidationException
     */
    public function update(Request $request, $user)
    {
        $this->validate($request, [
            'name' => 'required',
            'email' => 'required',
            'contract' => 'required',
            'role' => 'required',
        ]);

        \DB::transaction(function () use ($request, $user) {
            //update
            $getUser = User::find($user);
            $getUser->name = $request->name;
            $getUser->email = $request->email;
            $getUser->contract = $request->contract;
            $getUser->factTarget = $request->factTarget;
            $getUser->prodTarget = $request->prodTarget;
            $getUser->save();

            //sync role
            if (!empty($request->role)) $getUser->Roles()->sync((array)$request->role);

            //message + activity
            $this->messageController->changed("User", $getUser);
        });

        //return
        return redirect('/instellingen/users');
    }


    /**
     * @param $user
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
     */
    public function destroy($user)
    {
        //find user
        $user = User::find($user);

        //if is not this user
        if ($user->id == Auth::id()) return redirect('/instellingen/users')->with('message', 'Je kunt niet je eigen account archiveren!');

        \DB::transaction(function () use ($user) {
            //delete
            $user->delete();
            //message + activity
            $this->messageController->archived("User", $user);
        });

        //return
        return redirect('/instellingen/users');
    }


    /**
     * @param $taskTemplate
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
     */
    public function restore($user)
    {
        \DB::transaction(function () use ($user) {
            //restore user
            $user = User::withTrashed()->find($user);
            $user->restore();
            //message + activity
            $this->messageController->recovered("User", $user);
        });

        //return
        return redirect('/instellingen/users');
    }
}