subject_id; $subject_details = Subject::find($subject_id); return response()->json(['details' => $subject_details]); } public function topic() { $subjects = Subject::all(); return view('admin.topic', compact('subjects')); } public function topic_detail(Request $request) { $topic_id = $request->topic_id; $topic_details = Topic::find($topic_id); return response()->json(['details' => $topic_details]); } public function route() { $subjects = Subject::all('id', 'name'); $topics = Topic::with('subject')->get(); $levels = Level::with('topic')->get(); return view('admin.route', compact('levels', 'subjects', 'topics')); } public function route_detail(Request $request) { $level_id = $request->level_id; $level_details = Level::find($level_id); return response()->json(['details' => $level_details]); } public function level() { $subjects = Subject::all(); $topics = Topic::with('subject')->get(); $levels = Level::with('topic')->get(); return view('admin.level', compact('levels', 'subjects', 'topics')); } public function getTopicBySubject(Request $request) { $subject_id = $request->input('subject_id'); $subtopics = Topic::where('subject_id', $subject_id)->with('subject')->get(); return response()->json($subtopics); } public function getFTopicByFSubject(Request $request) { $subject_name = $request->input('subject_name'); $subject = Subject::where('name', $subject_name)->first(); $topics = Topic::where('subject_id', $subject->id)->with('subject')->get(); return response()->json($topics); } public function level_detail(Request $request) { $level_id = $request->level_id; $level_details = Level::find($level_id); return response()->json(['details' => $level_details]); } public function exercise() { $subjects = Subject::all(); $levels = Level::with(['topic', 'subject'])->get(); return view('admin.exercise', compact('levels', 'subjects')); } public function exercise_detail(Request $request) { $exercise_id = $request->exercise_id; $exercise_details = Exercise::find($exercise_id); return response()->json(['details' => $exercise_details]); } /* End of Pages */ /* Start of Subject */ public function addSubject(Request $request) { $icon_name = ""; $icon_upload = false; $thumbnail_name = ""; $thumbnail_upload = false; $validator = Validator::make($request->all(), [ 'name' => 'required|string', 'description' => 'required|string', 'icon' => 'mimes:ico,png,jpg,jpeg', 'thumbnail' => 'mimes:jpg,png,jpeg', ]); if ($validator->fails()) { return response()->json(['code' => 0, 'error' => $validator->errors()->toArray()]); } else { // Tambah Icon if ($request->hasFile('icon')) { $icon_path = 'icon/'; $icon = $request->file('icon'); $icon_name = $icon->getClientOriginalName(); $this->icon_upload = $icon->storeAs($icon_path, $icon_name, 'public'); } else { $this->icon_upload = true; } // Tambah Thumbnail if ($request->hasFile('thumbnail')) { $thumbnail_path = 'thumbnail/'; $thumbnail = $request->file('thumbnail'); $thumbnail_name = $thumbnail->getClientOriginalName(); $this->thumbnail_upload = $thumbnail->storeAs($thumbnail_path, $thumbnail_name, 'public'); } else { $this->thumbnail_upload = true; } Subject::insert([ 'name' => $request->name, 'description' => $request->description, 'icon' => $icon_name, 'thumbnail' => $thumbnail_name, ]); return response()->json(); } } public function subject_list() { $subjects = Subject::all(); return DataTables::of($subjects) ->addColumn('actions', function ($row) { return '
'; }) ->rawColumns(['actions']) ->make(true); } public function updateSubject(Request $request) { $subject_id = $request->subject_id; $subject = Subject::find($subject_id); $icon_name = ''; $thumbnail_name = ''; $validator = Validator::make($request->all(), [ 'name' => 'required|string', 'description' => 'required|string', 'icon' => 'mimes:ico,png,jpg,jpeg', 'thumbnail' => 'mimes:jpg,png,jpeg', ]); if ($validator->fails()) { return response()->json(['code' => 0, 'error' => $validator->errors()->toArray()]); } else { if ($request->hasFile('icon')) { $icon = $request->file('icon'); $icon_name = $icon->getClientOriginalName(); $icon->storeAs('public/icon', $icon_name); if ($subject->icon) { Storage::delete('public/icon/' . $subject->icon); } } else { $icon_name = $request->icon_image; } if ($request->hasFile('thumbnail')) { $thumbnail = $request->file('thumbnail'); $thumbnail_name = $thumbnail->getClientOriginalName(); $thumbnail->storeAs('public/thumbnail', $thumbnail_name); if ($subject->thumbnail) { Storage::delete('public/thumbnail/' . $subject->thumbnail); } } else { $thumbnail_name = $request->thumbnail_image; } $subject->update([ 'name' => $request->name, 'description' => $request->description, 'icon' => $icon_name, 'thumbnail' => $thumbnail_name, ]); return response()->json(); } } public function deleteSubject(Request $request) { $id = $request->id; $query = Subject::find($id); // Hapus Icon if (Storage::delete('public/icon/' . $query->icon)) { Subject::destroy($id); } // Hapus Thumbnail if (Storage::delete('public/thumbnail/' . $query->thumbnail)) { Subject::destroy($id); } $query->delete(); if (!$query) { return response()->json(['code' => 0, 'msg' => 'Something went wrong']); } else { return response()->json(['code' => 1, 'msg' => 'Subject has been successfully updated']); } } /* End of Subject */ /* Start of Topic */ public function addTopic(Request $request) { $validator = Validator::make($request->all(), [ 'subject_id' => 'required|string', 'title' => 'required|string', ]); if ($validator->fails()) { return response()->json(['code' => 0, 'error' => $validator->errors()->toArray()]); } else { Topic::insert([ 'subject_id' => $request->subject_id, 'title' => $request->title, ]); return response()->json(); } } public function topic_list() { $topics = Topic::with('subject')->select('m_topics.*'); return DataTables::of($topics) ->addColumn('actions', function ($row) { return '
'; }) ->addColumn('subject_name', function ($topics) { return $topics->subject->name; }) ->rawColumns(['actions']) ->make(true); } public function updateTopic(Request $request) { $topic_id = $request->topic_id; $validator = Validator::make($request->all(), [ 'subject_id' => 'required|string', 'title' => 'required|string', ]); if ($validator->fails()) { return response()->json(['code' => 0, 'error' => $validator->errors()->toArray()]); } else { $topic = Topic::find($topic_id); $topic->subject_id = $request->subject_id; $topic->title = $request->title; $query = $topic->update(); if (!$query) { return response()->json(['code' => 0, 'msg' => 'Something went wrong']); } else { return response()->json(['code' => 1, 'msg' => 'Topic has been successfully updated']); } } } public function deleteTopic(Request $request) { $id = $request->id; $query = Topic::find($id); $query->delete(); if (!$query) { return response()->json(['code' => 0, 'msg' => 'Something went wrong']); } else { return response()->json(['code' => 1, 'msg' => 'Topic has been successfully updated']); } } /* End of Topic */ /* Start of Level */ public function addLevel(Request $request) { $audio_name = ""; $video_name = ""; $image_name = ""; $audio_upload = false; $video_upload = false; $image_upload = false; $validator = Validator::make($request->all(), [ 'title' => 'required|string', 'subject_id' => 'required|string', 'topic_id' => 'required|string', 'is_pretest' => 'string', 'is_termination' => 'string', 'content' => 'required|string', 'video' => 'mimes:mp4', 'audio' => 'mimes:mp3', 'image' => 'mimes:jpeg,jpg,png', 'youtube' => 'sometimes|nullable|url', ]); if ($validator->fails()) { return response()->json(['code' => 0, 'error' => $validator->errors()->toArray()]); } else { if ($request->hasFile('audio')) { $audio_path = 'audio/'; $audio = $request->file('audio'); $audio_name = $audio->getClientOriginalName(); $this->audio_upload = $audio->storeAs($audio_path, $audio_name, 'public'); } else { $this->audio_upload = true; } if ($request->hasFile('video')) { $video_path = 'video/'; $video = $request->file('video'); $video_name = $video->getClientOriginalName(); $this->video_upload = $video->storeAs($video_path, $video_name, 'public'); } else { $this->video_upload = true; } if ($request->hasFile('image')) { $image_path = 'image/'; $image = $request->file('image'); $image_name = $image->getClientOriginalName(); $this->image_upload = $image->storeAs($image_path, $image_name, 'public'); } else { $this->image_upload = true; } if ($this->audio_upload and $this->video_upload and $this->image_upload) { Level::insert([ 'title' => $request->title, 'subject_id' => $request->subject_id, 'topic_id' => $request->topic_id, 'is_pretest' => $request->is_pretest, 'is_termination' => $request->is_termination, 'content' => $request->content, 'audio' => $audio_name, 'video' => $video_name, 'image' => $image_name, 'youtube' => $request->youtube, 'route1' => $request->route1, 'route2' => $request->route2, 'route3' => $request->route3, 'route4' => $request->route4, ]); return response()->json(['code' => 1, 'msg' => 'BERHASIL menambahkan soal baru.']); } else { return response()->json(['code' => 0, 'msg' => 'GAGAL menambahkan soal baru.']); } } } public function level_list(Request $request) { $levels = ViewLevelRoute::query()->with(['subject', 'topic'])->select('v_level_title.*');; return DataTables::of($levels) ->addColumn('actions', function ($row) { return '
'; }) ->addColumn('subject_name', function (ViewLevelRoute $level) { return $level->subject->name; }) ->addColumn('topic_title', function (ViewLevelRoute $level) { return $level->topic->title; }) ->rawColumns(['actions']) ->make(true); } public function updateLevel(Request $request) { $level_id = $request->level_id; $level = Level::find($level_id); $audio_name = ''; $video_name = ''; $image_name = ''; $validator = Validator::make($request->all(), [ 'title' => 'required|string', 'subject_id' => 'required|string', 'topic_id' => 'required|string', 'is_pretest' => 'numeric', 'is_termination' => 'numeric', 'content' => 'required|string', 'video' => 'mimes:mp4', 'audio' => 'mimes:mp3', 'image' => 'mimes:jpeg,jpg,png', 'youtube' => 'sometimes|nullable|url', ]); if ($validator->fails()) { return response()->json(['code' => 0, 'error' => $validator->errors()->toArray()]); } else { // Update Audio if ($request->hasFile('audio')) { $audio = $request->file('audio'); $audio_name = $audio->getClientOriginalName(); $audio->storeAs('public/audio', $audio_name); if ($level->audio) { Storage::delete('public/audio/' . $level->audio); } } else { $audio_name = $request->level_audio; } // Update Video if ($request->hasFile('video')) { $video = $request->file('video'); $video_name = $video->getClientOriginalName(); $video->storeAs('public/video', $video_name); if ($level->video) { Storage::delete('public/video/' . $level->video); } } else { $video_name = $request->level_video; } // Update Image if ($request->hasFile('image')) { $image = $request->file('image'); $image_name = $image->getClientOriginalName(); $image->storeAs('public/image', $image_name); if ($level->image) { Storage::delete('public/image/' . $level->image); } } else { $image_name = $request->level_image; } $level->update([ 'title' => $request->title, 'subject_id' => $request->subject_id, 'topic_id' => $request->topic_id, 'is_pretest' => $request->is_pretest, 'is_termination' => $request->is_termination, 'content' => $request->content, 'audio' => $audio_name, 'video' => $video_name, 'image' => $image_name, 'youtube' => $request->youtube, ]); return response()->json(); } } public function deleteLevel(Request $request) { $id = $request->id; $query = Level::find($id); // Hapus Image if (Storage::delete('public/image/' . $query->image)) { Level::destroy($id); } // Hapus Video if (Storage::delete('public/video/' . $query->video)) { Level::destroy($id); } // Hapus Audio if (Storage::delete('public/audio/' . $query->audio)) { Level::destroy($id); } $query->delete(); if (!$query) { return response()->json(['code' => 0, 'msg' => 'Something went wrong']); } else { return response()->json(['code' => 1, 'msg' => 'Level has been successfully updated']); } } /* End of Level */ /* Start of Route */ public function addRoute(Request $request) { $validator = Validator::make($request->all(), [ 'route1' => 'required|numeric', 'route2' => 'required|numeric', 'route3' => 'required|numeric', 'route4' => 'required|numeric', ]); if ($validator->fails()) { return response()->json(['code' => 0, 'error' => $validator->errors()->toArray()]); } else { Level::insert([ 'route1' => $request->route1, 'route2' => $request->route2, 'route3' => $request->route3, 'route4' => $request->route4, ]); DB::statement('UPDATE m_levels SET route1 = id WHERE route1=0'); DB::statement('UPDATE m_levels SET route2 = id WHERE route2=0'); DB::statement('UPDATE m_levels SET route3 = id WHERE route3=0'); DB::statement('UPDATE m_levels SET route4 = id WHERE route4=0'); return response()->json(['code' => 1, 'msg' => 'BERHASIL menambahkan route baru.']); return response()->json(['code' => 0, 'msg' => 'GAGAL menambahkan route baru.']); } } public function route_list() { $levels = ViewLevelRoute::with(['subject', 'topic']); return DataTables::of($levels) ->addColumn('actions', function ($row) { return '
'; }) ->rawColumns(['actions']) ->make(true); } public function updateRoute(Request $request) { $level_id = $request->level_id; $level = Level::find($level_id); $validator = Validator::make($request->all(), [ 'route1' => 'required', 'route2' => 'required', 'route3' => 'required', 'route4' => 'required', ]); if ($validator->fails()) { return response()->json(['code' => 0, 'error' => $validator->errors()->toArray()]); } else { $level->update([ 'route1' => $request->route1, 'route2' => $request->route2, 'route3' => $request->route3, 'route4' => $request->route4, ]); DB::statement('UPDATE m_levels SET route1 = id WHERE route1=0'); DB::statement('UPDATE m_levels SET route2 = id WHERE route2=0'); DB::statement('UPDATE m_levels SET route3 = id WHERE route3=0'); DB::statement('UPDATE m_levels SET route4 = id WHERE route4=0'); return response()->json(); } } /* End of Route */ /* Start of Exercise */ public function addExercise(Request $request) { $validator = Validator::make($request->all(), [ 'level_id' => 'required|integer', 'question' => 'required|string', 'image' => 'mimes:jpeg,jpg,png,gif', 'option_a' => 'required|string', 'option_b' => 'required|string', 'option_c' => 'required|string', 'option_d' => 'required|string', 'option_e' => 'required|string', 'answer_key' => 'required|string|max:5', 'weight' => 'required|integer', ]); if ($validator->fails()) { return response()->json(['code' => 0, 'error' => $validator->errors()->toArray()]); }else{ if ($request->hasFile('image')) { $image_path = 'exercise_image/'; $image = $request->file('image'); $image_name = $image->getClientOriginalName(); $this->image_upload = $image->storeAs($image_path, $image_name, 'public'); } else { $this->image_upload = true; } if ($this->image_upload) { $exercise = new Exercise(); $exercise->level_id = $request->level_id; $exercise->question = $request->question; $exercise->image = $image_name; $exercise->option_a = $request->option_a; $exercise->option_b = $request->option_b; $exercise->option_c = $request->option_c; $exercise->option_d = $request->option_d; $exercise->option_e = $request->option_e; $exercise->answer_key = $request->answer_key; $exercise->weight = $request->weight; $query = $exercise->save(); if (!$query) { return response()->json(['code' => 0, 'msg' => 'Something went wrong']); } else { return response()->json(['code' => 1, 'msg' => 'New Exercise has been successfully saved']); } } } } public function exercise_list() { $exercises = Exercise::with('level'); return DataTables::of($exercises) ->addColumn('actions', function ($row) { return '
'; }) ->addColumn('level_title', function (Exercise $exercise) { return $exercise->level->title; }) ->addColumn('level_topic_title', function (Exercise $exercise) { return $exercise->level->topic->title; }) ->addColumn('level_subject_name', function (Exercise $exercise) { return $exercise->level->subject->name; }) ->rawColumns(['actions']) ->make(true); } public function updateExercise(Request $request) { $exercise_id = $request->exercise_id; $exercise = Exercise::find($exercise_id); $image_name = ''; $validator = Validator::make($request->all(), [ 'level_id' => 'required|integer', 'question' => 'required|string', 'image' => 'mimes:jpeg,jpg,png,gif', 'option_a' => 'required|string', 'option_b' => 'required|string', 'option_c' => 'required|string', 'option_d' => 'required|string', 'option_e' => 'required|string', 'answer_key' => 'required|string|max:5', 'weight' => 'required|integer', ]); if ($validator->fails()) { return response()->json(['code' => 0, 'error' => $validator->errors()->toArray()]); } else { // Update Image if ($request->hasFile('image')) { $image = $request->file('image'); $image_name = $image->getClientOriginalName(); $image->storeAs('public/exercise_image', $image_name); if ($exercise->image) { Storage::delete('public/exercise_image/' . $exercise->image); } } else { $image_name = $request->exercise_image; } //Update exercise $exercise = Exercise::find($exercise_id); $exercise->level_id = $request->level_id; $exercise->question = $request->question; $exercise->image = $image_name; $exercise->option_a = $request->option_a; $exercise->option_b = $request->option_b; $exercise->option_c = $request->option_c; $exercise->option_d = $request->option_d; $exercise->option_e = $request->option_e; $exercise->answer_key = $request->answer_key; $exercise->weight = $request->weight; $query = $exercise->save(); if (!$query) { return response()->json(['code' => 0, 'msg' => 'Something went wrong']); } else { return response()->json(['code' => 1, 'msg' => 'Exercise has been successfully updated']); } } } public function deleteExercise(Request $request) { $id = $request->id; $query = Exercise::find($id); // Hapus Image if (Storage::delete('public/exercise_image/' . $query->image)) { Exercise::destroy($id); } $query->delete(); if(!$query){ return response()->json(['code'=>0, 'msg'=>'Something went wrong']); }else{ return response()->json(['code'=>1, 'msg'=>'Exercise has been deleted from database']); } } /* End of Exercise */ }