Added validation to site with barebones error reporting to users

This commit is contained in:
mwalbeck 2016-10-22 17:22:26 +02:00
parent 7af12d0f5b
commit 71c79d3b2a
17 changed files with 221 additions and 29 deletions

View file

@ -5,6 +5,7 @@ namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Requests\StoreGroup;
use App\Group;
class GroupController extends Controller
@ -25,10 +26,10 @@ class GroupController extends Controller
return view('groups.new');
}
public function addGroup()
public function addGroup(StoreGroup $request)
{
$group = new Group;
$group->addGroup(request()->all());
$group->addGroup($request->all());
return redirect('/admin/groups');
}
@ -37,9 +38,9 @@ class GroupController extends Controller
return view('groups.edit', compact('group'));
}
public function updateGroup(Group $group)
public function updateGroup(Group $group, StoreGroup $request)
{
$group->updateGroup(request()->all());
$group->updateGroup($request->all());
return redirect("/admin/groups");
}

View file

@ -41,17 +41,24 @@ class HomeController extends Controller
return view('users.settings', compact('user'));
}
public function updatePassword()
public function updatePassword(Request $request)
{
$this->validate($request, [
"password1_new" => "required|string|alpha_dash|min:8",
"password2_new" => "required|string|alpha_dash|min:8"
]);
$user = Auth::user();
$user->updatePassword(request()->all());
$user->updatePassword($request->all());
return redirect('/settings');
}
public function updateEmail()
public function updateEmail(Request $request)
{
$this->validate($request, [
"email" => "required|email"
]);
$user = Auth::user();
$user->updateEmail(request()->all());
$user->updateEmail($request->all());
return redirect('/settings');
}
}

View file

@ -11,6 +11,7 @@ use App\Question;
use App\Option;
use App\Group;
use App\Http\Requests\StoreTest;
use App\Http\Requests\StoreQuestion;
class TestController extends Controller
{
@ -40,13 +41,13 @@ class TestController extends Controller
return view('tests.index', compact('question'), compact('options'));
}
public function answerQuestion()
public function answerQuestion(Request $request)
{
$question = session('questions')->get(session('question_counter')-1);
$options = session('options');
$answers = collect([]);
foreach ($options as $option) {
if (array_key_exists("answer{$option->id}", request()->all())) {
if (array_key_exists("answer{$option->id}", $request->all())) {
$answers->push($option);
}
}
@ -201,7 +202,7 @@ class TestController extends Controller
return view('tests.edit', compact('test'));
}
public function addQuestion(Test $test, Request $request)
public function addQuestion(Test $test, StoreQuestion $request)
{
$question = new Question;
$question->addQuestion($test, $request);
@ -216,7 +217,7 @@ class TestController extends Controller
return redirect("/admin/tests/$test->id");
}
public function updateQuestion(Question $question, Request $request)
public function updateQuestion(Question $question, StoreQuestion $request)
{
$test = $question->test;
$question->updateQuestion($request);

View file

@ -5,6 +5,7 @@ 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;
@ -31,10 +32,10 @@ class UserController extends Controller
return redirect('/admin/users');
}
public function addUser()
public function addUser(StoreUser $request)
{
$user = new User;
$user->addUser(request()->all());
$user->addUser($request->all());
return redirect('/admin/users');
}

View file

@ -0,0 +1,39 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class StoreGroup extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
if (Auth::user()->isAdministrator()) {
return true;
}
if (Auth::user()->isModerator()) {
return true;
}
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
"name" => "required|string|alpha_dash|max:255",
"enabled" => "boolean"
];
}
}

View file

@ -0,0 +1,40 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class StoreOptions extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
if (Auth::user()->isAdministrator()) {
return true;
}
if (Auth::user()->isModerator()) {
return true;
}
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
"question_id" => "required|integer|exists:questions,id|min:1",
"option" => "required|string|alpha_dash|max:255",
"correct_answer" => "boolean"
];
}
}

View file

@ -0,0 +1,43 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class StoreQuestion extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
if (Auth::user()->isAdministrator()) {
return true;
}
if (Auth::user()->isModerator()) {
return true;
}
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
"test_id" => "integer|exists:tests,id|min:1",
"title" => "required|string|alpha_dash|max:255",
"question" => "required|string|alpha_dash",
"question_type" => "string|in:radio,checkbox|max:255",
"correct_answers" => "integer|min:1",
"multiple_anwsers_question" => "boolean"
];
}
}

View file

@ -32,11 +32,11 @@ class StoreTest extends FormRequest
public function rules()
{
return [
"title" => "required|max:255|string",
"question_count" => "required|numeric",
"question_count_to_fail" => "numeric",
"time_limit" => "numeric",
"group_id" => "numeric"
"title" => "required|string|alpha_dash|max:255",
"question_count" => "required|integer|min:1",
"question_count_to_fail" => "integer|min:0",
"time_limit" => "integer|min:0",
"group_id" => "integer|exists:groups,id|min:1"
];
}
}

View file

@ -3,6 +3,7 @@
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class StoreUser extends FormRequest
{
@ -13,6 +14,13 @@ class StoreUser extends FormRequest
*/
public function authorize()
{
if (Auth::user()->isAdministrator()) {
return true;
}
if (Auth::user()->isModerator()) {
return true;
}
return false;
}
@ -24,7 +32,12 @@ class StoreUser extends FormRequest
public function rules()
{
return [
//
"name" => "required|string|alpha_dash|max:255",
"email" => "required|email|unique:users,email|max:255",
"password" => "required|alpha_dash|min:8",
"group_id" => "integer|exists:groups,id|min:1",
"enabled" => "required|boolean",
"access_level" => "integer|min:1",
];
}
}

View file

@ -65,7 +65,7 @@ class Question extends Model
$test->questions()->save($this);
}
public function updateQuestion($request)
public function updateQuestion(Request $request)
{
$this->title = $request->title;
$this->question = $request->question;

View file

@ -47,7 +47,7 @@ class Test extends Model
return false;
}
public function createTest(Request $request)
public function createTest($request)
{
$this->title = $request["title"];
$this->question_count = $request["question_count"];
@ -64,7 +64,7 @@ class Test extends Model
return true;
}
public function updateTest(Request $request)
public function updateTest($request)
{
$this->update($request);
}

View file

@ -52,7 +52,7 @@ class User extends Authenticatable
public function passwordCompare($password1, $password2)
{
return $password1 == $password2;
return $password1 === $password2;
}
public function passwordVerify($password, $hash)
@ -62,7 +62,7 @@ class User extends Authenticatable
public function isModerator()
{
if ($this->access_level == 2) {
if ($this->access_level === 2) {
return true;
}
return false;
@ -70,7 +70,7 @@ class User extends Authenticatable
public function isAdministrator()
{
if ($this->access_level == 3) {
if ($this->access_level === 3) {
return true;
}
return false;
@ -86,7 +86,9 @@ class User extends Authenticatable
$this->name = $request["name"];
$this->email = $request["email"];
$this->passwordHash($request["password"]);
$this->enabled = $request["enabled"];
if ($request["enabled"]) {
$this->enabled = $request["enabled"];
}
if (Auth::user()->isModerator()) {
Group::find(Auth::user()->group_id)->tests()->save($this);
return true;

View file

@ -3,6 +3,15 @@
@section('content')
<div class="container-fluid">
<div class="col-md-6 col-md-offset-3">
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<h1>Edit Test: {{ $test->title }}</h1>
</br>
<form method="POST" action="/{{ Auth::user()->getAdminPath() }}/tests/{{ $test->id }}/edit">

View file

@ -4,6 +4,15 @@
<div class="container-fluid">
<div class="col-md-6 col-md-offset-3">
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<h1>Edit Question</h1>
</br>
<form method="POST" action="/{{ Auth::user()->getAdminPath() }}/questions/{{ $question->id }}">

View file

@ -3,6 +3,15 @@
@section('content')
<div class="container-fluid">
<div class="col-md-6 col-md-offset-3">
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<h1>Question {{ $question_number }}</h1>
</br>
<form method="POST" action="/{{ Auth::user()->getAdminPath() }}/tests/{{ $test->id }}/question">

View file

@ -3,9 +3,18 @@
@section('content')
<div class="container-fluid">
<div class="col-md-6 col-md-offset-3">
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<h1>Create New User</h1>
</br>
<form method="POST" action="//users/new">
<form method="POST" action="/{{ Auth::user()->getAdminPath() }}/users/new">
{{ csrf_field() }}
<div class="form-group">
<label>Name</label>
@ -21,7 +30,7 @@
</div>
<div class="form-group">
<label>Enabled</label>
<select class="form-control">
<select name="enabled" class="form-control">
<option value="1">Yes</option>
<option value="0">No</option>
</select>

View file

@ -4,6 +4,15 @@
<div class="container-fluid">
<div class="row">
<div class="col-md-6 col-md-offset-3">
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="panel panel-default">
<div class="panel-heading">Password</div>
<div class="panel-body">