File: D:/HostingSpaces/MdnDirecteur/hours.komma.cloud/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');
}
}