Added User managment. Fixes #5
This commit is contained in:
parent
588364a202
commit
fc50a1400d
|
@ -0,0 +1,132 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Oxbow\Http\Controllers;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
use Illuminate\Support\Facades\Hash;
|
||||||
|
use Oxbow\Http\Requests;
|
||||||
|
use Oxbow\Http\Controllers\Controller;
|
||||||
|
use Oxbow\User;
|
||||||
|
|
||||||
|
class UserController extends Controller
|
||||||
|
{
|
||||||
|
|
||||||
|
protected $user;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UserController constructor.
|
||||||
|
* @param $user
|
||||||
|
*/
|
||||||
|
public function __construct(User $user)
|
||||||
|
{
|
||||||
|
$this->user = $user;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display a listing of the users.
|
||||||
|
*
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$users = $this->user->all();
|
||||||
|
return view('users/index', ['users'=> $users]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for creating a new user.
|
||||||
|
*
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return view('users/create');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store a newly created user in storage.
|
||||||
|
*
|
||||||
|
* @param Request $request
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function store(Request $request)
|
||||||
|
{
|
||||||
|
$this->validate($request, [
|
||||||
|
'name' => 'required',
|
||||||
|
'email' => 'required|email',
|
||||||
|
'password' => 'required|min:5',
|
||||||
|
'password-confirm' => 'required|same:password'
|
||||||
|
]);
|
||||||
|
|
||||||
|
$user = $this->user->fill($request->all());
|
||||||
|
$user->password = Hash::make($request->get('password'));
|
||||||
|
$user->save();
|
||||||
|
return redirect('/users');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for editing the specified user.
|
||||||
|
*
|
||||||
|
* @param int $id
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
$user = $this->user->findOrFail($id);
|
||||||
|
return view('users/edit', ['user' => $user]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the specified user in storage.
|
||||||
|
*
|
||||||
|
* @param Request $request
|
||||||
|
* @param int $id
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function update(Request $request, $id)
|
||||||
|
{
|
||||||
|
$this->validate($request, [
|
||||||
|
'name' => 'required',
|
||||||
|
'email' => 'required|email',
|
||||||
|
'password' => 'min:5',
|
||||||
|
'password-confirm' => 'same:password'
|
||||||
|
]);
|
||||||
|
|
||||||
|
$user = $this->user->findOrFail($id);
|
||||||
|
$user->fill($request->all());
|
||||||
|
|
||||||
|
if($request->has('password') && $request->get('password') != '') {
|
||||||
|
$password = $request->get('password');
|
||||||
|
$user->password = Hash::make($password);
|
||||||
|
}
|
||||||
|
$user->save();
|
||||||
|
return redirect('/users');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the user delete page.
|
||||||
|
* @param $id
|
||||||
|
* @return \Illuminate\View\View
|
||||||
|
*/
|
||||||
|
public function delete($id)
|
||||||
|
{
|
||||||
|
$user = $this->user->findOrFail($id);
|
||||||
|
return view('users/delete', ['user' => $user]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the specified user from storage.
|
||||||
|
*
|
||||||
|
* @param int $id
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function destroy($id)
|
||||||
|
{
|
||||||
|
$user = $this->user->findOrFail($id);
|
||||||
|
$user->delete();
|
||||||
|
return redirect('/users');
|
||||||
|
}
|
||||||
|
}
|
|
@ -18,7 +18,6 @@ class Authenticate
|
||||||
* Create a new filter instance.
|
* Create a new filter instance.
|
||||||
*
|
*
|
||||||
* @param Guard $auth
|
* @param Guard $auth
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public function __construct(Guard $auth)
|
public function __construct(Guard $auth)
|
||||||
{
|
{
|
||||||
|
|
|
@ -50,11 +50,24 @@ Route::group(['middleware' => 'auth'], function() {
|
||||||
|
|
||||||
Route::post('/upload/image', 'ImageController@upload');
|
Route::post('/upload/image', 'ImageController@upload');
|
||||||
|
|
||||||
|
// Users
|
||||||
|
Route::get('/users', 'UserController@index');
|
||||||
|
Route::get('/users/create', 'UserController@create');
|
||||||
|
Route::get('/users/{id}/delete', 'UserController@delete');
|
||||||
|
Route::post('/users/create', 'UserController@store');
|
||||||
|
Route::get('/users/{id}', 'UserController@edit');
|
||||||
|
Route::put('/users/{id}', 'UserController@update');
|
||||||
|
Route::delete('/users/{id}', 'UserController@destroy');
|
||||||
|
|
||||||
|
// Image routes
|
||||||
Route::get('/images/all', 'ImageController@getAll');
|
Route::get('/images/all', 'ImageController@getAll');
|
||||||
Route::get('/images/all/{page}', 'ImageController@getAll');
|
Route::get('/images/all/{page}', 'ImageController@getAll');
|
||||||
Route::get('/images/{any}', 'ImageController@getImage')->where('any', '.*');
|
Route::get('/images/{any}', 'ImageController@getImage')->where('any', '.*');
|
||||||
|
|
||||||
|
// Links
|
||||||
Route::get('/link/{id}', 'PageController@redirectFromLink');
|
Route::get('/link/{id}', 'PageController@redirectFromLink');
|
||||||
|
|
||||||
|
// Search
|
||||||
Route::get('/pages/search/all', 'PageController@searchAll');
|
Route::get('/pages/search/all', 'PageController@searchAll');
|
||||||
|
|
||||||
Route::get('/', function () {
|
Route::get('/', function () {
|
||||||
|
|
|
@ -43,6 +43,9 @@ $button-border-radius: 3px;
|
||||||
&.secondary {
|
&.secondary {
|
||||||
@include generate-button-colors(#EEE, $secondary);
|
@include generate-button-colors(#EEE, $secondary);
|
||||||
}
|
}
|
||||||
|
&.muted {
|
||||||
|
@include generate-button-colors(#EEE, #888);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.button-group {
|
.button-group {
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
|
||||||
|
table.table {
|
||||||
|
width: 100%;
|
||||||
|
tr {
|
||||||
|
border-bottom: 1px solid #DDD;
|
||||||
|
}
|
||||||
|
th, td {
|
||||||
|
text-align: left;
|
||||||
|
border: none;
|
||||||
|
padding: $-xs $-xs;
|
||||||
|
}
|
||||||
|
th {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
tr:hover {
|
||||||
|
background-color: #EEE;
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,6 +7,7 @@
|
||||||
@import "blocks";
|
@import "blocks";
|
||||||
@import "buttons";
|
@import "buttons";
|
||||||
@import "forms";
|
@import "forms";
|
||||||
|
@import "tables";
|
||||||
@import "tinymce";
|
@import "tinymce";
|
||||||
|
|
||||||
header {
|
header {
|
||||||
|
|
|
@ -46,6 +46,7 @@
|
||||||
</div>
|
</div>
|
||||||
<ul class="menu">
|
<ul class="menu">
|
||||||
<li><a href="/books"><i class="zmdi zmdi-book"></i>Books</a></li>
|
<li><a href="/books"><i class="zmdi zmdi-book"></i>Books</a></li>
|
||||||
|
<li><a href="/users"><i class="zmdi zmdi-accounts"></i>Users</a></li>
|
||||||
<li><a href="/logout"><i class="zmdi zmdi-run zmdi-hc-flip-horizontal"></i>Logout</a></li>
|
<li><a href="/logout"><i class="zmdi zmdi-run zmdi-hc-flip-horizontal"></i>Logout</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
@if(isset($book) && !isset($books))
|
@if(isset($book) && !isset($books))
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<input type="password" id="{{ $name }}" name="{{ $name }}"
|
<input type="password" id="{{ $name }}" name="{{ $name }}"
|
||||||
@if($errors->has($name)) class="neg" @endif
|
@if($errors->has($name)) class="neg" @endif
|
||||||
@if(isset($placeholder)) placeholder="{{$placeholder}}" @endif
|
@if(isset($placeholder)) placeholder="{{$placeholder}}" @endif
|
||||||
@if(isset($model) || old($name)) value="{{ old($name) ? old($name) : $model->$name}}" @endif>
|
@if(old($name)) value="{{ old($name)}}" @endif>
|
||||||
@if($errors->has($name))
|
@if($errors->has($name))
|
||||||
<div class="text-neg text-small">{{ $errors->first($name) }}</div>
|
<div class="text-neg text-small">{{ $errors->first($name) }}</div>
|
||||||
@endif
|
@endif
|
|
@ -0,0 +1,15 @@
|
||||||
|
@extends('base')
|
||||||
|
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
|
||||||
|
<div class="page-content">
|
||||||
|
<h1>Create User</h1>
|
||||||
|
|
||||||
|
<form action="/users/create" method="post">
|
||||||
|
{!! csrf_field() !!}
|
||||||
|
@include('users/form')
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@stop
|
|
@ -0,0 +1,22 @@
|
||||||
|
@extends('base')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
|
||||||
|
<div class="page-content">
|
||||||
|
<h1>Delete User</h1>
|
||||||
|
<p>This will fully delete this user with the name '<span class="text-neg">{{$user->name}}</span>' from the system.</p>
|
||||||
|
<p class="text-neg">Are you sure you want to delete this user?</p>
|
||||||
|
|
||||||
|
<form action="/users/{{$user->id}}" method="POST">
|
||||||
|
{!! csrf_field() !!}
|
||||||
|
<input type="hidden" name="_method" value="DELETE">
|
||||||
|
<a href="/user/{{$user->id}}" class="button muted">Cancel</a>
|
||||||
|
<button type="submit" class="button neg">Confirm</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@stop
|
||||||
|
|
||||||
|
@section('bottom')
|
||||||
|
@include('pages/image-manager')
|
||||||
|
@stop
|
|
@ -0,0 +1,25 @@
|
||||||
|
@extends('base')
|
||||||
|
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
|
||||||
|
<div class="row faded-small">
|
||||||
|
<div class="col-md-6"></div>
|
||||||
|
<div class="col-md-6 faded">
|
||||||
|
<div class="action-buttons">
|
||||||
|
<a href="/users/{{$user->id}}/delete" class="text-neg"><i class="zmdi zmdi-delete"></i>Delete User</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="page-content">
|
||||||
|
<h1>Edit User</h1>
|
||||||
|
|
||||||
|
<form action="/users/{{$user->id}}" method="post">
|
||||||
|
{!! csrf_field() !!}
|
||||||
|
<input type="hidden" name="_method" value="put">
|
||||||
|
@include('users/form', ['model' => $user])
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@stop
|
|
@ -0,0 +1,33 @@
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="name">Name</label>
|
||||||
|
@include('form/text', ['name' => 'name'])
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="email">Email</label>
|
||||||
|
@include('form/text', ['name' => 'email'])
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@if(isset($model))
|
||||||
|
<div class="form-group">
|
||||||
|
<span class="text-muted">
|
||||||
|
Only fill the below if you would like <br>to change your password:
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="password">Password</label>
|
||||||
|
@include('form/password', ['name' => 'password'])
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="password-confirm">Confirm Password</label>
|
||||||
|
@include('form/password', ['name' => 'password-confirm'])
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<a href="/users" class="button muted">Cancel</a>
|
||||||
|
<button class="button pos" type="submit">Save</button>
|
||||||
|
</div>
|
|
@ -0,0 +1,33 @@
|
||||||
|
@extends('base')
|
||||||
|
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
|
||||||
|
|
||||||
|
<div class="row faded-small">
|
||||||
|
<div class="col-md-6"></div>
|
||||||
|
<div class="col-md-6 faded">
|
||||||
|
<div class="action-buttons">
|
||||||
|
<a href="/users/create" class="text-pos"><i class="zmdi zmdi-account-add"></i>New User</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page-content">
|
||||||
|
<h1>Users</h1>
|
||||||
|
<table class="table">
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Email</th>
|
||||||
|
</tr>
|
||||||
|
@foreach($users as $user)
|
||||||
|
<tr>
|
||||||
|
<td><a href="/users/{{$user->id}}">{{$user->name}}</a></td>
|
||||||
|
<td>{{$user->email}}</td>
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@stop
|
Loading…
Reference in New Issue