diff --git a/app/Http/Controllers/User/UserAttendancesController.php b/app/Http/Controllers/User/UserAttendancesController.php
index 9ad92bc..93b24af 100644
--- a/app/Http/Controllers/User/UserAttendancesController.php
+++ b/app/Http/Controllers/User/UserAttendancesController.php
@@ -7,6 +7,7 @@ use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Exports\AttendanceExportView;
use App\Exports\AttendanceGroupedExportView;
+use Illuminate\Support\Facades\Validator;
use Maatwebsite\Excel\Facades\Excel;
use App\Subject;
@@ -15,6 +16,26 @@ use App\Attendance;
class UserAttendancesController extends Controller
{
+
+ protected function validator(array $data)
+ {
+ $messages = [
+ 'student_id.required' => 'Numer indeksu jest wymagany.',
+ 'student_name.required' => 'Imię jest wymagane.',
+ 'student_surname.required' => 'Nazwisko jest wymagane.',
+ 'classes_id.required' => 'Wskazanie zajęć jest wymagane.',
+ 'classes_id.exists' => 'Niepoprawne zajęcia.',
+ ];
+
+ $rules = [
+ 'classes_id' => ['required', 'exists:classes,id'],
+ 'student_id' => ['required'],
+ 'student_name' => ['required'],
+ 'student_surname' => ['required'],
+ ];
+ return Validator::make($data, $rules, $messages);
+ }
+
public function index($groupBy='classes_id')
{
$user_id = Auth::id();
@@ -29,19 +50,32 @@ class UserAttendancesController extends Controller
public function add_attendance(Request $request)
{
+ $validator = $this->validator($request->all());
+ if ($validator->fails()) {
+ return redirect()->back()
+ ->withErrors($validator)
+ ->withInput();
+ }
$classes_id = $request->input('classes_id');
$student_id_number = $request->input('student_id');
$student_name = $request->input('student_name');
$student_surname = $request->input('student_surname');
$seat_number = $request->input('seat_number');
$note = $request->input('note');
+ $attendances = Attendance::where('classes_id', $classes_id)->get();
+ $student_ids = $attendances->pluck('student_id_number')->toArray();
+
+ if (in_array($student_id_number, $student_ids)) { // if student attendance record already exists
+ return redirect()->back()
+ ->withErrors(['Ten numer indeksu został już wcześniej zapisany na te zajęcia.']);
+ }
Attendance::create([
- 'classes_id' => $classes_id,
- 'student_id_number' => $student_id_number,
- 'student_name' => $student_name,
- 'student_surname' => $student_surname,
- 'seat_number' => $seat_number,
- 'notes' => $note
+ 'classes_id' => $classes_id,
+ 'student_id_number' => $student_id_number,
+ 'student_name' => $student_name,
+ 'student_surname' => $student_surname,
+ 'seat_number' => $seat_number,
+ 'notes' => $note
]);
return redirect()->back();
}
diff --git a/app/Http/Controllers/User/UserClassesController.php b/app/Http/Controllers/User/UserClassesController.php
index 0230cc7..c6779fe 100644
--- a/app/Http/Controllers/User/UserClassesController.php
+++ b/app/Http/Controllers/User/UserClassesController.php
@@ -12,9 +12,45 @@ use App\Classes;
use App\Room;
use Illuminate\Support\Facades\Auth;
-use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Validator;
+use Illuminate\Validation\Rule;
class UserClassesController extends Controller {
+
+ protected function validator(array $data)
+ {
+ $messages = [
+ 'subject_id.required' => 'Wskazanie przedmiotu jest wymagane.',
+ 'subject_id.exists' => 'Wybrany przedmiot jest niepoprawny.',
+ 'date.required' => 'Data jest wymagana.',
+ 'date.date' => 'Niepoprawny format daty.',
+ 'mode.in' => 'Tryb zajęć jest niepoprawny.'
+ ];
+
+ $rules = [
+ 'subject_id' => ['required', 'exists:subjects,id'],
+ 'date' => ['required', 'date'],
+ 'mode' => Rule::in([null, 'test', 'quick'])
+ ];
+ return Validator::make($data, $rules, $messages);
+ }
+
+ protected function student_validator(array $data)
+ {
+ $messages = [
+ 'student_id_number.required' => 'Numer indeksu jest wymagany.',
+ 'student_name.required' => 'Imię jest wymagane.',
+ 'student_surname.required' => 'Nazwisko jest wymagane.',
+ ];
+
+ $rules = [
+ 'student_id_number' => ['required'],
+ 'student_name' => ['required'],
+ 'student_surname' => ['required'],
+ ];
+ return Validator::make($data, $rules, $messages);
+ }
+
public function index($groupBy = 'subject_id') {
$user_id = Auth::id();
$subjects = Subject::where('user_id', $user_id)->get();
@@ -36,6 +72,12 @@ class UserClassesController extends Controller {
}
public function add_classes(Request $request) {
+ $validator = $this->validator($request->all());
+ if ($validator->fails()) {
+ return redirect()->back()
+ ->withErrors($validator)
+ ->withInput();
+ }
$subject_id = $request->input('subject_id');
$date = $request->input('date');
$mode = $request->input('mode');
@@ -71,6 +113,12 @@ class UserClassesController extends Controller {
}
public function start_classes_verified(Request $request) {
+ $validator = $this->student_validator($request->all());
+ if ($validator->fails()) {
+ return redirect()->back()
+ ->withErrors($validator)
+ ->withInput();
+ }
$student_id_number = $request->input('student_id_number');
$student_name = $request->input('student_name');
$student_surname = $request->input('student_surname');
diff --git a/app/Http/Controllers/User/UserSubjectsController.php b/app/Http/Controllers/User/UserSubjectsController.php
index f5048c1..a79cf7e 100644
--- a/app/Http/Controllers/User/UserSubjectsController.php
+++ b/app/Http/Controllers/User/UserSubjectsController.php
@@ -3,6 +3,7 @@
namespace App\Http\Controllers\User;
use App\Http\Controllers\Controller;
+use Illuminate\Support\Facades\Validator;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
@@ -11,6 +12,38 @@ use App\Room;
class UserSubjectsController extends Controller
{
+ protected function validator(array $data)
+ {
+ $messages = [
+ 'name.required' => 'Nazwa przedmiotu jest wymagana.',
+ 'name.unique' => 'Podana nazwa przedmiotu już istnieje w systemie.',
+ 'room_id.required' => 'Sala jest wymagana.',
+ 'room_id.exists' => 'Niepoprawny numer sali.'
+ ];
+
+ $rules = [
+ 'name' => ['required', 'unique:subjects,name'],
+ 'room_id' => ['required', 'exists:rooms,id'],
+ ];
+ return Validator::make($data, $rules, $messages);
+ }
+
+ protected function edited_validator(array $data)
+ {
+ $messages = [
+ 'name_e.required' => 'Nazwa przedmiotu jest wymagana.',
+ 'name_e.unique' => 'Podana nazwa przedmiotu już istnieje w systemie.',
+ 'room_id_e.required' => 'Sala jest wymagana.',
+ 'room_id_e.exists' => 'Niepoprawny numer sali.'
+ ];
+
+ $rules = [
+ 'name_e' => ['required', 'unique:subjects,name'],
+ 'room_id_e' => ['required', 'exists:rooms,id'],
+ ];
+ return Validator::make($data, $rules, $messages);
+ }
+
public function index($groupBy = 'weekday') {
$user_id = Auth::id();
$subjects = Subject::where('user_id', $user_id)->orderBy('name','ASC')->get();
@@ -27,19 +60,24 @@ class UserSubjectsController extends Controller
}
public function add_subject(Request $request) {
+
+ $validator = $this->validator($request->all());
+ if ($validator->fails()) {
+ return redirect()->back()
+ ->withErrors($validator)
+ ->withInput();
+ }
$name = $request->input('name');
-// $type = $request->input('type');
$weekday = $request->input('weekday');
$time = $request->input('time');
$room_id = $request->input('room_id');
- $user_id_n = Auth::id();
+ $user_id = Auth::id();
Subject::create([
'name' => $name,
-// 'type' => $type,
'weekday'=> $weekday,
'time' => $time,
'room_id' => $room_id,
- 'user_id' => $user_id_n
+ 'user_id' => $user_id
]);
return redirect()->back();
}
@@ -50,9 +88,25 @@ class UserSubjectsController extends Controller
return redirect()->back();
}
- public function edit_subject($subject_id)
+ public function edit_subject(Request $request)
{
- Subject::find($subject_id);
+ $subject_id = $request->input('subject_id');
+ $subject = Subject::find($subject_id);
+ if($subject) {
+ $validator = $this->edited_validator($request->all());
+ if ($validator->fails()) {
+ return redirect()->back()
+ ->withErrors($validator)
+ ->withInput()
+ ->with('subject_id_redirected', $subject_id);
+ }
+ $subject->name = $request->input('name_e');
+ $subject->weekday = $request->input('weekday_e');
+ $subject->time = $request->input('time_e');
+ $subject->room_id = $request->input('room_id_e');
+ $subject->save();
+ $subject->refresh();
+ }
return redirect()->back();
}
}
diff --git a/app/Room.php b/app/Room.php
index c6b0129..55bbc00 100644
--- a/app/Room.php
+++ b/app/Room.php
@@ -7,6 +7,6 @@ use Illuminate\Database\Eloquent\Model;
class Room extends Model
{
protected $fillable = [
- 'name', 'capacity', 'type', 'arrangement'
+ 'name', 'capacity', 'arrangement'
];
}
diff --git a/app/Subject.php b/app/Subject.php
index 5e5b8c6..90b8d9d 100644
--- a/app/Subject.php
+++ b/app/Subject.php
@@ -7,6 +7,6 @@ use Illuminate\Database\Eloquent\Model;
class Subject extends Model
{
protected $fillable = [
- 'name', 'type', 'weekday', 'time', 'room_id', 'user_id'
+ 'name', 'weekday', 'time', 'room_id', 'user_id'
];
}
diff --git a/database/migrations/2019_11_26_232906_create_subjects_table.php b/database/migrations/2019_11_26_232906_create_subjects_table.php
index 34a7d5b..a8ce4f0 100644
--- a/database/migrations/2019_11_26_232906_create_subjects_table.php
+++ b/database/migrations/2019_11_26_232906_create_subjects_table.php
@@ -15,8 +15,7 @@ class CreateSubjectsTable extends Migration
{
Schema::create('subjects', function (Blueprint $table) {
$table->bigIncrements('id')->unique();
- $table->string('name');
-// $table->string('type')->nullable();
+ $table->string('name')->unique();
$table->string('weekday')->nullable();
$table->string('time')->nullable();
$table->integer('room_id');
diff --git a/public/js/custom.js b/public/js/custom.js
index 28dd446..0162f8c 100644
--- a/public/js/custom.js
+++ b/public/js/custom.js
@@ -3,7 +3,6 @@ $(document).ready(function(){
$('.card-reader').toggleClass('open');
});
-
$('.add-subject-btn').on('click', function () {
$('.add-subject').toggleClass('open');
if ($('.add-subject').first().hasClass('open')) {
@@ -36,6 +35,26 @@ $(document).ready(function(){
$(this).find(`#note_content-${id}`).first().val(originalText);
});
+ $('.edit-subject-btn').on('click', function () {
+ $(this).parents('tr.editable').next().toggleClass('d-none');
+ $(this).parents('tr.editable').toggleClass('d-none');
+ });
+
+ $('.edit-subject-btn-cancel').on('click', function () {
+ $(this).parents('tr.edit-subject-tr').prev().toggleClass('d-none');
+ $(this).parents('tr.edit-subject-tr').toggleClass('d-none');
+ });
+
+ if($('body').find('.invalid-feedback-alert').length > 0) {
+ if($('.add-subject').find('.invalid-feedback').length > 0) {
+ $('.add-subject-btn').first().click();
+ }
+ if($('.edit-subject-tr').find('.invalid-feedback').length > 0) {
+ let subject_id = $('#subject_id_redirected').val();
+ $(`#tr-editable-${subject_id}`).find('.edit-subject-btn').first().click();
+ }
+ }
+
$('#sort-select').on('change', function() {
$(location).attr('href', $(this).val())
});
diff --git a/resources/views/map/start_map.blade.php b/resources/views/map/start_map.blade.php
index 5084cbe..340a7d8 100644
--- a/resources/views/map/start_map.blade.php
+++ b/resources/views/map/start_map.blade.php
@@ -14,6 +14,15 @@
Kod: {{ $classes_code }}
Przyłóż legitymację do czytnika
+ @if ($errors->any())
+
+
+ @foreach ($errors->all() as $error)
+ - {{ $error }}
+ @endforeach
+
+
+ @endif
-
+ @if ($errors->any())
+
+
+ @foreach ($errors->all() as $error)
+ - {{ $error }}
+ @endforeach
+
+
+ @endif
@@ -84,7 +91,7 @@
@@ -49,11 +57,11 @@
diff --git a/resources/views/user/user_subjects.blade.php b/resources/views/user/user_subjects.blade.php
index 0770ee9..486f028 100644
--- a/resources/views/user/user_subjects.blade.php
+++ b/resources/views/user/user_subjects.blade.php
@@ -9,7 +9,16 @@
Moje przedmioty {{ $subjects->count() }}
-
+ @if ($errors->any())
+
+
+ @foreach ($errors->all() as $error)
+ - {{ $error }}
+ @endforeach
+
+
+
+ @endif
Dodaj nowy przedmiot
@@ -33,7 +42,7 @@
-
@@ -57,12 +66,12 @@
-
+
@error('time')
-
- {{ $message }}
-
+
+ {{ $message }}
+
@enderror
@@ -78,23 +87,9 @@
@error('room_id')
-
- {{ $message }}
-
- @enderror
-
-
-
-
@@ -139,23 +134,90 @@
Nazwa |
Dzień tygodnia |
Godzina |
- Prowadzący |
Sala |
|
|
@foreach ($subjects_list as $subject)
-
- {{ $subject->name }} |
- {{ $subject->weekday }} |
- {{ $subject->time }} |
- {{ App\User::find($subject->user_id)->name }} {{ App\User::find($subject->user_id)->surname }} |
- {{ App\Room::find($subject->room_id)->name }} |
+
+ {{ $subject->name }} |
+ {{ $subject->weekday }} |
+ {{ $subject->time }} |
+ {{ App\Room::find($subject->room_id)->name }} |
+
+
+ |
|
-
- Edytuj
+ |
+
+
+
|
@include('user.delete_confirmation_subject', [$subject])
diff --git a/routes/web.php b/routes/web.php
index e6aa08d..839bbc3 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -18,66 +18,69 @@ Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
-Route::group(array('prefix' => 'admin', 'namespace' => 'Admin'), function()
-{
- Route::get('/', 'AdminPanelController@index')->name('admin');
- Route::get('/users', 'AdminUsersController@index')->name('admin_users');
- Route::get('/subjects', 'AdminSubjectsController@index')->name('admin_subjects');
- Route::get('/rooms', 'AdminRoomsController@index')->name('admin_rooms');
- Route::get('/classes', 'AdminClassesController@index')->name('admin_classes');
- Route::get('/attendances', 'AdminAttendancesController@index')->name('admin_attendances');
- Route::get('/test', 'AdminPanelController@test_connection')->name('admin_test_connection');
+Route::group(['middleware' => 'auth'], function () {
+ Route::group(array('prefix' => 'admin', 'namespace' => 'Admin'), function() {
+ Route::get('/', 'AdminPanelController@index')->name('admin');
+ Route::get('/users', 'AdminUsersController@index')->name('admin_users');
+ Route::get('/subjects', 'AdminSubjectsController@index')->name('admin_subjects');
+ Route::get('/rooms', 'AdminRoomsController@index')->name('admin_rooms');
+ Route::get('/classes', 'AdminClassesController@index')->name('admin_classes');
+ Route::get('/attendances', 'AdminAttendancesController@index')->name('admin_attendances');
+ Route::get('/test', 'AdminPanelController@test_connection')->name('admin_test_connection');
- Route::group(array('prefix' => 'add'), function() {
- Route::post('/user', 'AdminUsersController@add_user')->name('admin_add_user');
- Route::post('/subject', 'AdminSubjectsController@add_subject')->name('admin_add_subject');
- Route::post('/room', 'AdminRoomsController@add_room')->name('admin_add_room');
- Route::post('/classes', 'AdminClassesController@add_classes')->name('admin_add_classes');
- Route::post('/attendance', 'AdminAttendancesController@add_attendance')->name('admin_add_attendance');
+ Route::group(array('prefix' => 'add'), function() {
+ Route::post('/user', 'AdminUsersController@add_user')->name('admin_add_user');
+ Route::post('/subject', 'AdminSubjectsController@add_subject')->name('admin_add_subject');
+ Route::post('/room', 'AdminRoomsController@add_room')->name('admin_add_room');
+ Route::post('/classes', 'AdminClassesController@add_classes')->name('admin_add_classes');
+ Route::post('/attendance', 'AdminAttendancesController@add_attendance')->name('admin_add_attendance');
+ });
+ Route::group(array('prefix' => 'delete'), function() {
+ Route::get('/user/{user_id}', 'AdminUsersController@delete_user')->name('admin_delete_user');
+ Route::get('/subject/{subject_id}', 'AdminSubjectsController@delete_subject')->name('admin_delete_subject');
+ Route::get('/room/{room_id}', 'AdminRoomsController@delete_room')->name('admin_delete_room');
+ Route::get('/classes/{classes_id}', 'AdminClassesController@delete_classes')->name('admin_delete_classes');
+ Route::get('/attendance/{attendance_id}', 'AdminAttendancesController@delete_attendance')->name('admin_delete_attendance');
+ });
+ Route::group(array('prefix' => 'edit'), function() {
+ Route::get('/user/{user_id}', 'AdminUsersController@edit_user')->name('admin_edit_user');
+ Route::get('/subject/{subject_id}', 'AdminSubjectsController@edit_subject')->name('admin_edit_subject');
+ Route::get('/room/{room_id}', 'AdminRoomsController@edit_room')->name('admin_edit_room');
+ Route::get('/classes/{classes_id}', 'AdminClassesController@edit_classes')->name('admin_edit_classes');
+ Route::get('/attendance/{attendance_id}', 'AdminAttendancesController@edit_attendance')->name('admin_edit_attendance');
+ });
});
- Route::group(array('prefix' => 'delete'), function() {
- Route::get('/user/{user_id}', 'AdminUsersController@delete_user')->name('admin_delete_user');
- Route::get('/subject/{subject_id}', 'AdminSubjectsController@delete_subject')->name('admin_delete_subject');
- Route::get('/room/{room_id}', 'AdminRoomsController@delete_room')->name('admin_delete_room');
- Route::get('/classes/{classes_id}', 'AdminClassesController@delete_classes')->name('admin_delete_classes');
- Route::get('/attendance/{attendance_id}', 'AdminAttendancesController@delete_attendance')->name('admin_delete_attendance');
- });
- Route::group(array('prefix' => 'edit'), function() {
- Route::get('/user/{user_id}', 'AdminUsersController@edit_user')->name('admin_edit_user');
- Route::get('/subject/{subject_id}', 'AdminSubjectsController@edit_subject')->name('admin_edit_subject');
- Route::get('/room/{room_id}', 'AdminRoomsController@edit_room')->name('admin_edit_room');
- Route::get('/classes/{classes_id}', 'AdminClassesController@edit_classes')->name('admin_edit_classes');
- Route::get('/attendance/{attendance_id}', 'AdminAttendancesController@edit_attendance')->name('admin_edit_attendance');
+
+ Route::group(array('prefix' => 'user', 'namespace' => 'User'), function() { //TODO poprawic {user_id}
+ Route::get('/subjects/{groupBy?}', 'UserSubjectsController@index')->name('user_subjects');
+ Route::get('/classes/{groupBy?}', 'UserClassesController@index')->name('user_classes');
+ Route::get('/attendance/{groupBy?}', 'UserAttendancesController@index')->name('user_attendances');
+
+ Route::get('/classes/start/{classes_id}', 'UserClassesController@start_classes')->name('user_start_classes');
+ Route::post('/classes/start', 'UserClassesController@start_classes_verified')->name('user_start_classes_verified')->middleware('classesCode');
+ Route::post('/classes/save', 'UserClassesController@save_classes_data')->name('user_save_classes_data');
+ Route::get('/classes/preview/{classes_id}/{orderBy?}/{orderDirection?}', 'UserClassesController@preview_classes')->name('user_preview_classes');
+
+ Route::group(array('prefix' => 'add'), function() {
+ Route::post('/subject', 'UserSubjectsController@add_subject')->name('user_add_subject');
+ Route::post('/classes', 'UserClassesController@add_classes')->name('user_add_classes');
+ Route::post('/attendance', 'UserAttendancesController@add_attendance')->name('user_add_attendance');
+ Route::post('/attendance/note', 'UserAttendancesController@add_attendance_note')->name('user_add_attendance_note');
+ });
+
+ Route::group(array('prefix' => 'delete'), function() {
+ Route::get('/subject/{subject_id}/{groupBy?}', 'UserSubjectsController@delete_subject')->name('user_delete_subject');
+ Route::get('/classes/{classes_id}/{groupBy?}', 'UserClassesController@delete_classes')->name('user_delete_classes');
+ Route::get('/attendance/{attendance_id}/{groupBy?}', 'UserAttendancesController@delete_attendance')->name('user_delete_attendance');
+ });
+
+ Route::group(array('prefix' => 'edit'), function() {
+ Route::post('/subject', 'UserSubjectsController@edit_subject')->name('user_edit_subject');
+// Route::get('/attendance/{attendance_id}/{groupBy?}', 'UserAttendancesController@edit_attendance')->name('user_edit_attendance');
+ });
+
+ Route::get('/export/attendances/{classes_id}', 'UserAttendancesController@export')->name('user_export');
+ Route::get('/export/attendances/grouped/{groupBy}', 'UserAttendancesController@export_grouped')->name('user_export_grouped');
});
});
-Route::group(array('prefix' => 'user', 'namespace' => 'User'), function() { //TODO poprawic {user_id}
- Route::get('/subjects/{groupBy?}', 'UserSubjectsController@index')->name('user_subjects');
- Route::get('/classes/{groupBy?}', 'UserClassesController@index')->name('user_classes');
- Route::get('/attendance/{groupBy?}', 'UserAttendancesController@index')->name('user_attendances');
- Route::get('/classes/start/{classes_id}', 'UserClassesController@start_classes')->name('user_start_classes');
- Route::post('/classes/start', 'UserClassesController@start_classes_verified')->name('user_start_classes_verified')->middleware('classesCode');
- Route::post('/classes/save', 'UserClassesController@save_classes_data')->name('user_save_classes_data');
- Route::get('/classes/preview/{classes_id}/{orderBy?}/{orderDirection?}', 'UserClassesController@preview_classes')->name('user_preview_classes');
-
- Route::group(array('prefix' => 'add'), function() {
- Route::post('/subject', 'UserSubjectsController@add_subject')->name('user_add_subject');
- Route::post('/classes', 'UserClassesController@add_classes')->name('user_add_classes');
- Route::post('/attendance', 'UserAttendancesController@add_attendance')->name('user_add_attendance');
- Route::post('/attendance/note', 'UserAttendancesController@add_attendance_note')->name('user_add_attendance_note');
- });
-
- Route::group(array('prefix' => 'delete'), function() {
- Route::get('/subject/{subject_id}/{groupBy?}', 'UserSubjectsController@delete_subject')->name('user_delete_subject');
- Route::get('/classes/{classes_id}/{groupBy?}', 'UserClassesController@delete_classes')->name('user_delete_classes');
- Route::get('/attendance/{attendance_id}/{groupBy?}', 'UserAttendancesController@delete_attendance')->name('user_delete_attendance');
- });
-
- Route::group(array('prefix' => 'edit'), function() {
- Route::get('/subject/{subject_id}/{groupBy?}', 'UserSubjectsController@edit_subject')->name('user_edit_subject');
- Route::get('/attendance/{attendance_id}/{groupBy?}', 'UserAttendancesController@edit_attendance')->name('user_edit_attendance');
- });
-
- Route::get('/export/attendances/{classes_id}', 'UserAttendancesController@export')->name('user_export');
- Route::get('/export/attendances/grouped/{groupBy}', 'UserAttendancesController@export_grouped')->name('user_export_grouped');
-});