atcheck/app/Http/Controllers/User/UserSubjectsController.php

138 lines
5.2 KiB
PHP

<?php
namespace App\Http\Controllers\User;
use App\Http\Controllers\Controller;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Support\Facades\Validator;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Subject;
use App\Room;
use Illuminate\Validation\Rule;
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.',
'weekday.in' => 'Dzień tygodnia jest niepoprawny.',
'time.date_format' => 'Podana godzina jest nieprawidłowa.',
'room_id.required' => 'Sala jest wymagana.',
'room_id.exists' => 'Niepoprawny numer sali.'
];
$rules = [
'name' => ['required', 'unique:subjects,name'],
'weekday' => Rule::in([null, 'Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota', 'Niedziela']),
'time' => ['date_format:H:i'],
'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.',
'weekday_e.in' => 'Dzień tygodnia jest niepoprawny.',
'time_e.date_format' => 'Podana godzina jest nieprawidłowa.',
'room_id_e.required' => 'Sala jest wymagana.',
'room_id_e.exists' => 'Niepoprawny numer sali.'
];
$rules = [
'name_e' => ['sometimes', 'required', 'unique:subjects,name'],
'weekday_e' => Rule::in([null, 'Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota', 'Niedziela']),
'time_e' => ['date_format:H:i'],
'room_id_e' => ['required', 'exists:rooms,id'],
'subject_id' => ['sometimes']
];
return Validator::make($data, $rules, $messages);
}
public function index($groupBy = 'weekday') {
$user_id = Auth::id();
if(!$user_id) {
abort(401);
}
$subjects = Subject::where('user_id', $user_id)->orderBy('name','ASC')->get();
$subjects_grouped = $subjects->groupBy($groupBy);
$rooms = Room::all();
$weekdays = ['Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota', 'Niedziela'];
$defaultTime = date("H:i");
if(date('w')-1 < 0 ) {
$defaultWeekday = $weekdays[6];
} else {
$defaultWeekday = $weekdays[date('w') - 1];
}
return view('user.user_subjects', ['subjects' => $subjects, 'weekdays' => $weekdays, 'subjects_grouped' => $subjects_grouped, 'grouped_by' => $groupBy, 'defaultTime' => $defaultTime, 'defaultWeekday' => $defaultWeekday, 'rooms' => $rooms]);
}
public function add_subject(Request $request) {
$validator = $this->validator($request->all());
if ($validator->fails()) {
return redirect()->back()
->withErrors($validator)
->withInput();
}
$name = $request->input('name');
$weekday = $request->input('weekday');
$time = $request->input('time');
$room_id = $request->input('room_id');
$user_id = Auth::id();
Subject::create([
'name' => $name,
'weekday'=> $weekday,
'time' => $time,
'room_id' => $room_id,
'user_id' => $user_id
]);
return redirect()->back();
}
public function delete_subject($subject_id)
{
try {
Subject::findOrFail($subject_id)->delete();
return redirect()->back();
} catch(ModelNotFoundException $exception) {
return redirect()->back()->withErrors(['Taki przedmiot nie istnieje w bazie danych, zatem nie można go usunąć.']);
}
}
public function edit_subject(Request $request)
{
$subject_id = $request->input('subject_id');
try {
$subject = Subject::findOrFail($subject_id);
if ($request->input('name_e') == $subject->name) {
$validator = $this->edited_validator($request->except(['name_e']));
} else {
$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();
} catch(ModelNotFoundException $exception) {
return redirect()->back()->withErrors(['Taki przedmiot nie istnieje w bazie danych, zatem nie można go edytować.']);
}
}
}