diff --git a/app/Filters/JournalFilter.php b/app/Filters/JournalFilter.php new file mode 100644 index 0000000..07413e7 --- /dev/null +++ b/app/Filters/JournalFilter.php @@ -0,0 +1,38 @@ +builder = $this->builder->where('student_id', $value); + } + + protected function teacher($value) + { + $this->builder = $this->builder->where('teacher_id', $value); + } + + protected function subject($value) + { + $this->builder = $this->builder->where('subject_id', $value); + } + + protected function date($value) + { + $value = Carbon::createFromTimestamp($value/1000)->floorDays(); + $this->builder = $this->builder->where('updated_at', $value); + } + + protected function last($value) + { + $date = Carbon::now()->subDays($value); + $this->builder = $this->builder->where('updated_at', '>=', $date); + } + +} diff --git a/app/Http/Controllers/AnswerToTaskController.php b/app/Http/Controllers/AnswerToTaskController.php new file mode 100644 index 0000000..5b32528 --- /dev/null +++ b/app/Http/Controllers/AnswerToTaskController.php @@ -0,0 +1,70 @@ +all(); + + + $answer = AnswerToTask::create($input+ ['task_id' => $task->id, + 'student_id' => 1]); + return response()->json($answer, 201); + + } + + public function show(Task $task, Student $student) { + $name = BankTask::find($task->banktask_id)->name; + + $answer = AnswerToTask::where([ + ['student_id', '=', $student->id], + ['task_id', '=', $task->id] + ])->get(); + $answer->name = $name; + $answer->deadline = $task->deadline; + $studentFile = TaskFile::where([ + ['user_id', '=', '2'], // Auth::id() + ['task_id', '=', $task->id], + ['review', '=', 0] + ]) + ->get(['id','name', 'type', 'url']); + $teacherFile = TaskFile::where([ + ['user_id', '=', '2'], // Auth::id() + ['task_id', '=', $task->id], + ['review', '=', 1] + ]) + ->get(['id','name', 'type', 'url']); + + return response()->json([ + 'answer' => $answer, + 'files' => [ + 'student' => $studentFile, + 'teacher' => $teacherFile + ] + ],200); + } + + public function delete(AnswerToTask $answer){ + $answer->delete(); + + return response()->json(true, 204); + } + + public function update(AnswerToTask $answer, Request $request) { + $answer->description = $request->input('description'); + $answer->save(); + + return $answer; + + } + +} diff --git a/app/Http/Controllers/BankTaskController.php b/app/Http/Controllers/BankTask/BankTaskController.php similarity index 93% rename from app/Http/Controllers/BankTaskController.php rename to app/Http/Controllers/BankTask/BankTaskController.php index a6fbf34..a7534ac 100644 --- a/app/Http/Controllers/BankTaskController.php +++ b/app/Http/Controllers/BankTask/BankTaskController.php @@ -1,6 +1,6 @@ newQuery(); if ($request->has('name')) { - $tasks->where('name', 'like', $request->input('name').'%'); + $tasks->where('name', 'ilike', $request->input('name').'%'); } if ($request->has('subject_id')) { $tasks->where('subject_id', $request->input('subject_id')); @@ -37,7 +38,7 @@ class BankTaskController extends Controller } if ($request->has('author')) { - $tasks->where('author', 'like', $request->input('author').'%'); + $tasks->where('author', 'ilike', $request->input('author').'%'); } if ($request->has('count')) { diff --git a/app/Http/Controllers/BankTaskFileController.php b/app/Http/Controllers/BankTask/BankTaskFileController.php similarity index 97% rename from app/Http/Controllers/BankTaskFileController.php rename to app/Http/Controllers/BankTask/BankTaskFileController.php index c4f5df6..0324a7b 100644 --- a/app/Http/Controllers/BankTaskFileController.php +++ b/app/Http/Controllers/BankTask/BankTaskFileController.php @@ -1,12 +1,13 @@ exists('/public/banktask/' . $file->banktask_id . '/' . $file->type . '/' . $file->name )) { if (Storage::disk('local')->delete('/public/banktask/' . $file->banktask_id . '/' . $file->type . '/' . $file->name)) { return response()->json($file->delete()); diff --git a/app/Http/Controllers/SubjectController.php b/app/Http/Controllers/BankTask/SubjectController.php similarity index 91% rename from app/Http/Controllers/SubjectController.php rename to app/Http/Controllers/BankTask/SubjectController.php index e0e4ae0..dca1fa2 100644 --- a/app/Http/Controllers/SubjectController.php +++ b/app/Http/Controllers/BankTask/SubjectController.php @@ -1,12 +1,13 @@ json(Subject::all()->sortBy('name'), 200); + return response()->json(Subject::all(), 200); } /** diff --git a/app/Http/Controllers/ThemeController.php b/app/Http/Controllers/BankTask/ThemeController.php similarity index 92% rename from app/Http/Controllers/ThemeController.php rename to app/Http/Controllers/BankTask/ThemeController.php index fffdb06..518e87c 100644 --- a/app/Http/Controllers/ThemeController.php +++ b/app/Http/Controllers/BankTask/ThemeController.php @@ -1,6 +1,6 @@ json(Theme::all()->sortBy($request->input('sort_by')), 200); + return response()->json(Theme::all(), 200); } /** diff --git a/app/Http/Controllers/JournalController.php b/app/Http/Controllers/JournalController.php new file mode 100644 index 0000000..284210a --- /dev/null +++ b/app/Http/Controllers/JournalController.php @@ -0,0 +1,115 @@ +apply()->values(); + return response()->json($journal, 200); + } + + /** + * Show the form for creating a new resource. + * + * @return Response + */ +// public function create() +// { +// // +// } + + /** + * Store a newly created resource in storage. + * + * @param JournalRequest $request + * @return JsonResponse + */ + public function store(JournalRequest $request) + { + if ($request->has('date')) + $date = Carbon::createFromTimestamp($request->get('date')/1000)->floorDays(); + else + $date = Carbon::now()->floorDays(); + + + $exist = Journal::where('updated_at', $date) + ->where('student_id', $request->get('student_id')) + ->where('subject_id', $request->get('subject_id')) + ->get(); + + if ($exist->isNotEmpty()) + return response()->json('Оценка на эту дату уже выставлена', 200); + + $data = array_merge(['updated_at' => $date], $request->all()); + + $journal = Journal::create($data); + return response()->json($journal, 200); + } + + /** + * Display the specified resource. + * + * @param int $journal + * @return JsonResponse + */ + public function show(int $journal) + { + return response()->json(Journal::find($journal), 200); + } + + /** + * Show the form for editing the specified resource. + * + * @param Journal $journal + * @return Response + */ +// public function edit(Journal $journal) +// { +// // +// } + + /** + * Update the specified resource in storage. + * + * @param JournalRequest $request + * @param Journal $journal + * @return JsonResponse + */ + public function update(Request $request, int $journal) + { + $j = Journal::find($journal); + $j->score = $request->get('score'); + $j->comment = $request->get('comment'); + $j->timestamps = false; + $j->save(); + return response()->json(['id' => $j->id], 200); + } + + /** + * Remove the specified resource from storage. + * + * @param Journal $journal + * @return JsonResponse + */ + public function destroy(Journal $journal) + { + $journal->delete(); + return response()->json(null, 200); + } +} diff --git a/app/Http/Controllers/News/NewsController.php b/app/Http/Controllers/News/NewsController.php new file mode 100644 index 0000000..61b9583 --- /dev/null +++ b/app/Http/Controllers/News/NewsController.php @@ -0,0 +1,60 @@ +has('count')) { + $temp = (int)$request->count; + if ($temp>0 && $temp<= 100) { + $count = $temp; + } + } + + return response()->json($news->orderByDesc('created_at')->paginate($count), 200); + + } + + public function store(Request $request) { + // Добавить проверку, после добавление авторизации + $request->validate([ + 'title' => 'required|min:5', + 'description' => 'required', + ]); + $news = News::create($request->all()); + + return response()->json($news, 201); + } + + public function show(News $news) { + + return response()->json([ + $news, + 'photo_id' => NewsFile::where('news_id', '=', $news->id)->get(['id']) + ], 200); + } + + public function edit(News $news, Request $request) { + $request->validate([ + 'title' => 'required|min:5', + 'description' => 'required' + ]); + $news->update($request->all()); + + return response()->json($news, 200); + + } + + public function delete(News $news) { + $news->delete(); + + return response()->json(true, 204); + } +} diff --git a/app/Http/Controllers/News/NewsFileController.php b/app/Http/Controllers/News/NewsFileController.php new file mode 100644 index 0000000..1ba8439 --- /dev/null +++ b/app/Http/Controllers/News/NewsFileController.php @@ -0,0 +1,82 @@ +id; + $max_size = (int)ini_get('upload_max_filesize') * 1000; + $all_ext = implode(',', $this->allExtensions()); + + $this->validate($request, [ + 'name' => 'required', + 'file' => 'required|file|mimes:' . $all_ext . '|max:' . $max_size + ]); + + $file = $request->file('file'); + $ext = $file->getClientOriginalExtension(); + $type = $this->getType($ext); + + if (Storage::putFileAs('public/news/' . $newsId . '/' . $type . '/', $file, $request->name)) { + NewsFile::create([ + 'name' => $request->name, + 'type' => $type, + 'extension' => $ext, + 'news_id' => $newsId, + $file, + $request->name . $ext + ]); + $news->photo_uri = '/storage/news' . '/' . $newsId . '/' . $type . '/' . $request->name; + $news->save(); + return true; + } + return false; + } + + + + + + public function delete(NewsFile $file) { + + if (Storage::disk('local')->exists('/public/news/' . $file->news_id . '/' . $file->type . '/' . $file->name)) { + if (Storage::disk('local')->delete('/public/news/' . $file->news_id . '/' . $file->type . '/' . $file->name)) { + return response()->json($file->delete(), 204); + } + } + return response()->json(['News not found'], 404); + } + + + private function getType($ext) + { + if (in_array(strtolower($ext), $this->image_ext)) { + return 'image'; + } + + if (in_array(strtolower($ext), $this->file_ext)) { + return 'file'; + } + } + + private function allExtensions() + { + return array_merge($this->image_ext, $this->file_ext); + } + + + +} diff --git a/app/Http/Controllers/SchoolClassController.php b/app/Http/Controllers/SchoolClassController.php index 574eadc..5940e90 100644 --- a/app/Http/Controllers/SchoolClassController.php +++ b/app/Http/Controllers/SchoolClassController.php @@ -2,9 +2,11 @@ namespace App\Http\Controllers; +use App\Filters\JournalFilter; use App\Http\Requests\SchoolClassRequest; use App\Models\SchoolClass; use App\Models\Teacher; +use Carbon\Carbon; use Illuminate\Database\QueryException; use Illuminate\Http\Request; @@ -65,11 +67,26 @@ class SchoolClassController extends Controller $students = $class->students; $studentsOnlyFIO = []; foreach ($students as $student) { - array_push($studentsOnlyFIO, $student->only('id', 'name', 'surname', 'patronymic')); + array_push($studentsOnlyFIO, $student->only('id', 'name', 'surname', 'patronymic')); } return response()->json($studentsOnlyFIO, 200); } + public function getStudentsJournal(SchoolClass $class, Request $request) + { + $students = $class->students; + $allStudents = []; + + foreach ($students as $student) + { + $cpys = clone $student; + $cpys->scores = (new JournalFilter($student->scores, $request))->apply()->values(); + $allStudents[] = $cpys; + } + + return response()->json($allStudents, 200); + } + //получение всех предметов для класса public function getSubjects(SchoolClass $class) { diff --git a/app/Http/Controllers/TaskController.php b/app/Http/Controllers/TaskController.php index a5299a1..698f44b 100644 --- a/app/Http/Controllers/TaskController.php +++ b/app/Http/Controllers/TaskController.php @@ -2,60 +2,115 @@ namespace App\Http\Controllers; +use App\Models\AnswerToTask; +use App\Models\BankTask; +use App\Models\SchoolClass; +use App\Models\Student; +use App\Models\User; use Illuminate\Http\Request; use App\Models\Task; +use App\Http\Requests\TaskRequest; +use App\Models\TaskHistory; +use Illuminate\Support\Facades\Auth; +use App\Models\TaskFile; +use App\Models\Teacher; class TaskController extends Controller + { - public function createTask(Request $request) - { + public function index(Request $request) { + $tasks = Task::where('class_id', '=', $request->class_id)->get()->sortBy('deadline'); + $temp = []; + foreach ($tasks as $task) { + + $task->banktask->subject; + array_push($temp, collect($task)->except( + 'banktask.id', + 'banktask.description', + 'banktask.short_description', + 'banktask.theme_id', + 'banktask.created_at', + 'banktask.updated_at', + 'banktask.author', + 'banktask.subject.created_at', + 'banktask.subject.updated_at', + 'banktask.subject_id' + )); + + + } + + return response()->json($temp , 200); + } + + public function store(TaskRequest $request) { + $teacherId = 1; // Auth()->id(); + $banktaskName = BankTask::find($request->banktask_id)->name; + $banktaskSubject = BankTask::find($request->banktask_id)->subject_id; + $newTask = Task::create($request->all() + ['teacher_id' => $teacherId + ]); + + + return response()->json($newTask, 201); + } + +// public function addbanktask(Task $task, Request $request) { +// $temp = new TaskHistory(); +// $temp->task_id = $task->id; +// $temp->banktask_id = $request->input('banktask_id'); // Баг - можно впихнуть 2 одинаковых задания из банка задач в один таск +// +// $temp->save(); +// +// return response()->json($temp, 201); +// } + + public function show(Task $task) { + $userId = Teacher::find($task->teacher_id)->user_id; + + $file = TaskFile::where('task_id', '=', $task->id)->get(['id', 'name', 'type', 'url', 'user_id']); + return response()->json([ + $task, + 'files' => $file, + + + + ], 200); + } + + public function delete(Task $task) { + $task->delete(); + + return response()->json(true, 200); + } + + public function update(Task $task, Request $request) { $request->validate([ - 'name' => 'required|min:5|max:100', - 'subject_id' => 'required' + 'banktask_id' => 'required|exists:bank_tasks,id', ]); + $task->update($request->all()); - $add_new = new Task; - $add_new->name = $request->input('name'); - $add_new->description = $request->input('description'); - $add_new->subject_id = $request->input('subject_id'); - $add_new->path_to_task = $request->input('path_to_task'); - $add_new->save(); - - return Task::findOrFail($add_new->id); - - } - - public function index() - { - return Task::all(); // Здесь наверное лучше выводить только задания по конкретному предмету - // Добавить сортировку - } - - public function showTask($taskId) - { - return Task::where('id', '=', $taskId)->get(); - } - - public function editTask(Task $task, Request $request) - { - $request->validate([ - 'name' => 'required|min:5:max:100', - 'subject_id' => 'required' - ]); - - $task->name = $request->input('name'); - $task->description = $request->input('description'); - $task->path_to_task = $request->input('path_to_task'); $task->save(); return Task::where('id', '=', $task->id)->get(); } - public function deleteTask(Task $task) - { - $task->delete(); + public function checkAnswer(AnswerToTask $answer, Request $request) { + $request->validate([ + 'mark' => 'required|numeric' + ]); - return 'Task №' . $task->id . ' has been deleted'; + $answer->comment_by_teacher = $request->input('comment_by_teacher'); + $answer->mark = $request->input('mark'); + $answer->checked = 1; + + $answer->save(); + + + + + return response()->json($answer, 200); } -} + + +} \ No newline at end of file diff --git a/app/Http/Controllers/TaskFileController.php b/app/Http/Controllers/TaskFileController.php new file mode 100644 index 0000000..642efe6 --- /dev/null +++ b/app/Http/Controllers/TaskFileController.php @@ -0,0 +1,127 @@ +id; + $studentId = 1; + $max_size = (int)ini_get('upload_max_filesize') * 1000; + $all_ext = implode(',', $this->allExtensions()); + $this->validate($request, [ + 'name' => 'required', + 'file' => 'required|file|mimes:' . $all_ext . '|max:' . $max_size + ]); + + $file = $request->file('file'); + $ext = $file->getClientOriginalExtension(); + $type = $this->getType($ext); + + if ($request->has('by_teacher') && $request->by_teacher == 1) { // auth()->user()->role_id == 2 + $pathToFile = 'public/task/' . $taskId . '/student/' . $studentId . '/review/' . $type . '/'; + $path = '/storage/task' . '/' . $taskId . '/student/'. $studentId . '/review/' . $type . '/' . $request->name; + $review = 1; + } elseif (true) { + $pathToFile = 'public/task/' . $taskId . '/student/' . $studentId . '/' . $type . '/'; + $path = '/storage/task' . '/' . $taskId . '/student/'. $studentId . '/' . $type . '/' . $request->name; + $review = 0; + } + + + if (Storage::putFileAs($pathToFile, $file, $request->name)) { + TaskFile::create( + [ + 'name' => $request->name, + 'type' => $type, + 'extension' => $ext, + 'task_id' => $taskId, + 'url' => $path, + 'user_id' => 2, + 'review' => $review, + $file, + $request->name . $ext + ] + ); + return response()->json($request->by_teacher, 201); + } + return response()->json(false, 422); + } + + public function showFiles(Task $task) + { + + $taskId = $task->id; + $files = TaskFile::where('task_id', '=', $taskId)->get(); + + return response()->json($files, 200); + + } + +// public function download(TaskFile $file) +// { +// return Storage::download('/public/task/' . $file->task_id . '/' . $file->type . '/' . $file->name); +// } + +// public function update(TaskFile $file, Request $request) Бесполезная функция +// { +// +// $request->validate([ +// 'name' => 'required' +// ]); +// $old_filename = '/public/task/' . $file->task_id . '/' . $file->type . '/' . $file->name; +// $new_filename = '/public/task/' . $file->task_id . '/' . $file->type . '/' . $request->name; +// +// if (Storage::disk('local')->exists($old_filename)) { +// if (Storage::disk('local')->move($old_filename, $new_filename)) { +// $file->name = $request->name; +// $file->url = '/storage/task/' . $file->task_id . '/' . $request->type . '/' . $file->name; +// return response()->json([$file->save(), $file]); +// } +// } +// +// return response()->json(false, 404); +// } + + public function delete(TaskFile $file) { + $studentId = Student::where('user_id', '=', $file->user_id)->get()->id; + if (Storage::disk('local')->exists('/public/task/' . $file->task_id . '/student/' . $studentId . $file->type . '/' . $file->name)) { + if (Storage::disk('local')->delete('/public/task/' . $file->task_id . '/student/' . $studentId . $file->type . '/' . $file->name)) { + return response()->json($file->delete()); + } + } + return response()->json(['Not found'], 404); + } + + + private function getType($ext) + { + if (in_array(strtolower($ext), $this->image_ext)) { + return 'image'; + } + + if (in_array(strtolower($ext), $this->file_ext)) { + return 'file'; + } + } + + private function allExtensions() + { + return array_merge($this->image_ext, $this->file_ext); + } + + + +} diff --git a/app/Http/Controllers/TimetableController.php b/app/Http/Controllers/TimetableController.php index 73073bf..439af2c 100644 --- a/app/Http/Controllers/TimetableController.php +++ b/app/Http/Controllers/TimetableController.php @@ -45,8 +45,9 @@ class TimetableController extends Controller 'class' => $class, ]); } + $dateTimetables = []; - //if (!$filterTimetables->isEmpty()) { + if (!$filterTimetables->isEmpty()) { for ($i = 0; $i < 6; $i++) { $date = Carbon::parse($request->input('date')) ->startOfWeek() @@ -54,7 +55,7 @@ class TimetableController extends Controller ->format('Y-m-d'); array_push($dateTimetables, [$date => $filterTimetables->where('date', $date)->values()]); } - //} + } return response()->json($dateTimetables, 200); } diff --git a/app/Http/Controllers/Users/StudentController.php b/app/Http/Controllers/Users/StudentController.php index 49c376b..ea70170 100644 --- a/app/Http/Controllers/Users/StudentController.php +++ b/app/Http/Controllers/Users/StudentController.php @@ -31,6 +31,18 @@ class StudentController extends Controller return response()->json($student, 200); } + /** + * Создание ученика + * + * @param StudentRequest $request + * @return JsonResponse + */ + /*public function store(StudentRequest $request) + { + $student = Student::creat($request->all()); + return response()->json($student, 200); + }*/ + /** * Обновление ученика * @@ -54,11 +66,7 @@ class StudentController extends Controller return response()->json(collect($student)->except('school_class'), 200); } - public function destroy(Student $student) - { - $user = $student->user; - $user->delete(); - return response()->json(null, 204); + public function getAnswers(Student $student) { + return AnswerToTask::where('student_id', '=', $student->id)->get(); } - } diff --git a/app/Http/Controllers/Users/TeacherController.php b/app/Http/Controllers/Users/TeacherController.php index 6950e24..622aa55 100644 --- a/app/Http/Controllers/Users/TeacherController.php +++ b/app/Http/Controllers/Users/TeacherController.php @@ -3,13 +3,14 @@ namespace App\Http\Controllers\Users; use App\Http\Controllers\Controller; -use App\Models\Subject; +use App\Models\AnswerToTask; +use App\Models\SchoolClass; +use App\Models\Student; +use App\Models\Task; use App\Models\Teacher; -use App\Models\Timetable; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use Illuminate\Support\Facades\DB; -use Illuminate\Support\Facades\Response; +use App\Models\Subject; class TeacherController extends Controller { @@ -92,4 +93,15 @@ class TeacherController extends Controller return response()->json($classes->unique()->values(), 200); } + + public function getUncheckedTask(Teacher $teacher, SchoolClass $class) { + + $temp = []; + $tasks = $teacher->tasks->where('class_id', '=', $class->id); + foreach ($tasks as $task) { + $answers = Task::find($task->id)->answers->where('checked', '=', false); + array_push($temp, $answers); + } + return response()->json($temp, 200); + } } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 7d7d84d..1ba307f 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -15,12 +15,13 @@ class Kernel extends HttpKernel */ protected $middleware = [ // \App\Http\Middleware\TrustHosts::class, - \App\Http\Middleware\TrustProxies::class, \Fruitcake\Cors\HandleCors::class, + \App\Http\Middleware\TrustProxies::class, \App\Http\Middleware\PreventRequestsDuringMaintenance::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \App\Http\Middleware\TrimStrings::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, + ]; /** diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php index 0c13b85..b0ccbd4 100644 --- a/app/Http/Middleware/VerifyCsrfToken.php +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -12,6 +12,6 @@ class VerifyCsrfToken extends Middleware * @var array */ protected $except = [ - // + 'api/*' ]; } diff --git a/app/Http/Requests/Auth/LoginRequest.php b/app/Http/Requests/Auth/LoginRequest.php index 5103286..78aa16e 100644 --- a/app/Http/Requests/Auth/LoginRequest.php +++ b/app/Http/Requests/Auth/LoginRequest.php @@ -14,6 +14,8 @@ class LoginRequest extends UserRequest */ public function specific() { - return []; + return [ + 'remember_me' => 'integer' + ]; } } diff --git a/app/Http/Requests/JournalRequest.php b/app/Http/Requests/JournalRequest.php new file mode 100644 index 0000000..035e2d0 --- /dev/null +++ b/app/Http/Requests/JournalRequest.php @@ -0,0 +1,25 @@ + 'required|integer', + 'teacher_id' => 'required|integer', + 'subject_id' => 'required|integer', + 'score' => 'required|integer', + 'comment' => 'string|nullable', + 'date' => 'integer', + ]; + } +} diff --git a/app/Http/Requests/TaskRequest.php b/app/Http/Requests/TaskRequest.php new file mode 100644 index 0000000..352bb6c --- /dev/null +++ b/app/Http/Requests/TaskRequest.php @@ -0,0 +1,27 @@ + 'required|exists:bank_tasks,id', + 'deadline' => 'required' + + ]; + } +} diff --git a/app/Models/AnswerToTask.php b/app/Models/AnswerToTask.php new file mode 100644 index 0000000..50c1f31 --- /dev/null +++ b/app/Models/AnswerToTask.php @@ -0,0 +1,15 @@ +belongsTo(Theme::class); } + public function tasks() { + return $this->hasMany(Task::class); + } + + } diff --git a/app/Models/BankTaskFile.php b/app/Models/BankTaskFile.php index 7e47209..af11856 100644 --- a/app/Models/BankTaskFile.php +++ b/app/Models/BankTaskFile.php @@ -8,6 +8,10 @@ use Illuminate\Database\Eloquent\Model; class BankTaskFile extends Model { use HasFactory; - protected $table = 'bank_tasks_files'; + protected $table = 'bank_task_files'; protected $fillable = ['name', 'type', 'extension', 'url', 'banktask_id']; + + public function task() { + $this->belongsTo(Task::class); + } } diff --git a/app/Models/HeadTeacher.php b/app/Models/HeadTeacher.php index 9c8ecde..cf0eadc 100644 --- a/app/Models/HeadTeacher.php +++ b/app/Models/HeadTeacher.php @@ -9,7 +9,7 @@ class HeadTeacher extends Model { use HasFactory; - protected $guarded = [ + protected $fillable = [ 'user_id', 'updated_at', ]; diff --git a/app/Models/Journal.php b/app/Models/Journal.php new file mode 100644 index 0000000..66258c0 --- /dev/null +++ b/app/Models/Journal.php @@ -0,0 +1,22 @@ +hasMany(Task::class, 'class_id'); + } + } diff --git a/app/Models/Student.php b/app/Models/Student.php index 5105002..88796e4 100644 --- a/app/Models/Student.php +++ b/app/Models/Student.php @@ -2,6 +2,7 @@ namespace App\Models; +use Carbon\Carbon; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\Validator; @@ -10,8 +11,11 @@ class Student extends Model { use HasFactory; - protected $guarded = [ + protected $fillable = [ 'user_id', + ]; + + protected $guarded = [ 'updated_at', ]; @@ -21,7 +25,11 @@ class Student extends Model public function schoolClass() { - return $this->belongsTo(SchoolClass::class, 'class_id'); + return $this->belongsTo(SchoolClass::class, 'class_id')->where(''); + } + public function scores() + { + return $this->hasMany(Journal::class, 'student_id'); } public function user() diff --git a/app/Models/Task.php b/app/Models/Task.php index 9252b54..2704c68 100644 --- a/app/Models/Task.php +++ b/app/Models/Task.php @@ -8,6 +8,26 @@ use Illuminate\Database\Eloquent\Model; class Task extends Model { use HasFactory; + protected $fillable = ['banktask_id', 'deadline', 'teacher_id', 'class_id']; + + public function banktask() { + return $this->belongsTo(BankTask::class); + } + + public function teacher(){ + return $this->belongsTo(Teacher::class); + } + + public function class() { + return $this->belongsTo(SchoolClass::class); + } + + public function tasks() { + return $this->hasMany(Task::class); + } + + public function answers() { + return $this->hasMany(AnswerToTask::class); + } - protected $table = 'tasks'; } diff --git a/app/Models/TaskFile.php b/app/Models/TaskFile.php new file mode 100644 index 0000000..a713247 --- /dev/null +++ b/app/Models/TaskFile.php @@ -0,0 +1,14 @@ +belongsTo(User::class); } + public function tasks(){ + return $this->hasMany(Task::class); + } } diff --git a/app/Models/User.php b/app/Models/User.php index 2605b9e..0d9deba 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -5,7 +5,6 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; -use Carbon\Carbon; use Laravel\Passport\HasApiTokens; class User extends Authenticatable diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index f7ec0a6..f09b364 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -26,6 +26,6 @@ class AuthServiceProvider extends ServiceProvider { $this->registerPolicies(); - Passport::routes(); +// Passport::routes(); } } diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 4283423..e9ef2f7 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -38,7 +38,7 @@ class RouteServiceProvider extends ServiceProvider $this->configureRateLimiting(); $this->routes(function () { - Route::prefix('/api') + Route::prefix('api') ->middleware('api') ->namespace($this->namespace) ->group(base_path('routes/api.php')); @@ -57,7 +57,7 @@ class RouteServiceProvider extends ServiceProvider protected function configureRateLimiting() { RateLimiter::for('api', function (Request $request) { - return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip()); + return Limit::perMinute(100)->by(optional($request->user())->id ?: $request->ip()); }); } } diff --git a/composer.json b/composer.json index a534a8a..0e19528 100644 --- a/composer.json +++ b/composer.json @@ -9,6 +9,7 @@ "license": "MIT", "require": { "php": "^7.3|^8.0", + "cboden/ratchet": "^0.4.3", "fideloper/proxy": "^4.4", "fruitcake/laravel-cors": "^2.0", "guzzlehttp/guzzle": "^7.0.1", diff --git a/composer.lock b/composer.lock index 39d9038..6019409 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "3b9c799fff22949ca00970c9003aca42", + "content-hash": "b864dde6a95522044afee456c400fb07", "packages": [ { "name": "asm89/stack-cors", @@ -110,6 +110,63 @@ ], "time": "2020-08-18T23:57:15+00:00" }, + { + "name": "cboden/ratchet", + "version": "v0.4.3", + "source": { + "type": "git", + "url": "https://github.com/ratchetphp/Ratchet.git", + "reference": "466a0ecc83209c75b76645eb823401b5c52e5f21" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ratchetphp/Ratchet/zipball/466a0ecc83209c75b76645eb823401b5c52e5f21", + "reference": "466a0ecc83209c75b76645eb823401b5c52e5f21", + "shasum": "" + }, + "require": { + "guzzlehttp/psr7": "^1.0", + "php": ">=5.4.2", + "ratchet/rfc6455": "^0.3", + "react/socket": "^1.0 || ^0.8 || ^0.7 || ^0.6 || ^0.5", + "symfony/http-foundation": "^2.6|^3.0|^4.0|^5.0", + "symfony/routing": "^2.6|^3.0|^4.0|^5.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Ratchet\\": "src/Ratchet" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "role": "Developer" + }, + { + "name": "Matt Bonneau", + "role": "Developer" + } + ], + "description": "PHP WebSocket library", + "homepage": "http://socketo.me", + "keywords": [ + "Ratchet", + "WebSockets", + "server", + "sockets", + "websocket" + ], + "time": "2020-07-07T15:50:14+00:00" + }, { "name": "defuse/php-encryption", "version": "v2.2.1", @@ -375,26 +432,29 @@ }, { "name": "dragonmantank/cron-expression", - "version": "v3.0.2", + "version": "v3.1.0", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "48212cdc0a79051d50d7fc2f0645c5a321caf926" + "reference": "7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/48212cdc0a79051d50d7fc2f0645c5a321caf926", - "reference": "48212cdc0a79051d50d7fc2f0645c5a321caf926", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c", + "reference": "7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c", "shasum": "" }, "require": { - "php": "^7.1|^8.0" + "php": "^7.2|^8.0", + "webmozart/assert": "^1.7.0" }, "replace": { "mtdowling/cron-expression": "^1.0" }, "require-dev": { - "phpstan/phpstan": "^0.11|^0.12", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-webmozart-assert": "^0.12.7", "phpunit/phpunit": "^7.0|^8.0|^9.0" }, "type": "library", @@ -425,7 +485,7 @@ "type": "github" } ], - "time": "2020-10-13T01:26:01+00:00" + "time": "2020-11-24T19:55:57+00:00" }, { "name": "egulias/email-validator", @@ -491,6 +551,49 @@ ], "time": "2020-11-14T15:56:27+00:00" }, + { + "name": "evenement/evenement", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/igorw/evenement.git", + "reference": "531bfb9d15f8aa57454f5f0285b18bec903b8fb7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/igorw/evenement/zipball/531bfb9d15f8aa57454f5f0285b18bec903b8fb7", + "reference": "531bfb9d15f8aa57454f5f0285b18bec903b8fb7", + "shasum": "" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Evenement": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + } + ], + "description": "Événement is a very simple event dispatching library for PHP", + "keywords": [ + "event-dispatcher", + "event-emitter" + ], + "time": "2017-07-23T21:35:13+00:00" + }, { "name": "fideloper/proxy", "version": "4.4.1", @@ -952,16 +1055,16 @@ }, { "name": "laravel/framework", - "version": "v8.15.0", + "version": "v8.18.1", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "22e4182fa0885dea3772106c3b6df705b7c7363e" + "reference": "31747193c26ba0a9cb7929a912895d3cdefd10cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/22e4182fa0885dea3772106c3b6df705b7c7363e", - "reference": "22e4182fa0885dea3772106c3b6df705b7c7363e", + "url": "https://api.github.com/repos/laravel/framework/zipball/31747193c26ba0a9cb7929a912895d3cdefd10cf", + "reference": "31747193c26ba0a9cb7929a912895d3cdefd10cf", "shasum": "" }, "require": { @@ -981,15 +1084,15 @@ "psr/simple-cache": "^1.0", "ramsey/uuid": "^4.0", "swiftmailer/swiftmailer": "^6.0", - "symfony/console": "^5.1", - "symfony/error-handler": "^5.1", - "symfony/finder": "^5.1", - "symfony/http-foundation": "^5.1", - "symfony/http-kernel": "^5.1", - "symfony/mime": "^5.1", - "symfony/process": "^5.1", - "symfony/routing": "^5.1", - "symfony/var-dumper": "^5.1", + "symfony/console": "^5.1.4", + "symfony/error-handler": "^5.1.4", + "symfony/finder": "^5.1.4", + "symfony/http-foundation": "^5.1.4", + "symfony/http-kernel": "^5.1.4", + "symfony/mime": "^5.1.4", + "symfony/process": "^5.1.4", + "symfony/routing": "^5.1.4", + "symfony/var-dumper": "^5.1.4", "tijsverkoyen/css-to-inline-styles": "^2.2.2", "vlucas/phpdotenv": "^5.2", "voku/portable-ascii": "^1.4.8" @@ -1034,20 +1137,20 @@ "illuminate/view": "self.version" }, "require-dev": { - "aws/aws-sdk-php": "^3.0", + "aws/aws-sdk-php": "^3.155", "doctrine/dbal": "^2.6|^3.0", "filp/whoops": "^2.8", "guzzlehttp/guzzle": "^6.5.5|^7.0.1", "league/flysystem-cached-adapter": "^1.0", "mockery/mockery": "^1.4.2", - "orchestra/testbench-core": "^6.5", + "orchestra/testbench-core": "^6.8", "pda/pheanstalk": "^4.0", "phpunit/phpunit": "^8.5.8|^9.3.3", "predis/predis": "^1.1.1", - "symfony/cache": "^5.1" + "symfony/cache": "^5.1.4" }, "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.155).", "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6|^3.0).", "ext-ftp": "Required to use the Flysystem FTP driver.", "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", @@ -1069,8 +1172,8 @@ "predis/predis": "Required to use the predis connector (^1.1.2).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^5.1).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^5.1).", + "symfony/cache": "Required to PSR-6 cache bridge (^5.1.4).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^5.1.4).", "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." }, @@ -1111,20 +1214,20 @@ "framework", "laravel" ], - "time": "2020-11-17T14:53:20+00:00" + "time": "2020-12-08T22:05:12+00:00" }, { "name": "laravel/passport", - "version": "v10.0.1", + "version": "v10.1.0", "source": { "type": "git", "url": "https://github.com/laravel/passport.git", - "reference": "4e53f1b237a9e51ac10f0b30c6ebedd68f6848ab" + "reference": "c2b93a7d8d93cf303bb1eefbfa5610f084f9bdd4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/passport/zipball/4e53f1b237a9e51ac10f0b30c6ebedd68f6848ab", - "reference": "4e53f1b237a9e51ac10f0b30c6ebedd68f6848ab", + "url": "https://api.github.com/repos/laravel/passport/zipball/c2b93a7d8d93cf303bb1eefbfa5610f084f9bdd4", + "reference": "c2b93a7d8d93cf303bb1eefbfa5610f084f9bdd4", "shasum": "" }, "require": { @@ -1139,9 +1242,10 @@ "illuminate/encryption": "^8.2", "illuminate/http": "^8.2", "illuminate/support": "^8.2", - "league/oauth2-server": "^8.1", + "lcobucci/jwt": "^3.4|^4.0", + "league/oauth2-server": "^8.2", "nyholm/psr7": "^1.3", - "php": "^7.3", + "php": "^7.3|^8.0", "phpseclib/phpseclib": "^2.0", "symfony/psr-http-message-bridge": "^2.0" }, @@ -1183,7 +1287,7 @@ "oauth", "passport" ], - "time": "2020-09-15T16:41:42+00:00" + "time": "2020-11-26T07:57:30+00:00" }, { "name": "laravel/tinker", @@ -1250,35 +1354,99 @@ "time": "2020-10-29T13:07:12+00:00" }, { - "name": "lcobucci/jwt", - "version": "3.3.3", + "name": "lcobucci/clock", + "version": "2.0.0", "source": { "type": "git", - "url": "https://github.com/lcobucci/jwt.git", - "reference": "c1123697f6a2ec29162b82f170dd4a491f524773" + "url": "https://github.com/lcobucci/clock.git", + "reference": "353d83fe2e6ae95745b16b3d911813df6a05bfb3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/jwt/zipball/c1123697f6a2ec29162b82f170dd4a491f524773", - "reference": "c1123697f6a2ec29162b82f170dd4a491f524773", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/353d83fe2e6ae95745b16b3d911813df6a05bfb3", + "reference": "353d83fe2e6ae95745b16b3d911813df6a05bfb3", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "infection/infection": "^0.17", + "lcobucci/coding-standard": "^6.0", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-deprecation-rules": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/php-code-coverage": "9.1.4", + "phpunit/phpunit": "9.3.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Lcobucci\\Clock\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Luís Cobucci", + "email": "lcobucci@gmail.com" + } + ], + "description": "Yet another clock abstraction", + "funding": [ + { + "url": "https://github.com/lcobucci", + "type": "github" + }, + { + "url": "https://www.patreon.com/lcobucci", + "type": "patreon" + } + ], + "time": "2020-08-27T18:56:02+00:00" + }, + { + "name": "lcobucci/jwt", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/jwt.git", + "reference": "6d8665ccd924dc076a9b65d1ea8abe21d68f6958" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/6d8665ccd924dc076a9b65d1ea8abe21d68f6958", + "reference": "6d8665ccd924dc076a9b65d1ea8abe21d68f6958", "shasum": "" }, "require": { "ext-mbstring": "*", "ext-openssl": "*", - "php": "^5.6 || ^7.0" + "lcobucci/clock": "^2.0", + "php": "^7.4 || ^8.0" }, "require-dev": { - "mikey179/vfsstream": "~1.5", - "phpmd/phpmd": "~2.2", - "phpunit/php-invoker": "~1.1", - "phpunit/phpunit": "^5.7 || ^7.3", - "squizlabs/php_codesniffer": "~2.3" + "infection/infection": "^0.20", + "lcobucci/coding-standard": "^6.0", + "mikey179/vfsstream": "^1.6", + "phpbench/phpbench": "^0.17", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-deprecation-rules": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/php-invoker": "^3.1", + "phpunit/phpunit": "^9.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -1292,7 +1460,7 @@ ], "authors": [ { - "name": "Luís Otávio Cobucci Oblonczyk", + "name": "Luís Cobucci", "email": "lcobucci@gmail.com", "role": "Developer" } @@ -1312,7 +1480,7 @@ "type": "patreon" } ], - "time": "2020-08-20T13:22:28+00:00" + "time": "2020-11-25T02:06:12+00:00" }, { "name": "league/commonmark", @@ -1603,25 +1771,25 @@ }, { "name": "league/oauth2-server", - "version": "8.1.1", + "version": "8.2.4", "source": { "type": "git", "url": "https://github.com/thephpleague/oauth2-server.git", - "reference": "09f22e8121fa1832962dba18213b80d4267ef8a3" + "reference": "622eaa1f28eb4a2dea0cfc7e4f5280fac794e83c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/oauth2-server/zipball/09f22e8121fa1832962dba18213b80d4267ef8a3", - "reference": "09f22e8121fa1832962dba18213b80d4267ef8a3", + "url": "https://api.github.com/repos/thephpleague/oauth2-server/zipball/622eaa1f28eb4a2dea0cfc7e4f5280fac794e83c", + "reference": "622eaa1f28eb4a2dea0cfc7e4f5280fac794e83c", "shasum": "" }, "require": { "defuse/php-encryption": "^2.2.1", "ext-json": "*", "ext-openssl": "*", - "lcobucci/jwt": "^3.3.1", + "lcobucci/jwt": "^3.4 || ^4.0", "league/event": "^2.2", - "php": ">=7.2.0", + "php": "^7.2 || ^8.0", "psr/http-message": "^1.0.1" }, "replace": { @@ -1629,10 +1797,10 @@ "lncd/oauth2": "*" }, "require-dev": { - "laminas/laminas-diactoros": "^2.3.0", - "phpstan/phpstan": "^0.11.19", - "phpstan/phpstan-phpunit": "^0.11.2", - "phpunit/phpunit": "^8.5.4 || ^9.1.3", + "laminas/laminas-diactoros": "^2.4.1", + "phpstan/phpstan": "^0.12.57", + "phpstan/phpstan-phpunit": "^0.12.16", + "phpunit/phpunit": "^8.5.13", "roave/security-advisories": "dev-master" }, "type": "library", @@ -1682,7 +1850,7 @@ "type": "github" } ], - "time": "2020-07-01T11:33:50+00:00" + "time": "2020-12-10T11:35:44+00:00" }, { "name": "monolog/monolog", @@ -1777,16 +1945,16 @@ }, { "name": "nesbot/carbon", - "version": "2.41.5", + "version": "2.42.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "c4a9caf97cfc53adfc219043bcecf42bc663acee" + "reference": "d0463779663437392fe42ff339ebc0213bd55498" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/c4a9caf97cfc53adfc219043bcecf42bc663acee", - "reference": "c4a9caf97cfc53adfc219043bcecf42bc663acee", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/d0463779663437392fe42ff339ebc0213bd55498", + "reference": "d0463779663437392fe42ff339ebc0213bd55498", "shasum": "" }, "require": { @@ -1801,7 +1969,7 @@ "kylekatarnls/multi-tester": "^2.0", "phpmd/phpmd": "^2.9", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.35", + "phpstan/phpstan": "^0.12.54", "phpunit/phpunit": "^7.5 || ^8.0", "squizlabs/php_codesniffer": "^3.4" }, @@ -1862,20 +2030,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T06:02:30+00:00" + "time": "2020-11-28T14:25:28+00:00" }, { "name": "nikic/php-parser", - "version": "v4.10.2", + "version": "v4.10.3", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "658f1be311a230e0907f5dfe0213742aff0596de" + "reference": "dbe56d23de8fcb157bbc0cfb3ad7c7de0cfb0984" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/658f1be311a230e0907f5dfe0213742aff0596de", - "reference": "658f1be311a230e0907f5dfe0213742aff0596de", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dbe56d23de8fcb157bbc0cfb3ad7c7de0cfb0984", + "reference": "dbe56d23de8fcb157bbc0cfb3ad7c7de0cfb0984", "shasum": "" }, "require": { @@ -1914,7 +2082,7 @@ "parser", "php" ], - "time": "2020-09-26T10:30:38+00:00" + "time": "2020-12-03T17:45:45+00:00" }, { "name": "nyholm/psr7", @@ -2658,16 +2826,16 @@ }, { "name": "psy/psysh", - "version": "v0.10.4", + "version": "v0.10.5", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560" + "reference": "7c710551d4a2653afa259c544508dc18a9098956" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a8aec1b2981ab66882a01cce36a49b6317dc3560", - "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/7c710551d4a2653afa259c544508dc18a9098956", + "reference": "7c710551d4a2653afa259c544508dc18a9098956", "shasum": "" }, "require": { @@ -2726,7 +2894,7 @@ "interactive", "shell" ], - "time": "2020-05-03T19:32:03+00:00" + "time": "2020-12-04T02:51:30+00:00" }, { "name": "ralouphie/getallheaders", @@ -2925,33 +3093,499 @@ "time": "2020-08-18T17:17:46+00:00" }, { - "name": "swiftmailer/swiftmailer", - "version": "v6.2.3", + "name": "ratchet/rfc6455", + "version": "v0.3", "source": { "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "149cfdf118b169f7840bbe3ef0d4bc795d1780c9" + "url": "https://github.com/ratchetphp/RFC6455.git", + "reference": "c8651c7938651c2d55f5d8c2422ac5e57a183341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/149cfdf118b169f7840bbe3ef0d4bc795d1780c9", - "reference": "149cfdf118b169f7840bbe3ef0d4bc795d1780c9", + "url": "https://api.github.com/repos/ratchetphp/RFC6455/zipball/c8651c7938651c2d55f5d8c2422ac5e57a183341", + "reference": "c8651c7938651c2d55f5d8c2422ac5e57a183341", "shasum": "" }, "require": { - "egulias/email-validator": "~2.0", + "guzzlehttp/psr7": "^1.0", + "php": ">=5.4.2" + }, + "require-dev": { + "phpunit/phpunit": "5.7.*", + "react/socket": "^1.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Ratchet\\RFC6455\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "role": "Developer" + }, + { + "name": "Matt Bonneau", + "role": "Developer" + } + ], + "description": "RFC6455 WebSocket protocol handler", + "homepage": "http://socketo.me", + "keywords": [ + "WebSockets", + "rfc6455", + "websocket" + ], + "time": "2020-05-15T18:31:24+00:00" + }, + { + "name": "react/cache", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/cache.git", + "reference": "44a568925556b0bd8cacc7b49fb0f1cf0d706a0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/cache/zipball/44a568925556b0bd8cacc7b49fb0f1cf0d706a0c", + "reference": "44a568925556b0bd8cacc7b49fb0f1cf0d706a0c", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/promise": "^3.0 || ^2.0 || ^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async, Promise-based cache interface for ReactPHP", + "keywords": [ + "cache", + "caching", + "promise", + "reactphp" + ], + "funding": [ + { + "url": "https://github.com/WyriHaximus", + "type": "github" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2020-09-18T12:12:35+00:00" + }, + { + "name": "react/dns", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/dns.git", + "reference": "665260757171e2ab17485b44e7ffffa7acb6ca1f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/dns/zipball/665260757171e2ab17485b44e7ffffa7acb6ca1f", + "reference": "665260757171e2ab17485b44e7ffffa7acb6ca1f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/cache": "^1.0 || ^0.6 || ^0.5", + "react/event-loop": "^1.0 || ^0.5", + "react/promise": "^3.0 || ^2.7 || ^1.2.1", + "react/promise-timer": "^1.2" + }, + "require-dev": { + "clue/block-react": "^1.2", + "phpunit/phpunit": "^9.3 || ^4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Dns\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async DNS resolver for ReactPHP", + "keywords": [ + "async", + "dns", + "dns-resolver", + "reactphp" + ], + "funding": [ + { + "url": "https://github.com/WyriHaximus", + "type": "github" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2020-09-18T12:12:55+00:00" + }, + { + "name": "react/event-loop", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/reactphp/event-loop.git", + "reference": "6d24de090cd59cfc830263cfba965be77b563c13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/6d24de090cd59cfc830263cfba965be77b563c13", + "reference": "6d24de090cd59cfc830263cfba965be77b563c13", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^7.0 || ^6.4 || ^5.7 || ^4.8.35" + }, + "suggest": { + "ext-event": "~1.0 for ExtEventLoop", + "ext-pcntl": "For signal handling support when using the StreamSelectLoop", + "ext-uv": "* for ExtUvLoop" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\EventLoop\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", + "keywords": [ + "asynchronous", + "event-loop" + ], + "time": "2020-01-01T18:39:52+00:00" + }, + { + "name": "react/promise", + "version": "v2.8.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4", + "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com" + } + ], + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], + "time": "2020-05-12T15:16:56+00:00" + }, + { + "name": "react/promise-timer", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise-timer.git", + "reference": "daee9baf6ef30c43ea4c86399f828bb5f558f6e6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise-timer/zipball/daee9baf6ef30c43ea4c86399f828bb5f558f6e6", + "reference": "daee9baf6ef30c43ea4c86399f828bb5f558f6e6", + "shasum": "" + }, + "require": { + "php": ">=5.3", + "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5", + "react/promise": "^3.0 || ^2.7.0 || ^1.2.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.0 || ^5.7 || ^4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Promise\\Timer\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@lueck.tv" + } + ], + "description": "A trivial implementation of timeouts for Promises, built on top of ReactPHP.", + "homepage": "https://github.com/reactphp/promise-timer", + "keywords": [ + "async", + "event-loop", + "promise", + "reactphp", + "timeout", + "timer" + ], + "time": "2020-07-10T12:18:06+00:00" + }, + { + "name": "react/socket", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/socket.git", + "reference": "e2b96b23a13ca9b41ab343268dbce3f8ef4d524a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/socket/zipball/e2b96b23a13ca9b41ab343268dbce3f8ef4d524a", + "reference": "e2b96b23a13ca9b41ab343268dbce3f8ef4d524a", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/dns": "^1.1", + "react/event-loop": "^1.0 || ^0.5", + "react/promise": "^2.6.0 || ^1.2.1", + "react/promise-timer": "^1.4.0", + "react/stream": "^1.1" + }, + "require-dev": { + "clue/block-react": "^1.2", + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35", + "react/promise-stream": "^1.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Socket\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", + "keywords": [ + "Connection", + "Socket", + "async", + "reactphp", + "stream" + ], + "funding": [ + { + "url": "https://github.com/WyriHaximus", + "type": "github" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2020-08-28T12:49:05+00:00" + }, + { + "name": "react/stream", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/reactphp/stream.git", + "reference": "7c02b510ee3f582c810aeccd3a197b9c2f52ff1a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/stream/zipball/7c02b510ee3f582c810aeccd3a197b9c2f52ff1a", + "reference": "7c02b510ee3f582c810aeccd3a197b9c2f52ff1a", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.8", + "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5" + }, + "require-dev": { + "clue/stream-filter": "~1.2", + "phpunit/phpunit": "^7.0 || ^6.4 || ^5.7 || ^4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Stream\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", + "keywords": [ + "event-driven", + "io", + "non-blocking", + "pipe", + "reactphp", + "readable", + "stream", + "writable" + ], + "time": "2020-05-04T10:17:57+00:00" + }, + { + "name": "swiftmailer/swiftmailer", + "version": "v6.2.4", + "source": { + "type": "git", + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "56f0ab23f54c4ccbb0d5dcc67ff8552e0c98d59e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/56f0ab23f54c4ccbb0d5dcc67ff8552e0c98d59e", + "reference": "56f0ab23f54c4ccbb0d5dcc67ff8552e0c98d59e", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.0", "php": ">=7.0.0", "symfony/polyfill-iconv": "^1.0", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, "require-dev": { - "mockery/mockery": "~0.9.1", - "symfony/phpunit-bridge": "^3.4.19|^4.1.8" + "mockery/mockery": "^1.0", + "symfony/phpunit-bridge": "^4.4|^5.0" }, "suggest": { - "ext-intl": "Needed to support internationalized email addresses", - "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed" + "ext-intl": "Needed to support internationalized email addresses" }, "type": "library", "extra": { @@ -2984,20 +3618,30 @@ "mail", "mailer" ], - "time": "2019-11-12T09:31:26+00:00" + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", + "type": "tidelift" + } + ], + "time": "2020-12-08T18:02:06+00:00" }, { "name": "symfony/console", - "version": "v5.1.8", + "version": "v5.2.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "e0b2c29c0fa6a69089209bbe8fcff4df2a313d0e" + "reference": "3e0564fb08d44a98bd5f1960204c958e57bd586b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/e0b2c29c0fa6a69089209bbe8fcff4df2a313d0e", - "reference": "e0b2c29c0fa6a69089209bbe8fcff4df2a313d0e", + "url": "https://api.github.com/repos/symfony/console/zipball/3e0564fb08d44a98bd5f1960204c958e57bd586b", + "reference": "3e0564fb08d44a98bd5f1960204c958e57bd586b", "shasum": "" }, "require": { @@ -3058,6 +3702,12 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], "funding": [ { "url": "https://symfony.com/sponsor", @@ -3072,20 +3722,20 @@ "type": "tidelift" } ], - "time": "2020-10-24T12:01:57+00:00" + "time": "2020-11-28T11:24:18+00:00" }, { "name": "symfony/css-selector", - "version": "v5.1.8", + "version": "v5.2.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "6cbebda22ffc0d4bb8fea0c1311c2ca54c4c8fa0" + "reference": "b8d8eb06b0942e84a69e7acebc3e9c1e6e6e7256" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/6cbebda22ffc0d4bb8fea0c1311c2ca54c4c8fa0", - "reference": "6cbebda22ffc0d4bb8fea0c1311c2ca54c4c8fa0", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/b8d8eb06b0942e84a69e7acebc3e9c1e6e6e7256", + "reference": "b8d8eb06b0942e84a69e7acebc3e9c1e6e6e7256", "shasum": "" }, "require": { @@ -3134,7 +3784,7 @@ "type": "tidelift" } ], - "time": "2020-10-24T12:01:57+00:00" + "time": "2020-10-28T21:31:18+00:00" }, { "name": "symfony/deprecation-contracts", @@ -3202,16 +3852,16 @@ }, { "name": "symfony/error-handler", - "version": "v5.1.8", + "version": "v5.2.0", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "a154f2b12fd1ec708559ba73ed58bd1304e55718" + "reference": "289008c5be039e39908d33ae0a8ac99be1210bba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/a154f2b12fd1ec708559ba73ed58bd1304e55718", - "reference": "a154f2b12fd1ec708559ba73ed58bd1304e55718", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/289008c5be039e39908d33ae0a8ac99be1210bba", + "reference": "289008c5be039e39908d33ae0a8ac99be1210bba", "shasum": "" }, "require": { @@ -3264,20 +3914,20 @@ "type": "tidelift" } ], - "time": "2020-10-24T12:01:57+00:00" + "time": "2020-10-28T21:46:03+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.1.8", + "version": "v5.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "26f4edae48c913fc183a3da0553fe63bdfbd361a" + "reference": "aa13a09811e6d2ad43f8fb336bebdb7691d85d3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/26f4edae48c913fc183a3da0553fe63bdfbd361a", - "reference": "26f4edae48c913fc183a3da0553fe63bdfbd361a", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/aa13a09811e6d2ad43f8fb336bebdb7691d85d3c", + "reference": "aa13a09811e6d2ad43f8fb336bebdb7691d85d3c", "shasum": "" }, "require": { @@ -3346,7 +3996,7 @@ "type": "tidelift" } ], - "time": "2020-10-24T12:01:57+00:00" + "time": "2020-11-01T16:14:45+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -3426,16 +4076,16 @@ }, { "name": "symfony/finder", - "version": "v5.1.8", + "version": "v5.2.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "e70eb5a69c2ff61ea135a13d2266e8914a67b3a0" + "reference": "fd8305521692f27eae3263895d1ef1571c71a78d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/e70eb5a69c2ff61ea135a13d2266e8914a67b3a0", - "reference": "e70eb5a69c2ff61ea135a13d2266e8914a67b3a0", + "url": "https://api.github.com/repos/symfony/finder/zipball/fd8305521692f27eae3263895d1ef1571c71a78d", + "reference": "fd8305521692f27eae3263895d1ef1571c71a78d", "shasum": "" }, "require": { @@ -3480,7 +4130,7 @@ "type": "tidelift" } ], - "time": "2020-10-24T12:01:57+00:00" + "time": "2020-11-18T09:42:36+00:00" }, { "name": "symfony/http-client-contracts", @@ -3560,16 +4210,16 @@ }, { "name": "symfony/http-foundation", - "version": "v5.1.8", + "version": "v5.2.0", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "a2860ec970404b0233ab1e59e0568d3277d32b6f" + "reference": "e4576271ee99123aa59a40564c7b5405f0ebd1e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/a2860ec970404b0233ab1e59e0568d3277d32b6f", - "reference": "a2860ec970404b0233ab1e59e0568d3277d32b6f", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e4576271ee99123aa59a40564c7b5405f0ebd1e6", + "reference": "e4576271ee99123aa59a40564c7b5405f0ebd1e6", "shasum": "" }, "require": { @@ -3626,20 +4276,20 @@ "type": "tidelift" } ], - "time": "2020-10-24T12:01:57+00:00" + "time": "2020-11-27T06:13:25+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.1.8", + "version": "v5.2.0", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "a13b3c4d994a4fd051f4c6800c5e33c9508091dd" + "reference": "38907e5ccb2d9d371191a946734afc83c7a03160" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/a13b3c4d994a4fd051f4c6800c5e33c9508091dd", - "reference": "a13b3c4d994a4fd051f4c6800c5e33c9508091dd", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/38907e5ccb2d9d371191a946734afc83c7a03160", + "reference": "38907e5ccb2d9d371191a946734afc83c7a03160", "shasum": "" }, "require": { @@ -3659,7 +4309,7 @@ "symfony/cache": "<5.0", "symfony/config": "<5.0", "symfony/console": "<4.4", - "symfony/dependency-injection": "<4.4", + "symfony/dependency-injection": "<5.1.8", "symfony/doctrine-bridge": "<5.0", "symfony/form": "<5.0", "symfony/http-client": "<5.0", @@ -3679,7 +4329,7 @@ "symfony/config": "^5.0", "symfony/console": "^4.4|^5.0", "symfony/css-selector": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", + "symfony/dependency-injection": "^5.1.8", "symfony/dom-crawler": "^4.4|^5.0", "symfony/expression-language": "^4.4|^5.0", "symfony/finder": "^4.4|^5.0", @@ -3735,24 +4385,25 @@ "type": "tidelift" } ], - "time": "2020-10-28T05:55:23+00:00" + "time": "2020-11-30T05:54:18+00:00" }, { "name": "symfony/mime", - "version": "v5.1.8", + "version": "v5.2.0", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "f5485a92c24d4bcfc2f3fc648744fb398482ff1b" + "reference": "05f667e8fa029568964fd3bec6bc17765b853cc5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/f5485a92c24d4bcfc2f3fc648744fb398482ff1b", - "reference": "f5485a92c24d4bcfc2f3fc648744fb398482ff1b", + "url": "https://api.github.com/repos/symfony/mime/zipball/05f667e8fa029568964fd3bec6bc17765b853cc5", + "reference": "05f667e8fa029568964fd3bec6bc17765b853cc5", "shasum": "" }, "require": { "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0", "symfony/polyfill-php80": "^1.15" @@ -3762,7 +4413,11 @@ }, "require-dev": { "egulias/email-validator": "^2.1.10", - "symfony/dependency-injection": "^4.4|^5.0" + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/property-access": "^4.4|^5.1", + "symfony/property-info": "^4.4|^5.1", + "symfony/serializer": "^5.2" }, "type": "library", "autoload": { @@ -3807,7 +4462,7 @@ "type": "tidelift" } ], - "time": "2020-10-24T12:01:57+00:00" + "time": "2020-10-30T14:55:39+00:00" }, { "name": "symfony/polyfill-ctype", @@ -4513,16 +5168,16 @@ }, { "name": "symfony/process", - "version": "v5.1.8", + "version": "v5.2.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "f00872c3f6804150d6a0f73b4151daab96248101" + "reference": "240e74140d4d956265048f3025c0aecbbc302d54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/f00872c3f6804150d6a0f73b4151daab96248101", - "reference": "f00872c3f6804150d6a0f73b4151daab96248101", + "url": "https://api.github.com/repos/symfony/process/zipball/240e74140d4d956265048f3025c0aecbbc302d54", + "reference": "240e74140d4d956265048f3025c0aecbbc302d54", "shasum": "" }, "require": { @@ -4568,7 +5223,7 @@ "type": "tidelift" } ], - "time": "2020-10-24T12:01:57+00:00" + "time": "2020-11-02T15:47:15+00:00" }, { "name": "symfony/psr-http-message-bridge", @@ -4650,16 +5305,16 @@ }, { "name": "symfony/routing", - "version": "v5.1.8", + "version": "v5.2.0", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "d6ceee2a37b61b41079005207bf37746d1bfe71f" + "reference": "130ac5175ad2fd417978baebd8062e2e6b2bc28b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/d6ceee2a37b61b41079005207bf37746d1bfe71f", - "reference": "d6ceee2a37b61b41079005207bf37746d1bfe71f", + "url": "https://api.github.com/repos/symfony/routing/zipball/130ac5175ad2fd417978baebd8062e2e6b2bc28b", + "reference": "130ac5175ad2fd417978baebd8062e2e6b2bc28b", "shasum": "" }, "require": { @@ -4673,7 +5328,7 @@ "symfony/yaml": "<4.4" }, "require-dev": { - "doctrine/annotations": "~1.2", + "doctrine/annotations": "^1.7", "psr/log": "~1.0", "symfony/config": "^5.0", "symfony/dependency-injection": "^4.4|^5.0", @@ -4733,7 +5388,7 @@ "type": "tidelift" } ], - "time": "2020-10-24T12:01:57+00:00" + "time": "2020-11-27T00:39:34+00:00" }, { "name": "symfony/service-contracts", @@ -4813,16 +5468,16 @@ }, { "name": "symfony/string", - "version": "v5.1.8", + "version": "v5.2.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "a97573e960303db71be0dd8fda9be3bca5e0feea" + "reference": "40e975edadd4e32cd16f3753b3bad65d9ac48242" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/a97573e960303db71be0dd8fda9be3bca5e0feea", - "reference": "a97573e960303db71be0dd8fda9be3bca5e0feea", + "url": "https://api.github.com/repos/symfony/string/zipball/40e975edadd4e32cd16f3753b3bad65d9ac48242", + "reference": "40e975edadd4e32cd16f3753b3bad65d9ac48242", "shasum": "" }, "require": { @@ -4889,27 +5544,27 @@ "type": "tidelift" } ], - "time": "2020-10-24T12:01:57+00:00" + "time": "2020-10-24T12:08:07+00:00" }, { "name": "symfony/translation", - "version": "v5.1.8", + "version": "v5.2.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "27980838fd261e04379fa91e94e81e662fe5a1b6" + "reference": "52f486a707510884450df461b5a6429dd7a67379" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/27980838fd261e04379fa91e94e81e662fe5a1b6", - "reference": "27980838fd261e04379fa91e94e81e662fe5a1b6", + "url": "https://api.github.com/repos/symfony/translation/zipball/52f486a707510884450df461b5a6429dd7a67379", + "reference": "52f486a707510884450df461b5a6429dd7a67379", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php80": "^1.15", - "symfony/translation-contracts": "^2" + "symfony/translation-contracts": "^2.3" }, "conflict": { "symfony/config": "<4.4", @@ -4939,6 +5594,9 @@ }, "type": "library", "autoload": { + "files": [ + "Resources/functions.php" + ], "psr-4": { "Symfony\\Component\\Translation\\": "" }, @@ -4976,7 +5634,7 @@ "type": "tidelift" } ], - "time": "2020-10-24T12:01:57+00:00" + "time": "2020-11-28T11:24:18+00:00" }, { "name": "symfony/translation-contracts", @@ -5055,16 +5713,16 @@ }, { "name": "symfony/var-dumper", - "version": "v5.1.8", + "version": "v5.2.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "4e13f3fcefb1fcaaa5efb5403581406f4e840b9a" + "reference": "173a79c462b1c81e1fa26129f71e41333d846b26" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/4e13f3fcefb1fcaaa5efb5403581406f4e840b9a", - "reference": "4e13f3fcefb1fcaaa5efb5403581406f4e840b9a", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/173a79c462b1c81e1fa26129f71e41333d846b26", + "reference": "173a79c462b1c81e1fa26129f71e41333d846b26", "shasum": "" }, "require": { @@ -5136,7 +5794,7 @@ "type": "tidelift" } ], - "time": "2020-10-27T10:11:13+00:00" + "time": "2020-11-27T00:39:34+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -5332,6 +5990,55 @@ } ], "time": "2020-11-12T00:07:28+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.9.1", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<3.9.1" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36 || ^7.5.13" + }, + "type": "library", + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2020-07-08T17:02:28+00:00" } ], "packages-dev": [ @@ -5463,16 +6170,16 @@ }, { "name": "facade/ignition", - "version": "2.5.2", + "version": "2.5.3", "source": { "type": "git", "url": "https://github.com/facade/ignition.git", - "reference": "08668034beb185fa2ac6f09b1034eaa440952ace" + "reference": "d8dc4f90ed469f9f9313b976fb078c20585d5c99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facade/ignition/zipball/08668034beb185fa2ac6f09b1034eaa440952ace", - "reference": "08668034beb185fa2ac6f09b1034eaa440952ace", + "url": "https://api.github.com/repos/facade/ignition/zipball/d8dc4f90ed469f9f9313b976fb078c20585d5c99", + "reference": "d8dc4f90ed469f9f9313b976fb078c20585d5c99", "shasum": "" }, "require": { @@ -5530,7 +6237,7 @@ "laravel", "page" ], - "time": "2020-11-17T09:18:51+00:00" + "time": "2020-12-09T20:25:45+00:00" }, { "name": "facade/ignition-contracts", @@ -5583,16 +6290,16 @@ }, { "name": "fakerphp/faker", - "version": "v1.11.0", + "version": "v1.12.1", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "f228dc5112bafc14c77d40a2acc0c48058e184b0" + "reference": "841e8bdde345cc1ea9f98e776959e7531cadea0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/f228dc5112bafc14c77d40a2acc0c48058e184b0", - "reference": "f228dc5112bafc14c77d40a2acc0c48058e184b0", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/841e8bdde345cc1ea9f98e776959e7531cadea0e", + "reference": "841e8bdde345cc1ea9f98e776959e7531cadea0e", "shasum": "" }, "require": { @@ -5627,7 +6334,7 @@ "faker", "fixtures" ], - "time": "2020-11-15T20:27:00+00:00" + "time": "2020-12-11T10:39:41+00:00" }, { "name": "filp/whoops", @@ -6001,16 +6708,16 @@ }, { "name": "phar-io/version", - "version": "3.0.2", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "c6bb6825def89e0a32220f88337f8ceaf1975fa0" + "reference": "726c026815142e4f8677b7cb7f2249c9ffb7ecae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/c6bb6825def89e0a32220f88337f8ceaf1975fa0", - "reference": "c6bb6825def89e0a32220f88337f8ceaf1975fa0", + "url": "https://api.github.com/repos/phar-io/version/zipball/726c026815142e4f8677b7cb7f2249c9ffb7ecae", + "reference": "726c026815142e4f8677b7cb7f2249c9ffb7ecae", "shasum": "" }, "require": { @@ -6044,7 +6751,7 @@ } ], "description": "Library for handling version information and constraints", - "time": "2020-06-27T14:39:04+00:00" + "time": "2020-11-30T09:21:21+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -6257,16 +6964,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.3", + "version": "9.2.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "6b20e2055f7c29b56cb3870b3de7cc463d7add41" + "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6b20e2055f7c29b56cb3870b3de7cc463d7add41", - "reference": "6b20e2055f7c29b56cb3870b3de7cc463d7add41", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f3e026641cc91909d421802dd3ac7827ebfd97e1", + "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1", "shasum": "" }, "require": { @@ -6280,7 +6987,7 @@ "sebastian/code-unit-reverse-lookup": "^2.0.2", "sebastian/complexity": "^2.0", "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0", + "sebastian/lines-of-code": "^1.0.3", "sebastian/version": "^3.0.1", "theseer/tokenizer": "^1.2.0" }, @@ -6326,7 +7033,7 @@ "type": "github" } ], - "time": "2020-10-30T10:46:41+00:00" + "time": "2020-11-28T06:44:49+00:00" }, { "name": "phpunit/php-file-iterator", @@ -6555,16 +7262,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.4.3", + "version": "9.5.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "9fa359ff5ddaa5eb2be2bedb08a6a5787a5807ab" + "reference": "8e16c225d57c3d6808014df6b1dd7598d0a5bbbe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9fa359ff5ddaa5eb2be2bedb08a6a5787a5807ab", - "reference": "9fa359ff5ddaa5eb2be2bedb08a6a5787a5807ab", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8e16c225d57c3d6808014df6b1dd7598d0a5bbbe", + "reference": "8e16c225d57c3d6808014df6b1dd7598d0a5bbbe", "shasum": "" }, "require": { @@ -6580,7 +7287,7 @@ "phar-io/version": "^3.0.2", "php": ">=7.3", "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2", + "phpunit/php-code-coverage": "^9.2.3", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.3", @@ -6611,7 +7318,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.4-dev" + "dev-master": "9.5-dev" } }, "autoload": { @@ -6650,7 +7357,7 @@ "type": "github" } ], - "time": "2020-11-10T12:53:30+00:00" + "time": "2020-12-04T05:05:53+00:00" }, { "name": "sebastian/cli-parser", @@ -7186,16 +7893,16 @@ }, { "name": "sebastian/lines-of-code", - "version": "1.0.2", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "acf76492a65401babcf5283296fa510782783a7a" + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/acf76492a65401babcf5283296fa510782783a7a", - "reference": "acf76492a65401babcf5283296fa510782783a7a", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", "shasum": "" }, "require": { @@ -7235,7 +7942,7 @@ "type": "github" } ], - "time": "2020-10-26T17:03:56+00:00" + "time": "2020-11-28T06:42:11+00:00" }, { "name": "sebastian/object-enumerator", @@ -7597,55 +8304,6 @@ } ], "time": "2020-07-12T23:59:07+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.9.1", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<3.9.1" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" - }, - "type": "library", - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "time": "2020-07-08T17:02:28+00:00" } ], "aliases": [], diff --git a/config/app.php b/config/app.php index cf85d7b..1c868c1 100644 --- a/config/app.php +++ b/config/app.php @@ -162,6 +162,7 @@ return [ Illuminate\Validation\ValidationServiceProvider::class, Illuminate\View\ViewServiceProvider::class, + /* * Package Service Providers... */ @@ -175,6 +176,7 @@ return [ App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, + ], /* diff --git a/database/migrations/2020_12_03_104028_create_bank_task_files_table.php b/database/migrations/2020_12_03_104028_create_bank_task_files_table.php index a87b324..82b8c38 100644 --- a/database/migrations/2020_12_03_104028_create_bank_task_files_table.php +++ b/database/migrations/2020_12_03_104028_create_bank_task_files_table.php @@ -13,7 +13,7 @@ class CreateBankTaskFilesTable extends Migration */ public function up() { - Schema::create('bank_tasks_files', function (Blueprint $table) { + Schema::create('bank_task_files', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); $table->string('type'); @@ -23,7 +23,7 @@ class CreateBankTaskFilesTable extends Migration $table->unsignedInteger('banktask_id'); $table->foreign('banktask_id') ->references('id')->on('bank_tasks') - ->onDelete('no action'); + ->onDelete('cascade'); }); } @@ -35,6 +35,6 @@ class CreateBankTaskFilesTable extends Migration */ public function down() { - Schema::dropIfExists('bank_tasks_files'); + Schema::dropIfExists('bank_task_files'); } } diff --git a/database/migrations/2020_12_03_172010_create_tasks_table.php b/database/migrations/2020_12_03_172010_create_tasks_table.php new file mode 100644 index 0000000..602ab57 --- /dev/null +++ b/database/migrations/2020_12_03_172010_create_tasks_table.php @@ -0,0 +1,43 @@ +id(); + $table->unsignedInteger('banktask_id'); + $table->timestamp('deadline')->nullable(); + $table->unsignedInteger('teacher_id')->nullable(); + $table->unsignedInteger('class_id')->nullable(); + $table->timestamps(); + + $table->foreign('banktask_id')->references('id')->on('bank_tasks') + ->onDelete('set null'); + +// $table->foreign('class_id')->references('id')->on('school_classes') +// ->onDelete('cascade'); +// $table->foreign('teacher_id')->references('id')->on('teachers') +// ->onDelete('set null'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('tasks'); + } +} diff --git a/database/migrations/2020_12_07_120455_create_answers_to_task_table.php b/database/migrations/2020_12_07_120455_create_answers_to_task_table.php new file mode 100644 index 0000000..fe0b6fb --- /dev/null +++ b/database/migrations/2020_12_07_120455_create_answers_to_task_table.php @@ -0,0 +1,42 @@ +id(); + $table->text('description')->nullable(); + $table->smallInteger('mark')->nullable(); + $table->text('comment_by_teacher')->nullable(); + $table->boolean('checked')->default('0'); + $table->unsignedInteger('task_id'); + $table->unsignedInteger('student_id'); + $table->boolean('review')->default('0'); + $table->timestamps(); + + $table->foreign('task_id')->references('id')->on('tasks') + ->onDelete('set null'); + $table->foreign('student_id')->references('id')->on('students'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('answers_to_task'); + } +} diff --git a/database/migrations/2020_12_08_122859_create_task_files_table.php b/database/migrations/2020_12_08_122859_create_task_files_table.php new file mode 100644 index 0000000..5ff4916 --- /dev/null +++ b/database/migrations/2020_12_08_122859_create_task_files_table.php @@ -0,0 +1,42 @@ +bigIncrements('id'); + $table->string('name'); + $table->string('type'); + $table->string('extension'); + $table->string('url', 400); + $table->timestamps(); + $table->unsignedInteger('task_id'); + $table->unsignedInteger('user_id'); + + $table->foreign('task_id')->references('id')->on('tasks') + ->onDelete('cascade'); + $table->foreign('user_id')->references('id')->on('users') + ->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('task_files'); + } +} diff --git a/database/migrations/2020_12_13_200032_create_journals_table.php b/database/migrations/2020_12_13_200032_create_journals_table.php new file mode 100644 index 0000000..93f215c --- /dev/null +++ b/database/migrations/2020_12_13_200032_create_journals_table.php @@ -0,0 +1,47 @@ +id(); + $table->unsignedBigInteger('teacher_id'); + $table->unsignedBigInteger('student_id'); + $table->unsignedBigInteger('subject_id'); + $table->unsignedBigInteger('score'); + $table->string('comment')->nullable(); + $table->timestamps(); + + $table->foreign('subject_id') + ->references('id')->on('subjects'); + + $table->foreign('teacher_id') + ->references('id')->on('teachers') + ->onDelete('cascade'); + + $table->foreign('student_id') + ->references('id')->on('students') + ->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('journals'); + } +} diff --git a/database/migrations/2020_12_14_170701_create_news_table.php b/database/migrations/2020_12_14_170701_create_news_table.php new file mode 100644 index 0000000..69457cb --- /dev/null +++ b/database/migrations/2020_12_14_170701_create_news_table.php @@ -0,0 +1,37 @@ +id(); + $table->string('title'); + $table->text('description'); + $table->string('photo_uri')->nullable(); + $table->unsignedInteger('headteacher_id'); + + $table->foreign('headteacher_id')->references('id')->on('head_teachers'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('news'); + } +} diff --git a/database/migrations/2020_12_15_092036_create_news_files_table.php b/database/migrations/2020_12_15_092036_create_news_files_table.php new file mode 100644 index 0000000..0b2e63d --- /dev/null +++ b/database/migrations/2020_12_15_092036_create_news_files_table.php @@ -0,0 +1,39 @@ +bigIncrements('id'); + $table->string('name'); + $table->string('type'); + $table->string('extension'); + $table->timestamps(); + $table->unsignedInteger('news_id'); + $table->foreign('news_id') + ->references('id')->on('news') + ->onDelete('cascade'); + + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('news'); + } +} diff --git a/routes/api.php b/routes/api.php index c28dfbd..b515579 100644 --- a/routes/api.php +++ b/routes/api.php @@ -17,32 +17,69 @@ Route::apiResource('headteachers', 'Users\HeadTeacherController'); Route::apiResource('teachers', 'Users\TeacherController');//->middleware(['auth:api','role:headteacher|teacher']); Route::get('teacher/{teacher}/classes', 'Users\TeacherController@getClasses'); //получить классы у которых ведет учитель +Route::get('teacher/{teacher}/classes', 'Users\TeacherController@getClasses'); +Route::get('teacher/{teacher}/classes/{class}/uncheked-task', 'Users\TeacherController@getUncheckedTask'); Route::apiResource('students', 'Users\StudentController'); +Route::get('/student/{student}/answers', 'Users\StudentController@getAnswers'); Route::apiResource('parents', 'Users\ParenttController'); -Route::apiResource('subjects', 'SubjectController'); +Route::apiResource('subjects', 'BankTask\SubjectController'); Route::apiResource('classes', 'SchoolClassController'); Route::post('classes/{class}/teacher', 'SchoolClassController@addTeacher'); Route::get('classes/{class}/students', 'SchoolClassController@getStudents'); //все ученики класса +Route::get('classes/{class}/journal', 'SchoolClassController@getStudentsJournal'); //все ученики класса с оценками Route::get('classes/{class}/subjects', 'SchoolClassController@getSubjects'); //все предметы класса -Route::apiResource('themes', 'ThemeController'); +Route::apiResource('journal', 'JournalController'); + +Route::apiResource('themes', 'BankTask\ThemeController'); Route::apiResource('timetables', 'TimetableController'); -Route::get('banktasks', 'BankTaskController@index'); //получение списка всех заданий +Route::get('banktasks', 'BankTask\BankTaskController@index'); //получение списка всех заданий Route::group(['prefix' => 'banktask'], function () { - Route::post('', 'BankTaskController@store'); //создание задания - Route::get('{banktask}', 'BankTaskController@show'); //получение задания - Route::put('{banktask}', 'BankTaskController@update'); //обновление задания - Route::delete('{banktask}', 'BankTaskController@delete'); //удаление задания - Route::post('{banktask}/addfile', 'BankTaskFileController@store'); - Route::get('{banktask}/files', 'BankTaskFileController@showFiles'); + Route::post('', 'BankTask\BankTaskController@store'); //создание задания + Route::get('{banktask}', 'BankTask\BankTaskController@show'); //получение задания + Route::put('{banktask}', 'BankTask\BankTaskController@update'); //обновление задания + Route::delete('{banktask}', 'BankTask\BankTaskController@delete'); //удаление задания + Route::post('{banktask}/addfile', 'BankTask\BankTaskFileController@store'); + Route::get('{banktask}/files', 'BankTask\BankTaskFileController@showFiles'); + Route::get('/file/{file}/download', 'BankTask\BankTaskFileController@download'); + Route::delete('/file/{file}/delete', 'BankTask\BankTaskFileController@delete'); + Route::put('/file/{file}/update', 'BankTask\BankTaskFileController@update'); }); Route::get('/file/{file}/download', 'BankTaskFileController@download'); Route::delete('/file/{file}/delete', 'BankTaskFileController@delete'); Route::put('/file/{file}/update', 'BankTaskFileController@update'); + +Route::group(['prefix' => 'news'], function () { + Route::post('', 'News\NewsController@store'); + Route::get('', 'News\NewsController@index'); + Route::get('/{news}', 'News\NewsController@show'); + Route::put('/{news}', 'News\NewsController@edit'); + Route::delete('/{news}', 'News\NewsController@delete'); + Route::post('/{news}/addphoto', 'News\NewsFileController@store'); + Route::delete('/photo/{file}', 'News\NewsFileController@delete'); +}); + +Route::group(['prefix' => 'task'], function () { + Route::post('', 'TaskController@store'); // Добавить таск + Route::get('', 'TaskController@index'); // Показать задания для класса (в запросе нужно указывать Id класса) + Route::get('/{task}', 'TaskController@show'); //Показать задание + Route::put('/{task}', 'TaskController@update'); // Обновить задание + Route::delete('/{task}', 'TaskController@delete'); // Удалить задание + Route::put('/answer/check/{answer}', 'TaskController@checkAnswer'); // Проверить ответ ученика + Route::post('/{task}/addanswer', 'AnswerToTaskController@store'); // Добавить ответ(для ученика) + Route::get('/{task}/student/{student}', 'AnswerToTaskController@show'); // Показать ответ ученика + Route::delete('/answer/{answer}', 'AnswerToTaskController@delete'); // Удалить ответ + Route::put('/answer/{answer}', 'AnswerToTaskController@update'); // Изменить ответ + Route::post('/{task}/addfile', 'TaskFileController@store'); // Добавить файл + Route::get('/{task}/files', 'TaskFileController@showFiles'); // Посмотреть файлы у таска(только файлы + // которые добавил учитель). + Route::get('/{task}/file/{file}', 'TaskFileController@download'); // Скачать файл + Route::delete('/file/{file}', 'TaskFileController@delete'); // Удалить файл +}); diff --git a/routes/web.php b/routes/web.php index 84fc59a..60b14a6 100644 --- a/routes/web.php +++ b/routes/web.php @@ -12,3 +12,5 @@ | contains the "web" middleware group. Now create something great! | */ + +Route::view('/', 'auth');