From 47854932e368163c8619600666e64657107081fc Mon Sep 17 00:00:00 2001 From: NuwanJ Date: Fri, 11 Oct 2024 21:04:38 +0530 Subject: [PATCH 01/32] Code cleanup --- .../Event/Services/AnnouncementService.php | 58 ------------------- .../News/Services/AnnouncementService.php | 58 ------------------- 2 files changed, 116 deletions(-) delete mode 100644 app/Domains/Event/Services/AnnouncementService.php delete mode 100644 app/Domains/News/Services/AnnouncementService.php diff --git a/app/Domains/Event/Services/AnnouncementService.php b/app/Domains/Event/Services/AnnouncementService.php deleted file mode 100644 index 63e9b8d..0000000 --- a/app/Domains/Event/Services/AnnouncementService.php +++ /dev/null @@ -1,58 +0,0 @@ -model = $announcement; - } - - /** - * Get all the enabled announcements - * For the frontend or globally - * Where there's either no time frame or - * if there is a start and end date, make sure the current time is in between that or - * if there is only a start date, make sure the current time is past that or - * if there is only an end date, make sure the current time is before that. - * - * @return mixed - */ - public function getForFrontend() - { - return $this->model::enabled() - ->forArea($this->model::TYPE_FRONTEND) - ->inTimeFrame() - ->get(); - } - - /** - * Get all the enabled announcements - * For the backend or globally - * Where there's either no time frame or - * if there is a start and end date, make sure the current time is in between that or - * if there is only a start date, make sure the current time is past that or - * if there is only an end date, make sure the current time is before that. - * - * @return mixed - */ - public function getForBackend() - { - return $this->model::enabled() - ->forArea($this->model::TYPE_BACKEND) - ->inTimeFrame() - ->get(); - } -} diff --git a/app/Domains/News/Services/AnnouncementService.php b/app/Domains/News/Services/AnnouncementService.php deleted file mode 100644 index 63e9b8d..0000000 --- a/app/Domains/News/Services/AnnouncementService.php +++ /dev/null @@ -1,58 +0,0 @@ -model = $announcement; - } - - /** - * Get all the enabled announcements - * For the frontend or globally - * Where there's either no time frame or - * if there is a start and end date, make sure the current time is in between that or - * if there is only a start date, make sure the current time is past that or - * if there is only an end date, make sure the current time is before that. - * - * @return mixed - */ - public function getForFrontend() - { - return $this->model::enabled() - ->forArea($this->model::TYPE_FRONTEND) - ->inTimeFrame() - ->get(); - } - - /** - * Get all the enabled announcements - * For the backend or globally - * Where there's either no time frame or - * if there is a start and end date, make sure the current time is in between that or - * if there is only a start date, make sure the current time is past that or - * if there is only an end date, make sure the current time is before that. - * - * @return mixed - */ - public function getForBackend() - { - return $this->model::enabled() - ->forArea($this->model::TYPE_BACKEND) - ->inTimeFrame() - ->get(); - } -} From eb37c18bb8ae77f98081fbc3c0bb15ad51b45866 Mon Sep 17 00:00:00 2001 From: NuwanJ Date: Sat, 12 Oct 2024 17:56:07 +0530 Subject: [PATCH 02/32] Remove warning log, due to it is not a warning --- app/Http/Livewire/Backend/CreateCourses.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/Http/Livewire/Backend/CreateCourses.php b/app/Http/Livewire/Backend/CreateCourses.php index f4317dc..34ce8ed 100644 --- a/app/Http/Livewire/Backend/CreateCourses.php +++ b/app/Http/Livewire/Backend/CreateCourses.php @@ -251,9 +251,7 @@ protected function storeCourse() 'updated_by' => auth()->id() ]); - if (empty($this->modules)) { - \Log::warning("No modules to create"); - } else { + if (!empty($this->modules)) { foreach ($this->modules as $module) { CourseModule::create([ 'course_id' => $course->id, @@ -300,4 +298,4 @@ public function render() { return view('livewire.backend.create-courses'); } -} \ No newline at end of file +} From cefce4837e24e34e51429463740835a27a26185b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Oct 2024 18:17:55 +0530 Subject: [PATCH 03/32] [npm] Bump @fortawesome/fontawesome-free from 5.15.4 to 6.6.0 (#176) Bumps [@fortawesome/fontawesome-free](https://github.com/FortAwesome/Font-Awesome) from 5.15.4 to 6.6.0. - [Release notes](https://github.com/FortAwesome/Font-Awesome/releases) - [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/6.x/CHANGELOG.md) - [Commits](https://github.com/FortAwesome/Font-Awesome/compare/5.15.4...6.6.0) --- updated-dependencies: - dependency-name: "@fortawesome/fontawesome-free" dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 2ced99f..40c8da0 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "devDependencies": { "@coreui/coreui": "^3.0.0", "@coreui/icons": "^1.0.1", - "@fortawesome/fontawesome-free": "^5.12.1", + "@fortawesome/fontawesome-free": "^6.6.0", "@popperjs/core": "^2.5.1", "alpinejs": "^3.13.3", "axios": "^0.21.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0a56b57..62933aa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,8 +19,8 @@ importers: specifier: ^1.0.1 version: 1.0.1 '@fortawesome/fontawesome-free': - specifier: ^5.12.1 - version: 5.15.4 + specifier: ^6.6.0 + version: 6.6.0 '@popperjs/core': specifier: ^2.5.1 version: 2.11.8 @@ -699,8 +699,8 @@ packages: vue: optional: true - '@fortawesome/fontawesome-free@5.15.4': - resolution: {integrity: sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg==} + '@fortawesome/fontawesome-free@6.6.0': + resolution: {integrity: sha512-60G28ke/sXdtS9KZCpZSHHkCbdsOGEhIUGlwq6yhY74UpTiToIh8np7A8yphhM4BWsvNFtIvLpi4co+h9Mr9Ow==} engines: {node: '>=6'} '@jridgewell/gen-mapping@0.3.5': @@ -4276,7 +4276,7 @@ snapshots: optionalDependencies: vue: 2.7.16 - '@fortawesome/fontawesome-free@5.15.4': {} + '@fortawesome/fontawesome-free@6.6.0': {} '@jridgewell/gen-mapping@0.3.5': dependencies: From 249c532b2eff9ab7e030c5ec40bcae858e9baddb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Oct 2024 18:18:29 +0530 Subject: [PATCH 04/32] [npm] Bump sass-loader from 8.0.2 to 16.0.2 (#175) Bumps [sass-loader](https://github.com/webpack-contrib/sass-loader) from 8.0.2 to 16.0.2. - [Release notes](https://github.com/webpack-contrib/sass-loader/releases) - [Changelog](https://github.com/webpack-contrib/sass-loader/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/sass-loader/compare/v8.0.2...v16.0.2) --- updated-dependencies: - dependency-name: sass-loader dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 31 ++++++++++++++++--------------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index 40c8da0..59624eb 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "postcss": "^8.1", "resolve-url-loader": "^3.1.0", "sass": "^1.20.1", - "sass-loader": "^8.0.0", + "sass-loader": "^16.0.2", "sweetalert2": "^9.8.2", "vue": "^2.7.14", "vue-loader": "^15.9.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 62933aa..5732442 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,8 +64,8 @@ importers: specifier: ^1.20.1 version: 1.78.0 sass-loader: - specifier: ^8.0.0 - version: 8.0.2(sass@1.78.0)(webpack@5.94.0(webpack-cli@4.10.0)) + specifier: ^16.0.2 + version: 16.0.2(sass@1.78.0)(webpack@5.94.0(webpack-cli@4.10.0)) sweetalert2: specifier: ^9.8.2 version: 9.17.4 @@ -2940,21 +2940,26 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sass-loader@8.0.2: - resolution: {integrity: sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==} - engines: {node: '>= 8.9.0'} + sass-loader@16.0.2: + resolution: {integrity: sha512-Ll6iXZ1EYwYT19SqW4mSBb76vSSi8JgzElmzIerhEGgzB5hRjDQIWsPmuk1UrAXkR16KJHqVY0eH+5/uw9Tmfw==} + engines: {node: '>= 18.12.0'} peerDependencies: - fibers: '>= 3.1.0' - node-sass: ^4.0.0 + '@rspack/core': 0.x || 1.x + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 sass: ^1.3.0 - webpack: ^4.36.0 || ^5.0.0 + sass-embedded: '*' + webpack: ^5.0.0 peerDependenciesMeta: - fibers: + '@rspack/core': optional: true node-sass: optional: true sass: optional: true + sass-embedded: + optional: true + webpack: + optional: true sass@1.78.0: resolution: {integrity: sha512-AaIqGSrjo5lA2Yg7RvFZrlXDBCp3nV4XP73GrLGvdRWWwk+8H3l0SDvq/5bA4eF+0RFPLuWUk3E+P1U/YqnpsQ==} @@ -6626,16 +6631,12 @@ snapshots: safer-buffer@2.1.2: {} - sass-loader@8.0.2(sass@1.78.0)(webpack@5.94.0(webpack-cli@4.10.0)): + sass-loader@16.0.2(sass@1.78.0)(webpack@5.94.0(webpack-cli@4.10.0)): dependencies: - clone-deep: 4.0.1 - loader-utils: 1.4.2 neo-async: 2.6.2 - schema-utils: 2.7.1 - semver: 6.3.1 - webpack: 5.94.0(webpack-cli@4.10.0) optionalDependencies: sass: 1.78.0 + webpack: 5.94.0(webpack-cli@4.10.0) sass@1.78.0: dependencies: From 69cb896cc7bbc34ed29fd8275d03c9e68c9b2dd1 Mon Sep 17 00:00:00 2001 From: NuwanJ Date: Wed, 16 Oct 2024 13:47:11 +0530 Subject: [PATCH 05/32] Merge branch 'course-management-system' into release-2.1.0 --- .github/workflows/laravel_pull_request.yml | 3 + .github/workflows/laravel_push.yml | 8 + .../AcademicProgram/Course/Models/Course.php | 25 +- app/Domains/Event/Models/Event.php | 13 + .../Controllers/Backend/CourseController.php | 71 +- .../Controllers/Backend/EventController.php | 14 +- app/Http/Livewire/Backend/CreateCourses.php | 15 +- app/Http/Livewire/Backend/EditCourses.php | 18 +- .../Livewire/Backend/PrerequisiteSelector.php | 79 ++ composer.json | 1 + composer.lock | 851 +++++++++++++++++- database/factories/EventFactory.php | 1 + .../2024_06_27_150621_create_events_table.php | 2 +- ...0321_create_course_prerequisites_table.php | 32 + ...odify_course_modules_course_id_foreign.php | 50 + ..._114038_add_event_type_to_events_table.php | 32 + database/seeders/EventSeeder.php | 7 + .../views/backend/courses/delete.blade.php | 14 + .../views/backend/event/create.blade.php | 3 + resources/views/backend/event/edit.blade.php | 5 + resources/views/backend/layouts/app.blade.php | 60 -- .../views/backend/semesters/delete.blade.php | 28 +- .../backend/dropdown_checkbox.blade.php | 45 + .../livewire/backend/create-courses.blade.php | 7 +- .../livewire/backend/edit-courses.blade.php | 7 + .../backend/prerequisite-selector.blade.php | 61 ++ tests/Feature/Backend/Event/EventTest.php | 5 +- 27 files changed, 1287 insertions(+), 170 deletions(-) create mode 100644 app/Http/Livewire/Backend/PrerequisiteSelector.php create mode 100644 database/migrations/2024_10_07_120321_create_course_prerequisites_table.php create mode 100644 database/migrations/2024_10_08_195256_modify_course_modules_course_id_foreign.php create mode 100644 database/migrations/2024_10_09_114038_add_event_type_to_events_table.php create mode 100644 resources/views/components/backend/dropdown_checkbox.blade.php create mode 100644 resources/views/livewire/backend/prerequisite-selector.blade.php diff --git a/.github/workflows/laravel_pull_request.yml b/.github/workflows/laravel_pull_request.yml index 428e6ac..86aee73 100644 --- a/.github/workflows/laravel_pull_request.yml +++ b/.github/workflows/laravel_pull_request.yml @@ -20,6 +20,9 @@ jobs: - name: Copy .env run: php -r "file_exists('.env') || copy('.env.example', '.env');" + - name: Remove existing composer.lock + run: rm ./composer.lock + - name: Install Dependencies run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist diff --git a/.github/workflows/laravel_push.yml b/.github/workflows/laravel_push.yml index d6f4a21..b186d79 100644 --- a/.github/workflows/laravel_push.yml +++ b/.github/workflows/laravel_push.yml @@ -13,16 +13,24 @@ jobs: - uses: actions/checkout@v2 - name: Copy .env run: php -r "file_exists('.env') || copy('.env.example', '.env');" + + - name: Remove existing composer.lock + run: rm ./composer.lock + - name: Install Dependencies run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist + - name: Generate key run: php artisan key:generate + - name: Directory Permissions run: chmod -R 777 storage bootstrap/cache + - name: Create Database run: | mkdir -p database touch database/database.sqlite + - name: Execute tests (Unit and Feature tests) via PHPUnit env: DB_CONNECTION: sqlite diff --git a/app/Domains/AcademicProgram/Course/Models/Course.php b/app/Domains/AcademicProgram/Course/Models/Course.php index d55c46d..1ec81d7 100644 --- a/app/Domains/AcademicProgram/Course/Models/Course.php +++ b/app/Domains/AcademicProgram/Course/Models/Course.php @@ -3,12 +3,13 @@ namespace App\Domains\AcademicProgram\Course\Models; use App\Domains\Auth\Models\User; -use App\Domains\AcademicProgram\AcademicProgram; -use App\Domains\AcademicProgram\Course\Models\Traits\Scope\CourseScope; -use App\Domains\AcademicProgram\Semester\Models\Semester; use Database\Factories\CourseFactory; -use Illuminate\Database\Eloquent\Factories\HasFactory; use Spatie\Activitylog\Traits\LogsActivity; +use App\Domains\AcademicProgram\AcademicProgram; +use Illuminate\Database\Eloquent\Factories\HasFactory; +use App\Domains\AcademicProgram\Semester\Models\Semester; +use Illuminate\Database\Eloquent\Relations\BelongsToMany; +use App\Domains\AcademicProgram\Course\Models\Traits\Scope\CourseScope; /** * Class Course. @@ -129,6 +130,22 @@ public function modules() return $this->hasMany(CourseModule::class); } + /** + * Get the prerequisites for the course. + */ + public function prerequisites(): BelongsToMany + { + return $this->belongsToMany(Course::class, 'course_prerequisites', 'course_id', 'prerequisite_id'); + } + + /** + * Get the courses where this course is a prerequisite. + */ + public function prerequisiteFor(): BelongsToMany + { + return $this->belongsToMany(Course::class, 'course_prerequisites', 'prerequisite_id', 'course_id'); + } + protected static function newFactory() { return CourseFactory::new(); diff --git a/app/Domains/Event/Models/Event.php b/app/Domains/Event/Models/Event.php index 5077a10..7c13a3f 100644 --- a/app/Domains/Event/Models/Event.php +++ b/app/Domains/Event/Models/Event.php @@ -28,6 +28,7 @@ class Event extends Model protected $fillable = [ 'title', 'url', + 'event_type', 'published_at', 'description', 'image', @@ -46,8 +47,20 @@ class Event extends Model */ protected $casts = [ 'enabled' => 'boolean', + 'event_type' => 'array', ]; + public static function eventTypeMap(): array + { + // TODO integrate with Taxonomies + return [ + 0 => 'Event', + 1 => 'Seminar', + 2 => 'ACES', + + ]; + } + public function thumbURL() { if ($this->image != null) return '/img/events/' . $this->image; diff --git a/app/Http/Controllers/Backend/CourseController.php b/app/Http/Controllers/Backend/CourseController.php index c06c69d..3a081d6 100644 --- a/app/Http/Controllers/Backend/CourseController.php +++ b/app/Http/Controllers/Backend/CourseController.php @@ -41,39 +41,6 @@ public function create() } } - /** - * Store a newly created course in storage. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response - */ - public function store(Request $request) - { - $validatedData = $request->validate([ - 'code' => 'required|string|max:16|unique:courses,code', - 'semester_id' => 'required|integer|exists:semesters,id', - 'academic_program' => ['required', Rule::in(array_values(Course::getAcademicPrograms()))], - 'version' => ['required', 'integer', Rule::in(array_keys(Course::getVersions()))], - 'name' => 'required|string|max:255', - 'credits' => 'required|integer', - 'type' => ['required', Rule::in(array_keys(Course::getTypes()))], - 'content' => 'nullable|string', - 'objectives' => 'nullable|json', - 'time_allocation' => 'nullable|json', - 'marks_allocation' => 'nullable|json', - 'ilos' => 'nullable|json', - 'urls' => 'nullable|json', - 'references' => 'nullable|json', - ]); - - try { - $course = Course::create($validatedData); - return redirect()->route('dashboard.courses.index')->with('success', 'Course created successfully.'); - } catch (\Exception $e) { - Log::error('Error creating course: ' . $e->getMessage()); - return abort(500); - } - } /** * Show the form for editing the specified course. @@ -90,40 +57,6 @@ public function edit(Course $course) return abort(500); } } - /** - * Update the specified course in storage. - * - * @param \Illuminate\Http\Request $request - * @param \App\Models\Course $course - * @return \Illuminate\Http\Response - */ - public function update(Request $request, Course $course) - { - $validatedData = $request->validate([ - 'code' => 'required|string|max:16|unique:courses,code,' . $course->id, - 'semester_id' => 'required|integer|exists:semesters,id', - 'academic_program' => ['required', Rule::in(array_values(Course::getAcademicPrograms()))], - 'version' => ['required', 'integer', Rule::in(array_keys(Course::getVersions()))], - 'name' => 'required|string|max:255', - 'credits' => 'required|integer', - 'type' => ['required', Rule::in(array_values(Course::getTypes()))], - 'type' => ['required', Rule::in(array_values(Course::getTypes()))], - 'content' => 'nullable|string', - 'objectives' => 'nullable|json', - 'time_allocation' => 'nullable|json', - 'marks_allocation' => 'nullable|json', - 'ilos' => 'nullable|json', - 'urls' => 'nullable|json', - 'references' => 'nullable|json', - ]); - try { - $course->update($validatedData); - return redirect()->route('dashboard.courses.index')->with('success', 'Course updated successfully.'); - } catch (\Exception $e) { - Log::error('Error updating course: ' . $e->getMessage()); - return abort(500); - } - } /** * Remove the specified course from storage. @@ -140,10 +73,10 @@ public function destroy(Course $course) { try { $course->delete(); - return redirect()->route('dashboard.courses.index')->with('success', 'Course deleted successfully.'); + return redirect()->route('dashboard.courses.index')->with('Success', 'Course deleted successfully.'); } catch (\Exception $e) { Log::error('Error in deleting course: ' . $e->getMessage()); return abort(500); } } -} +} \ No newline at end of file diff --git a/app/Http/Controllers/Backend/EventController.php b/app/Http/Controllers/Backend/EventController.php index 363f248..5d218f9 100644 --- a/app/Http/Controllers/Backend/EventController.php +++ b/app/Http/Controllers/Backend/EventController.php @@ -40,6 +40,7 @@ public function store(Request $request) $data = request()->validate([ 'title' => 'string|required', 'url' => ['required', 'unique:events'], + 'event_type' => 'required|array', 'published_at' => 'required|date_format:Y-m-d', 'description' => 'string|required', 'enabled' => 'nullable', @@ -55,6 +56,7 @@ public function store(Request $request) } try { + $event = new Event($data); $event->enabled = ($request->enabled != null); $event->url = urlencode(str_replace(" ", "-", $request->url)); @@ -75,12 +77,7 @@ public function store(Request $request) */ public function edit(Event $event) { - try { - return view('backend.event.edit', compact('event')); - } catch (\Exception $ex) { - Log::error('Failed to edit event', ['error' => $ex->getMessage()]); - return abort(500); - }; + return view('backend.event.edit', compact('event')); } /** @@ -95,8 +92,8 @@ public function update(Request $request, Event $event) $data = request()->validate([ 'title' => ['required'], - 'url' => - ['required', Rule::unique('events')->ignore($event->id)], + 'url' => ['required', Rule::unique('events')->ignore($event->id)], + 'event_type' => 'required|array', 'published_at' => 'required|date_format:Y-m-d', 'description' => 'string|required', 'enabled' => 'nullable', @@ -116,6 +113,7 @@ public function update(Request $request, Event $event) try { $event->update($data); + $event->enabled = ($request->enabled != null); $event->url = urlencode(str_replace(" ", "-", $request->url)); $event->created_by = Auth::user()->id; diff --git a/app/Http/Livewire/Backend/CreateCourses.php b/app/Http/Livewire/Backend/CreateCourses.php index 34ce8ed..f544b1f 100644 --- a/app/Http/Livewire/Backend/CreateCourses.php +++ b/app/Http/Livewire/Backend/CreateCourses.php @@ -34,6 +34,7 @@ class CreateCourses extends Component //2nd form step public $objectives; + public $prerequisites = []; public $ilos = []; //3rd form step @@ -158,7 +159,7 @@ public function updated($propertyName) $this->validateOnly($propertyName); } - protected $listeners = ['itemsUpdated' => 'updateItems']; + protected $listeners = ['itemsUpdated' => 'updateItems', 'prerequisitesUpdated' => 'updatePrerequisites']; public function mount() { @@ -169,6 +170,11 @@ public function mount() $this->ilos = Course::getILOTemplate(); } + public function updatePrerequisites($selectedCourses) + { + $this->prerequisites = $selectedCourses; + } + public function updateItems($type, $newItems) { if ($type == 'references') { @@ -263,6 +269,13 @@ protected function storeCourse() ]); } } + // Sync prerequisites + if (!empty($this->prerequisites)) { + $course->prerequisites()->sync(collect($this->prerequisites)->pluck('id')->toArray()); + } else { + // If no prerequisites, detach all + $course->prerequisites()->detach(); + } \DB::commit(); } catch (\Exception $e) { diff --git a/app/Http/Livewire/Backend/EditCourses.php b/app/Http/Livewire/Backend/EditCourses.php index 27c5848..0409f61 100644 --- a/app/Http/Livewire/Backend/EditCourses.php +++ b/app/Http/Livewire/Backend/EditCourses.php @@ -33,6 +33,7 @@ class EditCourses extends Component // 2nd form step public $objectives; + public $prerequisites = []; public $ilos = [ 'knowledge' => [], 'skills' => [], @@ -144,7 +145,7 @@ public function updated($propertyName) $this->canUpdate = true; } - protected $listeners = ['itemsUpdated' => 'updateItems']; + protected $listeners = ['itemsUpdated' => 'updateItems', 'prerequisitesUpdated' => 'updatePrerequisites']; public function mount(Course $course) { @@ -179,10 +180,16 @@ public function mount(Course $course) 'time_allocation' => array_merge(Course::getTimeAllocation(), json_decode($module->time_allocation, true)) ]; })->toArray(); + $this->prerequisites = $course->prerequisites->pluck('id')->toArray(); // Update semesters list based on academic program and version $this->updateSemestersList(); } + public function updatePrerequisites($selectedCourses) + { + $this->prerequisites = $selectedCourses; + } + public function updateItems($type, $newItems) { if ($type == 'references') { @@ -286,7 +293,13 @@ protected function updateCourse() ]); } } - + // Sync prerequisites + if (!empty($this->prerequisites)) { + $course->prerequisites()->sync(collect($this->prerequisites)->pluck('id')->toArray()); + } else { + // If no prerequisites, detach all + $course->prerequisites()->detach(); + } \DB::commit(); } catch (\Exception $e) { \DB::rollBack(); @@ -314,6 +327,7 @@ protected function resetForm() $this->ilos = Course::getILOTemplate(); $this->references = []; $this->modules = []; + $this->prerequisites = []; } public function render() diff --git a/app/Http/Livewire/Backend/PrerequisiteSelector.php b/app/Http/Livewire/Backend/PrerequisiteSelector.php new file mode 100644 index 0000000..71ddd33 --- /dev/null +++ b/app/Http/Livewire/Backend/PrerequisiteSelector.php @@ -0,0 +1,79 @@ +resetPage(); + } + + public function courseSelected($courseId) + { + $course = Course::find($courseId); + if ($course && !in_array($courseId, collect($this->selectedCourses)->pluck('id')->toArray())) { + $this->selectedCourses[] = $course->toArray(); + $this->emit('prerequisitesUpdated', $this->selectedCourses); + } + } + + public function courseRemoved($courseId) + { + $this->selectedCourses = collect($this->selectedCourses)->reject(function ($course) use ($courseId) { + return $course['id'] == $courseId; + })->values()->toArray(); + + $this->emit('prerequisitesUpdated', $this->selectedCourses); + } + + public function mount($courseId = null) + { + $this->courseId = $courseId; + + if ($this->courseId) { + // Fetch existing prerequisites from the database + $course = Course::with('prerequisites')->find($this->courseId); + + if ($course && $course->prerequisites) { + // Assuming prerequisites is a relation on the Course model + $this->selectedCourses = $course->prerequisites->map(function ($prerequisite) { + return $prerequisite->toArray(); + })->toArray(); + } + } + } + + public function render() + { + $filteredAvailableCourses = Course::where(function ($query) { + $query->where('code', 'like', '%' . $this->searchTerm . '%') + ->orWhere('name', 'like', '%' . $this->searchTerm . '%'); + }) + ->whereNotIn('id', collect($this->selectedCourses)->pluck('id')) + ->where('id', '!=', $this->courseId) + ->where('academic_program', $this->academic_program) + ->where('version', $this->version) + ->paginate(5); + + return view('livewire.backend.prerequisite-selector', [ + 'filteredAvailableCourses' => $filteredAvailableCourses, + ]); + } +} \ No newline at end of file diff --git a/composer.json b/composer.json index b564d02..9a71525 100644 --- a/composer.json +++ b/composer.json @@ -25,6 +25,7 @@ "laravel/ui": "^3.0", "laravelcollective/html": "^6.4", "livewire/livewire": "^2.0", + "marvinlabs/laravel-discord-logger": "^1.4", "rappasoft/laravel-livewire-tables": "^1.0", "marvinlabs/laravel-discord-logger": "^1.4", "rappasoft/lockout": "^3.0", diff --git a/composer.lock b/composer.lock index e0470e3..677fd31 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": "5a5b000028d13dc0f7a3522007d8a60d", + "content-hash": "02ef9cbc2327c168098c977a5a124470", "packages": [ { "name": "arcanedev/log-viewer", @@ -8623,16 +8623,16 @@ }, { "name": "doctrine/dbal", - "version": "3.9.1", + "version": "3.9.3", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "d7dc08f98cba352b2bab5d32c5e58f7e745c11a7" + "reference": "61446f07fcb522414d6cfd8b1c3e5f9e18c579ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/d7dc08f98cba352b2bab5d32c5e58f7e745c11a7", - "reference": "d7dc08f98cba352b2bab5d32c5e58f7e745c11a7", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/61446f07fcb522414d6cfd8b1c3e5f9e18c579ba", + "reference": "61446f07fcb522414d6cfd8b1c3e5f9e18c579ba", "shasum": "" }, "require": { @@ -8648,7 +8648,7 @@ "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.12.0", + "phpstan/phpstan": "1.12.6", "phpstan/phpstan-strict-rules": "^1.6", "phpunit/phpunit": "9.6.20", "psalm/plugin-phpunit": "0.18.4", @@ -8716,7 +8716,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.9.1" + "source": "https://github.com/doctrine/dbal/tree/3.9.3" }, "funding": [ { @@ -8732,7 +8732,7 @@ "type": "tidelift" } ], - "time": "2024-09-01T13:49:23+00:00" + "time": "2024-10-10T17:56:43+00:00" }, { "name": "doctrine/deprecations", @@ -11184,6 +11184,837 @@ ], "time": "2024-06-11T12:45:25+00:00" }, + { + "name": "roave/security-advisories", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/Roave/SecurityAdvisories.git", + "reference": "6fc16d8c05a872bf86eb0a1684d89b9bcb93d636" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/6fc16d8c05a872bf86eb0a1684d89b9bcb93d636", + "reference": "6fc16d8c05a872bf86eb0a1684d89b9bcb93d636", + "shasum": "" + }, + "conflict": { + "3f/pygmentize": "<1.2", + "admidio/admidio": "<4.3.10", + "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3", + "aheinze/cockpit": "<2.2", + "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.04.6", + "aimeos/ai-admin-jsonadm": "<2020.10.13|>=2021.04.1,<2021.10.6|>=2022.04.1,<2022.10.3|>=2023.04.1,<2023.10.4|==2024.04.1", + "aimeos/ai-client-html": ">=2020.04.1,<2020.10.27|>=2021.04.1,<2021.10.22|>=2022.04.1,<2022.10.13|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.04.7", + "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9|==2024.04.1", + "aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7", + "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", + "airesvsg/acf-to-rest-api": "<=3.1", + "akaunting/akaunting": "<2.1.13", + "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", + "alextselegidis/easyappointments": "<1.5", + "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", + "amazing/media2click": ">=1,<1.3.3", + "amphp/artax": "<1.0.6|>=2,<2.0.6", + "amphp/http": "<=1.7.2|>=2,<=2.1", + "amphp/http-client": ">=4,<4.4", + "anchorcms/anchor-cms": "<=0.12.7", + "andreapollastri/cipi": "<=3.1.15", + "andrewhaine/silverstripe-form-capture": ">=0.2,<=0.2.3|>=1,<1.0.2|>=2,<2.2.5", + "apache-solr-for-typo3/solr": "<2.8.3", + "apereo/phpcas": "<1.6", + "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6|>=2.6,<2.7.10|>=3,<3.0.12|>=3.1,<3.1.3", + "appwrite/server-ce": "<=1.2.1", + "arc/web": "<3", + "area17/twill": "<1.2.5|>=2,<2.5.3", + "artesaos/seotools": "<0.17.2", + "asymmetricrypt/asymmetricrypt": "<9.9.99", + "athlon1600/php-proxy": "<=5.1", + "athlon1600/php-proxy-app": "<=3", + "austintoddj/canvas": "<=3.4.2", + "auth0/wordpress": "<=4.6", + "automad/automad": "<2.0.0.0-alpha5", + "automattic/jetpack": "<9.8", + "awesome-support/awesome-support": "<=6.0.7", + "aws/aws-sdk-php": "<3.288.1", + "azuracast/azuracast": "<0.18.3", + "backdrop/backdrop": "<1.27.3|>=1.28,<1.28.2", + "backpack/crud": "<3.4.9", + "bacula-web/bacula-web": "<8.0.0.0-RC2-dev", + "badaso/core": "<2.7", + "bagisto/bagisto": "<2.1", + "barrelstrength/sprout-base-email": "<1.2.7", + "barrelstrength/sprout-forms": "<3.9", + "barryvdh/laravel-translation-manager": "<0.6.2", + "barzahlen/barzahlen-php": "<2.0.1", + "baserproject/basercms": "<5.0.9", + "bassjobsen/bootstrap-3-typeahead": ">4.0.2", + "bbpress/bbpress": "<2.6.5", + "bcosca/fatfree": "<3.7.2", + "bedita/bedita": "<4", + "bigfork/silverstripe-form-capture": ">=3,<3.1.1", + "billz/raspap-webgui": "<=3.1.4", + "bk2k/bootstrap-package": ">=7.1,<7.1.2|>=8,<8.0.8|>=9,<9.0.4|>=9.1,<9.1.3|>=10,<10.0.10|>=11,<11.0.3", + "blueimp/jquery-file-upload": "==6.4.4", + "bmarshall511/wordpress_zero_spam": "<5.2.13", + "bolt/bolt": "<3.7.2", + "bolt/core": "<=4.2", + "born05/craft-twofactorauthentication": "<3.3.4", + "bottelet/flarepoint": "<2.2.1", + "bref/bref": "<2.1.17", + "brightlocal/phpwhois": "<=4.2.5", + "brotkrueml/codehighlight": "<2.7", + "brotkrueml/schema": "<1.13.1|>=2,<2.5.1", + "brotkrueml/typo3-matomo-integration": "<1.3.2", + "buddypress/buddypress": "<7.2.1", + "bugsnag/bugsnag-laravel": ">=2,<2.0.2", + "bytefury/crater": "<6.0.2", + "cachethq/cachet": "<2.5.1", + "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.1,<4.1.4|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", + "cakephp/database": ">=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", + "cardgate/magento2": "<2.0.33", + "cardgate/woocommerce": "<=3.1.15", + "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", + "cart2quote/module-quotation-encoded": ">=4.1.6,<=4.4.5|>=5,<5.4.4", + "cartalyst/sentry": "<=2.1.6", + "catfan/medoo": "<1.7.5", + "causal/oidc": "<2.1", + "cecil/cecil": "<7.47.1", + "centreon/centreon": "<22.10.15", + "cesnet/simplesamlphp-module-proxystatistics": "<3.1", + "chriskacerguis/codeigniter-restserver": "<=2.7.1", + "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3", + "ckeditor/ckeditor": "<4.24", + "cockpit-hq/cockpit": "<2.7|==2.7", + "codeception/codeception": "<3.1.3|>=4,<4.1.22", + "codeigniter/framework": "<3.1.9", + "codeigniter4/framework": "<4.4.7", + "codeigniter4/shield": "<1.0.0.0-beta8", + "codiad/codiad": "<=2.8.4", + "composer/composer": "<1.10.27|>=2,<2.2.24|>=2.3,<2.7.7", + "concrete5/concrete5": "<9.3.4", + "concrete5/core": "<8.5.8|>=9,<9.1", + "contao-components/mediaelement": ">=2.14.2,<2.21.1", + "contao/comments-bundle": ">=2,<4.13.40|>=5.0.0.0-RC1-dev,<5.3.4", + "contao/contao": "<=5.4.1", + "contao/core": "<3.5.39", + "contao/core-bundle": "<4.13.49|>=5,<5.3.15|>=5.4,<5.4.3", + "contao/listing-bundle": ">=3,<=3.5.30|>=4,<4.4.8", + "contao/managed-edition": "<=1.5", + "corveda/phpsandbox": "<1.3.5", + "cosenary/instagram": "<=2.3", + "craftcms/cms": "<4.6.2|>=5,<=5.2.2", + "croogo/croogo": "<4", + "cuyz/valinor": "<0.12", + "czim/file-handling": "<1.5|>=2,<2.3", + "czproject/git-php": "<4.0.3", + "damienharper/auditor-bundle": "<5.2.6", + "dapphp/securimage": "<3.6.6", + "darylldoyle/safe-svg": "<1.9.10", + "datadog/dd-trace": ">=0.30,<0.30.2", + "datatables/datatables": "<1.10.10", + "david-garcia/phpwhois": "<=4.3.1", + "dbrisinajumi/d2files": "<1", + "dcat/laravel-admin": "<=2.1.3", + "derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3", + "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1|>=7,<7.4", + "desperado/xml-bundle": "<=0.1.7", + "dev-lancer/minecraft-motd-parser": "<=1.0.5", + "devgroup/dotplant": "<2020.09.14-dev", + "directmailteam/direct-mail": "<6.0.3|>=7,<7.0.3|>=8,<9.5.2", + "doctrine/annotations": "<1.2.7", + "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", + "doctrine/common": "<2.4.3|>=2.5,<2.5.1", + "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2|>=3,<3.1.4", + "doctrine/doctrine-bundle": "<1.5.2", + "doctrine/doctrine-module": "<0.7.2", + "doctrine/mongodb-odm": "<1.0.2", + "doctrine/mongodb-odm-bundle": "<3.0.1", + "doctrine/orm": ">=1,<1.2.4|>=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", + "dolibarr/dolibarr": "<19.0.2", + "dompdf/dompdf": "<2.0.4", + "doublethreedigital/guest-entries": "<3.1.2", + "drupal/core": ">=6,<6.38|>=7,<7.96|>=8,<10.2.9|>=10.3,<10.3.6|>=11,<11.0.5", + "drupal/core-recommended": ">=8,<10.2.9|>=10.3,<10.3.6|>=11,<11.0.5", + "drupal/drupal": ">=5,<5.11|>=6,<6.38|>=7,<7.80|>=8,<10.2.9|>=10.3,<10.3.6|>=11,<11.0.5", + "duncanmcclean/guest-entries": "<3.1.2", + "dweeves/magmi": "<=0.7.24", + "ec-cube/ec-cube": "<2.4.4|>=2.11,<=2.17.1|>=3,<=3.0.18.0-patch4|>=4,<=4.1.2", + "ecodev/newsletter": "<=4", + "ectouch/ectouch": "<=2.7.2", + "egroupware/egroupware": "<23.1.20240624", + "elefant/cms": "<2.0.7", + "elgg/elgg": "<3.3.24|>=4,<4.0.5", + "elijaa/phpmemcacheadmin": "<=1.3", + "encore/laravel-admin": "<=1.8.19", + "endroid/qr-code-bundle": "<3.4.2", + "enhavo/enhavo-app": "<=0.13.1", + "enshrined/svg-sanitize": "<0.15", + "erusev/parsedown": "<1.7.2", + "ether/logs": "<3.0.4", + "evolutioncms/evolution": "<=3.2.3", + "exceedone/exment": "<4.4.3|>=5,<5.0.3", + "exceedone/laravel-admin": "<2.2.3|==3", + "ezsystems/demobundle": ">=5.4,<5.4.6.1-dev", + "ezsystems/ez-support-tools": ">=2.2,<2.2.3", + "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1-dev", + "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1-dev|>=5.4,<5.4.11.1-dev|>=2017.12,<2017.12.0.1-dev", + "ezsystems/ezplatform": "<=1.13.6|>=2,<=2.5.24", + "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.26|>=3.3,<3.3.39", + "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1", + "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12", + "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.35", + "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8", + "ezsystems/ezplatform-richtext": ">=2.3,<2.3.7.1-dev|>=3.3,<3.3.40", + "ezsystems/ezplatform-solr-search-engine": ">=1.7,<1.7.12|>=2,<2.0.2|>=3.3,<3.3.15", + "ezsystems/ezplatform-user": ">=1,<1.0.1", + "ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.31", + "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.03.5.1", + "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3", + "ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15", + "ezyang/htmlpurifier": "<4.1.1", + "facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2", + "facturascripts/facturascripts": "<=2022.08", + "fastly/magento2": "<1.2.26", + "feehi/cms": "<=2.1.1", + "feehi/feehicms": "<=2.1.1", + "fenom/fenom": "<=2.12.1", + "filament/infolists": ">=3,<3.2.115", + "filament/tables": ">=3,<3.2.115", + "filegator/filegator": "<7.8", + "filp/whoops": "<2.1.13", + "fineuploader/php-traditional-server": "<=1.2.2", + "firebase/php-jwt": "<6", + "fisharebest/webtrees": "<=2.1.18", + "fixpunkt/fp-masterquiz": "<2.2.1|>=3,<3.5.2", + "fixpunkt/fp-newsletter": "<1.1.1|>=2,<2.1.2|>=2.2,<3.2.6", + "flarum/core": "<1.8.5", + "flarum/flarum": "<0.1.0.0-beta8", + "flarum/framework": "<1.8.5", + "flarum/mentions": "<1.6.3", + "flarum/sticky": ">=0.1.0.0-beta14,<=0.1.0.0-beta15", + "flarum/tags": "<=0.1.0.0-beta13", + "floriangaerber/magnesium": "<0.3.1", + "fluidtypo3/vhs": "<5.1.1", + "fof/byobu": ">=0.3.0.0-beta2,<1.1.7", + "fof/upload": "<1.2.3", + "foodcoopshop/foodcoopshop": ">=3.2,<3.6.1", + "fooman/tcpdf": "<6.2.22", + "forkcms/forkcms": "<5.11.1", + "fossar/tcpdf-parser": "<6.2.22", + "francoisjacquet/rosariosis": "<=11.5.1", + "frappant/frp-form-answers": "<3.1.2|>=4,<4.0.2", + "friendsofsymfony/oauth2-php": "<1.3", + "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", + "friendsofsymfony/user-bundle": ">=1,<1.3.5", + "friendsofsymfony1/swiftmailer": ">=4,<5.4.13|>=6,<6.2.5", + "friendsofsymfony1/symfony1": ">=1.1,<1.5.19", + "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", + "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", + "froala/wysiwyg-editor": "<3.2.7|>=4.0.1,<=4.1.3", + "froxlor/froxlor": "<=2.2.0.0-RC3", + "frozennode/administrator": "<=5.0.12", + "fuel/core": "<1.8.1", + "funadmin/funadmin": "<=3.2|>=3.3.2,<=3.3.3", + "gaoming13/wechat-php-sdk": "<=1.10.2", + "genix/cms": "<=1.1.11", + "getformwork/formwork": "<1.13.1|==2.0.0.0-beta1", + "getgrav/grav": "<1.7.46", + "getkirby/cms": "<=3.6.6.5|>=3.7,<=3.7.5.4|>=3.8,<=3.8.4.3|>=3.9,<=3.9.8.1|>=3.10,<=3.10.1|>=4,<=4.3", + "getkirby/kirby": "<=2.5.12", + "getkirby/panel": "<2.5.14", + "getkirby/starterkit": "<=3.7.0.2", + "gilacms/gila": "<=1.15.4", + "gleez/cms": "<=1.3|==2", + "globalpayments/php-sdk": "<2", + "gogentooss/samlbase": "<1.2.7", + "google/protobuf": "<3.15", + "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", + "gree/jose": "<2.2.1", + "gregwar/rst": "<1.0.3", + "grumpydictator/firefly-iii": "<6.1.17", + "gugoan/economizzer": "<=0.9.0.0-beta1", + "guzzlehttp/guzzle": "<6.5.8|>=7,<7.4.5", + "guzzlehttp/psr7": "<1.9.1|>=2,<2.4.5", + "haffner/jh_captcha": "<=2.1.3|>=3,<=3.0.2", + "harvesthq/chosen": "<1.8.7", + "helloxz/imgurl": "<=2.31", + "hhxsv5/laravel-s": "<3.7.36", + "hillelcoren/invoice-ninja": "<5.3.35", + "himiklab/yii2-jqgrid-widget": "<1.0.8", + "hjue/justwriting": "<=1", + "hov/jobfair": "<1.0.13|>=2,<2.0.2", + "httpsoft/http-message": "<1.0.12", + "hyn/multi-tenant": ">=5.6,<5.7.2", + "ibexa/admin-ui": ">=4.2,<4.2.3|>=4.6.0.0-beta1,<4.6.9", + "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3|>=4.5,<4.5.6|>=4.6,<4.6.2", + "ibexa/fieldtype-richtext": ">=4.6,<4.6.10", + "ibexa/graphql": ">=2.5,<2.5.31|>=3.3,<3.3.28|>=4.2,<4.2.3", + "ibexa/post-install": "<=1.0.4", + "ibexa/solr": ">=4.5,<4.5.4", + "ibexa/user": ">=4,<4.4.3", + "icecoder/icecoder": "<=8.1", + "idno/known": "<=1.3.1", + "ilicmiljan/secure-props": ">=1.2,<1.2.2", + "illuminate/auth": "<5.5.10", + "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<6.18.31|>=7,<7.22.4", + "illuminate/database": "<6.20.26|>=7,<7.30.5|>=8,<8.40", + "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", + "illuminate/view": "<6.20.42|>=7,<7.30.6|>=8,<8.75", + "imdbphp/imdbphp": "<=5.1.1", + "impresscms/impresscms": "<=1.4.5", + "impresspages/impresspages": "<=1.0.12", + "in2code/femanager": "<5.5.3|>=6,<6.3.4|>=7,<7.2.3", + "in2code/ipandlanguageredirect": "<5.1.2", + "in2code/lux": "<17.6.1|>=18,<24.0.2", + "in2code/powermail": "<7.5.1|>=8,<8.5.1|>=9,<10.9.1|>=11,<12.4.1", + "innologi/typo3-appointments": "<2.0.6", + "intelliants/subrion": "<4.2.2", + "inter-mediator/inter-mediator": "==5.5", + "ipl/web": "<0.10.1", + "islandora/islandora": ">=2,<2.4.1", + "ivankristianto/phpwhois": "<=4.3", + "jackalope/jackalope-doctrine-dbal": "<1.7.4", + "james-heinrich/getid3": "<1.9.21", + "james-heinrich/phpthumb": "<1.7.12", + "jasig/phpcas": "<1.3.3", + "jcbrand/converse.js": "<3.3.3", + "johnbillion/wp-crontrol": "<1.16.2", + "joomla/application": "<1.0.13", + "joomla/archive": "<1.1.12|>=2,<2.0.1", + "joomla/filesystem": "<1.6.2|>=2,<2.0.1", + "joomla/filter": "<1.4.4|>=2,<2.0.1", + "joomla/framework": "<1.5.7|>=2.5.4,<=3.8.12", + "joomla/input": ">=2,<2.0.2", + "joomla/joomla-cms": ">=2.5,<3.9.12", + "joomla/session": "<1.3.1", + "joyqi/hyper-down": "<=2.4.27", + "jsdecena/laracom": "<2.0.9", + "jsmitty12/phpwhois": "<5.1", + "juzaweb/cms": "<=3.4", + "jweiland/events2": "<8.3.8|>=9,<9.0.6", + "kazist/phpwhois": "<=4.2.6", + "kelvinmo/simplexrd": "<3.1.1", + "kevinpapst/kimai2": "<1.16.7", + "khodakhah/nodcms": "<=3", + "kimai/kimai": "<=2.20.1", + "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", + "klaviyo/magento2-extension": ">=1,<3", + "knplabs/knp-snappy": "<=1.4.2", + "kohana/core": "<3.3.3", + "krayin/laravel-crm": "<=1.3", + "kreait/firebase-php": ">=3.2,<3.8.1", + "kumbiaphp/kumbiapp": "<=1.1.1", + "la-haute-societe/tcpdf": "<6.2.22", + "laminas/laminas-diactoros": "<2.18.1|==2.19|==2.20|==2.21|==2.22|==2.23|>=2.24,<2.24.2|>=2.25,<2.25.2", + "laminas/laminas-form": "<2.17.1|>=3,<3.0.2|>=3.1,<3.1.1", + "laminas/laminas-http": "<2.14.2", + "lara-zeus/artemis": ">=1,<=1.0.6", + "lara-zeus/dynamic-dashboard": ">=3,<=3.0.1", + "laravel/fortify": "<1.11.1", + "laravel/framework": "<6.20.44|>=7,<7.30.6|>=8,<8.75", + "laravel/laravel": ">=5.4,<5.4.22", + "laravel/socialite": ">=1,<2.0.10", + "latte/latte": "<2.10.8", + "lavalite/cms": "<=9|==10.1", + "lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5", + "league/commonmark": "<0.18.3", + "league/flysystem": "<1.1.4|>=2,<2.1.1", + "league/oauth2-server": ">=8.3.2,<8.4.2|>=8.5,<8.5.3", + "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", + "libreform/libreform": ">=2,<=2.0.8", + "librenms/librenms": "<2017.08.18", + "liftkit/database": "<2.13.2", + "lightsaml/lightsaml": "<1.3.5", + "limesurvey/limesurvey": "<6.5.12", + "livehelperchat/livehelperchat": "<=3.91", + "livewire/livewire": "<2.12.7|>=3.0.0.0-beta1,<3.5.2", + "lms/routes": "<2.1.1", + "localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2", + "luyadev/yii-helpers": "<1.2.1", + "magento/community-edition": "<2.4.5|==2.4.5|>=2.4.5.0-patch1,<2.4.5.0-patch9|==2.4.6|>=2.4.6.0-patch1,<2.4.6.0-patch7|==2.4.7|>=2.4.7.0-patch1,<2.4.7.0-patch2", + "magento/core": "<=1.9.4.5", + "magento/magento1ce": "<1.9.4.3-dev", + "magento/magento1ee": ">=1,<1.14.4.3-dev", + "magento/product-community-edition": "<2.4.4.0-patch9|>=2.4.5,<2.4.5.0-patch8|>=2.4.6,<2.4.6.0-patch6|>=2.4.7,<2.4.7.0-patch1", + "magneto/core": "<1.9.4.4-dev", + "maikuolan/phpmussel": ">=1,<1.6", + "mainwp/mainwp": "<=4.4.3.3", + "mantisbt/mantisbt": "<=2.26.3", + "marcwillmann/turn": "<0.3.3", + "matyhtf/framework": "<3.0.6", + "mautic/core": "<4.4.13|>=5,<5.1.1", + "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1", + "mdanter/ecc": "<2", + "mediawiki/cargo": "<3.6.1", + "mediawiki/core": "<1.36.2", + "mediawiki/matomo": "<2.4.3", + "mediawiki/semantic-media-wiki": "<4.0.2", + "melisplatform/melis-asset-manager": "<5.0.1", + "melisplatform/melis-cms": "<5.0.1", + "melisplatform/melis-front": "<5.0.1", + "mezzio/mezzio-swoole": "<3.7|>=4,<4.3", + "mgallegos/laravel-jqgrid": "<=1.3", + "microsoft/microsoft-graph": ">=1.16,<1.109.1|>=2,<2.0.1", + "microsoft/microsoft-graph-beta": "<2.0.1", + "microsoft/microsoft-graph-core": "<2.0.2", + "microweber/microweber": "<=2.0.16", + "mikehaertl/php-shellcommand": "<1.6.1", + "miniorange/miniorange-saml": "<1.4.3", + "mittwald/typo3_forum": "<1.2.1", + "mobiledetect/mobiledetectlib": "<2.8.32", + "modx/revolution": "<=2.8.3.0-patch", + "mojo42/jirafeau": "<4.4", + "mongodb/mongodb": ">=1,<1.9.2", + "monolog/monolog": ">=1.8,<1.12", + "moodle/moodle": "<4.3.5|>=4.4.0.0-beta,<4.4.1", + "mos/cimage": "<0.7.19", + "movim/moxl": ">=0.8,<=0.10", + "movingbytes/social-network": "<=1.2.1", + "mpdf/mpdf": "<=7.1.7", + "munkireport/comment": "<4.1", + "munkireport/managedinstalls": "<2.6", + "munkireport/munki_facts": "<1.5", + "munkireport/munkireport": ">=2.5.3,<5.6.3", + "munkireport/reportdata": "<3.5", + "munkireport/softwareupdate": "<1.6", + "mustache/mustache": ">=2,<2.14.1", + "namshi/jose": "<2.2", + "nategood/httpful": "<1", + "neoan3-apps/template": "<1.1.1", + "neorazorx/facturascripts": "<2022.04", + "neos/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", + "neos/form": ">=1.2,<4.3.3|>=5,<5.0.9|>=5.1,<5.1.3", + "neos/media-browser": "<7.3.19|>=8,<8.0.16|>=8.1,<8.1.11|>=8.2,<8.2.11|>=8.3,<8.3.9", + "neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<5.3.10|>=7,<7.0.9|>=7.1,<7.1.7|>=7.2,<7.2.6|>=7.3,<7.3.4|>=8,<8.0.2", + "neos/swiftmailer": "<5.4.5", + "netgen/tagsbundle": ">=3.4,<3.4.11|>=4,<4.0.15", + "nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6", + "nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13", + "nilsteampassnet/teampass": "<3.0.10", + "nonfiction/nterchange": "<4.1.1", + "notrinos/notrinos-erp": "<=0.7", + "noumo/easyii": "<=0.9", + "novaksolutions/infusionsoft-php-sdk": "<1", + "nukeviet/nukeviet": "<4.5.02", + "nyholm/psr7": "<1.6.1", + "nystudio107/craft-seomatic": "<3.4.12", + "nzedb/nzedb": "<0.8", + "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", + "october/backend": "<1.1.2", + "october/cms": "<1.0.469|==1.0.469|==1.0.471|==1.1.1", + "october/october": "<=3.6.4", + "october/rain": "<1.0.472|>=1.1,<1.1.2", + "october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.34|>=3,<3.5.15", + "omeka/omeka-s": "<4.0.3", + "onelogin/php-saml": "<2.10.4", + "oneup/uploader-bundle": ">=1,<1.9.3|>=2,<2.1.5", + "open-web-analytics/open-web-analytics": "<1.7.4", + "opencart/opencart": ">=0", + "openid/php-openid": "<2.3", + "openmage/magento-lts": "<20.10.1", + "opensolutions/vimbadmin": "<=3.0.15", + "opensource-workshop/connect-cms": "<1.7.2|>=2,<2.3.2", + "orchid/platform": ">=9,<9.4.4|>=14.0.0.0-alpha4,<14.5", + "oro/calendar-bundle": ">=4.2,<=4.2.6|>=5,<=5.0.6|>=5.1,<5.1.1", + "oro/commerce": ">=4.1,<5.0.11|>=5.1,<5.1.1", + "oro/crm": ">=1.7,<1.7.4|>=3.1,<4.1.17|>=4.2,<4.2.7", + "oro/crm-call-bundle": ">=4.2,<=4.2.5|>=5,<5.0.4|>=5.1,<5.1.1", + "oro/customer-portal": ">=4.1,<=4.1.13|>=4.2,<=4.2.10|>=5,<=5.0.11|>=5.1,<=5.1.3", + "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<=4.2.10|>=5,<=5.0.12|>=5.1,<=5.1.3", + "oveleon/contao-cookiebar": "<1.16.3|>=2,<2.1.3", + "oxid-esales/oxideshop-ce": "<4.5", + "oxid-esales/paymorrow-module": ">=1,<1.0.2|>=2,<2.0.1", + "packbackbooks/lti-1-3-php-library": "<5", + "padraic/humbug_get_contents": "<1.1.2", + "pagarme/pagarme-php": "<3", + "pagekit/pagekit": "<=1.0.18", + "paragonie/ecc": "<2.0.1", + "paragonie/random_compat": "<2", + "passbolt/passbolt_api": "<4.6.2", + "paypal/adaptivepayments-sdk-php": "<=3.9.2", + "paypal/invoice-sdk-php": "<=3.9", + "paypal/merchant-sdk-php": "<3.12", + "paypal/permissions-sdk-php": "<=3.9.1", + "pear/archive_tar": "<1.4.14", + "pear/auth": "<1.2.4", + "pear/crypt_gpg": "<1.6.7", + "pear/pear": "<=1.10.1", + "pegasus/google-for-jobs": "<1.5.1|>=2,<2.1.1", + "personnummer/personnummer": "<3.0.2", + "phanan/koel": "<5.1.4", + "phenx/php-svg-lib": "<0.5.2", + "php-censor/php-censor": "<2.0.13|>=2.1,<2.1.5", + "php-mod/curl": "<2.3.2", + "phpbb/phpbb": "<3.2.10|>=3.3,<3.3.1", + "phpems/phpems": ">=6,<=6.1.3", + "phpfastcache/phpfastcache": "<6.1.5|>=7,<7.1.2|>=8,<8.0.7", + "phpmailer/phpmailer": "<6.5", + "phpmussel/phpmussel": ">=1,<1.6", + "phpmyadmin/phpmyadmin": "<5.2.1", + "phpmyfaq/phpmyfaq": "<3.2.5|==3.2.5", + "phpoffice/common": "<0.2.9", + "phpoffice/phpexcel": "<1.8", + "phpoffice/phpspreadsheet": "<1.29.2|>=2,<2.1.1|>=2.2,<2.3", + "phpseclib/phpseclib": "<2.0.47|>=3,<3.0.36", + "phpservermon/phpservermon": "<3.6", + "phpsysinfo/phpsysinfo": "<3.4.3", + "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5.0.10,<5.6.3", + "phpwhois/phpwhois": "<=4.2.5", + "phpxmlrpc/extras": "<0.6.1", + "phpxmlrpc/phpxmlrpc": "<4.9.2", + "pi/pi": "<=2.5", + "pimcore/admin-ui-classic-bundle": "<1.5.4", + "pimcore/customer-management-framework-bundle": "<4.0.6", + "pimcore/data-hub": "<1.2.4", + "pimcore/data-importer": "<1.8.9|>=1.9,<1.9.3", + "pimcore/demo": "<10.3", + "pimcore/ecommerce-framework-bundle": "<1.0.10", + "pimcore/perspective-editor": "<1.5.1", + "pimcore/pimcore": "<11.2.4", + "pixelfed/pixelfed": "<0.11.11", + "plotly/plotly.js": "<2.25.2", + "pocketmine/bedrock-protocol": "<8.0.2", + "pocketmine/pocketmine-mp": "<5.11.2", + "pocketmine/raklib": ">=0.14,<0.14.6|>=0.15,<0.15.1", + "pressbooks/pressbooks": "<5.18", + "prestashop/autoupgrade": ">=4,<4.10.1", + "prestashop/blockreassurance": "<=5.1.3", + "prestashop/blockwishlist": ">=2,<2.1.1", + "prestashop/contactform": ">=1.0.1,<4.3", + "prestashop/gamification": "<2.3.2", + "prestashop/prestashop": "<8.1.6", + "prestashop/productcomments": "<5.0.2", + "prestashop/ps_emailsubscription": "<2.6.1", + "prestashop/ps_facetedsearch": "<3.4.1", + "prestashop/ps_linklist": "<3.1", + "privatebin/privatebin": "<1.4|>=1.5,<1.7.4", + "processwire/processwire": "<=3.0.229", + "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", + "propel/propel1": ">=1,<=1.7.1", + "pterodactyl/panel": "<1.11.6", + "ptheofan/yii2-statemachine": ">=2.0.0.0-RC1-dev,<=2", + "ptrofimov/beanstalk_console": "<1.7.14", + "pubnub/pubnub": "<6.1", + "pusher/pusher-php-server": "<2.2.1", + "pwweb/laravel-core": "<=0.3.6.0-beta", + "pxlrbt/filament-excel": "<1.1.14|>=2.0.0.0-alpha,<2.3.3", + "pyrocms/pyrocms": "<=3.9.1", + "qcubed/qcubed": "<=3.1.1", + "quickapps/cms": "<=2.0.0.0-beta2", + "rainlab/blog-plugin": "<1.4.1", + "rainlab/debugbar-plugin": "<3.1", + "rainlab/user-plugin": "<=1.4.5", + "rankmath/seo-by-rank-math": "<=1.0.95", + "rap2hpoutre/laravel-log-viewer": "<0.13", + "react/http": ">=0.7,<1.9", + "really-simple-plugins/complianz-gdpr": "<6.4.2", + "redaxo/source": "<=5.15.1", + "remdex/livehelperchat": "<4.29", + "reportico-web/reportico": "<=8.1", + "rhukster/dom-sanitizer": "<1.0.7", + "rmccue/requests": ">=1.6,<1.8", + "robrichards/xmlseclibs": ">=1,<3.0.4", + "roots/soil": "<4.1", + "rudloff/alltube": "<3.0.3", + "s-cart/core": "<6.9", + "s-cart/s-cart": "<6.9", + "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", + "sabre/dav": ">=1.6,<1.7.11|>=1.8,<1.8.9", + "scheb/two-factor-bundle": "<3.26|>=4,<4.11", + "sensiolabs/connect": "<4.2.3", + "serluck/phpwhois": "<=4.2.6", + "sfroemken/url_redirect": "<=1.2.1", + "sheng/yiicms": "<=1.2", + "shopware/core": "<=6.5.8.12|>=6.6,<=6.6.5", + "shopware/platform": "<=6.5.8.12|>=6.6,<=6.6.5", + "shopware/production": "<=6.3.5.2", + "shopware/shopware": "<=5.7.17", + "shopware/storefront": "<=6.4.8.1|>=6.5.8,<6.5.8.7-dev", + "shopxo/shopxo": "<=6.1", + "showdoc/showdoc": "<2.10.4", + "silverstripe-australia/advancedreports": ">=1,<=2", + "silverstripe/admin": "<1.13.19|>=2,<2.1.8", + "silverstripe/assets": ">=1,<1.11.1", + "silverstripe/cms": "<4.11.3", + "silverstripe/comments": ">=1.3,<3.1.1", + "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", + "silverstripe/framework": "<5.2.16", + "silverstripe/graphql": ">=2,<2.0.5|>=3,<3.8.2|>=4,<4.3.7|>=5,<5.1.3", + "silverstripe/hybridsessions": ">=1,<2.4.1|>=2.5,<2.5.1", + "silverstripe/recipe-cms": ">=4.5,<4.5.3", + "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1", + "silverstripe/reports": "<5.2.3", + "silverstripe/restfulserver": ">=1,<1.0.9|>=2,<2.0.4|>=2.1,<2.1.2", + "silverstripe/silverstripe-omnipay": "<2.5.2|>=3,<3.0.2|>=3.1,<3.1.4|>=3.2,<3.2.1", + "silverstripe/subsites": ">=2,<2.6.1", + "silverstripe/taxonomy": ">=1.3,<1.3.1|>=2,<2.0.1", + "silverstripe/userforms": "<3|>=5,<5.4.2", + "silverstripe/versioned-admin": ">=1,<1.11.1", + "simple-updates/phpwhois": "<=1", + "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4|==5.0.0.0-alpha12", + "simplesamlphp/simplesamlphp": "<1.18.6", + "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", + "simplesamlphp/simplesamlphp-module-openid": "<1", + "simplesamlphp/simplesamlphp-module-openidprovider": "<0.9", + "simplesamlphp/xml-security": "==1.6.11", + "simplito/elliptic-php": "<1.0.6", + "sitegeist/fluid-components": "<3.5", + "sjbr/sr-freecap": "<2.4.6|>=2.5,<2.5.3", + "slim/psr7": "<1.4.1|>=1.5,<1.5.1|>=1.6,<1.6.1", + "slim/slim": "<2.6", + "slub/slub-events": "<3.0.3", + "smarty/smarty": "<4.5.3|>=5,<5.1.1", + "snipe/snipe-it": "<6.4.2", + "socalnick/scn-social-auth": "<1.15.2", + "socialiteproviders/steam": "<1.1", + "spatie/browsershot": "<3.57.4", + "spatie/image-optimizer": "<1.7.3", + "spipu/html2pdf": "<5.2.8", + "spoon/library": "<1.4.1", + "spoonity/tcpdf": "<6.2.22", + "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", + "ssddanbrown/bookstack": "<24.05.1", + "starcitizentools/citizen-skin": ">=2.6.3,<2.31", + "statamic/cms": "<4.46|>=5.3,<5.6.2", + "stormpath/sdk": "<9.9.99", + "studio-42/elfinder": "<=2.1.64", + "studiomitte/friendlycaptcha": "<0.1.4", + "subhh/libconnect": "<7.0.8|>=8,<8.1", + "sukohi/surpass": "<1", + "sulu/form-bundle": ">=2,<2.5.3", + "sulu/sulu": "<1.6.44|>=2,<2.6.5", + "sumocoders/framework-user-bundle": "<1.4", + "superbig/craft-audit": "<3.0.2", + "swag/paypal": "<5.4.4", + "swiftmailer/swiftmailer": "<6.2.5", + "swiftyedit/swiftyedit": "<1.2", + "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", + "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", + "sylius/grid-bundle": "<1.10.1", + "sylius/paypal-plugin": ">=1,<1.2.4|>=1.3,<1.3.1", + "sylius/resource-bundle": ">=1,<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", + "sylius/sylius": "<1.12.19|>=1.13.0.0-alpha1,<1.13.4", + "symbiote/silverstripe-multivaluefield": ">=3,<3.1", + "symbiote/silverstripe-queuedjobs": ">=3,<3.0.2|>=3.1,<3.1.4|>=4,<4.0.7|>=4.1,<4.1.2|>=4.2,<4.2.4|>=4.3,<4.3.3|>=4.4,<4.4.3|>=4.5,<4.5.1|>=4.6,<4.6.4", + "symbiote/silverstripe-seed": "<6.0.3", + "symbiote/silverstripe-versionedfiles": "<=2.0.3", + "symfont/process": ">=0", + "symfony/cache": ">=3.1,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8", + "symfony/dependency-injection": ">=2,<2.0.17|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", + "symfony/error-handler": ">=4.4,<4.4.4|>=5,<5.0.4", + "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", + "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<5.3.15|>=5.4.3,<5.4.4|>=6.0.3,<6.0.4", + "symfony/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7", + "symfony/http-kernel": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", + "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", + "symfony/maker-bundle": ">=1.27,<1.29.2|>=1.30,<1.31.1", + "symfony/mime": ">=4.3,<4.3.8", + "symfony/phpunit-bridge": ">=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", + "symfony/polyfill": ">=1,<1.10", + "symfony/polyfill-php55": ">=1,<1.10", + "symfony/proxy-manager-bridge": ">=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", + "symfony/routing": ">=2,<2.0.19", + "symfony/security": ">=2,<2.7.51|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.8", + "symfony/security-bundle": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", + "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.9", + "symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", + "symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8", + "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.3.2|>=5.4,<5.4.31|>=6,<6.3.8", + "symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12", + "symfony/symfony": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8", + "symfony/translation": ">=2,<2.0.17", + "symfony/twig-bridge": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8", + "symfony/ux-autocomplete": "<2.11.2", + "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3", + "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8", + "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", + "symfony/webhook": ">=6.3,<6.3.8", + "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7|>=2.2.0.0-beta1,<2.2.0.0-beta2", + "symphonycms/symphony-2": "<2.6.4", + "t3/dce": "<0.11.5|>=2.2,<2.6.2", + "t3g/svg-sanitizer": "<1.0.3", + "t3s/content-consent": "<1.0.3|>=2,<2.0.2", + "tastyigniter/tastyigniter": "<3.3", + "tcg/voyager": "<=1.4", + "tecnickcom/tcpdf": "<=6.7.4", + "terminal42/contao-tablelookupwizard": "<3.3.5", + "thelia/backoffice-default-template": ">=2.1,<2.1.2", + "thelia/thelia": ">=2.1,<2.1.3", + "theonedemon/phpwhois": "<=4.2.5", + "thinkcmf/thinkcmf": "<6.0.8", + "thorsten/phpmyfaq": "<3.2.2", + "tikiwiki/tiki-manager": "<=17.1", + "timber/timber": ">=0.16.6,<1.23.1|>=1.24,<1.24.1|>=2,<2.1", + "tinymce/tinymce": "<7.2", + "tinymighty/wiki-seo": "<1.2.2", + "titon/framework": "<9.9.99", + "tobiasbg/tablepress": "<=2.0.0.0-RC1", + "topthink/framework": "<6.0.17|>=6.1,<=8.0.4", + "topthink/think": "<=6.1.1", + "topthink/thinkphp": "<=3.2.3", + "torrentpier/torrentpier": "<=2.4.3", + "tpwd/ke_search": "<4.0.3|>=4.1,<4.6.6|>=5,<5.0.2", + "tribalsystems/zenario": "<=9.7.61188", + "truckersmp/phpwhois": "<=4.3.1", + "ttskch/pagination-service-provider": "<1", + "twbs/bootstrap": "<=3.4.1|>=4,<=4.6.2", + "twig/twig": "<1.44.8|>=2,<2.16.1|>=3,<3.11.1|>=3.12,<3.14", + "typo3/cms": "<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2", + "typo3/cms-backend": "<4.1.14|>=4.2,<4.2.15|>=4.3,<4.3.7|>=4.4,<4.4.4|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<10.4.46|>=11,<11.5.40|>=12,<12.4.21|>=13,<13.3.1", + "typo3/cms-core": "<=8.7.56|>=9,<=9.5.47|>=10,<=10.4.44|>=11,<=11.5.36|>=12,<=12.4.14|>=13,<=13.1", + "typo3/cms-extbase": "<6.2.24|>=7,<7.6.8|==8.1.1", + "typo3/cms-fluid": "<4.3.4|>=4.4,<4.4.1", + "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", + "typo3/cms-frontend": "<4.3.9|>=4.4,<4.4.5", + "typo3/cms-install": "<4.1.14|>=4.2,<4.2.16|>=4.3,<4.3.9|>=4.4,<4.4.5|>=12.2,<12.4.8", + "typo3/cms-rte-ckeditor": ">=9.5,<9.5.42|>=10,<10.4.39|>=11,<11.5.30", + "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", + "typo3/html-sanitizer": ">=1,<=1.5.2|>=2,<=2.1.3", + "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.3.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3", + "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", + "typo3/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", + "typo3fluid/fluid": ">=2,<2.0.8|>=2.1,<2.1.7|>=2.2,<2.2.4|>=2.3,<2.3.7|>=2.4,<2.4.4|>=2.5,<2.5.11|>=2.6,<2.6.10", + "ua-parser/uap-php": "<3.8", + "uasoft-indonesia/badaso": "<=2.9.7", + "unisharp/laravel-filemanager": "<2.6.4", + "userfrosting/userfrosting": ">=0.3.1,<4.6.3", + "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", + "uvdesk/community-skeleton": "<=1.1.1", + "uvdesk/core-framework": "<=1.1.1", + "vanilla/safecurl": "<0.9.2", + "verbb/comments": "<1.5.5", + "verbb/formie": "<2.1.6", + "verbb/image-resizer": "<2.0.9", + "verbb/knock-knock": "<1.2.8", + "verot/class.upload.php": "<=2.1.6", + "villagedefrance/opencart-overclocked": "<=1.11.1", + "vova07/yii2-fileapi-widget": "<0.1.9", + "vrana/adminer": "<4.8.1", + "vufind/vufind": ">=2,<9.1.1", + "waldhacker/hcaptcha": "<2.1.2", + "wallabag/tcpdf": "<6.2.22", + "wallabag/wallabag": "<2.6.7", + "wanglelecc/laracms": "<=1.0.3", + "web-auth/webauthn-framework": ">=3.3,<3.3.4|>=4.5,<4.9", + "web-auth/webauthn-lib": ">=4.5,<4.9", + "web-feet/coastercms": "==5.5", + "webbuilders-group/silverstripe-kapost-bridge": "<0.4", + "webcoast/deferred-image-processing": "<1.0.2", + "webklex/laravel-imap": "<5.3", + "webklex/php-imap": "<5.3", + "webpa/webpa": "<3.1.2", + "wikibase/wikibase": "<=1.39.3", + "wikimedia/parsoid": "<0.12.2", + "willdurand/js-translation-bundle": "<2.1.1", + "winter/wn-backend-module": "<1.2.4", + "winter/wn-dusk-plugin": "<2.1", + "winter/wn-system-module": "<1.2.4", + "wintercms/winter": "<=1.2.3", + "wireui/wireui": "<1.19.3|>=2,<2.1.3", + "woocommerce/woocommerce": "<6.6|>=8.8,<8.8.5|>=8.9,<8.9.3", + "wp-cli/wp-cli": ">=0.12,<2.5", + "wp-graphql/wp-graphql": "<=1.14.5", + "wp-premium/gravityforms": "<2.4.21", + "wpanel/wpanel4-cms": "<=4.3.1", + "wpcloud/wp-stateless": "<3.2", + "wpglobus/wpglobus": "<=1.9.6", + "wwbn/avideo": "<14.3", + "xataface/xataface": "<3", + "xpressengine/xpressengine": "<3.0.15", + "yab/quarx": "<2.4.5", + "yeswiki/yeswiki": "<4.1", + "yetiforce/yetiforce-crm": "<=6.4", + "yidashi/yii2cmf": "<=2", + "yii2mod/yii2-cms": "<1.9.2", + "yiisoft/yii": "<1.1.29", + "yiisoft/yii2": "<2.0.49.4-dev", + "yiisoft/yii2-authclient": "<2.2.15", + "yiisoft/yii2-bootstrap": "<2.0.4", + "yiisoft/yii2-dev": "<2.0.43", + "yiisoft/yii2-elasticsearch": "<2.0.5", + "yiisoft/yii2-gii": "<=2.2.4", + "yiisoft/yii2-jui": "<2.0.4", + "yiisoft/yii2-redis": "<2.0.8", + "yikesinc/yikes-inc-easy-mailchimp-extender": "<6.8.6", + "yoast-seo-for-typo3/yoast_seo": "<7.2.3", + "yourls/yourls": "<=1.8.2", + "yuan1994/tpadmin": "<=1.3.12", + "zencart/zencart": "<=1.5.7.0-beta", + "zendesk/zendesk_api_client_php": "<2.2.11", + "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3", + "zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2", + "zendframework/zend-crypt": ">=2,<2.4.9|>=2.5,<2.5.2", + "zendframework/zend-db": "<2.2.10|>=2.3,<2.3.5", + "zendframework/zend-developer-tools": ">=1.2.2,<1.2.3", + "zendframework/zend-diactoros": "<1.8.4", + "zendframework/zend-feed": "<2.10.3", + "zendframework/zend-form": ">=2,<2.2.7|>=2.3,<2.3.1", + "zendframework/zend-http": "<2.8.1", + "zendframework/zend-json": ">=2.1,<2.1.6|>=2.2,<2.2.6", + "zendframework/zend-ldap": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.8|>=2.3,<2.3.3", + "zendframework/zend-mail": "<2.4.11|>=2.5,<2.7.2", + "zendframework/zend-navigation": ">=2,<2.2.7|>=2.3,<2.3.1", + "zendframework/zend-session": ">=2,<2.2.9|>=2.3,<2.3.4", + "zendframework/zend-validator": ">=2.3,<2.3.6", + "zendframework/zend-view": ">=2,<2.2.7|>=2.3,<2.3.1", + "zendframework/zend-xmlrpc": ">=2.1,<2.1.6|>=2.2,<2.2.6", + "zendframework/zendframework": "<=3", + "zendframework/zendframework1": "<1.12.20", + "zendframework/zendopenid": "<2.0.2", + "zendframework/zendrest": "<2.0.2", + "zendframework/zendservice-amazon": "<2.0.3", + "zendframework/zendservice-api": "<1", + "zendframework/zendservice-audioscrobbler": "<2.0.2", + "zendframework/zendservice-nirvanix": "<2.0.2", + "zendframework/zendservice-slideshare": "<2.0.2", + "zendframework/zendservice-technorati": "<2.0.2", + "zendframework/zendservice-windowsazure": "<2.0.2", + "zendframework/zendxml": ">=1,<1.0.1", + "zenstruck/collection": "<0.2.1", + "zetacomponents/mail": "<1.8.2", + "zf-commons/zfc-user": "<1.2.2", + "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", + "zfr/zfr-oauth2-server-module": "<0.1.2", + "zoujingli/thinkadmin": "<=6.1.53" + }, + "type": "metapackage", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "role": "maintainer" + }, + { + "name": "Ilya Tribusean", + "email": "slash3b@gmail.com", + "role": "maintainer" + } + ], + "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", + "keywords": [ + "dev" + ], + "support": { + "issues": "https://github.com/Roave/SecurityAdvisories/issues", + "source": "https://github.com/Roave/SecurityAdvisories/tree/latest" + }, + "funding": [ + { + "url": "https://github.com/Ocramius", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/roave/security-advisories", + "type": "tidelift" + } + ], + "time": "2024-10-10T00:18:21+00:00" + }, { "name": "sebastian/cli-parser", "version": "1.0.2", @@ -12543,7 +13374,9 @@ ], "aliases": [], "minimum-stability": "dev", - "stability-flags": [], + "stability-flags": { + "roave/security-advisories": 20 + }, "prefer-stable": true, "prefer-lowest": false, "platform": { diff --git a/database/factories/EventFactory.php b/database/factories/EventFactory.php index 3dbb3c1..a900379 100644 --- a/database/factories/EventFactory.php +++ b/database/factories/EventFactory.php @@ -30,6 +30,7 @@ public function definition() 'title' => $this->faker->sentence, 'description' => $this->faker->paragraph, 'url' => urlencode($this->faker->firstName()), + 'event_type' => [$this->faker->randomElement(array_keys(Event::eventTypeMap()))], 'image' => $this->faker->imageUrl(), 'created_by' => 4, 'enabled' => $this->faker->boolean, diff --git a/database/migrations/2024_06_27_150621_create_events_table.php b/database/migrations/2024_06_27_150621_create_events_table.php index f60e2e0..5cb5add 100644 --- a/database/migrations/2024_06_27_150621_create_events_table.php +++ b/database/migrations/2024_06_27_150621_create_events_table.php @@ -17,7 +17,7 @@ public function up() $table->id(); $table->string('title'); $table->text('description'); - $table->text('url'); + $table->text('url'); $table->date('published_at'); $table->string('image')->nullable(); $table->string('link_url')->nullable(); diff --git a/database/migrations/2024_10_07_120321_create_course_prerequisites_table.php b/database/migrations/2024_10_07_120321_create_course_prerequisites_table.php new file mode 100644 index 0000000..c956c1b --- /dev/null +++ b/database/migrations/2024_10_07_120321_create_course_prerequisites_table.php @@ -0,0 +1,32 @@ +id(); + $table->foreignId('course_id')->constrained('courses')->onDelete('cascade'); + $table->foreignId('prerequisite_id')->constrained('courses')->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('course_prerequisites'); + } +} diff --git a/database/migrations/2024_10_08_195256_modify_course_modules_course_id_foreign.php b/database/migrations/2024_10_08_195256_modify_course_modules_course_id_foreign.php new file mode 100644 index 0000000..484e179 --- /dev/null +++ b/database/migrations/2024_10_08_195256_modify_course_modules_course_id_foreign.php @@ -0,0 +1,50 @@ +getDriverName() !== 'sqlite') { + $table->dropForeign(['course_id']); + } + + // Recreate the foreign key with 'onDelete' cascade + $table->foreign('course_id') + ->references('id') + ->on('courses') + ->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('course_modules', function (Blueprint $table) { + // Drop the new foreign key + if (Schema::getConnection()->getDriverName() !== 'sqlite') { + $table->dropForeign(['course_id']); + } + + // Restore the old foreign key without 'onDelete' cascade + $table->foreign('course_id') + ->references('id') + ->on('courses'); + }); + } +} + diff --git a/database/migrations/2024_10_09_114038_add_event_type_to_events_table.php b/database/migrations/2024_10_09_114038_add_event_type_to_events_table.php new file mode 100644 index 0000000..fa1ddf8 --- /dev/null +++ b/database/migrations/2024_10_09_114038_add_event_type_to_events_table.php @@ -0,0 +1,32 @@ +json('event_type')->nullable()->default(null); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('events', function (Blueprint $table) { + $table->dropColumn('event_type'); + }); + } +} diff --git a/database/seeders/EventSeeder.php b/database/seeders/EventSeeder.php index 8f947f1..bde1c7f 100644 --- a/database/seeders/EventSeeder.php +++ b/database/seeders/EventSeeder.php @@ -26,6 +26,7 @@ public function run() "title" => "ESCAPE - 2020", "description" => '

EscaPe is the annual project symposium of the Department of Computer Engineering, University of Peradeniya. It will present the research projects of the undergraduates of the Department of Computer Engineering. ESCaPe 2020 is the 5th symposium that is organized by the department and this time the symposium is open for a broader audience and aims to build a platform for the undergraduates to present their research ideas to the industry and academic community.

Further details of the event are at: http://aces.ce.pdn.ac.lk/escape20/

', "url" => "escape-2020", + 'event_type' => ['0', '1'], "published_at" => "2024-08-27", "image" => "1724778446.jpg", "link_url" => "https://aces.ce.pdn.ac.lk/escape/2020/", @@ -43,6 +44,8 @@ public function run() "title" => "VIVACES 2020", "description" => '

Online social gathering of Department of Computer Engineering, University of Peradeniya was held on Friday 12th of June, 2020 with the participation of the Students and Staff successfully.

', "url" => "VIVACES-2020", + 'event_type' => ['1','2'], + "published_at" => "2024-08-27", "image" => "1724778453.jpg", "link_url" => null, @@ -60,6 +63,8 @@ public function run() "title" => "Hackers’ Club Developer Series", "description" => '

An Online Webinar series organized by Hackers’ Club to introduce some of the tools that you must have up on your sleeve to be a successful Developer/Engineer in the world of Computing. And also a chance to master some of them with the Developer Resources & Materials shared by Hackers’ Club.

This Developer Series mainly focuses on front-end web development, and back-end development, for implementing a multi-platform solution for the real world problems. The Developer Series will be an invaluable chance for you to start the journey of mastering the Web Development world.

Series Timeline:

  • Introduction to Git – Nov 03
  • Project collaboration with “GitHub” – Nov 17
  • Introduction to Node.js – Nov 24
  • MongoDB Express REST API with Node.js – Dec 01
  • Introduction to React – Dec 09

For more information, please contact hackersclub@eng.pdn.ac.lk or visit https://hackersuop.github.io

', "url" => "hackers-club-dev-series", + 'event_type' => ['0'], + "published_at" => "2024-08-27", "image" => "1724778465.png", "link_url" => null, @@ -77,6 +82,8 @@ public function run() "title" => "GSOC preparation mentoring program’21", "description" => '

Organized by the Department of Computer Engineering.

', "url" => "gsoc-preparation-mentoring-program21", + 'event_type' => ['0', '2'], + "published_at" => "2024-08-27", "image" => "1724778473.png", "link_url" => null, diff --git a/resources/views/backend/courses/delete.blade.php b/resources/views/backend/courses/delete.blade.php index 842680f..b289835 100644 --- a/resources/views/backend/courses/delete.blade.php +++ b/resources/views/backend/courses/delete.blade.php @@ -13,6 +13,20 @@

Are you sure you want to delete "{{ $course->name }}" ?

+ + @if ($course->prerequisiteFor()->exists()) +
+ Warning: + This course is a prerequisite for the following + course{{ $course->prerequisiteFor->count() == 1 ? '' : 's' }}: +
    + @foreach ($course->prerequisiteFor as $dependentCourse) +
  • {{ $dependentCourse->name }}
  • + @endforeach +
+
+ @endif +
{!! Form::open([ 'url' => route('dashboard.courses.destroy', compact('course')), diff --git a/resources/views/backend/event/create.blade.php b/resources/views/backend/event/create.blade.php index 1d9fc51..a061656 100644 --- a/resources/views/backend/event/create.blade.php +++ b/resources/views/backend/event/create.blade.php @@ -65,6 +65,9 @@
+ + +
{!! Form::label('description', 'Description*', ['class' => 'col-md-2 col-form-label']) !!} diff --git a/resources/views/backend/event/edit.blade.php b/resources/views/backend/event/edit.blade.php index 02202fd..d3e84d0 100644 --- a/resources/views/backend/event/edit.blade.php +++ b/resources/views/backend/event/edit.blade.php @@ -69,6 +69,11 @@
+ + +
{!! Form::label('description', 'Description*', ['class' => 'col-md-2 col-form-label']) !!} diff --git a/resources/views/backend/layouts/app.blade.php b/resources/views/backend/layouts/app.blade.php index 2085193..2eadad0 100644 --- a/resources/views/backend/layouts/app.blade.php +++ b/resources/views/backend/layouts/app.blade.php @@ -58,66 +58,6 @@ @stack('after-scripts') - - diff --git a/resources/views/backend/semesters/delete.blade.php b/resources/views/backend/semesters/delete.blade.php index cd28ca0..b8802c8 100644 --- a/resources/views/backend/semesters/delete.blade.php +++ b/resources/views/backend/semesters/delete.blade.php @@ -15,18 +15,22 @@

@if ($courses->count() > 0) -

The following courses are linked to this semester. Deletion is not permitted until these courses are - reassigned or deleted.

- - Back - @else +
+ Warning: + The following courses are linked to this semester. Deletion is not permitted until these courses are + reassigned or deleted. + +
+ @endif + + @if ($courses->count() == 0)
{!! Form::open([ 'url' => route('dashboard.semesters.destroy', $semester), diff --git a/resources/views/components/backend/dropdown_checkbox.blade.php b/resources/views/components/backend/dropdown_checkbox.blade.php new file mode 100644 index 0000000..5973d6e --- /dev/null +++ b/resources/views/components/backend/dropdown_checkbox.blade.php @@ -0,0 +1,45 @@ +@props(['selected', 'optionsMap']) +
+ {!! Form::label('event_type', 'Event Type*', ['class' => 'col-md-2 col-form-label']) !!} +
+ + @error('event_type') + {{ $message }} + @enderror +
+ + +
+
+ +
+
+
diff --git a/resources/views/livewire/backend/create-courses.blade.php b/resources/views/livewire/backend/create-courses.blade.php index 068ec2d..56c8bbe 100644 --- a/resources/views/livewire/backend/create-courses.blade.php +++ b/resources/views/livewire/backend/create-courses.blade.php @@ -159,7 +159,6 @@
- {{-- objectives --}}
{!! Form::textarea('objectives', '', [ @@ -176,7 +175,11 @@ @enderror
- +
+ Prerequisites: +
+
+ @livewire('backend.prerequisite-selector', ['academic_program' => $academicProgram, 'version' => $version, 'semester' => $semester])
ILOs:
diff --git a/resources/views/livewire/backend/edit-courses.blade.php b/resources/views/livewire/backend/edit-courses.blade.php index e0368ee..44c2db6 100644 --- a/resources/views/livewire/backend/edit-courses.blade.php +++ b/resources/views/livewire/backend/edit-courses.blade.php @@ -177,6 +177,13 @@
+
+ Prerequisites: +
+
+ @livewire('backend.prerequisite-selector', ['courseId' => $course->id, 'academic_program' => $academicProgram, 'version' => $version, 'semester' => $semester]) + +
ILOs:
diff --git a/resources/views/livewire/backend/prerequisite-selector.blade.php b/resources/views/livewire/backend/prerequisite-selector.blade.php new file mode 100644 index 0000000..4792e48 --- /dev/null +++ b/resources/views/livewire/backend/prerequisite-selector.blade.php @@ -0,0 +1,61 @@ +
+
+
+ +
+
+
Available Courses
+ + +
    + @forelse ($filteredAvailableCourses as $course) +
  • +
    + {{ $course->code }} + + {{ $course->name }} | + Semester: {{ $course->semester_id }} | {{ $course->type }} + +
    + +
  • + @empty +
  • No available courses
  • + @endforelse +
+ +
+ {{ $filteredAvailableCourses->links() }} +
+
+
+ + +
+
+
Prerequisites
+
    + @forelse ($selectedCourses as $course) +
  • +
    + {{ $course['code'] }} + + {{ $course['name'] }} | + Semester: {{ $course['semester_id'] }} | {{ $course['type'] }} + +
    + +
  • + @empty +
  • No selected prerequisites
  • + @endforelse +
+
+
+
+
+
diff --git a/tests/Feature/Backend/Event/EventTest.php b/tests/Feature/Backend/Event/EventTest.php index a6da325..5fa5dd3 100644 --- a/tests/Feature/Backend/Event/EventTest.php +++ b/tests/Feature/Backend/Event/EventTest.php @@ -44,7 +44,7 @@ public function event_can_be_created() $response = $this->post('/dashboard/events/', [ 'title' => 'test event', 'description' => 'Nostrum qui qui ut deserunt dolores quaerat. Est quos sed ea quo placeat maxime. Sequi temporibus alias atque assumenda facere modi deleniti. Recusandae autem quia officia iste laudantium veritatis aut.', - + 'event_type' => ['0', '1'], 'image' => 'sample-image.jpg', 'created_by' => $user->id, 'link_url' => 'http://runolfsdottir.biz/quia-provident-ut-ipsa-atque-et', @@ -72,7 +72,8 @@ public function event_can_be_updated() $updateData = [ 'title' => 'Updated Event', 'description' => 'This is an updated event description.', - + 'event_type' => ['0', '2'], + 'image' => 'sample-image.jpg', 'created_by' => $user->id, 'link_url' => 'http://example.com', From d40c5c8824120537ef7af165103cc027212ddf4b Mon Sep 17 00:00:00 2001 From: NuwanJ Date: Wed, 16 Oct 2024 13:48:09 +0530 Subject: [PATCH 06/32] Removed duplicates --- composer.json | 1 - 1 file changed, 1 deletion(-) diff --git a/composer.json b/composer.json index 9a71525..03347d7 100644 --- a/composer.json +++ b/composer.json @@ -27,7 +27,6 @@ "livewire/livewire": "^2.0", "marvinlabs/laravel-discord-logger": "^1.4", "rappasoft/laravel-livewire-tables": "^1.0", - "marvinlabs/laravel-discord-logger": "^1.4", "rappasoft/lockout": "^3.0", "spatie/laravel-activitylog": "^3.14", "spatie/laravel-permission": "^5.10", From 267ff3056736d75bc49b10256f9f822b723760b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Oct 2024 13:57:08 +0530 Subject: [PATCH 07/32] [composer] Update intervention/image requirement from ^2.6 to ^3.8 (#161) Updates the requirements on [intervention/image](https://github.com/Intervention/image) to permit the latest version. - [Release notes](https://github.com/Intervention/image/releases) - [Commits](https://github.com/Intervention/image/compare/2.6.0...3.8.0) --- updated-dependencies: - dependency-name: intervention/image dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: NuwanJ --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 03347d7..3a7d823 100644 --- a/composer.json +++ b/composer.json @@ -14,7 +14,7 @@ "darkghosthunter/laraguard": "^3.0", "fruitcake/laravel-cors": "^3.0", "guzzlehttp/guzzle": "^7.0.1", - "intervention/image": "^2.6", + "intervention/image": "^3.8", "jamesmills/laravel-timezone": "^1.9", "lab404/laravel-impersonate": "^1.6", "langleyfoxall/laravel-nist-password-rules": "^6.0", From c818d21050223575df719a6dd89afda3cefe3661 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:01:31 +0530 Subject: [PATCH 08/32] [npm] Bump @coreui/icons from 1.0.1 to 3.0.1 (#10) * [npm] Bump @coreui/icons from 1.0.1 to 3.0.1 Bumps [@coreui/icons](https://github.com/coreui/coreui-icons) from 1.0.1 to 3.0.1. - [Release notes](https://github.com/coreui/coreui-icons/releases) - [Commits](https://github.com/coreui/coreui-icons/commits/v3.0.1) --- updated-dependencies: - dependency-name: "@coreui/icons" dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * PNPM lock update --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: NuwanJ --- package.json | 4 +-- pnpm-lock.yaml | 92 +++++++++++++++++++++++++------------------------- 2 files changed, 48 insertions(+), 48 deletions(-) diff --git a/package.json b/package.json index 59624eb..8aa90f8 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,8 @@ }, "devDependencies": { "@coreui/coreui": "^3.0.0", - "@coreui/icons": "^1.0.1", - "@fortawesome/fontawesome-free": "^6.6.0", + "@coreui/icons": "^3.0.1", + "@fortawesome/fontawesome-free": "^5.12.1", "@popperjs/core": "^2.5.1", "alpinejs": "^3.13.3", "axios": "^0.21.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5732442..a68e48e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,11 +16,11 @@ importers: specifier: ^3.0.0 version: 3.4.0(@popperjs/core@2.11.8)(perfect-scrollbar@1.5.5) '@coreui/icons': - specifier: ^1.0.1 - version: 1.0.1 + specifier: ^3.0.1 + version: 3.0.1 '@fortawesome/fontawesome-free': - specifier: ^6.6.0 - version: 6.6.0 + specifier: ^5.12.1 + version: 5.15.4 '@popperjs/core': specifier: ^2.5.1 version: 2.11.8 @@ -44,7 +44,7 @@ importers: version: 3.7.1 laravel-mix: specifier: ^6.0.28 - version: 6.0.49(@babel/core@7.25.2)(@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.25.2))(@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.2))(@babel/plugin-transform-runtime@7.25.4(@babel/core@7.25.2))(@babel/preset-env@7.25.4(@babel/core@7.25.2))(postcss@8.4.47)(webpack-cli@4.10.0(webpack@5.94.0))(webpack@5.94.0(webpack-cli@4.10.0)) + version: 6.0.49(@babel/core@7.25.2)(@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.25.2))(@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.2))(@babel/plugin-transform-runtime@7.25.4(@babel/core@7.25.2))(@babel/preset-env@7.25.4(@babel/core@7.25.2))(postcss@8.4.47)(webpack-cli@4.10.0)(webpack@5.94.0) lodash: specifier: ^4.17.19 version: 4.17.21 @@ -65,7 +65,7 @@ importers: version: 1.78.0 sass-loader: specifier: ^16.0.2 - version: 16.0.2(sass@1.78.0)(webpack@5.94.0(webpack-cli@4.10.0)) + version: 16.0.2(sass@1.78.0)(webpack@5.94.0) sweetalert2: specifier: ^9.8.2 version: 9.17.4 @@ -74,7 +74,7 @@ importers: version: 2.7.16 vue-loader: specifier: ^15.9.5 - version: 15.11.1(css-loader@5.2.7(webpack@5.94.0(webpack-cli@4.10.0)))(lodash@4.17.21)(vue-template-compiler@2.7.16)(webpack@5.94.0(webpack-cli@4.10.0)) + version: 15.11.1(css-loader@5.2.7(webpack@5.94.0))(lodash@4.17.21)(vue-template-compiler@2.7.16)(webpack@5.94.0) vue-template-compiler: specifier: ^2.6.10 version: 2.7.16 @@ -681,8 +681,8 @@ packages: '@popperjs/core': ^2.5.4 perfect-scrollbar: ^1.5.0 - '@coreui/icons@1.0.1': - resolution: {integrity: sha512-DAlvdHRC+HHecdy52vskbNzNKEpu6wHDvSlsHGrwOqNxQl1YLhGEtqAW4sKpyVE3GgysNCywUWZGFlLp8I3LgA==} + '@coreui/icons@3.0.1': + resolution: {integrity: sha512-u9UKEcRMyY9pa4jUoLij8pAR03g5g6TLWV33/Mx2ix8sffyi0eO4fLV8DSTQljDCw938zt7KYog5cVKEAJUxxg==} '@discoveryjs/json-ext@0.5.7': resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} @@ -699,8 +699,8 @@ packages: vue: optional: true - '@fortawesome/fontawesome-free@6.6.0': - resolution: {integrity: sha512-60G28ke/sXdtS9KZCpZSHHkCbdsOGEhIUGlwq6yhY74UpTiToIh8np7A8yphhM4BWsvNFtIvLpi4co+h9Mr9Ow==} + '@fortawesome/fontawesome-free@5.15.4': + resolution: {integrity: sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg==} engines: {node: '>=6'} '@jridgewell/gen-mapping@0.3.5': @@ -4273,7 +4273,7 @@ snapshots: '@popperjs/core': 2.11.8 perfect-scrollbar: 1.5.5 - '@coreui/icons@1.0.1': {} + '@coreui/icons@3.0.1': {} '@discoveryjs/json-ext@0.5.7': {} @@ -4281,7 +4281,7 @@ snapshots: optionalDependencies: vue: 2.7.16 - '@fortawesome/fontawesome-free@6.6.0': {} + '@fortawesome/fontawesome-free@5.15.4': {} '@jridgewell/gen-mapping@0.3.5': dependencies: @@ -4626,17 +4626,17 @@ snapshots: '@webassemblyjs/ast': 1.12.1 '@xtuc/long': 4.2.2 - '@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0(webpack@5.94.0))(webpack@5.94.0(webpack-cli@4.10.0))': + '@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0)(webpack@5.94.0)': dependencies: webpack: 5.94.0(webpack-cli@4.10.0) webpack-cli: 4.10.0(webpack@5.94.0) - '@webpack-cli/info@1.5.0(webpack-cli@4.10.0(webpack@5.94.0))': + '@webpack-cli/info@1.5.0(webpack-cli@4.10.0)': dependencies: envinfo: 7.14.0 webpack-cli: 4.10.0(webpack@5.94.0) - '@webpack-cli/serve@1.7.0(webpack-cli@4.10.0(webpack@5.94.0))': + '@webpack-cli/serve@1.7.0(webpack-cli@4.10.0)': dependencies: webpack-cli: 4.10.0(webpack@5.94.0) @@ -4743,7 +4743,7 @@ snapshots: transitivePeerDependencies: - debug - babel-loader@8.4.1(@babel/core@7.25.2)(webpack@5.94.0(webpack-cli@4.10.0)): + babel-loader@8.4.1(@babel/core@7.25.2)(webpack@5.94.0): dependencies: '@babel/core': 7.25.2 find-cache-dir: 3.3.2 @@ -5133,7 +5133,7 @@ snapshots: dependencies: postcss: 8.4.47 - css-loader@5.2.7(webpack@5.94.0(webpack-cli@4.10.0)): + css-loader@5.2.7(webpack@5.94.0): dependencies: icss-utils: 5.1.0(postcss@8.4.47) loader-utils: 2.0.4 @@ -5497,7 +5497,7 @@ snapshots: dependencies: websocket-driver: 0.7.4 - file-loader@6.2.0(webpack@5.94.0(webpack-cli@4.10.0)): + file-loader@6.2.0(webpack@5.94.0): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 @@ -5662,7 +5662,7 @@ snapshots: html-entities@2.5.2: {} - html-loader@1.3.2(webpack@5.94.0(webpack-cli@4.10.0)): + html-loader@1.3.2(webpack@5.94.0): dependencies: html-minifier-terser: 5.1.1 htmlparser2: 4.1.0 @@ -5864,7 +5864,7 @@ snapshots: klona@2.0.6: {} - laravel-mix@6.0.49(@babel/core@7.25.2)(@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.25.2))(@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.2))(@babel/plugin-transform-runtime@7.25.4(@babel/core@7.25.2))(@babel/preset-env@7.25.4(@babel/core@7.25.2))(postcss@8.4.47)(webpack-cli@4.10.0(webpack@5.94.0))(webpack@5.94.0(webpack-cli@4.10.0)): + laravel-mix@6.0.49(@babel/core@7.25.2)(@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.25.2))(@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.2))(@babel/plugin-transform-runtime@7.25.4(@babel/core@7.25.2))(@babel/preset-env@7.25.4(@babel/core@7.25.2))(postcss@8.4.47)(webpack-cli@4.10.0)(webpack@5.94.0): dependencies: '@babel/core': 7.25.2 '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.25.2) @@ -5879,7 +5879,7 @@ snapshots: '@types/imagemin-optipng': 5.2.4 '@types/imagemin-svgo': 8.0.1 autoprefixer: 10.4.20(postcss@8.4.47) - babel-loader: 8.4.1(@babel/core@7.25.2)(webpack@5.94.0(webpack-cli@4.10.0)) + babel-loader: 8.4.1(@babel/core@7.25.2)(webpack@5.94.0) chalk: 4.1.2 chokidar: 3.6.0 clean-css: 5.3.3 @@ -5887,35 +5887,35 @@ snapshots: collect.js: 4.36.1 commander: 7.2.0 concat: 1.0.3 - css-loader: 5.2.7(webpack@5.94.0(webpack-cli@4.10.0)) + css-loader: 5.2.7(webpack@5.94.0) cssnano: 5.1.15(postcss@8.4.47) dotenv: 10.0.0 dotenv-expand: 5.1.0 - file-loader: 6.2.0(webpack@5.94.0(webpack-cli@4.10.0)) + file-loader: 6.2.0(webpack@5.94.0) fs-extra: 10.1.0 glob: 7.2.3 - html-loader: 1.3.2(webpack@5.94.0(webpack-cli@4.10.0)) + html-loader: 1.3.2(webpack@5.94.0) imagemin: 7.0.1 img-loader: 4.0.0(imagemin@7.0.1) lodash: 4.17.21 md5: 2.3.0 - mini-css-extract-plugin: 1.6.2(webpack@5.94.0(webpack-cli@4.10.0)) + mini-css-extract-plugin: 1.6.2(webpack@5.94.0) node-libs-browser: 2.2.1 postcss: 8.4.47 postcss-load-config: 3.1.4(postcss@8.4.47) - postcss-loader: 6.2.1(postcss@8.4.47)(webpack@5.94.0(webpack-cli@4.10.0)) + postcss-loader: 6.2.1(postcss@8.4.47)(webpack@5.94.0) semver: 7.6.3 strip-ansi: 6.0.1 - style-loader: 2.0.0(webpack@5.94.0(webpack-cli@4.10.0)) + style-loader: 2.0.0(webpack@5.94.0) terser: 5.32.0 - terser-webpack-plugin: 5.3.10(webpack@5.94.0(webpack-cli@4.10.0)) + terser-webpack-plugin: 5.3.10(webpack@5.94.0) vue-style-loader: 4.1.3 webpack: 5.94.0(webpack-cli@4.10.0) webpack-cli: 4.10.0(webpack@5.94.0) - webpack-dev-server: 4.15.2(webpack-cli@4.10.0(webpack@5.94.0))(webpack@5.94.0(webpack-cli@4.10.0)) + webpack-dev-server: 4.15.2(webpack-cli@4.10.0)(webpack@5.94.0) webpack-merge: 5.10.0 webpack-notifier: 1.15.0 - webpackbar: 5.0.2(webpack@5.94.0(webpack-cli@4.10.0)) + webpackbar: 5.0.2(webpack@5.94.0) yargs: 17.7.2 transitivePeerDependencies: - '@swc/core' @@ -6034,7 +6034,7 @@ snapshots: mimic-fn@2.1.0: {} - mini-css-extract-plugin@1.6.2(webpack@5.94.0(webpack-cli@4.10.0)): + mini-css-extract-plugin@1.6.2(webpack@5.94.0): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 @@ -6291,7 +6291,7 @@ snapshots: optionalDependencies: postcss: 8.4.47 - postcss-loader@6.2.1(postcss@8.4.47)(webpack@5.94.0(webpack-cli@4.10.0)): + postcss-loader@6.2.1(postcss@8.4.47)(webpack@5.94.0): dependencies: cosmiconfig: 7.1.0 klona: 2.0.6 @@ -6631,7 +6631,7 @@ snapshots: safer-buffer@2.1.2: {} - sass-loader@16.0.2(sass@1.78.0)(webpack@5.94.0(webpack-cli@4.10.0)): + sass-loader@16.0.2(sass@1.78.0)(webpack@5.94.0): dependencies: neo-async: 2.6.2 optionalDependencies: @@ -6851,7 +6851,7 @@ snapshots: strip-final-newline@2.0.0: {} - style-loader@2.0.0(webpack@5.94.0(webpack-cli@4.10.0)): + style-loader@2.0.0(webpack@5.94.0): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 @@ -6895,7 +6895,7 @@ snapshots: tapable@2.2.1: {} - terser-webpack-plugin@5.3.10(webpack@5.94.0(webpack-cli@4.10.0)): + terser-webpack-plugin@5.3.10(webpack@5.94.0): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 @@ -6999,10 +6999,10 @@ snapshots: vue-hot-reload-api@2.3.4: {} - vue-loader@15.11.1(css-loader@5.2.7(webpack@5.94.0(webpack-cli@4.10.0)))(lodash@4.17.21)(vue-template-compiler@2.7.16)(webpack@5.94.0(webpack-cli@4.10.0)): + vue-loader@15.11.1(css-loader@5.2.7(webpack@5.94.0))(lodash@4.17.21)(vue-template-compiler@2.7.16)(webpack@5.94.0): dependencies: '@vue/component-compiler-utils': 3.3.0(lodash@4.17.21) - css-loader: 5.2.7(webpack@5.94.0(webpack-cli@4.10.0)) + css-loader: 5.2.7(webpack@5.94.0) hash-sum: 1.0.2 loader-utils: 1.4.2 vue-hot-reload-api: 2.3.4 @@ -7094,9 +7094,9 @@ snapshots: webpack-cli@4.10.0(webpack@5.94.0): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0(webpack@5.94.0))(webpack@5.94.0(webpack-cli@4.10.0)) - '@webpack-cli/info': 1.5.0(webpack-cli@4.10.0(webpack@5.94.0)) - '@webpack-cli/serve': 1.7.0(webpack-cli@4.10.0(webpack@5.94.0)) + '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0)(webpack@5.94.0) + '@webpack-cli/info': 1.5.0(webpack-cli@4.10.0) + '@webpack-cli/serve': 1.7.0(webpack-cli@4.10.0) colorette: 2.0.20 commander: 7.2.0 cross-spawn: 7.0.3 @@ -7107,7 +7107,7 @@ snapshots: webpack: 5.94.0(webpack-cli@4.10.0) webpack-merge: 5.10.0 - webpack-dev-middleware@5.3.4(webpack@5.94.0(webpack-cli@4.10.0)): + webpack-dev-middleware@5.3.4(webpack@5.94.0): dependencies: colorette: 2.0.20 memfs: 3.5.3 @@ -7116,7 +7116,7 @@ snapshots: schema-utils: 4.2.0 webpack: 5.94.0(webpack-cli@4.10.0) - webpack-dev-server@4.15.2(webpack-cli@4.10.0(webpack@5.94.0))(webpack@5.94.0(webpack-cli@4.10.0)): + webpack-dev-server@4.15.2(webpack-cli@4.10.0)(webpack@5.94.0): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -7146,7 +7146,7 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.4(webpack@5.94.0(webpack-cli@4.10.0)) + webpack-dev-middleware: 5.3.4(webpack@5.94.0) ws: 8.18.0 optionalDependencies: webpack: 5.94.0(webpack-cli@4.10.0) @@ -7197,7 +7197,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.94.0(webpack-cli@4.10.0)) + terser-webpack-plugin: 5.3.10(webpack@5.94.0) watchpack: 2.4.2 webpack-sources: 3.2.3 optionalDependencies: @@ -7207,7 +7207,7 @@ snapshots: - esbuild - uglify-js - webpackbar@5.0.2(webpack@5.94.0(webpack-cli@4.10.0)): + webpackbar@5.0.2(webpack@5.94.0): dependencies: chalk: 4.1.2 consola: 2.15.3 From 0317025337885f9cf5470abed4a060e82e0b684a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:04:24 +0530 Subject: [PATCH 09/32] [npm] Bump jquery from 3.6.0 to 3.7.1 (#7) Bumps [jquery](https://github.com/jquery/jquery) from 3.6.0 to 3.7.1. - [Release notes](https://github.com/jquery/jquery/releases) - [Commits](https://github.com/jquery/jquery/compare/3.6.0...3.7.1) --- updated-dependencies: - dependency-name: jquery dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: NuwanJ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8aa90f8..39e4245 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "bootstrap": "^4.5.0", "cross-env": "^7.0", "font-awesome": "^4.7.0", - "jquery": "^3.5.1", + "jquery": "^3.7.1", "laravel-mix": "^6.0.28", "lodash": "^4.17.19", "perfect-scrollbar": "^1.5.0", From edc41a1ae2ed7da86c9ae35813a8d1c5af132eb2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:09:02 +0530 Subject: [PATCH 10/32] [npm] Bump resolve-url-loader from 3.1.5 to 5.0.0 (#4) * [npm] Bump resolve-url-loader from 3.1.5 to 5.0.0 Bumps [resolve-url-loader](https://github.com/bholloway/resolve-url-loader/tree/HEAD/packages/resolve-url-loader) from 3.1.5 to 5.0.0. - [Release notes](https://github.com/bholloway/resolve-url-loader/releases) - [Changelog](https://github.com/bholloway/resolve-url-loader/blob/v5/packages/resolve-url-loader/CHANGELOG.md) - [Commits](https://github.com/bholloway/resolve-url-loader/commits/5.0.0/packages/resolve-url-loader) --- updated-dependencies: - dependency-name: resolve-url-loader dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * pnpm lock changes --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: NuwanJ --- package.json | 2 +- pnpm-lock.yaml | 210 +++---------------------------------------------- 2 files changed, 13 insertions(+), 199 deletions(-) diff --git a/package.json b/package.json index 39e4245..0d649be 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "perfect-scrollbar": "^1.5.0", "popper.js": "^1.16.1", "postcss": "^8.1", - "resolve-url-loader": "^3.1.0", + "resolve-url-loader": "^5.0.0", "sass": "^1.20.1", "sass-loader": "^16.0.2", "sweetalert2": "^9.8.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a68e48e..a30f205 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -58,8 +58,8 @@ importers: specifier: ^8.1 version: 8.4.47 resolve-url-loader: - specifier: ^3.1.0 - version: 3.1.5 + specifier: ^5.0.0 + version: 5.0.0 sass: specifier: ^1.20.1 version: 1.78.0 @@ -951,8 +951,8 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - adjust-sourcemap-loader@3.0.0: - resolution: {integrity: sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==} + adjust-sourcemap-loader@4.0.0: + resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} engines: {node: '>=8.9'} ajv-formats@2.1.1: @@ -1003,9 +1003,6 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - arity-n@1.0.4: - resolution: {integrity: sha512-fExL2kFDC1Q2DUOx3whE/9KoN66IzkY4b4zUHUBFM1ojEYjZZYDcUW3bek/ufGionX9giIKDC5redH2IlGqcQQ==} - array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} @@ -1019,11 +1016,6 @@ packages: assert@1.5.1: resolution: {integrity: sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==} - atob@2.1.2: - resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} - engines: {node: '>= 4.5.0'} - hasBin: true - autoprefixer@10.4.20: resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} engines: {node: ^10 || ^12 || >=14} @@ -1162,10 +1154,6 @@ packages: camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} @@ -1250,9 +1238,6 @@ packages: commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - compose-function@3.0.3: - resolution: {integrity: sha512-xzhzTJ5eC+gmIzvZq+C3kCJHsp9os6tJkrigDRZclyGtOKINbZtE8n1Tzmeh32jW+BUDPbvZpibwvJHBLGMVwg==} - compressible@2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} @@ -1456,9 +1441,6 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} - convert-source-map@0.3.5: - resolution: {integrity: sha512-+4nRk0k3oEpwUB7/CalD7xE2z4VmtEnnq0GO2IPTkrooTrAhEsWvuLF5iWP1dXrwluki/azwXV1ve7gtYuPldg==} - convert-source-map@1.7.0: resolution: {integrity: sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==} @@ -1529,9 +1511,6 @@ packages: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} - css@2.2.4: - resolution: {integrity: sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==} - cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -1562,10 +1541,6 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - d@1.0.2: - resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} - engines: {node: '>=0.12'} - de-indent@1.0.2: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} @@ -1586,10 +1561,6 @@ packages: supports-color: optional: true - decode-uri-component@0.2.2: - resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} - engines: {node: '>=0.10'} - default-gateway@6.0.3: resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} engines: {node: '>= 10'} @@ -1716,17 +1687,6 @@ packages: es-module-lexer@1.5.4: resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} - es5-ext@0.10.64: - resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} - engines: {node: '>=0.10'} - - es6-iterator@2.0.3: - resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} - - es6-symbol@3.1.4: - resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} - engines: {node: '>=0.12'} - escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -1742,10 +1702,6 @@ packages: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} - esniff@2.0.1: - resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} - engines: {node: '>=0.10'} - esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} @@ -1766,9 +1722,6 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} - event-emitter@0.3.5: - resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} - eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} @@ -1787,9 +1740,6 @@ packages: resolution: {integrity: sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==} engines: {node: '>= 0.10.0'} - ext@1.7.0: - resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -2373,9 +2323,6 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - next-tick@1.1.0: - resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} - no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} @@ -2754,10 +2701,6 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@7.0.36: - resolution: {integrity: sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==} - engines: {node: '>=6.0.0'} - postcss@7.0.39: resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} engines: {node: '>=6.0.0'} @@ -2894,13 +2837,9 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - resolve-url-loader@3.1.5: - resolution: {integrity: sha512-mgFMCmrV/tA4738EsFmPFE5/MaqSgUMe8LK971kVEKA/RrNVb7+VqFsg/qmKyythf34eyq476qIobP/gfFBGSQ==} - engines: {node: '>=6.0.0'} - - resolve-url@0.2.1: - resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} - deprecated: https://github.com/lydell/resolve-url#deprecated + resolve-url-loader@5.0.0: + resolution: {integrity: sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==} + engines: {node: '>=12'} resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} @@ -2914,12 +2853,6 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rework-visit@1.0.0: - resolution: {integrity: sha512-W6V2fix7nCLUYX1v6eGPrBOZlc03/faqzP4sUxMAJMBMOPYhfV/RyLegTufn5gJKaOITyi+gvf0LXDZ9NzkHnQ==} - - rework@1.0.1: - resolution: {integrity: sha512-eEjL8FdkdsxApd0yWVZgBGzfCQiT8yqSc2H1p4jpZpQdtz7ohETiDMoje5PlM8I9WgkqkreVxFUKYOiJdVWDXw==} - rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} deprecated: Rimraf versions prior to v4 are no longer supported @@ -3065,17 +2998,9 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - source-map-resolve@0.5.3: - resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} - deprecated: See https://github.com/lydell/source-map-resolve#deprecated - source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - source-map-url@0.4.1: - resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} - deprecated: See https://github.com/lydell/source-map-url#deprecated - source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -3142,10 +3067,6 @@ packages: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} - supports-color@6.1.0: - resolution: {integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==} - engines: {node: '>=6'} - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -3228,9 +3149,6 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} - type@2.7.3: - resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} - undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} @@ -3267,10 +3185,6 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - urix@0.1.0: - resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} - deprecated: Please see https://github.com/lydell/urix#deprecated - url@0.11.4: resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} engines: {node: '>= 0.4'} @@ -4655,7 +4569,7 @@ snapshots: acorn@8.12.1: {} - adjust-sourcemap-loader@3.0.0: + adjust-sourcemap-loader@4.0.0: dependencies: loader-utils: 2.0.4 regex-parser: 2.3.0 @@ -4708,8 +4622,6 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 - arity-n@1.0.4: {} - array-flatten@1.1.1: {} array-union@2.1.0: {} @@ -4725,8 +4637,6 @@ snapshots: object.assign: 4.1.5 util: 0.10.4 - atob@2.1.2: {} - autoprefixer@10.4.20(postcss@8.4.47): dependencies: browserslist: 4.23.3 @@ -4914,8 +4824,6 @@ snapshots: pascal-case: 3.1.2 tslib: 2.7.0 - camelcase@5.3.1: {} - caniuse-api@3.0.0: dependencies: browserslist: 4.23.3 @@ -5009,10 +4917,6 @@ snapshots: commondir@1.0.1: {} - compose-function@3.0.3: - dependencies: - arity-n: 1.0.4 - compressible@2.0.18: dependencies: mime-db: 1.53.0 @@ -5055,8 +4959,6 @@ snapshots: content-type@1.0.5: {} - convert-source-map@0.3.5: {} - convert-source-map@1.7.0: dependencies: safe-buffer: 5.1.2 @@ -5162,13 +5064,6 @@ snapshots: css-what@6.1.0: {} - css@2.2.4: - dependencies: - inherits: 2.0.4 - source-map: 0.6.1 - source-map-resolve: 0.5.3 - urix: 0.1.0 - cssesc@3.0.0: {} cssnano-preset-default@5.2.14(postcss@8.4.47): @@ -5221,11 +5116,6 @@ snapshots: csstype@3.1.3: {} - d@1.0.2: - dependencies: - es5-ext: 0.10.64 - type: 2.7.3 - de-indent@1.0.2: {} debug@2.6.9: @@ -5236,8 +5126,6 @@ snapshots: dependencies: ms: 2.1.3 - decode-uri-component@0.2.2: {} - default-gateway@6.0.3: dependencies: execa: 5.1.1 @@ -5359,24 +5247,6 @@ snapshots: es-module-lexer@1.5.4: {} - es5-ext@0.10.64: - dependencies: - es6-iterator: 2.0.3 - es6-symbol: 3.1.4 - esniff: 2.0.1 - next-tick: 1.1.0 - - es6-iterator@2.0.3: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - es6-symbol: 3.1.4 - - es6-symbol@3.1.4: - dependencies: - d: 1.0.2 - ext: 1.7.0 - escalade@3.2.0: {} escape-html@1.0.3: {} @@ -5388,13 +5258,6 @@ snapshots: esrecurse: 4.3.0 estraverse: 4.3.0 - esniff@2.0.1: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - event-emitter: 0.3.5 - type: 2.7.3 - esrecurse@4.3.0: dependencies: estraverse: 5.3.0 @@ -5407,11 +5270,6 @@ snapshots: etag@1.8.1: {} - event-emitter@0.3.5: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - eventemitter3@4.0.7: {} events@3.3.0: {} @@ -5469,10 +5327,6 @@ snapshots: transitivePeerDependencies: - supports-color - ext@1.7.0: - dependencies: - type: 2.7.3 - fast-deep-equal@3.1.3: {} fast-glob@3.3.2: @@ -6066,8 +5920,6 @@ snapshots: neo-async@2.6.2: {} - next-tick@1.1.0: {} - no-case@3.0.4: dependencies: lower-case: 2.0.2 @@ -6439,12 +6291,6 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@7.0.36: - dependencies: - chalk: 2.4.2 - source-map: 0.6.1 - supports-color: 6.1.0 - postcss@7.0.39: dependencies: picocolors: 0.2.1 @@ -6580,21 +6426,14 @@ snapshots: resolve-from@5.0.0: {} - resolve-url-loader@3.1.5: + resolve-url-loader@5.0.0: dependencies: - adjust-sourcemap-loader: 3.0.0 - camelcase: 5.3.1 - compose-function: 3.0.3 + adjust-sourcemap-loader: 4.0.0 convert-source-map: 1.7.0 - es6-iterator: 2.0.3 - loader-utils: 1.4.2 - postcss: 7.0.36 - rework: 1.0.1 - rework-visit: 1.0.0 + loader-utils: 2.0.4 + postcss: 8.4.47 source-map: 0.6.1 - resolve-url@0.2.1: {} - resolve@1.22.8: dependencies: is-core-module: 2.15.1 @@ -6605,13 +6444,6 @@ snapshots: reusify@1.0.4: {} - rework-visit@1.0.0: {} - - rework@1.0.1: - dependencies: - convert-source-map: 0.3.5 - css: 2.2.4 - rimraf@3.0.2: dependencies: glob: 7.2.3 @@ -6772,21 +6604,11 @@ snapshots: source-map-js@1.2.1: {} - source-map-resolve@0.5.3: - dependencies: - atob: 2.1.2 - decode-uri-component: 0.2.2 - resolve-url: 0.2.1 - source-map-url: 0.4.1 - urix: 0.1.0 - source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - source-map-url@0.4.1: {} - source-map@0.6.1: {} spdy-transport@3.0.0: @@ -6867,10 +6689,6 @@ snapshots: dependencies: has-flag: 3.0.0 - supports-color@6.1.0: - dependencies: - has-flag: 3.0.0 - supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -6943,8 +6761,6 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 - type@2.7.3: {} - undici-types@6.19.8: {} unicode-canonical-property-names-ecmascript@2.0.1: {} @@ -6972,8 +6788,6 @@ snapshots: dependencies: punycode: 2.3.1 - urix@0.1.0: {} - url@0.11.4: dependencies: punycode: 1.4.1 From e37c74ac566931308b7e92e470cd339b6070bd24 Mon Sep 17 00:00:00 2001 From: NuwanJ Date: Wed, 16 Oct 2024 14:10:10 +0530 Subject: [PATCH 11/32] pnpm lock updated --- pnpm-lock.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a30f205..cdb688f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -40,7 +40,7 @@ importers: specifier: ^4.7.0 version: 4.7.0 jquery: - specifier: ^3.5.1 + specifier: ^3.7.1 version: 3.7.1 laravel-mix: specifier: ^6.0.28 From 856e5236603f777df0571805ef93b590c65e7e3c Mon Sep 17 00:00:00 2001 From: NuwanJ Date: Thu, 17 Oct 2024 14:57:02 +0530 Subject: [PATCH 12/32] Semesters can be sorted by URL --- app/Http/Livewire/Backend/SemesterTable.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Http/Livewire/Backend/SemesterTable.php b/app/Http/Livewire/Backend/SemesterTable.php index 4422099..3454ef4 100644 --- a/app/Http/Livewire/Backend/SemesterTable.php +++ b/app/Http/Livewire/Backend/SemesterTable.php @@ -28,6 +28,7 @@ public function columns(): array Column::make("Description", "description") ->searchable(), Column::make("URL", "url") + ->sortable() ->searchable(), Column::make("Updated by", "created_by") ->sortable(), From 7fa0410318cee86921485c8755d53d1c1494c9a0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 12:13:47 +0530 Subject: [PATCH 13/32] [npm] Bump resolve-url-loader from 3.1.5 to 5.0.0 (#196) Bumps [resolve-url-loader](https://github.com/bholloway/resolve-url-loader/tree/HEAD/packages/resolve-url-loader) from 3.1.5 to 5.0.0. - [Release notes](https://github.com/bholloway/resolve-url-loader/releases) - [Changelog](https://github.com/bholloway/resolve-url-loader/blob/v5/packages/resolve-url-loader/CHANGELOG.md) - [Commits](https://github.com/bholloway/resolve-url-loader/commits/5.0.0/packages/resolve-url-loader) --- updated-dependencies: - dependency-name: resolve-url-loader dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> From 1719e591fe7221e9b02de6d032079c10a7ba7b56 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 12:16:29 +0530 Subject: [PATCH 14/32] [npm] Bump axios from 0.21.4 to 1.7.7 (#194) Bumps [axios](https://github.com/axios/axios) from 0.21.4 to 1.7.7. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v0.21.4...v1.7.7) --- updated-dependencies: - dependency-name: axios dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: NuwanJ --- package.json | 2 +- pnpm-lock.yaml | 46 +++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 0d649be..5c9467c 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "@fortawesome/fontawesome-free": "^5.12.1", "@popperjs/core": "^2.5.1", "alpinejs": "^3.13.3", - "axios": "^0.21.1", + "axios": "^1.7.7", "bootstrap": "^4.5.0", "cross-env": "^7.0", "font-awesome": "^4.7.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cdb688f..df0e43b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -28,8 +28,8 @@ importers: specifier: ^3.13.3 version: 3.14.1 axios: - specifier: ^0.21.1 - version: 0.21.4 + specifier: ^1.7.7 + version: 1.7.7 bootstrap: specifier: ^4.5.0 version: 4.6.2(jquery@3.7.1)(popper.js@1.16.1) @@ -1016,6 +1016,9 @@ packages: assert@1.5.1: resolution: {integrity: sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==} + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + autoprefixer@10.4.20: resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} engines: {node: ^10 || ^12 || >=14} @@ -1023,8 +1026,8 @@ packages: peerDependencies: postcss: ^8.1.0 - axios@0.21.4: - resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + axios@1.7.7: + resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} babel-loader@8.4.1: resolution: {integrity: sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==} @@ -1224,6 +1227,10 @@ packages: colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -1577,6 +1584,10 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} @@ -1807,6 +1818,10 @@ packages: resolution: {integrity: sha512-U6kGnykA/6bFmg1M/oT9EkFeIYv7JlX3bozwQJWiiLz6L0w3F5vBVPxHlwyX/vtNq1ckcpRKOB9f2Qal/VtFpg==} engines: {node: '>=0.10.3'} + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + engines: {node: '>= 6'} + forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -2729,6 +2744,9 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} @@ -4637,6 +4655,8 @@ snapshots: object.assign: 4.1.5 util: 0.10.4 + asynckit@0.4.0: {} + autoprefixer@10.4.20(postcss@8.4.47): dependencies: browserslist: 4.23.3 @@ -4647,9 +4667,11 @@ snapshots: postcss: 8.4.47 postcss-value-parser: 4.2.0 - axios@0.21.4: + axios@1.7.7: dependencies: follow-redirects: 1.15.9 + form-data: 4.0.1 + proxy-from-env: 1.1.0 transitivePeerDependencies: - debug @@ -4909,6 +4931,10 @@ snapshots: colorette@2.0.20: {} + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + commander@2.20.3: {} commander@4.1.1: {} @@ -5144,6 +5170,8 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + delayed-stream@1.0.0: {} + depd@1.1.2: {} depd@2.0.0: {} @@ -5392,6 +5420,12 @@ snapshots: font-awesome@4.7.0: {} + form-data@4.0.1: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + forwarded@0.2.0: {} fraction.js@4.3.7: {} @@ -6316,6 +6350,8 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 + proxy-from-env@1.1.0: {} + pseudomap@1.0.2: {} public-encrypt@4.0.3: From d1d404d3f3fbbf4fd8422eb2475fb2ecae2b2847 Mon Sep 17 00:00:00 2001 From: Nuwan Jaliyagoda Date: Wed, 23 Oct 2024 16:12:26 +0530 Subject: [PATCH 15/32] Course management system - Release 2.1.0 (#167) Signed-off-by: dependabot[bot] Co-authored-by: IsharaEkanayaka Co-authored-by: kusaljayawardhana Co-authored-by: Hasan10100 <150885485+Hasan10100@users.noreply.github.com> Co-authored-by: Supun Dulara Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- README.md | 9 +- app/DBAL/Types/VersionEnumType.php | 27 +++ .../AcademicProgram/AcademicProgram.php | 27 ++- .../AcademicProgram/Course/Models/Course.php | 11 +- .../Controllers/API/EventApiController.php | 24 ++- .../Controllers/Frontend/HomeController.php | 32 +++- .../Controllers/Frontend/TermsController.php | 17 -- app/Http/Livewire/Backend/CourseTable.php | 4 +- app/Http/Livewire/Backend/CreateCourses.php | 30 ++- app/Http/Livewire/Backend/EditCourses.php | 47 ++++- app/Http/Livewire/Backend/EventsTable.php | 12 +- app/Http/Resources/EventResource.php | 12 ++ app/Providers/AppServiceProvider.php | 7 +- app/Services/DepartmentDataService.php | 16 +- composer.json | 4 +- composer.lock | 176 ++++++++++++------ config/database.php | 9 +- database/factories/CourseFactory.php | 11 +- ..._114038_add_event_type_to_events_table.php | 4 +- ...0_10_103420_add-field-teaching-methods.php | 32 ++++ ...2024_10_11_124838_alter_column_version.php | 39 ++++ database/seeders/EventSeeder.php | 8 +- resources/sass/frontend/_global.scss | 12 ++ .../views/backend/semesters/create.blade.php | 3 +- .../views/backend/semesters/edit.blade.php | 3 +- .../backend/course_module.blade.php | 5 +- resources/views/frontend/index.blade.php | 4 + .../frontend/pages/contributors.blade.php | 80 ++++++++ .../views/frontend/pages/terms.blade.php | 176 +++++++++++++++++- .../livewire/backend/create-courses.blade.php | 69 +++++-- .../livewire/backend/edit-courses.blade.php | 73 ++++++-- .../livewire/backend/item-adder.blade.php | 4 +- routes/frontend/home.php | 12 +- tests/Feature/Backend/Courses/CourseTest.php | 111 ++++++++--- 34 files changed, 916 insertions(+), 194 deletions(-) create mode 100644 app/DBAL/Types/VersionEnumType.php delete mode 100644 app/Http/Controllers/Frontend/TermsController.php create mode 100644 database/migrations/2024_10_10_103420_add-field-teaching-methods.php create mode 100644 database/migrations/2024_10_11_124838_alter_column_version.php create mode 100644 resources/views/frontend/pages/contributors.blade.php diff --git a/README.md b/README.md index 9b47e4e..ff88a1f 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,7 @@ Internal and Public web service provider of the Department of Computer Engineeri ## Team of Developers - -To be updated +- [https://portal.ce.pdn.ac.lk/contributors](https://portal.ce.pdn.ac.lk/contributors) ## Useful Commands and Instructions @@ -133,6 +132,8 @@ sudo sh ./scripts/deploy-prod.sh Thanks to all the contributors who have helped with this project! - + + https://portal.ce.pdn.ac.lk/contributors +

-
+ \ No newline at end of file diff --git a/app/DBAL/Types/VersionEnumType.php b/app/DBAL/Types/VersionEnumType.php new file mode 100644 index 0000000..c68e29f --- /dev/null +++ b/app/DBAL/Types/VersionEnumType.php @@ -0,0 +1,27 @@ + 'Current Curriculum', - 2 => 'Curriculum - Effective from E22' + $academicPrograms = [ + 'undergraduate' => [ + 1 => 'Current Curriculum', + 2 => 'Curriculum - Effective from E22' + ], + 'postgraduate' => [ + 3 => 'Current Curriculum - PG', + ] ]; + + if ($academicProgram == null) { + $allAcademicPrograms = []; + foreach ($academicPrograms as $programs) { + foreach ($programs as $key => $value) $allAcademicPrograms[$key] = $value; + } + return $allAcademicPrograms; + } else if (array_key_exists($academicProgram, $academicPrograms)) { + return $academicPrograms[$academicProgram]; + } else { + return []; + } } public static function getTypes(): array @@ -35,4 +52,4 @@ public static function getTypes(): array 'TE' => 'Technical Elective' ]; } -} \ No newline at end of file +} diff --git a/app/Domains/AcademicProgram/Course/Models/Course.php b/app/Domains/AcademicProgram/Course/Models/Course.php index 1ec81d7..c65b554 100644 --- a/app/Domains/AcademicProgram/Course/Models/Course.php +++ b/app/Domains/AcademicProgram/Course/Models/Course.php @@ -36,6 +36,8 @@ class Course extends AcademicProgram 'name', 'credits', 'type', + 'teaching_methods', + 'faq_page', 'content', 'objectives', 'time_allocation', @@ -122,7 +124,12 @@ public function semester() public function version() { - return $this->getVersions()[$this->version]; + $versions = $this->getVersions(); + if ($this->version != null && array_key_exists($this->version, $versions)) { + return $versions[$this->version]; + } else { + return "Unknown"; + } } public function modules() @@ -150,4 +157,4 @@ protected static function newFactory() { return CourseFactory::new(); } -} \ No newline at end of file +} diff --git a/app/Http/Controllers/API/EventApiController.php b/app/Http/Controllers/API/EventApiController.php index 80e9c10..25d9dd6 100644 --- a/app/Http/Controllers/API/EventApiController.php +++ b/app/Http/Controllers/API/EventApiController.php @@ -5,19 +5,33 @@ use App\Domains\Event\Models\Event; use App\Http\Controllers\Controller; use App\Http\Resources\EventResource; +use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; class EventApiController extends Controller { - public function index() + public function index(Request $request) { try { - $perPage = 20; - $event = Event::where('enabled', 1)->orderBy('start_at', 'desc')->paginate($perPage); + $query = Event::where('enabled', 1)->orderBy('start_at', 'desc'); + + if ($request->has('event_type')) { + + if (in_array($request->event_type, Event::eventTypeMap())) { + $eventTypeId = array_search($request->event_type, Event::eventTypeMap()); + + // Note: This is not the best way, but easiest way to filter JSON content + $query = $query->where('event_type', 'LIKE', "%\"$eventTypeId\"%"); + } else { + return EventResource::collection([]); + } + } + + $events = $query->paginate(20); - return EventResource::collection($event); + return EventResource::collection($events); } catch (\Exception $e) { - Log::error('Error in EventApiController@index', ['error' => $e->getMessage()]); + Log::error('Error in EventApiController@index', $e); return response()->json(['message' => 'An error occurred while fetching events'], 500); } } diff --git a/app/Http/Controllers/Frontend/HomeController.php b/app/Http/Controllers/Frontend/HomeController.php index 35565ef..d49454e 100644 --- a/app/Http/Controllers/Frontend/HomeController.php +++ b/app/Http/Controllers/Frontend/HomeController.php @@ -2,6 +2,8 @@ namespace App\Http\Controllers\Frontend; +use App\Services\DepartmentDataService; + /** * Class HomeController. */ @@ -14,4 +16,32 @@ public function index() { return view('frontend.index'); } -} + + /** + * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View + */ + public function terms() + { + return view('frontend.pages.terms'); + } + + /** + * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View + */ + public function contributors() + { + $projects = [ + '/projects/v1/co225/E20/Computer-Engineering-Portal/', + ]; + + $data = []; + $api = new DepartmentDataService(); + + foreach ($projects as $key => $url) { + $projectData = collect($api->getProjectData($url)); + array_push($data, $projectData); + } + + return view('frontend.pages.contributors', compact('data')); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Frontend/TermsController.php b/app/Http/Controllers/Frontend/TermsController.php deleted file mode 100644 index 11102e6..0000000 --- a/app/Http/Controllers/Frontend/TermsController.php +++ /dev/null @@ -1,17 +0,0 @@ -when($this->getFilter('academic_program'), fn($query, $type) => $query->where('academic_program', $type)) ->when($this->getFilter('semester_id'), fn($query, $type) => $query->where('semester_id', $type)) - ->when($this->getFilter('version'), fn($query, $version) => $query->where('version', $version));; + ->when($this->getFilter('version'), fn($query, $version) => $query->where('version', $version)); } public function filters(): array @@ -80,4 +80,4 @@ public function rowView(): string { return 'backend.courses.index-table-row'; } -} \ No newline at end of file +} diff --git a/app/Http/Livewire/Backend/CreateCourses.php b/app/Http/Livewire/Backend/CreateCourses.php index f544b1f..151786f 100644 --- a/app/Http/Livewire/Backend/CreateCourses.php +++ b/app/Http/Livewire/Backend/CreateCourses.php @@ -16,6 +16,8 @@ class CreateCourses extends Component //for selectors public $academicProgramsList = []; public $semestersList = []; + public $curriculumList = []; + //form inputs //1st form step @@ -31,6 +33,7 @@ class CreateCourses extends Component public $time_allocation; public $module_time_allocation; public $marks_allocation; + public $teaching_methods; //2nd form step public $objectives; @@ -46,11 +49,12 @@ public function rules() return [ 'academicProgram' => 'required|string', 'semester' => 'required|string', - 'version' => ['required', 'string', Rule::in(array_keys(Course::getVersions()))], + 'version' => ['required', Rule::in(array_keys(Course::getVersions()))], 'type' => ['required', 'string', Rule::in(array_keys(Course::getTypes()))], 'code' => 'required|string|unique:courses,code', 'name' => 'required|string|max:255', 'credits' => 'required|integer|min:1|max:18', + 'teaching_methods' => 'nullable|string', 'faq_page' => 'nullable|url', 'content' => 'nullable|string', 'time_allocation.lecture' => 'nullable|integer|min:0', @@ -103,6 +107,7 @@ protected function validateCurrentStep() 'code' => 'required|string|unique:courses,code', 'name' => 'required|string|max:255', 'credits' => 'required|integer|min:1|max:18', + 'teaching_methods' => 'nullable|string', 'faq_page' => 'nullable|url', 'content' => 'nullable|string', ]; @@ -213,6 +218,7 @@ public function submit() public function updatedAcademicProgram() { + $this->updateCurriculumList(); $this->updateSemestersList(); } @@ -221,6 +227,21 @@ public function updatedVersion() $this->updateSemestersList(); } + + public function updateCurriculumList() + { + if ($this->academicProgram) { + $this->curriculumList = Course::getVersions($this->academicProgram); + } else { + $this->curriculumList = []; + } + + if (!array_key_exists($this->version, $this->curriculumList)) { + // Unset if it not belongs to + $this->version = null; + } + } + public function updateSemestersList() { if ($this->academicProgram && $this->version) { @@ -231,6 +252,11 @@ public function updateSemestersList() } else { $this->semestersList = []; } + + if (count($this->semestersList) == 0 || !array_key_exists($this->semester, $this->semestersList)) { + // Unset if it not belongs to + $this->semester = null; + } } @@ -246,6 +272,7 @@ protected function storeCourse() 'code' => $this->code, 'name' => $this->name, 'credits' => (int)$this->credits, + 'teaching_methods' => $this->teaching_methods, 'faq_page' => $this->faq_page, 'content' => $this->content, 'time_allocation' => json_encode($this->time_allocation), @@ -296,6 +323,7 @@ protected function resetForm() $this->code = ''; $this->name = ''; $this->credits = 0; + $this->teaching_methods = ''; $this->faq_page = ''; $this->content = ''; $this->time_allocation = Course::getTimeAllocation(); diff --git a/app/Http/Livewire/Backend/EditCourses.php b/app/Http/Livewire/Backend/EditCourses.php index 0409f61..21a3389 100644 --- a/app/Http/Livewire/Backend/EditCourses.php +++ b/app/Http/Livewire/Backend/EditCourses.php @@ -17,6 +17,7 @@ class EditCourses extends Component // Selectors public $academicProgramsList = []; public $semestersList = []; + public $curriculumList = []; // Form inputs // 1st form step @@ -30,6 +31,7 @@ class EditCourses extends Component public $time_allocation; public $module_time_allocation; public $marks_allocation; + public $teaching_methods; // 2nd form step public $objectives; @@ -46,15 +48,15 @@ class EditCourses extends Component public function rules() { - $validationRules = [ 'academicProgram' => 'required|string', 'semester' => 'required|int', - 'version' => ['required', 'string', Rule::in(array_keys(Course::getVersions()))], + 'version' => ['required', Rule::in(array_keys(Course::getVersions()))], 'type' => ['required', 'string', Rule::in(array_keys(Course::getTypes()))], 'code' => 'required|string', 'name' => 'required|string|max:255', 'credits' => 'required|integer|min:1|max:18', + 'teaching_methods' => 'nullable|string', 'faq_page' => 'nullable|url', 'content' => 'nullable|string', 'modules' => 'nullable|array', @@ -138,7 +140,12 @@ protected function validateMarksAllocation() public function updated($propertyName) { $this->canUpdate = false; - $this->validateCurrentStep(); + + if (!($this->version == null || $this->semester == null)) { + // This to allow fillings while either version or semester is null + $this->validateCurrentStep(); + } + if ($this->getErrorBag()->has('marks_allocation.total')) { return; } @@ -163,6 +170,7 @@ public function mount(Course $course) $this->code = $course->code; $this->name = $course->name; $this->credits = $course->credits; + $this->teaching_methods = $course->teaching_methods; $this->faq_page = $course->faq_page; $this->content = $course->content; $this->time_allocation = array_merge(Course::getTimeAllocation(), json_decode($course->time_allocation, true)); @@ -180,9 +188,15 @@ public function mount(Course $course) 'time_allocation' => array_merge(Course::getTimeAllocation(), json_decode($module->time_allocation, true)) ]; })->toArray(); + $this->prerequisites = $course->prerequisites; + $this->prerequisites = $course->prerequisites->pluck('id')->toArray(); + // Update semesters list based on academic program and version $this->updateSemestersList(); + + // Update curriculum list based on academic program + $this->updateCurriculumList(); } public function updatePrerequisites($selectedCourses) @@ -219,7 +233,6 @@ public function previous() public function update() { try { - $this->validateCurrentStep(); $this->updateCourse(); return redirect()->route('dashboard.courses.index')->with('Success', 'Course updated successfully.'); @@ -232,6 +245,7 @@ public function update() public function updatedAcademicProgram() { + $this->updateCurriculumList(); $this->updateSemestersList(); } @@ -240,6 +254,19 @@ public function updatedVersion() $this->updateSemestersList(); } + public function updateCurriculumList() + { + if ($this->academicProgram) { + $this->curriculumList = Course::getVersions($this->academicProgram); + } else { + $this->curriculumList = []; + } + if (!array_key_exists($this->version, $this->curriculumList)) { + // Unset if it not belongs to + $this->version = ''; + } + } + public function updateSemestersList() { if ($this->academicProgram && $this->version) { @@ -250,6 +277,11 @@ public function updateSemestersList() } else { $this->semestersList = []; } + + if (count($this->semestersList) == 0 || !array_key_exists($this->semester, $this->semestersList)) { + // Unset if it not belongs to + $this->semester = ''; + } } protected function updateCourse() @@ -268,6 +300,7 @@ protected function updateCourse() 'code' => $this->code, 'name' => $this->name, 'credits' => (int)$this->credits, + 'teaching_methods' => $this->teaching_methods, 'faq_page' => $this->faq_page, 'content' => $this->content, 'time_allocation' => json_encode($this->time_allocation), @@ -283,7 +316,7 @@ protected function updateCourse() if (!empty($this->modules)) { foreach ($this->modules as $module) { - $createdModule = CourseModule::create([ + CourseModule::create([ 'course_id' => $course->id, 'topic' => $module['name'], 'description' => $module['description'], @@ -293,6 +326,7 @@ protected function updateCourse() ]); } } + // Sync prerequisites if (!empty($this->prerequisites)) { $course->prerequisites()->sync(collect($this->prerequisites)->pluck('id')->toArray()); @@ -318,6 +352,7 @@ protected function resetForm() $this->code = ''; $this->name = ''; $this->credits = null; + $this->teaching_methods = ''; $this->faq_page = ''; $this->content = ''; $this->time_allocation = Course::getTimeAllocation(); @@ -334,4 +369,4 @@ public function render() { return view('livewire.backend.edit-courses'); } -} \ No newline at end of file +} diff --git a/app/Http/Livewire/Backend/EventsTable.php b/app/Http/Livewire/Backend/EventsTable.php index de81950..762492f 100644 --- a/app/Http/Livewire/Backend/EventsTable.php +++ b/app/Http/Livewire/Backend/EventsTable.php @@ -54,7 +54,15 @@ public function query(): Builder } elseif ($enabled === 0) { $query->where('enabled', false); } - })->orderBy('published_at', 'desc'); + }) + ->when( + $this->getFilter('event_type') !== null, + function ($query) { + $eventType = $this->getFilter('event_type'); + $query->where('event_type', 'LIKE', "%\"$eventType\"%"); + } + ) + ->orderBy('published_at', 'desc'); } public function toggleEnable($eventId) { @@ -78,6 +86,8 @@ public function filters(): array 1 => 'Upcoming', 0 => 'Past', ]), + 'event_type' => Filter::make("Event Type") + ->select(array_merge(['' => 'Any'], Event::eventTypeMap())) ]; } diff --git a/app/Http/Resources/EventResource.php b/app/Http/Resources/EventResource.php index 1d2dbd1..61393ba 100644 --- a/app/Http/Resources/EventResource.php +++ b/app/Http/Resources/EventResource.php @@ -3,6 +3,7 @@ namespace App\Http\Resources; use App\Domains\Auth\Models\User; +use App\Domains\Event\Models\Event; use Illuminate\Http\Resources\Json\JsonResource; use Illuminate\Support\Facades\URL; @@ -16,6 +17,16 @@ class EventResource extends JsonResource */ public function toArray($request) { + $eventTypeList = Event::eventTypeMap(); + + if ($this->event_type != null) { + $eventTypes = array_map(function ($id) use ($eventTypeList) { + return isset($eventTypeList[$id]) ? $eventTypeList[$id] : null; + }, $this->event_type); + } else { + $eventTypes = []; + } + return [ 'id' => $this->id, 'title' => $this->title, @@ -24,6 +35,7 @@ public function toArray($request) 'image' => URL::to($this->thumbURL()), 'start_at' => $this->start_at, 'end_at' => $this->end_at, + 'event_type' => $eventTypes, 'location' => $this->location, 'link_url' => $this->link_url, 'link_caption' => $this->link_caption, diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 1c87405..5595114 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -31,5 +31,10 @@ public function boot() Paginator::useBootstrap(); Schema::defaultStringLength(191); ini_set('max_execution_time', 120); + + // Support enum column migration for Event::event_type + Schema::getConnection()->getDoctrineConnection() + ->getDatabasePlatform() + ->registerDoctrineTypeMapping('enum', 'string'); } -} +} \ No newline at end of file diff --git a/app/Services/DepartmentDataService.php b/app/Services/DepartmentDataService.php index 70c91a5..57256ed 100644 --- a/app/Services/DepartmentDataService.php +++ b/app/Services/DepartmentDataService.php @@ -46,6 +46,20 @@ function () { return in_array($userEmail, $emails); } + + public function getProjectData($url) + { + + $project = Cache::remember( + "project_$url", + config('constants.department_data.cache_duration'), + function () use ($url) { + return $this->getData($url); + } + ); + return $project; + } + private function getData($endpoint) { $url = config('constants.department_data.base_url') . $endpoint; @@ -61,4 +75,4 @@ private function getData($endpoint) return []; } } -} \ No newline at end of file +} diff --git a/composer.json b/composer.json index 3a7d823..b564d02 100644 --- a/composer.json +++ b/composer.json @@ -14,7 +14,7 @@ "darkghosthunter/laraguard": "^3.0", "fruitcake/laravel-cors": "^3.0", "guzzlehttp/guzzle": "^7.0.1", - "intervention/image": "^3.8", + "intervention/image": "^2.6", "jamesmills/laravel-timezone": "^1.9", "lab404/laravel-impersonate": "^1.6", "langleyfoxall/laravel-nist-password-rules": "^6.0", @@ -25,8 +25,8 @@ "laravel/ui": "^3.0", "laravelcollective/html": "^6.4", "livewire/livewire": "^2.0", - "marvinlabs/laravel-discord-logger": "^1.4", "rappasoft/laravel-livewire-tables": "^1.0", + "marvinlabs/laravel-discord-logger": "^1.4", "rappasoft/lockout": "^3.0", "spatie/laravel-activitylog": "^3.14", "spatie/laravel-permission": "^5.10", diff --git a/composer.lock b/composer.lock index 677fd31..432d1f0 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": "02ef9cbc2327c168098c977a5a124470", + "content-hash": "be9a492cd0809376275f63a32f99db5b", "packages": [ { "name": "arcanedev/log-viewer", @@ -1512,16 +1512,16 @@ }, { "name": "guzzlehttp/promises", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8" + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", - "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", + "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455", + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455", "shasum": "" }, "require": { @@ -1575,7 +1575,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.3" + "source": "https://github.com/guzzle/promises/tree/2.0.4" }, "funding": [ { @@ -1591,7 +1591,7 @@ "type": "tidelift" } ], - "time": "2024-07-18T10:29:17+00:00" + "time": "2024-10-17T10:06:22+00:00" }, { "name": "guzzlehttp/psr7", @@ -1709,51 +1709,107 @@ ], "time": "2024-07-18T11:15:46+00:00" }, + { + "name": "intervention/gif", + "version": "4.2.0", + "source": { + "type": "git", + "url": "https://github.com/Intervention/gif.git", + "reference": "42c131a31b93c440ad49061b599fa218f06f93be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Intervention/gif/zipball/42c131a31b93c440ad49061b599fa218f06f93be", + "reference": "42c131a31b93c440ad49061b599fa218f06f93be", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "phpstan/phpstan": "^1", + "phpunit/phpunit": "^10.0", + "slevomat/coding-standard": "~8.0", + "squizlabs/php_codesniffer": "^3.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Intervention\\Gif\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Oliver Vogel", + "email": "oliver@intervention.io", + "homepage": "https://intervention.io/" + } + ], + "description": "Native PHP GIF Encoder/Decoder", + "homepage": "https://github.com/intervention/gif", + "keywords": [ + "animation", + "gd", + "gif", + "image" + ], + "support": { + "issues": "https://github.com/Intervention/gif/issues", + "source": "https://github.com/Intervention/gif/tree/4.2.0" + }, + "funding": [ + { + "url": "https://paypal.me/interventionio", + "type": "custom" + }, + { + "url": "https://github.com/Intervention", + "type": "github" + }, + { + "url": "https://ko-fi.com/interventionphp", + "type": "ko_fi" + } + ], + "time": "2024-09-20T13:35:02+00:00" + }, { "name": "intervention/image", - "version": "2.7.2", + "version": "3.8.0", "source": { "type": "git", "url": "https://github.com/Intervention/image.git", - "reference": "04be355f8d6734c826045d02a1079ad658322dad" + "reference": "1786ad5e1789050939d73cd195de4b8eaeeb34ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Intervention/image/zipball/04be355f8d6734c826045d02a1079ad658322dad", - "reference": "04be355f8d6734c826045d02a1079ad658322dad", + "url": "https://api.github.com/repos/Intervention/image/zipball/1786ad5e1789050939d73cd195de4b8eaeeb34ed", + "reference": "1786ad5e1789050939d73cd195de4b8eaeeb34ed", "shasum": "" }, "require": { - "ext-fileinfo": "*", - "guzzlehttp/psr7": "~1.1 || ^2.0", - "php": ">=5.4.0" + "ext-mbstring": "*", + "intervention/gif": "^4.1", + "php": "^8.1" }, "require-dev": { - "mockery/mockery": "~0.9.2", - "phpunit/phpunit": "^4.8 || ^5.7 || ^7.5.15" + "mockery/mockery": "^1.6", + "phpstan/phpstan": "^1", + "phpunit/phpunit": "^10.0", + "slevomat/coding-standard": "~8.0", + "squizlabs/php_codesniffer": "^3.8" }, "suggest": { - "ext-gd": "to use GD library based image processing.", - "ext-imagick": "to use Imagick based image processing.", - "intervention/imagecache": "Caching extension for the Intervention Image library" + "ext-exif": "Recommended to be able to read EXIF data properly." }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - }, - "laravel": { - "providers": [ - "Intervention\\Image\\ImageServiceProvider" - ], - "aliases": { - "Image": "Intervention\\Image\\Facades\\Image" - } - } - }, "autoload": { "psr-4": { - "Intervention\\Image\\": "src/Intervention/Image" + "Intervention\\Image\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1767,19 +1823,19 @@ "homepage": "https://intervention.io/" } ], - "description": "Image handling and manipulation library with support for Laravel integration", - "homepage": "http://image.intervention.io/", + "description": "PHP image manipulation", + "homepage": "https://image.intervention.io/", "keywords": [ "gd", "image", "imagick", - "laravel", + "resize", "thumbnail", "watermark" ], "support": { "issues": "https://github.com/Intervention/image/issues", - "source": "https://github.com/Intervention/image/tree/2.7.2" + "source": "https://github.com/Intervention/image/tree/3.8.0" }, "funding": [ { @@ -1789,9 +1845,13 @@ { "url": "https://github.com/Intervention", "type": "github" + }, + { + "url": "https://ko-fi.com/interventionphp", + "type": "ko_fi" } ], - "time": "2022-05-21T17:30:32+00:00" + "time": "2024-08-16T14:57:26+00:00" }, { "name": "jamesmills/laravel-timezone", @@ -8023,16 +8083,16 @@ }, { "name": "barryvdh/reflection-docblock", - "version": "v2.1.1", + "version": "v2.1.2", "source": { "type": "git", "url": "https://github.com/barryvdh/ReflectionDocBlock.git", - "reference": "e6811e927f0ecc37cc4deaa6627033150343e597" + "reference": "bba116ba9d5794fbf12e03ed40f10804e51acf76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/e6811e927f0ecc37cc4deaa6627033150343e597", - "reference": "e6811e927f0ecc37cc4deaa6627033150343e597", + "url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/bba116ba9d5794fbf12e03ed40f10804e51acf76", + "reference": "bba116ba9d5794fbf12e03ed40f10804e51acf76", "shasum": "" }, "require": { @@ -8069,9 +8129,9 @@ } ], "support": { - "source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.1.1" + "source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.1.2" }, - "time": "2023-06-14T05:06:27+00:00" + "time": "2024-10-16T11:06:28+00:00" }, { "name": "brianium/paratest", @@ -10187,16 +10247,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.32.0", + "version": "1.33.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "6ca22b154efdd9e3c68c56f5d94670920a1c19a4" + "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/6ca22b154efdd9e3c68c56f5d94670920a1c19a4", - "reference": "6ca22b154efdd9e3c68c56f5d94670920a1c19a4", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/82a311fd3690fb2bf7b64d5c98f912b3dd746140", + "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140", "shasum": "" }, "require": { @@ -10228,9 +10288,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.32.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.33.0" }, - "time": "2024-09-26T07:23:32+00:00" + "time": "2024-10-13T11:25:22+00:00" }, { "name": "phpunit/php-code-coverage", @@ -11190,17 +11250,17 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "6fc16d8c05a872bf86eb0a1684d89b9bcb93d636" + "reference": "062376b6f97b90ec6f8731b04c9e5879d1f70ad7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/6fc16d8c05a872bf86eb0a1684d89b9bcb93d636", - "reference": "6fc16d8c05a872bf86eb0a1684d89b9bcb93d636", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/062376b6f97b90ec6f8731b04c9e5879d1f70ad7", + "reference": "062376b6f97b90ec6f8731b04c9e5879d1f70ad7", "shasum": "" }, "conflict": { "3f/pygmentize": "<1.2", - "admidio/admidio": "<4.3.10", + "admidio/admidio": "<4.3.12", "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3", "aheinze/cockpit": "<2.2", "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.04.6", @@ -11532,7 +11592,7 @@ "lms/routes": "<2.1.1", "localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2", "luyadev/yii-helpers": "<1.2.1", - "magento/community-edition": "<2.4.5|==2.4.5|>=2.4.5.0-patch1,<2.4.5.0-patch9|==2.4.6|>=2.4.6.0-patch1,<2.4.6.0-patch7|==2.4.7|>=2.4.7.0-patch1,<2.4.7.0-patch2", + "magento/community-edition": "<2.4.5|==2.4.5|>=2.4.5.0-patch1,<2.4.5.0-patch10|==2.4.6|>=2.4.6.0-patch1,<2.4.6.0-patch8|>=2.4.7.0-beta1,<2.4.7.0-patch3", "magento/core": "<=1.9.4.5", "magento/magento1ce": "<1.9.4.3-dev", "magento/magento1ee": ">=1,<1.14.4.3-dev", @@ -11709,7 +11769,7 @@ "rap2hpoutre/laravel-log-viewer": "<0.13", "react/http": ">=0.7,<1.9", "really-simple-plugins/complianz-gdpr": "<6.4.2", - "redaxo/source": "<=5.15.1", + "redaxo/source": "<=5.17.1", "remdex/livehelperchat": "<4.29", "reportico-web/reportico": "<=8.1", "rhukster/dom-sanitizer": "<1.0.7", @@ -11765,7 +11825,7 @@ "slim/slim": "<2.6", "slub/slub-events": "<3.0.3", "smarty/smarty": "<4.5.3|>=5,<5.1.1", - "snipe/snipe-it": "<6.4.2", + "snipe/snipe-it": "<7.0.10", "socalnick/scn-social-auth": "<1.15.2", "socialiteproviders/steam": "<1.1", "spatie/browsershot": "<3.57.4", @@ -12013,7 +12073,7 @@ "type": "tidelift" } ], - "time": "2024-10-10T00:18:21+00:00" + "time": "2024-10-17T23:05:35+00:00" }, { "name": "sebastian/cli-parser", diff --git a/config/database.php b/config/database.php index a94cab6..cb74073 100644 --- a/config/database.php +++ b/config/database.php @@ -123,7 +123,7 @@ 'options' => [ 'cluster' => env('REDIS_CLUSTER', 'redis'), - 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), + 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_database_'), ], 'default' => [ @@ -144,4 +144,9 @@ ], -]; + 'dbal' => [ + 'types' => [ + 'enum' => App\DBAL\Types\VersionEnumType::class, + ], + ], +]; \ No newline at end of file diff --git a/database/factories/CourseFactory.php b/database/factories/CourseFactory.php index 1d223f8..732d95a 100644 --- a/database/factories/CourseFactory.php +++ b/database/factories/CourseFactory.php @@ -25,14 +25,19 @@ class CourseFactory extends Factory */ public function definition() { + $academicProgram = $this->faker->randomElement(array_keys(Course::getAcademicPrograms())); return [ 'code' => $this->faker->unique()->regexify('[A-Z]{4}[0-9]{4}'), 'semester_id' => $this->faker->numberBetween(1, 8), - 'academic_program' => $this->faker->randomElement(array_keys(Course::getAcademicPrograms())), - 'version' => $this->faker->randomElement([1, 2]), + 'academic_program' => $academicProgram, + 'version' => $this->faker->randomElement( + array_keys(Course::getVersions($academicProgram)) + ), 'name' => $this->faker->sentence(3), 'credits' => $this->faker->numberBetween(1, 6), 'type' => $this->faker->randomElement(array_keys(Course::getTypes())), + 'teaching_methods' => $this->faker->sentence(3), + 'faq_page' => $this->faker->url, 'content' => $this->faker->paragraph(), 'objectives' => json_encode([$this->faker->sentence(), $this->faker->sentence()]), 'time_allocation' => json_encode(['lectures' => $this->faker->numberBetween(10, 50), 'practicals' => $this->faker->numberBetween(5, 20)]), @@ -45,4 +50,4 @@ public function definition() 'updated_at' => now(), ]; } -} +} \ No newline at end of file diff --git a/database/migrations/2024_10_09_114038_add_event_type_to_events_table.php b/database/migrations/2024_10_09_114038_add_event_type_to_events_table.php index fa1ddf8..ecd7580 100644 --- a/database/migrations/2024_10_09_114038_add_event_type_to_events_table.php +++ b/database/migrations/2024_10_09_114038_add_event_type_to_events_table.php @@ -14,7 +14,7 @@ class AddEventTypeToEventsTable extends Migration public function up() { Schema::table('events', function (Blueprint $table) { - $table->json('event_type')->nullable()->default(null); + $table->json('event_type')->nullable(); }); } @@ -29,4 +29,4 @@ public function down() $table->dropColumn('event_type'); }); } -} +} \ No newline at end of file diff --git a/database/migrations/2024_10_10_103420_add-field-teaching-methods.php b/database/migrations/2024_10_10_103420_add-field-teaching-methods.php new file mode 100644 index 0000000..b8b7e56 --- /dev/null +++ b/database/migrations/2024_10_10_103420_add-field-teaching-methods.php @@ -0,0 +1,32 @@ +text('teaching_methods')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('courses', function (Blueprint $table) { + $table->dropColumn('teaching_methods'); + }); + } +} diff --git a/database/migrations/2024_10_11_124838_alter_column_version.php b/database/migrations/2024_10_11_124838_alter_column_version.php new file mode 100644 index 0000000..6043e33 --- /dev/null +++ b/database/migrations/2024_10_11_124838_alter_column_version.php @@ -0,0 +1,39 @@ +integer('version')->change(); + }); + Schema::table('courses', function (Blueprint $table) { + $table->integer('version')->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('semesters', function (Blueprint $table) { + $table->enum('version', array_keys(Course::getVersions()))->change(); + }); + Schema::table('courses', function (Blueprint $table) { + $table->enum('version', array_keys(Course::getVersions()))->change(); + }); + } +} diff --git a/database/seeders/EventSeeder.php b/database/seeders/EventSeeder.php index bde1c7f..4d2b185 100644 --- a/database/seeders/EventSeeder.php +++ b/database/seeders/EventSeeder.php @@ -26,7 +26,7 @@ public function run() "title" => "ESCAPE - 2020", "description" => '

EscaPe is the annual project symposium of the Department of Computer Engineering, University of Peradeniya. It will present the research projects of the undergraduates of the Department of Computer Engineering. ESCaPe 2020 is the 5th symposium that is organized by the department and this time the symposium is open for a broader audience and aims to build a platform for the undergraduates to present their research ideas to the industry and academic community.

Further details of the event are at: http://aces.ce.pdn.ac.lk/escape20/

', "url" => "escape-2020", - 'event_type' => ['0', '1'], + 'event_type' => [], "published_at" => "2024-08-27", "image" => "1724778446.jpg", "link_url" => "https://aces.ce.pdn.ac.lk/escape/2020/", @@ -44,7 +44,7 @@ public function run() "title" => "VIVACES 2020", "description" => '

Online social gathering of Department of Computer Engineering, University of Peradeniya was held on Friday 12th of June, 2020 with the participation of the Students and Staff successfully.

', "url" => "VIVACES-2020", - 'event_type' => ['1','2'], + 'event_type' => ['1', '2'], "published_at" => "2024-08-27", "image" => "1724778453.jpg", @@ -63,7 +63,7 @@ public function run() "title" => "Hackers’ Club Developer Series", "description" => '

An Online Webinar series organized by Hackers’ Club to introduce some of the tools that you must have up on your sleeve to be a successful Developer/Engineer in the world of Computing. And also a chance to master some of them with the Developer Resources & Materials shared by Hackers’ Club.

This Developer Series mainly focuses on front-end web development, and back-end development, for implementing a multi-platform solution for the real world problems. The Developer Series will be an invaluable chance for you to start the journey of mastering the Web Development world.

Series Timeline:

  • Introduction to Git – Nov 03
  • Project collaboration with “GitHub” – Nov 17
  • Introduction to Node.js – Nov 24
  • MongoDB Express REST API with Node.js – Dec 01
  • Introduction to React – Dec 09

For more information, please contact hackersclub@eng.pdn.ac.lk or visit https://hackersuop.github.io

', "url" => "hackers-club-dev-series", - 'event_type' => ['0'], + 'event_type' => ['0'], "published_at" => "2024-08-27", "image" => "1724778465.png", @@ -82,7 +82,7 @@ public function run() "title" => "GSOC preparation mentoring program’21", "description" => '

Organized by the Department of Computer Engineering.

', "url" => "gsoc-preparation-mentoring-program21", - 'event_type' => ['0', '2'], + 'event_type' => ['0', '2'], "published_at" => "2024-08-27", "image" => "1724778473.png", diff --git a/resources/sass/frontend/_global.scss b/resources/sass/frontend/_global.scss index ab7c812..b0c7a73 100644 --- a/resources/sass/frontend/_global.scss +++ b/resources/sass/frontend/_global.scss @@ -10,3 +10,15 @@ @import '~@fortawesome/fontawesome-free/scss/regular'; @import '~@fortawesome/fontawesome-free/scss/solid'; @import '~@fortawesome/fontawesome-free/scss/brands'; + +.profile-title { + font-size: 1em !important; +} + +.profile-text { + font-size: 1em !important; +} + +.project-card-title { + font-size: 10pt; +} diff --git a/resources/views/backend/semesters/create.blade.php b/resources/views/backend/semesters/create.blade.php index 08b14f4..e439d55 100644 --- a/resources/views/backend/semesters/create.blade.php +++ b/resources/views/backend/semesters/create.blade.php @@ -55,8 +55,9 @@
- {!! Form::label('version', 'Version*', ['class' => 'col-md-2 col-form-label']) !!} + {!! Form::label('version', 'Curriculum*', ['class' => 'col-md-2 col-form-label']) !!}
+ {{-- TODO make this depends from the Academic Program --}} {!! Form::select('version', \App\Domains\AcademicProgram\Semester\Models\Semester::getVersions(), null, [ 'class' => 'form-select', 'placeholder' => 'Select Version', diff --git a/resources/views/backend/semesters/edit.blade.php b/resources/views/backend/semesters/edit.blade.php index 2fb08e9..e84ffd4 100644 --- a/resources/views/backend/semesters/edit.blade.php +++ b/resources/views/backend/semesters/edit.blade.php @@ -53,8 +53,9 @@
- {!! Form::label('version', 'Version*', ['class' => 'col-md-2 col-form-label']) !!} + {!! Form::label('version', 'Curriculum*', ['class' => 'col-md-2 col-form-label']) !!}
+ {{-- TODO make this depends from the Academic Program --}} {!! Form::select('version', \App\Domains\AcademicProgram\Semester\Models\Semester::getVersions(), null, [ 'class' => 'form-control', 'required' => true, diff --git a/resources/views/components/backend/course_module.blade.php b/resources/views/components/backend/course_module.blade.php index d53f0a5..946b53c 100644 --- a/resources/views/components/backend/course_module.blade.php +++ b/resources/views/components/backend/course_module.blade.php @@ -120,11 +120,10 @@ style="font-weight: normal;">
- -
diff --git a/resources/views/frontend/pages/contributors.blade.php b/resources/views/frontend/pages/contributors.blade.php new file mode 100644 index 0000000..e934c1a --- /dev/null +++ b/resources/views/frontend/pages/contributors.blade.php @@ -0,0 +1,80 @@ +@extends('frontend.layouts.app') + +@section('title', __('Contributors')) + +@section('content') +
+
+
+ @foreach ($data as $key => $project) + + + +

#{{ $key + 1 }} {{ $project['title'] }}

+

{{ $project['description'] }}

+ + + +

Project Team

+
+ @foreach ($project['team'] as $teamMember) +
+
+
+ {{ $teamMember['name'] }} +
+
+

+ {{ $teamMember['name'] }} +

+ + @if ($teamMember['profile_url']) +
+ Profile +
+ @endif +
+
+
+ @endforeach +
+ +

Project Supervisors

+
+ @foreach ($project['supervisors'] as $supervisor) +
+
+
+ {{ $supervisor['name'] }} +
+
+

+ {{ $supervisor['name'] }} +

+ + @if ($supervisor['profile_url']) +
+ Profile +
+ @endif +
+
+
+ @endforeach +
+ +
+
+
+ @endforeach +
+
+
+@endsection diff --git a/resources/views/frontend/pages/terms.blade.php b/resources/views/frontend/pages/terms.blade.php index 5b96970..d2ee49e 100644 --- a/resources/views/frontend/pages/terms.blade.php +++ b/resources/views/frontend/pages/terms.blade.php @@ -12,15 +12,177 @@ -

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Molestie ac feugiat sed lectus. Egestas diam in arcu cursus. Vitae nunc sed velit dignissim sodales ut eu sem. Nibh praesent tristique magna sit amet purus gravida quis. Tincidunt lobortis feugiat vivamus at augue. Mi quis hendrerit dolor magna eget est lorem. Dapibus ultrices in iaculis nunc sed augue lacus viverra vitae. Ullamcorper malesuada proin libero nunc consequat interdum varius. Tellus elementum sagittis vitae et leo duis ut diam quam. Nisl pretium fusce id velit. Sed enim ut sem viverra aliquet.

-

Laoreet suspendisse interdum consectetur libero id. Duis ut diam quam nulla porttitor massa id neque. Nullam eget felis eget nunc lobortis mattis aliquam faucibus. Tristique sollicitudin nibh sit amet commodo. A erat nam at lectus urna duis convallis convallis. Commodo sed egestas egestas fringilla phasellus faucibus scelerisque eleifend donec. Bibendum ut tristique et egestas. Risus sed vulputate odio ut enim blandit volutpat maecenas. Lorem dolor sed viverra ipsum nunc aliquet bibendum enim. Tristique sollicitudin nibh sit amet commodo. Ac felis donec et odio pellentesque diam volutpat commodo sed. Quam quisque id diam vel. Massa tempor nec feugiat nisl pretium fusce id. Consectetur purus ut faucibus pulvinar elementum integer enim neque volutpat.

+

Terms and Conditions

+

Last updated: October 21, 2024

+

Please read these terms and conditions carefully before using Our Service.

+

Interpretation and Definitions

+

Interpretation

+

The words of which the initial letter is capitalized have meanings defined under the following + conditions. The following definitions shall have the same meaning regardless of whether they + appear in singular or in plural.

+

Definitions

+

For the purposes of these Terms and Conditions:

+
    +
  • +

    Affiliate means an entity that controls, is controlled by or is under + common control with a party, where "control" means ownership of 50% or more of + the shares, equity interest or other securities entitled to vote for election of + directors or other managing authority.

    +
  • +
  • +

    Country refers to: Sri Lanka

    +
  • +
  • +

    Company (referred to as either "the Company", "We", + "Us" or "Our" in this Agreement) refers to CE Department Portal.

    +
  • +
  • +

    Device means any device that can access the Service such as a computer, + a cellphone or a digital tablet.

    +
  • +
  • +

    Service refers to the Website.

    +
  • +
  • +

    Terms and Conditions (also referred as "Terms") mean these + Terms and Conditions that form the entire agreement between You and the Company + regarding the use of the Service. This Terms and Conditions agreement has been created + with the help of the Terms and Conditions Generator.

    +
  • +
  • +

    Third-party Social Media Service means any services or content + (including data, information, products or services) provided by a third-party that may + be displayed, included or made available by the Service.

    +
  • +
  • +

    Website refers to CE Department Portal, accessible from https://portal.ce.pdn.ac.lk/

    +
  • +
  • +

    You means the individual accessing or using the Service, or the company, + or other legal entity on behalf of which such individual is accessing or using the + Service, as applicable.

    +
  • +
+

Acknowledgment

+

These are the Terms and Conditions governing the use of this Service and the agreement that + operates between You and the Company. These Terms and Conditions set out the rights and + obligations of all users regarding the use of the Service.

+

Your access to and use of the Service is conditioned on Your acceptance of and compliance with + these Terms and Conditions. These Terms and Conditions apply to all visitors, users and others + who access or use the Service.

+

By accessing or using the Service You agree to be bound by these Terms and Conditions. If You + disagree with any part of these Terms and Conditions then You may not access the Service.

+

You represent that you are over the age of 18. The Company does not permit those under 18 to use + the Service.

+

Your access to and use of the Service is also conditioned on Your acceptance of and compliance + with the Privacy Policy of the Company. Our Privacy Policy describes Our policies and procedures + on the collection, use and disclosure of Your personal information when You use the Application + or the Website and tells You about Your privacy rights and how the law protects You. Please read + Our Privacy Policy carefully before using Our Service.

+

Links to Other Websites

+

Our Service may contain links to third-party web sites or services that are not owned or + controlled by the Company.

+

The Company has no control over, and assumes no responsibility for, the content, privacy + policies, or practices of any third party web sites or services. You further acknowledge and + agree that the Company shall not be responsible or liable, directly or indirectly, for any + damage or loss caused or alleged to be caused by or in connection with the use of or reliance on + any such content, goods or services available on or through any such web sites or services.

+

We strongly advise You to read the terms and conditions and privacy policies of any third-party + web sites or services that You visit.

+

Termination

+

We may terminate or suspend Your access immediately, without prior notice or liability, for any + reason whatsoever, including without limitation if You breach these Terms and Conditions.

+

Upon termination, Your right to use the Service will cease immediately.

+

Limitation of Liability

+

Notwithstanding any damages that You might incur, the entire liability of the Company and any of + its suppliers under any provision of this Terms and Your exclusive remedy for all of the + foregoing shall be limited to the amount actually paid by You through the Service or 100 USD if + You haven't purchased anything through the Service.

+

To the maximum extent permitted by applicable law, in no event shall the Company or its suppliers + be liable for any special, incidental, indirect, or consequential damages whatsoever (including, + but not limited to, damages for loss of profits, loss of data or other information, for business + interruption, for personal injury, loss of privacy arising out of or in any way related to the + use of or inability to use the Service, third-party software and/or third-party hardware used + with the Service, or otherwise in connection with any provision of this Terms), even if the + Company or any supplier has been advised of the possibility of such damages and even if the + remedy fails of its essential purpose.

+

Some states do not allow the exclusion of implied warranties or limitation of liability for + incidental or consequential damages, which means that some of the above limitations may not + apply. In these states, each party's liability will be limited to the greatest extent permitted + by law.

+

"AS IS" and "AS AVAILABLE" Disclaimer

+

The Service is provided to You "AS IS" and "AS AVAILABLE" and with all faults + and defects without warranty of any kind. To the maximum extent permitted under applicable law, + the Company, on its own behalf and on behalf of its Affiliates and its and their respective + licensors and service providers, expressly disclaims all warranties, whether express, implied, + statutory or otherwise, with respect to the Service, including all implied warranties of + merchantability, fitness for a particular purpose, title and non-infringement, and warranties + that may arise out of course of dealing, course of performance, usage or trade practice. Without + limitation to the foregoing, the Company provides no warranty or undertaking, and makes no + representation of any kind that the Service will meet Your requirements, achieve any intended + results, be compatible or work with any other software, applications, systems or services, + operate without interruption, meet any performance or reliability standards or be error free or + that any errors or defects can or will be corrected.

+

Without limiting the foregoing, neither the Company nor any of the company's provider makes any + representation or warranty of any kind, express or implied: (i) as to the operation or + availability of the Service, or the information, content, and materials or products included + thereon; (ii) that the Service will be uninterrupted or error-free; (iii) as to the accuracy, + reliability, or currency of any information or content provided through the Service; or (iv) + that the Service, its servers, the content, or e-mails sent from or on behalf of the Company are + free of viruses, scripts, trojan horses, worms, malware, timebombs or other harmful components. +

+

Some jurisdictions do not allow the exclusion of certain types of warranties or limitations on + applicable statutory rights of a consumer, so some or all of the above exclusions and + limitations may not apply to You. But in such a case the exclusions and limitations set forth in + this section shall be applied to the greatest extent enforceable under applicable law.

+

Governing Law

+

The laws of the Country, excluding its conflicts of law rules, shall govern this Terms and Your + use of the Service. Your use of the Application may also be subject to other local, state, + national, or international laws.

+

Disputes Resolution

+

If You have any concern or dispute about the Service, You agree to first try to resolve the + dispute informally by contacting the Company.

+

For European Union (EU) Users

+

If You are a European Union consumer, you will benefit from any mandatory provisions of the law + of the country in which You are resident.

+

United States Legal Compliance

+

You represent and warrant that (i) You are not located in a country that is subject to the United + States government embargo, or that has been designated by the United States government as a + "terrorist supporting" country, and (ii) You are not listed on any United States + government list of prohibited or restricted parties.

+

Severability and Waiver

+

Severability

+

If any provision of these Terms is held to be unenforceable or invalid, such provision will be + changed and interpreted to accomplish the objectives of such provision to the greatest extent + possible under applicable law and the remaining provisions will continue in full force and + effect.

+

Waiver

+

Except as provided herein, the failure to exercise a right or to require performance of an + obligation under these Terms shall not affect a party's ability to exercise such right or + require such performance at any time thereafter nor shall the waiver of a breach constitute a + waiver of any subsequent breach.

+

Translation Interpretation

+

These Terms and Conditions may have been translated if We have made them available to You on our + Service. + You agree that the original English text shall prevail in the case of a dispute.

+

Changes to These Terms and Conditions

+

We reserve the right, at Our sole discretion, to modify or replace these Terms at any time. If a + revision is material We will make reasonable efforts to provide at least 30 days' notice prior + to any new terms taking effect. What constitutes a material change will be determined at Our + sole discretion.

+

By continuing to access or use Our Service after those revisions become effective, You agree to + be bound by the revised terms. If You do not agree to the new terms, in whole or in part, please + stop using the website and the Service.

+

Contact Us

+

If you have any questions about these Terms and Conditions, You can contact us:

+
    +
  • By email: webmaster.github.ce@eng.pdn.ac.lk
  • +
-

Gravida rutrum quisque non tellus orci. Eget mauris pharetra et ultrices neque. Habitasse platea dictumst quisque sagittis purus sit amet volutpat. Nunc consequat interdum varius sit amet mattis vulputate enim. Venenatis a condimentum vitae sapien pellentesque habitant morbi tristique senectus. Tempor nec feugiat nisl pretium. Fames ac turpis egestas integer eget aliquet nibh. Mus mauris vitae ultricies leo integer. Vitae proin sagittis nisl rhoncus mattis rhoncus. Commodo odio aenean sed adipiscing diam donec. Purus semper eget duis at tellus at urna condimentum mattis.

- -

Porttitor rhoncus dolor purus non enim praesent elementum facilisis. Massa massa ultricies mi quis hendrerit. Nunc id cursus metus aliquam eleifend mi in nulla posuere. In nisl nisi scelerisque eu ultrices vitae auctor eu augue. Libero nunc consequat interdum varius sit amet mattis vulputate enim. Accumsan tortor posuere ac ut consequat semper viverra nam. Massa tincidunt dui ut ornare. Elit sed vulputate mi sit amet mauris commodo. Faucibus nisl tincidunt eget nullam non nisi. Tortor condimentum lacinia quis vel eros donec ac odio. Posuere ac ut consequat semper. Vestibulum mattis ullamcorper velit sed ullamcorper. Blandit libero volutpat sed cras. Ultricies integer quis auctor elit sed vulputate mi. In hendrerit gravida rutrum quisque non tellus orci ac. Orci phasellus egestas tellus rutrum tellus pellentesque eu. Etiam non quam lacus suspendisse faucibus interdum. Ornare lectus sit amet est. Bibendum est ultricies integer quis auctor elit sed vulputate. Eget duis at tellus at urna.

- -

Sit amet massa vitae tortor condimentum lacinia quis. Id venenatis a condimentum vitae sapien pellentesque habitant. Ac tortor dignissim convallis aenean. Consectetur purus ut faucibus pulvinar elementum integer enim neque volutpat. Consectetur adipiscing elit ut aliquam purus sit amet luctus venenatis. Id porta nibh venenatis cras sed felis. Fermentum odio eu feugiat pretium. Id velit ut tortor pretium viverra. Quis auctor elit sed vulputate mi sit amet mauris. Vel elit scelerisque mauris pellentesque pulvinar pellentesque. Facilisis volutpat est velit egestas dui id ornare. Pretium viverra suspendisse potenti nullam ac. Nulla malesuada pellentesque elit eget gravida cum sociis natoque penatibus. Amet purus gravida quis blandit turpis.

diff --git a/resources/views/livewire/backend/create-courses.blade.php b/resources/views/livewire/backend/create-courses.blade.php index 56c8bbe..c59b0d3 100644 --- a/resources/views/livewire/backend/create-courses.blade.php +++ b/resources/views/livewire/backend/create-courses.blade.php @@ -23,13 +23,18 @@
Basics
+ + {{-- Academic Program --}}
+ Academic Program* +
- @foreach ($academicProgramsList as $academicProgramId => $academicProgramTitle)
+ + {{-- Curriculum --}}
- +
- - @foreach (App\Domains\AcademicProgram\Course\Models\Course::getVersions() as $key => $value) + @foreach ($curriculumList as $key => $value) @endforeach @@ -54,11 +62,14 @@
{{ $message }}
@enderror
+ + {{-- Semester --}}
- +
- @foreach ($semestersList as $semesterId => $semesterTitle) @@ -68,9 +79,11 @@
{{ $message }}
@enderror
+ + {{-- Course Code --}}
- +
@@ -79,9 +92,11 @@ {{ $message }} @enderror
+ + {{-- Course Name --}}
- +
@@ -92,11 +107,12 @@
+ {{-- Course Type --}}
- +
- @foreach (App\Domains\AcademicProgram\Course\Models\Course::getTypes() as $key => $value) @@ -106,17 +122,35 @@
{{ $message }}
@enderror
+ + {{-- Credits --}}
- +
- +
@error('credits') {{ $message }} @enderror
+ + {{-- Teaching Methods --}} +
+
+ +
+
+ +
+ @error('teaching_methods') +
{{ $message }}
+ @enderror +
+ + {{-- FAQ Page --}}
@@ -129,6 +163,8 @@
{{ $message }}
@enderror
+ + {{-- Content --}}
@@ -185,7 +221,7 @@
- {{-- ILO --}} + {{-- ILOs --}} @foreach ($ilos as $key => $value)
@livewire('backend.item-adder', ['type' => $key, 'items' => $ilos[$key]], key("ilos-$key-adder")) @@ -201,14 +237,15 @@
Modules & References
+ {{-- Modules --}}
+ {{-- References --}}
@livewire('backend.item-adder', ['type' => 'references', 'items' => $references], key('references-adder'))
-
diff --git a/resources/views/livewire/backend/edit-courses.blade.php b/resources/views/livewire/backend/edit-courses.blade.php index 44c2db6..e0a6ca5 100644 --- a/resources/views/livewire/backend/edit-courses.blade.php +++ b/resources/views/livewire/backend/edit-courses.blade.php @@ -23,13 +23,16 @@
Basics
+ + {{-- Academic Program --}}
- @foreach ($academicProgramsList as $academicProgramId => $academicProgramTitle)
+ + {{-- Curriculum --}}
- +
- - @foreach (App\Domains\AcademicProgram\Course\Models\Course::getVersions() as $key => $value) + @foreach ($curriculumList as $key => $value) @endforeach @@ -54,11 +60,14 @@
{{ $message }}
@enderror
+ + {{-- Semester --}}
- +
- @foreach ($semestersList as $semesterId => $semesterTitle) @@ -68,9 +77,11 @@
{{ $message }}
@enderror
+ + {{-- Course Code --}}
- +
@@ -79,9 +90,11 @@ {{ $message }} @enderror
+ + {{-- Course Name --}}
- +
@@ -93,9 +106,10 @@
+ {{-- Course Type --}}
- +
+
@error('credits') {{ $message }} @enderror
+ + {{-- Teaching Methods --}} +
+
+ +
+
+ +
+ @error('teaching_methods') +
{{ $message }}
+ @enderror +
+ + {{-- FAQ Page --}}
@@ -130,6 +162,8 @@
{{ $message }}
@enderror
+ + {{-- Content --}}
@@ -159,7 +193,6 @@
- {{-- objectives --}}
{!! Form::textarea('objectives', '', [ @@ -189,7 +222,7 @@
- {{-- ILO --}} + {{-- ILOs --}} @foreach ($ilos as $key => $value)
@livewire('backend.item-adder', ['type' => $key, 'items' => $ilos[$key]], key("ilos-$key-adder")) @@ -205,9 +238,15 @@
Modules & References
- -
- @livewire('backend.item-adder', ['type' => 'references', 'items' => $references], key('references-adder')) + {{-- Modules --}} +
+ +
+ + {{-- References --}} +
+ @livewire('backend.item-adder', ['type' => 'references', 'items' => $references], key('references-adder')) +
diff --git a/resources/views/livewire/backend/item-adder.blade.php b/resources/views/livewire/backend/item-adder.blade.php index 8e656b5..272b929 100644 --- a/resources/views/livewire/backend/item-adder.blade.php +++ b/resources/views/livewire/backend/item-adder.blade.php @@ -111,11 +111,11 @@ class="d-flex flex-column flex-md-row justify-content-between align-items-start
- - diff --git a/routes/frontend/home.php b/routes/frontend/home.php index 3076036..e7d012d 100644 --- a/routes/frontend/home.php +++ b/routes/frontend/home.php @@ -1,22 +1,30 @@ name('index') ->breadcrumbs(function (Trail $trail) { $trail->push(__('Home'), route('frontend.index')); }); -Route::get('terms', [TermsController::class, 'index']) +Route::get('terms', [HomeController::class, 'terms']) ->name('pages.terms') ->breadcrumbs(function (Trail $trail) { $trail->parent('frontend.index') ->push(__('Terms & Conditions'), route('frontend.pages.terms')); }); + + +Route::get('contributors', [HomeController::class, 'contributors']) + ->name('pages.contributors') + ->breadcrumbs(function (Trail $trail) { + $trail->parent('frontend.index') + ->push(__('Contributors'), route('frontend.pages.contributors')); + }); diff --git a/tests/Feature/Backend/Courses/CourseTest.php b/tests/Feature/Backend/Courses/CourseTest.php index e5d1c53..bef773e 100644 --- a/tests/Feature/Backend/Courses/CourseTest.php +++ b/tests/Feature/Backend/Courses/CourseTest.php @@ -32,59 +32,114 @@ public function a_course_manager_can_access_the_create_course_page() /** @test */ public function a_course_can_be_created_via_livewire() { - $this->loginAsCourseManager(); - - $semester = Semester::factory()->create(); - - Livewire::test(\App\Http\Livewire\Backend\CreateCourses::class) - ->set('academicProgram', 'undergraduate') - ->set('semester', (string) $semester->id) - ->set('version', '1') - ->set('type', 'Core') - ->set('code', 'CS101') - ->set('name', 'Introduction to Computer Science') - ->set('credits', 3) - ->set('content', 'Basic concepts of computer science.') - ->set('objectives', 'Learn the basics of computer science') - ->set('time_allocation', ['lecture' => 3, 'tutorial' => 1, 'practical' => 1]) - ->set('marks_allocation', ['practicals' => 20, 'mid_exam' => 30, 'end_exam' => 50]) - ->set('ilos', ['knowledge' => ['Understand basic algorithms'], 'skills' => ['Implement basic programs']]) - ->set('references', ['Introduction to Algorithms']) - ->call('submit') - ->assertHasNoErrors(); + $this->loginAsCourseManager(); + + $semester = Semester::factory()->create([ + 'academic_program' => 'undergraduate', + 'version' => '1', + ]); + + Livewire::test(\App\Http\Livewire\Backend\CreateCourses::class) + + ->set('academicProgram', 'undergraduate') + ->set('version', '1') + ->set('semester', (string) $semester->id) + ->set('type', 'Core') + ->set('code', 'CL101') + ->set('name', 'Introduction to Computer Science') + ->set('credits', 3) + ->set('content', 'Basic concepts of computer science.') + ->set('teaching_methods', 'Lecture and practical') + ->set('time_allocation', ['lecture' => 3, 'tutorial' => 1, 'practical' => 1]) + ->set('marks_allocation', ['practicals' => 20, 'mid_exam' => 30, 'end_exam' => 50]) + ->call('next') + ->assertHasNoErrors() + + ->set('objectives', 'Learn the basics of computer science') + ->set('ilos', [ + 'knowledge' => ['Understand basic algorithms'], + 'skills' => ['Implement basic programs'] + ]) + ->call('next') + ->assertHasNoErrors() + + ->set('references', ['Introduction to Algorithms']) + ->set('modules', [ + [ + 'name' => 'Module 1', + 'description' => 'Introduction to programming', + 'time_allocation' => ['lectures' => 2, 'tutorials' => 1, 'practicals' => 1] + ] + ]) + ->call('submit') + ->assertHasNoErrors(); $this->assertDatabaseHas('courses', [ - 'code' => 'CS101', + 'code' => 'CL101', 'name' => 'Introduction to Computer Science', + 'credits' => 3, + 'type' => 'Core', ]); } + /** @test */ public function a_course_can_be_updated_via_livewire() { $this->loginAsCourseManager(); - $course = Course::factory()->create(); - Livewire::test(\App\Http\Livewire\Backend\CreateCourses::class) + $course = Course::factory()->create([ + 'academic_program' => 'undergraduate', + 'version' => '1', + 'type' => 'Core', + ]); + + $semester = Semester::factory()->create([ + 'academic_program' => 'undergraduate', + 'version' => '1', + ]); + + Livewire::test(\App\Http\Livewire\Backend\EditCourses::class, ['course' => $course]) ->set('academicProgram', $course->academic_program) - ->set('semester', (string) $course->semester_id) ->set('version', (string) $course->version) + ->set('semester', (string) $semester->id) ->set('type', $course->type) ->set('code', 'CS102') ->set('name', 'Advanced Computer Science') ->set('credits', 3) ->set('content', 'Advanced topics in computer science.') - ->set('objectives', 'Learn advanced topics') + ->set('teaching_methods', 'Lecture and practical') ->set('time_allocation', ['lecture' => 3, 'tutorial' => 1, 'practical' => 2]) ->set('marks_allocation', ['practicals' => 30, 'mid_exam' => 20, 'end_exam' => 50]) - ->set('ilos', ['knowledge' => ['Understand advanced algorithms']]) + ->call('next') + ->assertHasNoErrors() + + ->set('objectives', 'Learn advanced topics') + ->set('ilos', [ + 'knowledge' => ['Understand advanced algorithms'], + 'skills' => ['Implement advanced programs'] + ]) + ->call('next') + ->assertHasNoErrors() + ->set('references', ['Advanced Algorithms']) - ->call('submit') + ->set('modules', [ + [ + 'name' => 'Module 1', + 'description' => 'Advanced programming concepts', + 'time_allocation' => ['lectures' => 2, 'tutorials' => 1, 'practicals' => 2] + ] + ]) + ->call('update') ->assertHasNoErrors(); $this->assertDatabaseHas('courses', [ + 'id' => $course->id, 'code' => 'CS102', 'name' => 'Advanced Computer Science', + 'credits' => 3, + 'type' => 'Core', + 'content' => 'Advanced topics in computer science.', ]); } @@ -146,4 +201,4 @@ public function update_course_requires_valid_data() ->call('submit') ->assertHasErrors(['academicProgram', 'semester', 'version', 'type', 'code', 'name', 'credits']); } -} \ No newline at end of file +} From 72201959d62fbbbae565097090f7623b0c1cccd6 Mon Sep 17 00:00:00 2001 From: NuwanJ Date: Wed, 23 Oct 2024 16:29:49 +0530 Subject: [PATCH 16/32] Workflow fixes --- .env.example | 17 ++++++++++------- .github/workflows/laravel_pull_request.yml | 8 ++++++++ .github/workflows/laravel_push.yml | 16 ++++++++-------- app/Providers/AppServiceProvider.php | 8 +++++--- 4 files changed, 31 insertions(+), 18 deletions(-) diff --git a/.env.example b/.env.example index e6ff2eb..a42eaae 100644 --- a/.env.example +++ b/.env.example @@ -28,7 +28,6 @@ LOG_LEVEL=debug LOG_DISCORD_WEBHOOK_URL= # Drivers -DB_CONNECTION=mysql BROADCAST_DRIVER=log CACHE_DRIVER=file FILESYSTEM_DRIVER=local @@ -36,12 +35,16 @@ QUEUE_CONNECTION=sync SESSION_DRIVER=file SESSION_LIFETIME=120 -# Database -DB_HOST=127.0.0.1 -DB_PORT=3306 -DB_DATABASE=laravel -DB_USERNAME=root -DB_PASSWORD= +# Database - SQLlite +DB_CONNECTION=sqlite +DB_DATABASE=database/database.sqlite + +# DB_CONNECTION=mysql +# DB_HOST=127.0.0.1 +# DB_PORT=3306 +# DB_DATABASE=laravel +# DB_USERNAME=root +# DB_PASSWORD= # Cache MEMCACHED_HOST=127.0.0.1 diff --git a/.github/workflows/laravel_pull_request.yml b/.github/workflows/laravel_pull_request.yml index 86aee73..4f72456 100644 --- a/.github/workflows/laravel_pull_request.yml +++ b/.github/workflows/laravel_pull_request.yml @@ -10,6 +10,9 @@ on: jobs: laravel-tests: runs-on: ubuntu-latest + env: + DB_CONNECTION: sqlite + DB_DATABASE: database/database.sqlite steps: - uses: shivammathur/setup-php@15c43e89cdef867065b0213be354c2841860869e @@ -26,6 +29,11 @@ jobs: - name: Install Dependencies run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist + - name: Create Database + run: | + mkdir -p database + touch database/database.sqlite + - name: Generate key run: php artisan key:generate diff --git a/.github/workflows/laravel_push.yml b/.github/workflows/laravel_push.yml index b186d79..63cb846 100644 --- a/.github/workflows/laravel_push.yml +++ b/.github/workflows/laravel_push.yml @@ -5,6 +5,9 @@ on: [push] jobs: laravel-tests: runs-on: ubuntu-latest + env: + DB_CONNECTION: sqlite + DB_DATABASE: database/database.sqlite steps: - uses: shivammathur/setup-php@15c43e89cdef867065b0213be354c2841860869e @@ -20,20 +23,17 @@ jobs: - name: Install Dependencies run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist + - name: Create Database + run: | + mkdir -p database + touch database/database.sqlite + - name: Generate key run: php artisan key:generate - name: Directory Permissions run: chmod -R 777 storage bootstrap/cache - - - name: Create Database - run: | - mkdir -p database - touch database/database.sqlite - name: Execute tests (Unit and Feature tests) via PHPUnit - env: - DB_CONNECTION: sqlite - DB_DATABASE: database/database.sqlite run: | php artisan test -p --colors --debug \ No newline at end of file diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 5595114..f0697c4 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -33,8 +33,10 @@ public function boot() ini_set('max_execution_time', 120); // Support enum column migration for Event::event_type - Schema::getConnection()->getDoctrineConnection() - ->getDatabasePlatform() - ->registerDoctrineTypeMapping('enum', 'string'); + if (Schema::getConnection()->getDriverName() !== 'sqlite') { + Schema::getConnection()->getDoctrineConnection() + ->getDatabasePlatform() + ->registerDoctrineTypeMapping('enum', 'string'); + } } } \ No newline at end of file From 2759f23b54443885ef77a19432a054aa0f0c00d5 Mon Sep 17 00:00:00 2001 From: NuwanJ Date: Wed, 23 Oct 2024 16:57:26 +0530 Subject: [PATCH 17/32] Formatting fixes --- app/Http/Livewire/Backend/EditCourses.php | 6 +++--- app/Http/Livewire/Backend/PrerequisiteSelector.php | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/Http/Livewire/Backend/EditCourses.php b/app/Http/Livewire/Backend/EditCourses.php index 21a3389..aef2a9b 100644 --- a/app/Http/Livewire/Backend/EditCourses.php +++ b/app/Http/Livewire/Backend/EditCourses.php @@ -188,9 +188,9 @@ public function mount(Course $course) 'time_allocation' => array_merge(Course::getTimeAllocation(), json_decode($module->time_allocation, true)) ]; })->toArray(); - $this->prerequisites = $course->prerequisites; - $this->prerequisites = $course->prerequisites->pluck('id')->toArray(); + // Update the prerequisites list + $this->prerequisites = $course->prerequisites; // Update semesters list based on academic program and version $this->updateSemestersList(); @@ -369,4 +369,4 @@ public function render() { return view('livewire.backend.edit-courses'); } -} +} \ No newline at end of file diff --git a/app/Http/Livewire/Backend/PrerequisiteSelector.php b/app/Http/Livewire/Backend/PrerequisiteSelector.php index 71ddd33..89b88df 100644 --- a/app/Http/Livewire/Backend/PrerequisiteSelector.php +++ b/app/Http/Livewire/Backend/PrerequisiteSelector.php @@ -47,7 +47,7 @@ public function mount($courseId = null) { $this->courseId = $courseId; - if ($this->courseId) { + if ($this->courseId != null) { // Fetch existing prerequisites from the database $course = Course::with('prerequisites')->find($this->courseId); From ec729fb6daa879c17a938c4f4055ef0d40864bca Mon Sep 17 00:00:00 2001 From: NuwanJ Date: Wed, 23 Oct 2024 17:04:48 +0530 Subject: [PATCH 18/32] Composer Update --- composer.json | 2 +- composer.lock | 136 ++++++++++++++------------------------------------ 2 files changed, 39 insertions(+), 99 deletions(-) diff --git a/composer.json b/composer.json index b564d02..03347d7 100644 --- a/composer.json +++ b/composer.json @@ -25,8 +25,8 @@ "laravel/ui": "^3.0", "laravelcollective/html": "^6.4", "livewire/livewire": "^2.0", - "rappasoft/laravel-livewire-tables": "^1.0", "marvinlabs/laravel-discord-logger": "^1.4", + "rappasoft/laravel-livewire-tables": "^1.0", "rappasoft/lockout": "^3.0", "spatie/laravel-activitylog": "^3.14", "spatie/laravel-permission": "^5.10", diff --git a/composer.lock b/composer.lock index 432d1f0..e54c0a2 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": "be9a492cd0809376275f63a32f99db5b", + "content-hash": "02ef9cbc2327c168098c977a5a124470", "packages": [ { "name": "arcanedev/log-viewer", @@ -1709,107 +1709,51 @@ ], "time": "2024-07-18T11:15:46+00:00" }, - { - "name": "intervention/gif", - "version": "4.2.0", - "source": { - "type": "git", - "url": "https://github.com/Intervention/gif.git", - "reference": "42c131a31b93c440ad49061b599fa218f06f93be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Intervention/gif/zipball/42c131a31b93c440ad49061b599fa218f06f93be", - "reference": "42c131a31b93c440ad49061b599fa218f06f93be", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "phpstan/phpstan": "^1", - "phpunit/phpunit": "^10.0", - "slevomat/coding-standard": "~8.0", - "squizlabs/php_codesniffer": "^3.8" - }, - "type": "library", - "autoload": { - "psr-4": { - "Intervention\\Gif\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Oliver Vogel", - "email": "oliver@intervention.io", - "homepage": "https://intervention.io/" - } - ], - "description": "Native PHP GIF Encoder/Decoder", - "homepage": "https://github.com/intervention/gif", - "keywords": [ - "animation", - "gd", - "gif", - "image" - ], - "support": { - "issues": "https://github.com/Intervention/gif/issues", - "source": "https://github.com/Intervention/gif/tree/4.2.0" - }, - "funding": [ - { - "url": "https://paypal.me/interventionio", - "type": "custom" - }, - { - "url": "https://github.com/Intervention", - "type": "github" - }, - { - "url": "https://ko-fi.com/interventionphp", - "type": "ko_fi" - } - ], - "time": "2024-09-20T13:35:02+00:00" - }, { "name": "intervention/image", - "version": "3.8.0", + "version": "2.7.2", "source": { "type": "git", "url": "https://github.com/Intervention/image.git", - "reference": "1786ad5e1789050939d73cd195de4b8eaeeb34ed" + "reference": "04be355f8d6734c826045d02a1079ad658322dad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Intervention/image/zipball/1786ad5e1789050939d73cd195de4b8eaeeb34ed", - "reference": "1786ad5e1789050939d73cd195de4b8eaeeb34ed", + "url": "https://api.github.com/repos/Intervention/image/zipball/04be355f8d6734c826045d02a1079ad658322dad", + "reference": "04be355f8d6734c826045d02a1079ad658322dad", "shasum": "" }, "require": { - "ext-mbstring": "*", - "intervention/gif": "^4.1", - "php": "^8.1" + "ext-fileinfo": "*", + "guzzlehttp/psr7": "~1.1 || ^2.0", + "php": ">=5.4.0" }, "require-dev": { - "mockery/mockery": "^1.6", - "phpstan/phpstan": "^1", - "phpunit/phpunit": "^10.0", - "slevomat/coding-standard": "~8.0", - "squizlabs/php_codesniffer": "^3.8" + "mockery/mockery": "~0.9.2", + "phpunit/phpunit": "^4.8 || ^5.7 || ^7.5.15" }, "suggest": { - "ext-exif": "Recommended to be able to read EXIF data properly." + "ext-gd": "to use GD library based image processing.", + "ext-imagick": "to use Imagick based image processing.", + "intervention/imagecache": "Caching extension for the Intervention Image library" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + }, + "laravel": { + "providers": [ + "Intervention\\Image\\ImageServiceProvider" + ], + "aliases": { + "Image": "Intervention\\Image\\Facades\\Image" + } + } + }, "autoload": { "psr-4": { - "Intervention\\Image\\": "src" + "Intervention\\Image\\": "src/Intervention/Image" } }, "notification-url": "https://packagist.org/downloads/", @@ -1823,19 +1767,19 @@ "homepage": "https://intervention.io/" } ], - "description": "PHP image manipulation", - "homepage": "https://image.intervention.io/", + "description": "Image handling and manipulation library with support for Laravel integration", + "homepage": "http://image.intervention.io/", "keywords": [ "gd", "image", "imagick", - "resize", + "laravel", "thumbnail", "watermark" ], "support": { "issues": "https://github.com/Intervention/image/issues", - "source": "https://github.com/Intervention/image/tree/3.8.0" + "source": "https://github.com/Intervention/image/tree/2.7.2" }, "funding": [ { @@ -1845,13 +1789,9 @@ { "url": "https://github.com/Intervention", "type": "github" - }, - { - "url": "https://ko-fi.com/interventionphp", - "type": "ko_fi" } ], - "time": "2024-08-16T14:57:26+00:00" + "time": "2022-05-21T17:30:32+00:00" }, { "name": "jamesmills/laravel-timezone", @@ -11250,12 +11190,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "062376b6f97b90ec6f8731b04c9e5879d1f70ad7" + "reference": "51e3fa290bca57eca7ba6c261b8a1278eb13a98a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/062376b6f97b90ec6f8731b04c9e5879d1f70ad7", - "reference": "062376b6f97b90ec6f8731b04c9e5879d1f70ad7", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/51e3fa290bca57eca7ba6c261b8a1278eb13a98a", + "reference": "51e3fa290bca57eca7ba6c261b8a1278eb13a98a", "shasum": "" }, "conflict": { @@ -11475,7 +11415,7 @@ "froxlor/froxlor": "<=2.2.0.0-RC3", "frozennode/administrator": "<=5.0.12", "fuel/core": "<1.8.1", - "funadmin/funadmin": "<=3.2|>=3.3.2,<=3.3.3", + "funadmin/funadmin": "<=5.0.2", "gaoming13/wechat-php-sdk": "<=1.10.2", "genix/cms": "<=1.1.11", "getformwork/formwork": "<1.13.1|==2.0.0.0-beta1", @@ -11843,7 +11783,7 @@ "subhh/libconnect": "<7.0.8|>=8,<8.1", "sukohi/surpass": "<1", "sulu/form-bundle": ">=2,<2.5.3", - "sulu/sulu": "<1.6.44|>=2,<2.6.5", + "sulu/sulu": "<1.6.44|>=2,<2.5.21|>=2.6,<2.6.5", "sumocoders/framework-user-bundle": "<1.4", "superbig/craft-audit": "<3.0.2", "swag/paypal": "<5.4.4", @@ -12073,7 +12013,7 @@ "type": "tidelift" } ], - "time": "2024-10-17T23:05:35+00:00" + "time": "2024-10-21T20:05:20+00:00" }, { "name": "sebastian/cli-parser", From a5a5fccf635d0c50e46310d8a61e6bac264ce34a Mon Sep 17 00:00:00 2001 From: NuwanJ Date: Wed, 23 Oct 2024 17:37:58 +0530 Subject: [PATCH 19/32] UI changes --- .../views/components/backend/course_module.blade.php | 8 +++++--- .../views/livewire/backend/create-courses.blade.php | 11 +++++++---- .../views/livewire/backend/edit-courses.blade.php | 8 ++++---- .../livewire/backend/prerequisite-selector.blade.php | 4 ++-- 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/resources/views/components/backend/course_module.blade.php b/resources/views/components/backend/course_module.blade.php index 946b53c..b0ec477 100644 --- a/resources/views/components/backend/course_module.blade.php +++ b/resources/views/components/backend/course_module.blade.php @@ -95,7 +95,7 @@ display: none !important; } -
Modules
+
Modules / Course Content
-
-
+ + {{-- Prerequisites --}} +
Prerequisites:
+ @livewire('backend.prerequisite-selector', ['academic_program' => $academicProgram, 'version' => $version, 'semester' => $semester])
- @livewire('backend.prerequisite-selector', ['academic_program' => $academicProgram, 'version' => $version, 'semester' => $semester]) -
+ +
ILOs:
diff --git a/resources/views/livewire/backend/edit-courses.blade.php b/resources/views/livewire/backend/edit-courses.blade.php index e0a6ca5..8a7dc3e 100644 --- a/resources/views/livewire/backend/edit-courses.blade.php +++ b/resources/views/livewire/backend/edit-courses.blade.php @@ -203,19 +203,19 @@ 'style' => 'height: 200px;', 'wire:model.lazy' => 'objectives', ]) !!} - + @error('objectives')
{{ $message }}
@enderror
-
+ {{-- Prerequisites --}} +
Prerequisites:
+ @livewire('backend.prerequisite-selector', ['courseId' => $course->id, 'academic_program' => $academicProgram, 'version' => $version, 'semester' => $semester])
- @livewire('backend.prerequisite-selector', ['courseId' => $course->id, 'academic_program' => $academicProgram, 'version' => $version, 'semester' => $semester]) -
ILOs: diff --git a/resources/views/livewire/backend/prerequisite-selector.blade.php b/resources/views/livewire/backend/prerequisite-selector.blade.php index 4792e48..9ed879c 100644 --- a/resources/views/livewire/backend/prerequisite-selector.blade.php +++ b/resources/views/livewire/backend/prerequisite-selector.blade.php @@ -23,7 +23,7 @@ @empty -
  • No available courses
  • +
  • No available courses
  • @endforelse @@ -51,7 +51,7 @@ @empty -
  • No selected prerequisites
  • +
  • No selected prerequisites
  • @endforelse
    From 28cf9c3914aa9b4926037f489b7535a6d2b9aec2 Mon Sep 17 00:00:00 2001 From: NuwanJ Date: Wed, 23 Oct 2024 17:38:29 +0530 Subject: [PATCH 20/32] Title for item added --- app/Http/Livewire/Backend/ItemAdder.php | 4 +++- .../views/livewire/backend/create-courses.blade.php | 6 +++--- .../views/livewire/backend/edit-courses.blade.php | 6 +++--- resources/views/livewire/backend/item-adder.blade.php | 10 +++++----- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/app/Http/Livewire/Backend/ItemAdder.php b/app/Http/Livewire/Backend/ItemAdder.php index bea59d7..549070b 100644 --- a/app/Http/Livewire/Backend/ItemAdder.php +++ b/app/Http/Livewire/Backend/ItemAdder.php @@ -8,11 +8,13 @@ class ItemAdder extends Component { public $items = []; public $type; + public $title; - public function mount($type, $items) + public function mount($type, $title, $items) { $this->items = $items; $this->type = $type; + $this->title = $title; } public function render() diff --git a/resources/views/livewire/backend/create-courses.blade.php b/resources/views/livewire/backend/create-courses.blade.php index 8b35db7..a20b322 100644 --- a/resources/views/livewire/backend/create-courses.blade.php +++ b/resources/views/livewire/backend/create-courses.blade.php @@ -226,8 +226,8 @@ {{-- ILOs --}} @foreach ($ilos as $key => $value) -
    - @livewire('backend.item-adder', ['type' => $key, 'items' => $ilos[$key]], key("ilos-$key-adder")) +
    + @livewire('backend.item-adder', ['type' => $key, 'title' => $key, 'items' => $ilos[$key]], key("ilos-$key-adder"))
    @endforeach @@ -247,7 +247,7 @@ {{-- References --}}
    - @livewire('backend.item-adder', ['type' => 'references', 'items' => $references], key('references-adder')) + @livewire('backend.item-adder', ['type' => 'references', 'title' => 'References / Recommended Reading', 'items' => $references], key('references-adder'))
    diff --git a/resources/views/livewire/backend/edit-courses.blade.php b/resources/views/livewire/backend/edit-courses.blade.php index 8a7dc3e..d49fbda 100644 --- a/resources/views/livewire/backend/edit-courses.blade.php +++ b/resources/views/livewire/backend/edit-courses.blade.php @@ -224,8 +224,8 @@ {{-- ILOs --}} @foreach ($ilos as $key => $value) -
    - @livewire('backend.item-adder', ['type' => $key, 'items' => $ilos[$key]], key("ilos-$key-adder")) +
    + @livewire('backend.item-adder', ['type' => $key, 'title' => $key, 'items' => $ilos[$key]], key("ilos-$key-adder"))
    @endforeach @@ -245,7 +245,7 @@ {{-- References --}}
    - @livewire('backend.item-adder', ['type' => 'references', 'items' => $references], key('references-adder')) + @livewire('backend.item-adder', ['type' => 'references', 'title' => 'References / Recommended Reading', 'items' => $references], key('references-adder'))
    diff --git a/resources/views/livewire/backend/item-adder.blade.php b/resources/views/livewire/backend/item-adder.blade.php index 272b929..c7d9761 100644 --- a/resources/views/livewire/backend/item-adder.blade.php +++ b/resources/views/livewire/backend/item-adder.blade.php @@ -63,7 +63,7 @@ display: none !important; } -
    {{ ucfirst($type) }}
    +
    {{ ucfirst($title) }}
    -