<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use App\Http\Requests; use App\Http\Requests\StoreUser; use App\User; use App\Group; class AdministrativeUserController extends Controller { public function __construct() { $this->middleware('auth'); } /** * * Common controller functions between administrators and moderator for handling users. * */ public function showUser(User $user) { $this->authorize('view', $user); if (Auth::user()->isAdministrator()) { $group = $user->group; return view("users.show", compact("group", "user")); } return view("users.show", compact("user")); } /** * * Function to show the view used for creating a user. * */ public function newUser() { $this->authorize('create', User::class); if (Auth::user()->isAdministrator()) { $groups = Group::all(); return view('users.new', compact('groups')); } return view('users.new'); } /** * * Function for adding a user. * */ public function addUser(StoreUser $request) { $this->authorize('create', User::class); $user = new User; $user->addUser($request->all()); $request->session()->flash('status', 'The user has been created'); return redirect("/" . Auth::user()->getAdminPath() . "/users/$user->id"); } /** * * Function to show view for editing a user. * */ public function editUser(User $user) { $this->authorize('update', $user); if (Auth::user()->isAdministrator()) { $groups = Group::all(); return view("users.edit", compact("groups", "user")); } return view("users.edit", compact("user")); } public function updateUser(User $user, StoreUser $request) { $this->authorize('update', $user); $user->updateUser($request->all()); $request->session()->flash('status', 'The user has been updated'); return redirect("/" . Auth::user()->getAdminPath() . "/users/group/$user->group_id"); } /** * * Function for reset a users password * */ public function resetUserPassword(User $user, Request $request) { $this->authorize('resetPassword', $user); $user->resetPassword(); $request->session()->flash('status', 'The password was successfully reset!'); return redirect("/" . Auth::user()->getAdminPath() . "/users/$user->id"); } public function deleteUser(User $user, Request $request) { $this->authorize('delete', $user); $user->deleteUser(); $request->session()->flash('status', 'The user has been deleted'); return redirect("/" . Auth::user()->getAdminPath() . '/users'); } }