diff --git a/2024cModelsCourseMaterial::all(); b/2024cModelsCourseMaterial::all(); new file mode 100644 index 00000000..a4c6240f --- /dev/null +++ b/2024cModelsCourseMaterial::all(); @@ -0,0 +1,11 @@ += Interns2024c\Models\CourseMaterial {#6442 + title: "Sample Material", + type: "text", + file_path: null, + description: "This is a sample course material.", + lesson_id: 1, + updated_at: "2024-12-18 07:58:43", + created_at: "2024-12-18 07:58:43", + id: 1, + } + diff --git a/2024cModelsLesson::create([ b/2024cModelsLesson::create([ new file mode 100644 index 00000000..cd413a76 --- /dev/null +++ b/2024cModelsLesson::create([ @@ -0,0 +1,12 @@ += Illuminate\Database\Eloquent\Collection {#6273 + all: [ + Interns2024c\Models\Lesson {#6272 + id: 1, + title: "English", + description: "English language course.", + created_at: "2024-12-19 14:08:24", + updated_at: "2024-12-19 14:08:24", + }, + ], + } + diff --git a/Column('course_materials', 'lesson_id'); b/Column('course_materials', 'lesson_id'); new file mode 100644 index 00000000..333a0b57 --- /dev/null +++ b/Column('course_materials', 'lesson_id'); @@ -0,0 +1,258 @@ + + SSUUMMMMAARRYY OOFF LLEESSSS CCOOMMMMAANNDDSS + + Commands marked with * may be preceded by a number, _N. + Notes in parentheses indicate the behavior if _N is given. + A key preceded by a caret indicates the Ctrl key; thus ^K is ctrl-K. + + h H Display this help. + q :q Q :Q ZZ Exit. + --------------------------------------------------------------------------- + + MMOOVVIINNGG + + e ^E j ^N CR * Forward one line (or _N lines). + y ^Y k ^K ^P * Backward one line (or _N lines). + f ^F ^V SPACE * Forward one window (or _N lines). + b ^B ESC-v * Backward one window (or _N lines). + z * Forward one window (and set window to _N). + w * Backward one window (and set window to _N). + ESC-SPACE * Forward one window, but don't stop at end-of-file. + d ^D * Forward one half-window (and set half-window to _N). + u ^U * Backward one half-window (and set half-window to _N). + ESC-) RightArrow * Right one half screen width (or _N positions). + ESC-( LeftArrow * Left one half screen width (or _N positions). + ESC-} ^RightArrow Right to last column displayed. + ESC-{ ^LeftArrow Left to first column. + F Forward forever; like "tail -f". + ESC-F Like F but stop when search pattern is found. + r ^R ^L Repaint screen. + R Repaint screen, discarding buffered input. + --------------------------------------------------- + Default "window" is the screen height. + Default "half-window" is half of the screen height. + --------------------------------------------------------------------------- + + SSEEAARRCCHHIINNGG + + /_p_a_t_t_e_r_n * Search forward for (_N-th) matching line. + ?_p_a_t_t_e_r_n * Search backward for (_N-th) matching line. + n * Repeat previous search (for _N-th occurrence). + N * Repeat previous search in reverse direction. + ESC-n * Repeat previous search, spanning files. + ESC-N * Repeat previous search, reverse dir. & spanning files. + ESC-u Undo (toggle) search highlighting. + ESC-U Clear search highlighting. + &_p_a_t_t_e_r_n * Display only matching lines. + --------------------------------------------------- + A search pattern may begin with one or more of: + ^N or ! Search for NON-matching lines. + ^E or * Search multiple files (pass thru END OF FILE). + ^F or @ Start search at FIRST file (for /) or last file (for ?). + ^K Highlight matches, but don't move (KEEP position). + ^R Don't use REGULAR EXPRESSIONS. + ^W WRAP search if no match found. + --------------------------------------------------------------------------- + + JJUUMMPPIINNGG + + g < ESC-< * Go to first line in file (or line _N). + G > ESC-> * Go to last line in file (or line _N). + p % * Go to beginning of file (or _N percent into file). + t * Go to the (_N-th) next tag. + T * Go to the (_N-th) previous tag. + { ( [ * Find close bracket } ) ]. + } ) ] * Find open bracket { ( [. + ESC-^F _<_c_1_> _<_c_2_> * Find close bracket _<_c_2_>. + ESC-^B _<_c_1_> _<_c_2_> * Find open bracket _<_c_1_>. + --------------------------------------------------- + Each "find close bracket" command goes forward to the close bracket + matching the (_N-th) open bracket in the top line. + Each "find open bracket" command goes backward to the open bracket + matching the (_N-th) close bracket in the bottom line. + + m_<_l_e_t_t_e_r_> Mark the current top line with . + M_<_l_e_t_t_e_r_> Mark the current bottom line with . + '_<_l_e_t_t_e_r_> Go to a previously marked position. + '' Go to the previous position. + ^X^X Same as '. + ESC-M_<_l_e_t_t_e_r_> Clear a mark. + --------------------------------------------------- + A mark is any upper-case or lower-case letter. + Certain marks are predefined: + ^ means beginning of the file + $ means end of the file + --------------------------------------------------------------------------- + + CCHHAANNGGIINNGG FFIILLEESS + + :e [_f_i_l_e] Examine a new file. + ^X^V Same as :e. + :n * Examine the (_N-th) next file from the command line. + :p * Examine the (_N-th) previous file from the command line. + :x * Examine the first (or _N-th) file from the command line. + :d Delete the current file from the command line list. + = ^G :f Print current file name. + --------------------------------------------------------------------------- + + MMIISSCCEELLLLAANNEEOOUUSS CCOOMMMMAANNDDSS + + -_<_f_l_a_g_> Toggle a command line option [see OPTIONS below]. + --_<_n_a_m_e_> Toggle a command line option, by name. + __<_f_l_a_g_> Display the setting of a command line option. + ___<_n_a_m_e_> Display the setting of an option, by name. + +_c_m_d Execute the less cmd each time a new file is examined. + + !_c_o_m_m_a_n_d Execute the shell command with $SHELL. + |XX_c_o_m_m_a_n_d Pipe file between current pos & mark XX to shell command. + s _f_i_l_e Save input to a file. + v Edit the current file with $VISUAL or $EDITOR. + V Print version number of "less". + --------------------------------------------------------------------------- + + OOPPTTIIOONNSS + + Most options may be changed either on the command line, + or from within less by using the - or -- command. + Options may be given in one of two forms: either a single + character preceded by a -, or a name preceded by --. + + -? ........ --help + Display help (from command line). + -a ........ --search-skip-screen + Search skips current screen. + -A ........ --SEARCH-SKIP-SCREEN + Search starts just after target line. + -b [_N] .... --buffers=[_N] + Number of buffers. + -B ........ --auto-buffers + Don't automatically allocate buffers for pipes. + -c ........ --clear-screen + Repaint by clearing rather than scrolling. + -d ........ --dumb + Dumb terminal. + -D xx_c_o_l_o_r . --color=xx_c_o_l_o_r + Set screen colors. + -e -E .... --quit-at-eof --QUIT-AT-EOF + Quit at end of file. + -f ........ --force + Force open non-regular files. + -F ........ --quit-if-one-screen + Quit if entire file fits on first screen. + -g ........ --hilite-search + Highlight only last match for searches. + -G ........ --HILITE-SEARCH + Don't highlight any matches for searches. + -h [_N] .... --max-back-scroll=[_N] + Backward scroll limit. + -i ........ --ignore-case + Ignore case in searches that do not contain uppercase. + -I ........ --IGNORE-CASE + Ignore case in all searches. + -j [_N] .... --jump-target=[_N] + Screen position of target lines. + -J ........ --status-column + Display a status column at left edge of screen. + -k [_f_i_l_e] . --lesskey-file=[_f_i_l_e] + Use a lesskey file. + -K ........ --quit-on-intr + Exit less in response to ctrl-C. + -L ........ --no-lessopen + Ignore the LESSOPEN environment variable. + -m -M .... --long-prompt --LONG-PROMPT + Set prompt style. + -n -N .... --line-numbers --LINE-NUMBERS + Don't use line numbers. + -o [_f_i_l_e] . --log-file=[_f_i_l_e] + Copy to log file (standard input only). + -O [_f_i_l_e] . --LOG-FILE=[_f_i_l_e] + Copy to log file (unconditionally overwrite). + -p [_p_a_t_t_e_r_n] --pattern=[_p_a_t_t_e_r_n] + Start at pattern (from command line). + -P [_p_r_o_m_p_t] --prompt=[_p_r_o_m_p_t] + Define new prompt. + -q -Q .... --quiet --QUIET --silent --SILENT + Quiet the terminal bell. + -r -R .... --raw-control-chars --RAW-CONTROL-CHARS + Output "raw" control characters. + -s ........ --squeeze-blank-lines + Squeeze multiple blank lines. + -S ........ --chop-long-lines + Chop (truncate) long lines rather than wrapping. + -t [_t_a_g] .. --tag=[_t_a_g] + Find a tag. + -T [_t_a_g_s_f_i_l_e] --tag-file=[_t_a_g_s_f_i_l_e] + Use an alternate tags file. + -u -U .... --underline-special --UNDERLINE-SPECIAL + Change handling of backspaces. + -V ........ --version + Display the version number of "less". + -w ........ --hilite-unread + Highlight first new line after forward-screen. + -W ........ --HILITE-UNREAD + Highlight first new line after any forward movement. + -x [_N[,...]] --tabs=[_N[,...]] + Set tab stops. + -X ........ --no-init + Don't use termcap init/deinit strings. + -y [_N] .... --max-forw-scroll=[_N] + Forward scroll limit. + -z [_N] .... --window=[_N] + Set size of window. + -" [_c[_c]] . --quotes=[_c[_c]] + Set shell quote characters. + -~ ........ --tilde + Don't display tildes after end of file. + -# [_N] .... --shift=[_N] + Set horizontal scroll amount (0 = one half screen width). + --file-size + Automatically determine the size of the input file. + --follow-name + The F command changes files if the input file is renamed. + --incsearch + Search file as each pattern character is typed in. + --line-num-width=N + Set the width of the -N line number field to N characters. + --mouse + Enable mouse input. + --no-keypad + Don't send termcap keypad init/deinit strings. + --no-histdups + Remove duplicates from command history. + --rscroll=C + Set the character used to mark truncated lines. + --save-marks + Retain marks across invocations of less. + --status-col-width=N + Set the width of the -J status column to N characters. + --use-backslash + Subsequent options use backslash as escape char. + --use-color + Enables colored text. + --wheel-lines=N + Each click of the mouse wheel moves N lines. + + + --------------------------------------------------------------------------- + + LLIINNEE EEDDIITTIINNGG + + These keys can be used to edit text being entered + on the "command line" at the bottom of the screen. + + RightArrow ..................... ESC-l ... Move cursor right one character. + LeftArrow ...................... ESC-h ... Move cursor left one character. + ctrl-RightArrow ESC-RightArrow ESC-w ... Move cursor right one word. + ctrl-LeftArrow ESC-LeftArrow ESC-b ... Move cursor left one word. + HOME ........................... ESC-0 ... Move cursor to start of line. + END ............................ ESC-$ ... Move cursor to end of line. + BACKSPACE ................................ Delete char to left of cursor. + DELETE ......................... ESC-x ... Delete char under cursor. + ctrl-BACKSPACE ESC-BACKSPACE ........... Delete word to left of cursor. + ctrl-DELETE .... ESC-DELETE .... ESC-X ... Delete word under cursor. + ctrl-U ......... ESC (MS-DOS only) ....... Delete entire line. + UpArrow ........................ ESC-k ... Retrieve previous command line. + DownArrow ...................... ESC-j ... Retrieve next command line. + TAB ...................................... Complete filename & cycle. + SHIFT-TAB ...................... ESC-TAB Complete filename & reverse cycle. + ctrl-L ................................... Complete filename, list all. diff --git a/Sample Lesson, b/Sample Lesson, new file mode 100644 index 00000000..e69de29b diff --git a/This is a sample lesson., b/This is a sample lesson., new file mode 100644 index 00000000..e69de29b diff --git a/app/Http/Controllers/CourseMaterialController.php b/app/Http/Controllers/CourseMaterialController.php new file mode 100644 index 00000000..2cfa15ad --- /dev/null +++ b/app/Http/Controllers/CourseMaterialController.php @@ -0,0 +1,160 @@ +get(); + + $englishLevels = $lessons->pluck('title')->toArray(); + + $englishLevels[] = 'No Lesson'; + + $groupedMaterials = $materials->groupBy(function ($material) { + return $material->lesson->title ?? 'No Lesson'; + }); + + $sortedMaterials = $groupedMaterials->sortBy(function ($group, $lessonTitle) use ($englishLevels) { + $index = array_search($lessonTitle, $englishLevels); + return $index !== false ? $index : PHP_INT_MAX; + }); + + $transformedMaterials = $sortedMaterials->map(function ($group, $lessonTitle) { + return [ + 'lesson_title' => $lessonTitle, + 'materials' => $group->map(function ($material) { + return [ + 'id' => $material->id, + 'title' => $material->title, + 'description' => $material->description, + 'file_path' => $material->file_path, + 'type' => $material->type, + ]; + })->values(), + ]; + })->values(); + + return inertia('CourseMaterials/Index', [ + 'materials' => $transformedMaterials, + 'lessons' => $lessons->map(function ($lesson) { + return [ + 'id' => $lesson->id, + 'title' => $lesson->title, + ]; + }), + ]); + } + + + /** + * Show the form for creating a new resource. + */ + public function create() + { + $lessons = \Interns2024c\Models\Lesson::all(); + + return inertia('CourseMaterials/Create', [ + 'lessons' => $lessons, + ]); + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + $validated = $request->validate([ + 'title' => 'required|string|max:255', + 'type' => 'required|string|in:text,file,video', + 'description' => 'nullable|string', + 'lesson_id' => 'required|exists:lessons,id', + 'file' => 'nullable|file|mimes:jpg,png,pdf,mp4|max:20480', + ]); + + if ($request->hasFile('file')) { + $filePath = $request->file('file')->store('uploads', 'public'); + $validated['file_path'] = $filePath; + } + + \Interns2024c\Models\CourseMaterial::create($validated); + + return redirect()->route('course-materials.index')->with('success', 'Course material created successfully.'); + } + + /** + * Display the specified resource. + */ + public function show($id) + { + $material = \Interns2024c\Models\CourseMaterial::findOrFail($id); + + return inertia('CourseMaterials/Show', [ + 'material' => $material + ]); + } + + /** + * Show the form for editing the specified resource. + */ + public function edit($id) + { + $material = \Interns2024c\Models\CourseMaterial::with('lesson')->findOrFail($id); + $lessons = \Interns2024c\Models\Lesson::all(); + + return inertia('CourseMaterials/Edit', [ + 'material' => $material, + 'lessons' => $lessons, + 'csrfToken' => csrf_token(), + ]); + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, $id) + { + $validated = $request->validate([ + 'title' => 'required|string|max:255', + 'type' => 'required|string|in:text,file,video', + 'description' => 'nullable|string', + 'lesson_id' => 'required|exists:lessons,id', + 'file' => 'nullable|file|mimes:jpg,png,pdf,mp4|max:20480', + ]); + + $material = \Interns2024c\Models\CourseMaterial::findOrFail($id); + + if ($request->hasFile('file')) { + $filePath = $request->file('file')->store('uploads', 'public'); + $validated['file_path'] = $filePath; + } + + $material->update($validated); + + return redirect()->route('course-materials.index')->with('success', 'Course material updated successfully.'); + } + + /** + * Remove the specified resource from storage. + */ + public function destroy($id) + { + $material = \Interns2024c\Models\CourseMaterial::findOrFail($id); + + if ($material->file_path) { + \Storage::disk('public')->delete($material->file_path); + } + + $material->delete(); + + return redirect()->route('course-materials.index')->with('success', 'Course material deleted successfully.'); + } +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php new file mode 100644 index 00000000..b6ae6fad --- /dev/null +++ b/app/Http/Kernel.php @@ -0,0 +1,44 @@ + [ + \Interns2024c\Http\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \Interns2024c\Http\Middleware\VerifyCsrfToken::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + \Interns2024c\Http\Middleware\HandleInertiaRequests::class, + ], + + 'api' => [ + 'throttle:api', + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + ]; +} diff --git a/app/Http/Middleware/HandleInertiaRequests.php b/app/Http/Middleware/HandleInertiaRequests.php index 58279d6b..9405c454 100644 --- a/app/Http/Middleware/HandleInertiaRequests.php +++ b/app/Http/Middleware/HandleInertiaRequests.php @@ -31,11 +31,8 @@ public function version(Request $request): ?string */ public function share(Request $request): array { - return [ - ...parent::share($request), - "auth" => [ - "user" => $request->user(), - ], - ]; + return array_merge(parent::share($request), [ + 'lessons' => \Interns2024c\Models\Lesson::all(), + ]); } } diff --git a/app/Models/CourseMaterial.php b/app/Models/CourseMaterial.php new file mode 100644 index 00000000..b0e3f6f3 --- /dev/null +++ b/app/Models/CourseMaterial.php @@ -0,0 +1,27 @@ +belongsTo(\Interns2024c\Models\Lesson::class); + } +} + diff --git a/app/Models/Lesson.php b/app/Models/Lesson.php new file mode 100644 index 00000000..9541b892 --- /dev/null +++ b/app/Models/Lesson.php @@ -0,0 +1,19 @@ + "", "prefix_indexes" => true, "search_path" => "public", + 'schema' => 'public', "sslmode" => "prefer", ], "sqlsrv" => [ diff --git a/database/migrations/2024_12_17_215326_create_lessons_table.php b/database/migrations/2024_12_17_215326_create_lessons_table.php new file mode 100644 index 00000000..59b0ecad --- /dev/null +++ b/database/migrations/2024_12_17_215326_create_lessons_table.php @@ -0,0 +1,29 @@ +id(); + $table->string('title'); + $table->text('description')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('lessons'); + } +}; diff --git a/database/migrations/2024_12_17_215328_create_course_materials_table.php b/database/migrations/2024_12_17_215328_create_course_materials_table.php new file mode 100644 index 00000000..98f96ba5 --- /dev/null +++ b/database/migrations/2024_12_17_215328_create_course_materials_table.php @@ -0,0 +1,33 @@ +id(); + $table->string('title'); + $table->string('type'); + $table->string('file_path')->nullable(); + $table->text('description')->nullable(); + // $table->foreignId('lesson_id')->constrained()->onDelete('cascade'); + $table->timestamps(); + }); + } + + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('course_materials'); + } +}; \ No newline at end of file diff --git a/database/migrations/2025_01_01_123334_add_lesson_id_to_course_materials_table.php b/database/migrations/2025_01_01_123334_add_lesson_id_to_course_materials_table.php new file mode 100644 index 00000000..d4e530c6 --- /dev/null +++ b/database/migrations/2025_01_01_123334_add_lesson_id_to_course_materials_table.php @@ -0,0 +1,32 @@ +unsignedBigInteger('lesson_id')->nullable(); + $table->foreign('lesson_id')->references('id')->on('lessons')->onDelete('cascade'); + }); + } + + + /** + * Reverse the migrations. + */ + public function down() + { + Schema::table('course_materials', function (Blueprint $table) { + $table->dropForeign(['lesson_id']); + $table->dropColumn('lesson_id'); + }); + } + +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index de853239..97690169 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -10,5 +10,6 @@ class DatabaseSeeder extends Seeder { public function run(): void { + $this->call(LessonSeeder::class); } } diff --git a/database/seeders/LessonSeeder.php b/database/seeders/LessonSeeder.php new file mode 100644 index 00000000..70d7b52d --- /dev/null +++ b/database/seeders/LessonSeeder.php @@ -0,0 +1,25 @@ +insert([ + ['title' => 'English A1', 'description' => 'Basic English level.', 'created_at' => now(), 'updated_at' => now()], + ['title' => 'English A2', 'description' => 'Elementary English level.', 'created_at' => now(), 'updated_at' => now()], + ['title' => 'English B1', 'description' => 'Intermediate English level.', 'created_at' => now(), 'updated_at' => now()], + ['title' => 'English B2', 'description' => 'Upper Intermediate English level.', 'created_at' => now(), 'updated_at' => now()], + ['title' => 'English C1', 'description' => 'Advanced English level.', 'created_at' => now(), 'updated_at' => now()], + ['title' => 'English C2', 'description' => 'Proficiency English level.', 'created_at' => now(), 'updated_at' => now()], + ]); + } +} diff --git a/package-lock.json b/package-lock.json index 9a191207..147c0840 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,6 +6,7 @@ "": { "name": "interns2024c", "dependencies": { + "@inertiajs/inertia-vue3": "^0.6.0", "@inertiajs/vue3": "^1.2.0", "@tailwindcss/forms": "^0.5.9", "@tailwindcss/typography": "^0.5.15", @@ -807,6 +808,42 @@ "qs": "^6.9.0" } }, + "node_modules/@inertiajs/inertia": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@inertiajs/inertia/-/inertia-0.11.1.tgz", + "integrity": "sha512-btmV53c54oW4Z9XF0YyTdIUnM7ue0ONy3/KJOz6J1C5CYIwimiKfDMpz8ZbGJuxS+SPdOlNsqj2ZhlHslpJRZg==", + "license": "MIT", + "peer": true, + "dependencies": { + "axios": "^0.21.1", + "deepmerge": "^4.0.0", + "qs": "^6.9.0" + } + }, + "node_modules/@inertiajs/inertia-vue3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@inertiajs/inertia-vue3/-/inertia-vue3-0.6.0.tgz", + "integrity": "sha512-qhPBtd/G0VS7vVVbYw1rrqKB6JqRusxqt+5ec2GLmK6t7fTlBBnZ3KsakmGZLSM1m1OGkNcfn4ifmCk3zfA8RQ==", + "license": "MIT", + "dependencies": { + "lodash.clonedeep": "^4.5.0", + "lodash.isequal": "^4.5.0" + }, + "peerDependencies": { + "@inertiajs/inertia": "^0.11.0", + "vue": "^3.0.0" + } + }, + "node_modules/@inertiajs/inertia/node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "license": "MIT", + "peer": true, + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, "node_modules/@inertiajs/vue3": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@inertiajs/vue3/-/vue3-1.2.0.tgz", diff --git a/package.json b/package.json index 159dc51a..1f66421e 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "tsc": "vue-tsc" }, "dependencies": { + "@inertiajs/inertia-vue3": "^0.6.0", "@inertiajs/vue3": "^1.2.0", "@tailwindcss/forms": "^0.5.9", "@tailwindcss/typography": "^0.5.15", diff --git a/resources/js/Layouts/AuthenticatedLayout.vue b/resources/js/Layouts/AuthenticatedLayout.vue index 5c5e712c..0a9faf3b 100644 --- a/resources/js/Layouts/AuthenticatedLayout.vue +++ b/resources/js/Layouts/AuthenticatedLayout.vue @@ -39,6 +39,14 @@ const showingNavigationDropdown = ref(false) > Dashboard + + + Course Materials + + diff --git a/resources/js/Pages/CourseMaterials/Create.vue b/resources/js/Pages/CourseMaterials/Create.vue new file mode 100644 index 00000000..4be6b985 --- /dev/null +++ b/resources/js/Pages/CourseMaterials/Create.vue @@ -0,0 +1,91 @@ + + + diff --git a/resources/js/Pages/CourseMaterials/Edit.vue b/resources/js/Pages/CourseMaterials/Edit.vue new file mode 100644 index 00000000..3e03ab71 --- /dev/null +++ b/resources/js/Pages/CourseMaterials/Edit.vue @@ -0,0 +1,95 @@ + + + diff --git a/resources/js/Pages/CourseMaterials/Index.vue b/resources/js/Pages/CourseMaterials/Index.vue new file mode 100644 index 00000000..272b3679 --- /dev/null +++ b/resources/js/Pages/CourseMaterials/Index.vue @@ -0,0 +1,198 @@ + + + diff --git a/resources/js/Pages/CourseMaterials/Show.vue b/resources/js/Pages/CourseMaterials/Show.vue new file mode 100644 index 00000000..1f8959ed --- /dev/null +++ b/resources/js/Pages/CourseMaterials/Show.vue @@ -0,0 +1,15 @@ + + + diff --git a/resources/js/Pages/Dashboard.vue b/resources/js/Pages/Dashboard.vue index 2715b069..6aba091c 100644 --- a/resources/js/Pages/Dashboard.vue +++ b/resources/js/Pages/Dashboard.vue @@ -1,6 +1,6 @@