diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index f6022acda6bf7e331a4cec1a6d090baa5909fe1b..60e601757151f200e3400de17136a73999910c79 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -68,7 +68,7 @@ class RegisterController extends Controller 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']), - 'role' => 'member', + 'role' => intval($data['role']), ]); } } diff --git a/app/Http/Controllers/AutograderController.php b/app/Http/Controllers/AutograderController.php index b349bd6d9d349ce709e036a4aa4a78270bf6cff4..0a0bfaadd0074ae57890161542633e659cc22678 100644 --- a/app/Http/Controllers/AutograderController.php +++ b/app/Http/Controllers/AutograderController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Auth; use Google_Client; class AutograderController extends Controller @@ -28,50 +29,104 @@ class AutograderController extends Controller $answer_keys = DB::table('spreadsheets')->where('id', $id_topic)->get(); $cells = []; $cells_temp = []; - $keys = []; + $keys_formula = []; + $keys_value = []; foreach($answer_keys as $answer_key) { $cells[] = 'Sheet1!' . $answer_key->cell; $cells_temp[] = $answer_key->cell; - $keys[] = $answer_key->value; + $keys_formula[] = $answer_key->formula; + $keys_value[] = $answer_key->value; } - $answers = AutograderController::getStudentAnswer($request->id_spreadsheet, $cells); + $answers_formula = AutograderController::getStudentAnswer($request->id_spreadsheet, $cells, 0); + $answers_value = AutograderController::getStudentAnswer($request->id_spreadsheet, $cells, 1); - $results = AutograderController::grade($keys, $answers); + $results_formula = AutograderController::gradeFormula($keys_formula, $answers_formula); + $results_value = AutograderController::gradeFormula($keys_value, $answers_value); + $results = []; + for ($i=0; $i<count($results_formula); $i++) { + $results[] = ($results_formula[$i] + $results_value[$i])/2; + } echo ' - <table class="table"> + <table class="table table-hover"> <thead> <tr> - <th scope="col">Cell</th> - <th scope="col">Kunci</th> - <th scope="col">Jawaban</th> - <th scope="col">Skor</th> + <th scope="col">Cell</th> + <th scope="col">Formula Kunci</th> + <th scope="col">Formula Jawaban</th> + <th scope="col">Nilai Kunci</th> + <th scope="col">Nilai Jawaban</th> + <th scope="col">Skor</th> </tr> </thead> <tbody> '; + + $score = 0; for ($i=0; $i<count($results); $i++) { + $score = $score + $results[$i]*100; echo '<tr>'; echo '<th>' . $cells_temp[$i] . '</th>'; - echo '<td>' . $keys[$i] . '</td>'; - echo '<td>' . $answers[$i] . '</td>'; + echo '<td>' . $keys_formula[$i] . '</td>'; + echo '<td>' . $answers_formula[$i] . '</td>'; + echo '<td>' . $keys_value[$i] . '</td>'; + echo '<td>' . $answers_value[$i] . '</td>'; echo '<td>' . $results[$i]*100 . '/100</td>'; echo '</tr>'; } echo ' + <tr> + <td></td> + <td></td> + <td></td> + <td></td> + <th class="table-primary">Skor Akhir</th> + <th class="table-primary">' . $score/count($results) . '</th> + </tr> </tbody> </table> - <a href="/course/ ' . $id_course . '" style="float: right;" class="btn btn-primary" role="button">Kembali ke Kelas</a> + <a href="/course/' . $id_course . '" style="float: right;" class="btn btn-primary" role="button">Kembali ke Kelas</a> '; + + DB::table('grades')->where([ + ['id_topic', '=' ,$id_topic], + ['id_user', '=', Auth::id()] + ])->delete(); + + DB::table('grades')->insert([ + 'id_course' => $id_course, + 'id_user' => Auth::id(), + 'id_topic' => $id_topic, + 'grade' => $score/count($results) + ]); } /** - * Get grade from answer. + * Get grade from answer value * * @return grades */ - public function grade($keys, $answers) + public function gradeValue($keys, $answers) + { + $results = []; + for($i=0; $i<count($keys); $i++) { + if ($keys[$i] == $answers[$i]) { + $results[] = 1; + } else { + $results[] = 0; + } + } + + return $results; + } + + /** + * Get grade from answer formula + * + * @return grades + */ + public function gradeFormula($keys, $answers) { $results = []; for($i=0; $i<count($keys); $i++) { @@ -99,7 +154,7 @@ class AutograderController extends Controller } /** - * Get Jaccard Index score. + * Get Jaccard Index score * * @return score */ @@ -112,11 +167,11 @@ class AutograderController extends Controller } /** - * Get data from spreadsheet. + * Get data from spreadsheet * * @return answer */ - public function getStudentAnswer($id_spreadsheet, $ranges) + public function getStudentAnswer($id_spreadsheet, $ranges, $type) { $client = new Google_Client(); $client->setApplicationName('Datalearn'); @@ -125,9 +180,13 @@ class AutograderController extends Controller $client->setAccessType('offline'); $service = new \Google_Service_Sheets($client); - + + $render = 'FORMULA'; + if ($type == 1) { + $render = 'FORMATTED_VALUE'; + } $responses = $service->spreadsheets_values->batchGet($id_spreadsheet, [ - 'valueRenderOption' => 'FORMULA', + 'valueRenderOption' => $render, 'dateTimeRenderOption' => 'SERIAL_NUMBER', 'ranges' => $ranges ]); @@ -143,9 +202,4 @@ class AutograderController extends Controller return $answers; } - - public function test() - { - echo strtoupper("=sum(A1,A2)"); - } } diff --git a/app/Http/Controllers/CourseController.php b/app/Http/Controllers/CourseController.php index 395046a321f436a4b345e0017356ca02bc8c4cc5..e08391fbe1e267fc99e5328b62c82f4130acb952 100644 --- a/app/Http/Controllers/CourseController.php +++ b/app/Http/Controllers/CourseController.php @@ -25,6 +25,7 @@ class CourseController extends Controller */ public function index($id_course) { + $course = DB::table('courses')->where('id', $id_course)->first(); $topics = DB::table('topics')->where('id_course', $id_course)->get(); $enrolled_id = DB::table('user_course')->where('id_course', $id_course)->pluck('id_user'); @@ -38,7 +39,75 @@ class CourseController extends Controller $students[] = $temp->name; } } + + $scores = []; + foreach($topics as $topic) { + $grades = DB::table('grades')->where([ + ['id_topic', '=' ,$topic->id], + ['id_user', '=', Auth::id()] + ])->first(); + + if (empty($grades)) { + $scores[] = '-'; + } else { + $scores[] = $grades->grade; + } + } + + return view('course', ['course' => $course, 'scores' => $scores, 'topics' => $topics, 'students' => $students, 'teacher' => $teacher]); + } + + /** + * Create new course + * + * @return newCourse + */ + public function new(Request $request) + { + $id = DB::table('courses')->insertGetId([ + 'name' => $request->course_name, + 'description' => $request->course_description, + ]); + + DB::table('user_course')->insert([ + 'id_user' => Auth::id(), + 'id_course' => $id + ]); + return redirect()->route('home', ['msg' => 2]); + } + + /** + * delete course + * + * @return msg + */ + public function delete($id_course) + { + $enrolled_id = DB::table('user_course')->where('id_course', $id_course)->pluck('id_user'); + $topics = DB::table('courses')->where('id', $id_course)->get(); + foreach($topics as $topic) { + DB::table('spreadsheets')->where('id', $topic->id)->delete(); + DB::table('grades')->where('id_topic', $topic->id)->delete(); + DB::table('topics')->where('id', $topic->id)->delete(); + } + + DB::table('user_course')->where('id_course', $id_course)->delete(); + DB::table('courses')->where('id', $id_course)->delete(); - return view('course', ['topics' => $topics, 'students' => $students, 'teacher' => $teacher]); + return redirect()->route('home', ['msg' => 4]); + } + + /** + * Create new course + * + * @return newCourse + */ + public function enroll(Request $request) + { + DB::table('user_course')->insert([ + 'id_user' => Auth::id(), + 'id_course' => $request->enroll_id + ]); + return redirect()->route('home', ['msg' => 3]); } } diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 3e178a8ab182963a060e208f1186a0aaffc768f0..78f0be5778bc8631a1cd1ea22927aa94ab3a4d57 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -40,15 +40,15 @@ class HomeController extends Controller $enrolled[] = DB::table('courses')->where('id', $id)->first(); } - foreach($courses as $course) { - $temp = DB::table('user_course')->where([ - ['id_course', '=', $course->id], - ['role', '=', 1] - ])->first(); - $teacher = DB::table('users')->where('id', $temp->id_user)->first(); - $teachers[] = $teacher->name; - } + return view('home', ['profile' => $profile, 'role' => $role, 'courses' => $courses, 'enrolled' => $enrolled]); + } - return view('home', ['profile' => $profile, 'role' => $role, 'courses' => $courses, 'teachers' => $teachers, 'enrolled' => $enrolled]); + public function profile(Request $request) + { + DB::table('users')->where('id', Auth::id())->update([ + 'name' => $request->new_name, + ]); + + return redirect()->route('home', ['msg' => 1]); } } diff --git a/app/Http/Controllers/LearnController.php b/app/Http/Controllers/LearnController.php index 9b81636331e3442d051a4c383d9c977664092f3f..1f5193d54094d11f54c2f2fc15ec80417d2a17c1 100644 --- a/app/Http/Controllers/LearnController.php +++ b/app/Http/Controllers/LearnController.php @@ -26,6 +26,11 @@ class LearnController extends Controller public function index($id_course, $id_topic) { $topic = DB::table('topics')->where('id', $id_topic)->first(); + $cells = DB::table('spreadsheets')->where('id', $id_topic)->get(); + $ranges = []; + foreach($cells as $cell) { + $ranges[] = 'Sheet1!' . $cell->cell; + } $content = $topic->content; $client = LearnController::getClient(); @@ -35,8 +40,16 @@ class LearnController extends Controller $response = $service->files->copy($topic->id_spreadsheet, $copy); $permission_response = LearnController::edit_permission($response->id); + + // Clear Answer + $requestBody = new \Google_Service_Sheets_BatchClearValuesRequest([ + 'ranges' => $ranges + ]); + + $service2 = new \Google_Service_Sheets($client); + $response2 = $service2->spreadsheets_values->batchClear($response->id, $requestBody); - return view('learn', ['id_spreadsheet' => $response->id, 'content' => $content]); + return view('learn', ['topic_name' => $topic->name, 'id_course' => $id_course, 'id_spreadsheet' => $response->id, 'content' => $content]); } /** @@ -67,13 +80,28 @@ class LearnController extends Controller DB::table('topics')->insert([ 'id_course' => $id_course, 'name' => $request->topic_name, - 'content' => 'Konten', + 'description' => $request->topic_description, + 'content' => '', 'id_spreadsheet' => $response->spreadsheetId ]); } return redirect()->route('course', ['id_course' => $id_course, 'msg' => $msg]); } + /** + * Delete Topic. + * + * @return msg + */ + public function delete($id_course, $id_topic) + { + DB::table('spreadsheets')->where('id', $id_topic)->delete(); + DB::table('grades')->where('id_topic', $id_topic)->delete(); + DB::table('topics')->where('id', $id_topic)->delete(); + + return redirect()->route('course', ['id_course' => $id_course, 'msg' => 3]); + } + /** * Edit Permission. * @@ -100,7 +128,9 @@ class LearnController extends Controller public function edit($id_course, $id_topic) { $topic = DB::table('topics')->where('id', $id_topic)->first(); - return view('edit', ['id_spreadsheet' => $topic->id_spreadsheet, 'topic' => $topic]); + $cells = DB::table('spreadsheets')->where('id', $id_topic)->get(); + + return view('edit', ['cells' => $cells, 'id_course' => $id_course, 'id_spreadsheet' => $topic->id_spreadsheet, 'topic' => $topic]); } /** @@ -118,7 +148,7 @@ class LearnController extends Controller $client = LearnController::getClient(); $service = new \Google_Service_Sheets($client); - // Get Answer + // Get Answer Formula $responses = $service->spreadsheets_values->batchGet($request->id_spreadsheet, [ 'valueRenderOption' => 'FORMULA', 'dateTimeRenderOption' => 'SERIAL_NUMBER', @@ -134,12 +164,21 @@ class LearnController extends Controller } } - // Clear Answer - $requestBody = new \Google_Service_Sheets_BatchClearValuesRequest([ + // Get Answer Value + $responses2 = $service->spreadsheets_values->batchGet($request->id_spreadsheet, [ + 'valueRenderOption' => 'FORMATTED_VALUE', + 'dateTimeRenderOption' => 'SERIAL_NUMBER', 'ranges' => $cells ]); - $response = $service->spreadsheets_values->batchClear($request->id_spreadsheet, $requestBody); + $answers2 = []; + foreach ($responses2->valueRanges as $response) { + if ($response->values == NULL) { + $answers2[] = NULL; + } else { + $answers2[] = strtoupper(strval(($response->values)[0][0])); + } + } // Save to Database DB::table('spreadsheets')->where('id',$id_topic)->delete(); @@ -147,8 +186,8 @@ class LearnController extends Controller DB::table('spreadsheets')->insert([ 'id' => $id_topic, 'cell' => $cells[$i], - 'value' => $answers[$i], - 'type' => 0 + 'value' => $answers2[$i], + 'formula' => $answers[$i] ]); } diff --git a/database/migrations/2020_03_11_190629_create_topics_table.php b/database/migrations/2020_03_11_190629_create_topics_table.php index c98e5dd14523c472891cf60c81b4a6c492feb8b3..ced5d3df5740c2b5e2df55bb5b9654e57f9e4543 100644 --- a/database/migrations/2020_03_11_190629_create_topics_table.php +++ b/database/migrations/2020_03_11_190629_create_topics_table.php @@ -17,6 +17,7 @@ class CreateTopicsTable extends Migration $table->bigIncrements('id'); $table->bigInteger('id_course')->unsigned(); $table->string('name'); + $table->longText('description'); $table->longText('content'); $table->string('id_spreadsheet'); diff --git a/database/migrations/2020_03_11_190641_create_spreadsheets_table.php b/database/migrations/2020_03_11_190641_create_spreadsheets_table.php index 1c0313903ac25ef62a137e8ef88760a216f820e2..b3ab39ab6c83a7de5fb3407a1a66742a3a3344f1 100644 --- a/database/migrations/2020_03_11_190641_create_spreadsheets_table.php +++ b/database/migrations/2020_03_11_190641_create_spreadsheets_table.php @@ -17,7 +17,7 @@ class CreateSpreadsheetsTable extends Migration $table->bigInteger('id')->unsigned(); $table->string('cell'); $table->string('value'); - $table->integer('type'); + $table->string('formula'); $table->primary(['id', 'cell']); $table->foreign('id')->references('id')->on('topics'); diff --git a/database/migrations/2020_03_11_190651_create_grades_table.php b/database/migrations/2020_03_11_190651_create_grades_table.php index 5fba8613a9a9f3b40c138c1d5ad6676b1d1f88f2..048825747cb7ce489c4dd98c2f5dee832ba1faa7 100644 --- a/database/migrations/2020_03_11_190651_create_grades_table.php +++ b/database/migrations/2020_03_11_190651_create_grades_table.php @@ -17,7 +17,7 @@ class CreateGradesTable extends Migration $table->bigInteger('id_course')->unsigned(); $table->bigInteger('id_user')->unsigned(); $table->bigInteger('id_topic')->unsigned(); - $table->integer('grade'); + $table->double('grade', 8, 2); $table->primary(['id_course', 'id_user', 'id_topic']); diff --git a/database/migrations/2020_03_11_190702_create_user_course_table.php b/database/migrations/2020_03_11_190702_create_user_course_table.php index bd4047751782e1b429b0912bcd991c38720f88a5..62195545fb4eab3c80b902b2880f450d40a4b7f2 100644 --- a/database/migrations/2020_03_11_190702_create_user_course_table.php +++ b/database/migrations/2020_03_11_190702_create_user_course_table.php @@ -16,7 +16,6 @@ class CreateUserCourseTable extends Migration Schema::create('user_course', function (Blueprint $table) { $table->bigInteger('id_user')->unsigned(); $table->bigInteger('id_course')->unsigned(); - $table->integer('role'); $table->primary(['id_user', 'id_course']); diff --git a/public/css/home.css b/public/css/home.css index 0573cd92651b5b44848354c9c3bc4ac50d5f5e4f..e2a29e59b9240ab4264516e6c124e3e71ed2a2b2 100644 --- a/public/css/home.css +++ b/public/css/home.css @@ -3,7 +3,7 @@ text-align: center; } -#name { +#profile-name { font-weight: bold; margin-top: 5rem; } diff --git a/public/img/course1.png b/public/img/course1.png index 5835f1b9e122b187fbd4b757753464059c69e091..fd2747586fec9708659ff3747a487d3ccc559360 100644 Binary files a/public/img/course1.png and b/public/img/course1.png differ diff --git a/public/img/course2.png b/public/img/course2.png new file mode 100644 index 0000000000000000000000000000000000000000..5835f1b9e122b187fbd4b757753464059c69e091 Binary files /dev/null and b/public/img/course2.png differ diff --git a/public/js/learn.js b/public/js/learn.js index e42ad59958790cdcc963a83ce4fe3d530d14e911..3fb867d8821e8eb8b61a6308dd9c9781c720eea6 100644 --- a/public/js/learn.js +++ b/public/js/learn.js @@ -1,5 +1,6 @@ function submit(id_spreadsheet, url) { document.getElementById("submit").disabled = true; + document.getElementById("back").disabled = true; var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php index c12b97e57731b97b20bdacdc4710923f1ff5877f..09455ec24eefc5e5f9d6d155d40bd6291e29799a 100644 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -12,7 +12,7 @@ @csrf <div class="form-group row"> - <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label> + <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('Alamat Email') }}</label> <div class="col-md-6"> <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus> @@ -45,7 +45,7 @@ <input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}> <label class="form-check-label" for="remember"> - {{ __('Remember Me') }} + {{ __('Ingat saya') }} </label> </div> </div> @@ -59,7 +59,7 @@ @if (Route::has('password.request')) <a class="btn btn-link" href="{{ route('password.request') }}"> - {{ __('Forgot Your Password?') }} + {{ __('Lupa Password?') }} </a> @endif </div> diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php index d236a48ecb6d7ffb0d4a4fb62d7be35a79019cac..378818db47ebe9a437804b47e01796321fe56db1 100644 --- a/resources/views/auth/register.blade.php +++ b/resources/views/auth/register.blade.php @@ -6,13 +6,12 @@ <div class="col-md-8"> <div class="card"> <div class="card-header">{{ __('Register') }}</div> - <div class="card-body"> <form method="POST" action="{{ route('register') }}"> @csrf <div class="form-group row"> - <label for="name" class="col-md-4 col-form-label text-md-right">{{ __('Name') }}</label> + <label for="name" class="col-md-4 col-form-label text-md-right">{{ __('Nama') }}</label> <div class="col-md-6"> <input id="name" type="text" class="form-control @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}" required autocomplete="name" autofocus> @@ -26,7 +25,7 @@ </div> <div class="form-group row"> - <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label> + <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('Alamat Email') }}</label> <div class="col-md-6"> <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email"> @@ -54,13 +53,27 @@ </div> <div class="form-group row"> - <label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Confirm Password') }}</label> + <label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Konfirmasi Password') }}</label> <div class="col-md-6"> <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password"> </div> </div> + <div class="form-group row"> + <label for="user-type" class="col-md-4 col-form-label text-md-right">{{ __('Daftar sebagai') }}</label> + <div class="col-md-6" style="margin-top: 0.5rem;"> + <div class="form-check form-check-inline"> + <input class="form-check-input" type="radio" name="role" id="inlineRadio1" value="0"> + <label class="form-check-label" for="inlineRadio1">Siswa</label> + </div> + <div class="form-check form-check-inline"> + <input class="form-check-input" type="radio" name="role" id="inlineRadio2" value="1"> + <label class="form-check-label" for="inlineRadio2">Pengajar</label> + </div> + </div> + </div> + <div class="form-group row mb-0"> <div class="col-md-6 offset-md-4"> <button type="submit" class="btn btn-primary"> diff --git a/resources/views/course.blade.php b/resources/views/course.blade.php index 6b5b2d0354324ff6db1d54bcef0ea7d09ceba979..b98b2652fea1af39ee4b108b8d2d57b218c44478 100644 --- a/resources/views/course.blade.php +++ b/resources/views/course.blade.php @@ -5,21 +5,28 @@ @isset(request()->msg) @if( request()->get('msg') == 1 ) <div class="alert alert-success alert-dismissible fade show" role="alert"> - Pembuatan Topik Berhasil + Pembuatan Materi Berhasil <button type="button" class="close" data-dismiss="alert" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> @elseif( request()->get('msg') == 2 ) <div class="alert alert-success alert-dismissible fade show" role="alert"> - Perubahan Topik Berhasil Disimpan + Perubahan Materi Berhasil Disimpan + <button type="button" class="close" data-dismiss="alert" aria-label="Close"> + <span aria-hidden="true">×</span> + </button> + </div> + @elseif( request()->get('msg') == 3 ) + <div class="alert alert-success alert-dismissible fade show" role="alert"> + Materi Berhasil Dihapus <button type="button" class="close" data-dismiss="alert" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> @else <div class="alert alert-danger alert-dismissible fade show" role="alert"> - Pembuatan Topik Gagal + Pembuatan Materi Gagal <button type="button" class="close" data-dismiss="alert" aria-label="Close"> <span aria-hidden="true">×</span> </button> @@ -29,77 +36,141 @@ <div class="row justify-content"> <div class="col-md-8"> <div class="card"> - <div class="card-header">Topik Materi</div> - <div class="card-body"> - <div class="accordion-group" id="accordionTopics"> - @foreach($topics as $index => $topic) - <div class="card"> - <div class="card-header" id="heading<?php echo $topic->id; ?>"> - <h6 class="mb-0"> - <a data-toggle="collapse" aria-expanded="false" aria-controls="collapse<?php echo $topic->id; ?>"> - <b>Topik {{ $index + 1 }}: {{ $topic->name }}</b> - </a> - </h6> - </div> - <div id="collapse<?php echo $topic->id; ?>" class="collapse show" aria-labelledby="heading<?php echo $topic->id; ?>" data-parent="#accordionTopics"> - <div class="card-body"> - {{ $topic->content }} <br/> <br/> - @if(Auth::user()->role == 1) - <a href="<?php echo $topic->id_course; ?>/learn/<?php echo $topic->id; ?>/edit" class="btn btn-primary" role="button">Buka Topik</a> - @else - <a href="<?php echo $topic->id_course; ?>/learn/<?php echo $topic->id; ?>" class="btn btn-primary" role="button">Buka Topik</a> - @endif - </div> - </div> + <div class="card-header"><b>Kelas {{ $course->name }}</b></div> + @if( count($topics) == 0 ) + <div class="card-body">Tidak ada Materi</div> + @endif + <div class="accordion-group" id="accordionTopics"> + @foreach($topics as $index => $topic) + <div class="card"> + <div class="card-header" id="heading<?php echo $topic->id; ?>"> + <h6 class="mb-0"> + <a data-toggle="collapse" aria-expanded="false" aria-controls="collapse<?php echo $topic->id; ?>"> + <b>Materi {{ $index + 1 }}: {{ $topic->name }}</b> + </a> + </h6> </div> - @endforeach - </div> - @if(Auth::user()->role == 1) - <br/> - <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModalCenter"> - Tambah Topik - </button> - @endif - <div class="modal fade" id="exampleModalCenter" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true"> - <div class="modal-dialog modal-dialog-centered" role="document"> - <div class="modal-content"> - <form action="<?php echo Request::url(); ?>/learn/new" method="post"> - {{ csrf_field() }} - <div class="modal-header"> - <h5 class="modal-title" id="exampleModalCenterTitle">Tambah Topik</h5> - <button type="button" class="close" data-dismiss="modal" aria-label="Close"> - <span aria-hidden="true">×</span> - </button> - </div> - <div class="modal-body"> - <div class="form-group"> - <label for="topic-name" class="col-form-label">Masukkan Judul Topik</label> - <input type="text" class="form-control" name="topic_name" id="topic-name" required="required" placeholder="Judul Topik"> + <div id="collapse<?php echo $topic->id; ?>" class="collapse show" aria-labelledby="heading<?php echo $topic->id; ?>" data-parent="#accordionTopics"> + <div class="card-body"> + {{ $topic->description }} <br/><br/> + @if(Auth::user()->role == 1) + <button type="button" class="btn btn-danger" data-toggle="modal" data-target="#deleteModal{{ $topic->id }}">Hapus</button> + <a href="<?php echo $topic->id_course; ?>/learn/<?php echo $topic->id; ?>/edit" class="btn btn-primary" role="button">Edit Materi</a> + <div class="modal fade" id="deleteModal{{ $topic->id }}" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true"> + <div class="modal-dialog modal-dialog-centered" role="document"> + <div class="modal-content"> + <form action="{{ Request::url() }}/learn/{{ $topic->id }}/delete" method="post"> + {{ csrf_field() }} + <div class="modal-header"> + <h5 class="modal-title" id="exampleModalCenterTitle">Hapus Materi</h5> + <button type="button" class="close" data-dismiss="modal" aria-label="Close"> + <span aria-hidden="true">×</span> + </button> + </div> + <div class="modal-body">Apakah anda yakin menghapus materi <b>{{ $topic->name }}</b>?</div> + <div class="modal-footer"> + <button type="button" class="btn btn-secondary" data-dismiss="modal">Batal</button> + <button type="submit" class="btn btn-danger">Hapus Materi</button> + </div> + </form> + </div> + </div> </div> + @else + <a href="<?php echo $topic->id_course; ?>/learn/<?php echo $topic->id; ?>" class="btn btn-primary" role="button">Buka Materi</a> + @endif + </div> + </div> + </div> + @endforeach + </div> + </div> + @if(Auth::user()->role == 1) + <br/> + <button type="button" class="btn btn-danger" data-toggle="modal" data-target="#deleteCourse"> + Hapus Kelas + </button> + <div class="modal fade" id="deleteCourse" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true"> + <div class="modal-dialog modal-dialog-centered" role="document"> + <div class="modal-content"> + <form action="{{ $course->id }}/delete" method="post"> + {{ csrf_field() }} + <div class="modal-header"> + <h5 class="modal-title" id="exampleModalCenterTitle">Hapus Kelas</h5> + <button type="button" class="close" data-dismiss="modal" aria-label="Close"> + <span aria-hidden="true">×</span> + </button> + </div> + <div class="modal-body">Apakah anda yakin menghapus kelas <b>{{ $course->name }}</b>?</div> + <div class="modal-footer"> + <button type="button" class="btn btn-secondary" data-dismiss="modal">Batal</button> + <button type="submit" class="btn btn-danger">Hapus Kelas</button> + </div> + </form> + </div> + </div> + </div> + <button style="float: right;" type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModalCenter"> + Tambah Materi + </button> + <div class="modal fade" id="exampleModalCenter" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true"> + <div class="modal-dialog modal-dialog-centered" role="document"> + <div class="modal-content"> + <form action="<?php echo Request::url(); ?>/learn/new" method="post"> + {{ csrf_field() }} + <div class="modal-header"> + <h5 class="modal-title" id="exampleModalCenterTitle">Tambah Materi</h5> + <button type="button" class="close" data-dismiss="modal" aria-label="Close"> + <span aria-hidden="true">×</span> + </button> + </div> + <div class="modal-body"> + <div class="form-group"> + <label for="topic-name" class="col-form-label">Masukkan Judul Materi</label> + <input type="text" class="form-control" name="topic_name" id="topic-name" required="required" placeholder="Judul Topik"> </div> - <div class="modal-footer"> - <button type="button" class="btn btn-secondary" data-dismiss="modal">Batal</button> - <button type="submit" class="btn btn-primary">Buat Topik</button> + <div class="form-group"> + <label for="topic-description">Deskripsi</label> + <textarea class="form-control" name="topic_description" id="topic_description" rows="2"></textarea> </div> - </form> - </div> + </div> + <div class="modal-footer"> + <button type="button" class="btn btn-secondary" data-dismiss="modal">Batal</button> + <button type="submit" class="btn btn-primary">Tambah Materi</button> + </div> + </form> </div> </div> </div> - </div> + @endif </div> <div class="col-md-4"> - <div class="card"> - <div class="card-header">Progress</div> - <div class="card-body"> - @foreach($topics as $index => $topic) - Topik {{ $index + 1 }}: 100/100 <br/> - @endforeach + @if(Auth::user()->role == 0) + <div class="card"> + <div class="card-header"><b>Progress</b></div> + <div class="card-body"> + <table class="table table-hover"> + <thead> + <tr> + <th scope="col">Materi</th> + <th scope="col">Skor</th> + </tr> + </thead> + <tbody> + @foreach($scores as $index => $score) + <tr> + <td>Materi {{ $index + 1 }}</td> + <td>{{ $score }}</td> + </tr> + @endforeach + </tbody> + </table> + </div> </div> - </div> - <br/> + <br/> + @endif <div class="card"> - <div class="card-header">Peserta Kelas</div> + <div class="card-header"><b>Peserta Kelas</b></div> <div class="card-body"> {{ $teacher }} (Pengajar) <br/> @foreach($students as $student) diff --git a/resources/views/edit.blade.php b/resources/views/edit.blade.php index 75e71a145ae198ab71844ee73a80f291a66596ad..14e65a70e0ef23420b6aa03686e776f568c40f6e 100644 --- a/resources/views/edit.blade.php +++ b/resources/views/edit.blade.php @@ -31,7 +31,7 @@ </div> <div id="collapse1" class="collapse show" aria-labelledby="heading1" data-parent="#accordionCourses"> <input type="hidden" value="<?php echo $id_spreadsheet; ?>" class="form-control" name="id_spreadsheet" id="id_spreadsheet"> - <textarea name="rich_text" id="rich_text"><?php echo $topic->content;?></textarea> + <mytextarea name="rich_text" id="rich_text"><?php echo $topic->content;?></mytextarea> </div> </div> <div class="card"> @@ -45,29 +45,20 @@ <div id="collapse2" class="collapse" aria-labelledby="heading2" data-parent="#accordionCourses"> <div class="card-body"> <label for="exampleFormControlSelect1">Jumlah Cell Jawaban</label> - <input type="number" class="form-control" id="cell-number" min="1" value="5" onkeyup="setForm(this.value)" onchange="setForm(this.value)"> + <input type="number" class="form-control" id="cell-number" min="1" value="{{ count($cells) }}" onkeyup="setForm(this.value)" onchange="setForm(this.value)"> <br/> <label for="exampleFormControlSelect1">Masukkan Cell Jawaban</label> <div class="row" id="cell-answers"> - <div class="col-3" style="margin-bottom:1rem;"> - <input type="text" name="cells[]" class="form-control"> - </div> - <div class="col-3" style="margin-bottom:1rem;"> - <input type="text" name="cells[]" class="form-control"> - </div> - <div class="col-3" style="margin-bottom:1rem;"> - <input type="text" name="cells[]" class="form-control"> - </div> - <div class="col-3" style="margin-bottom:1rem;"> - <input type="text" name="cells[]" class="form-control"> - </div> - <div class="col-3" style="margin-bottom:1rem;"> - <input type="text" name="cells[]" class="form-control"> - </div> + @foreach($cells as $cell) + <div class="col-3" style="margin-bottom:1rem;"> + <input type="text" name="cells[]" class="form-control" value="{{ $cell->cell }}"> + </div> + @endforeach </div> </div> </div> </div> + <a style="margin-top: 1rem;" href="/course/<?php echo $id_course; ?>" class="btn btn-secondary" role="button">Kembali ke Kelas</a> <button style="float: right; margin-top: 1rem;" type="submit" class="btn btn-primary"><b>Simpan</b></button> </form> </div> diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index f23113698207127363f65f054c58d4b6e98ec56b..1cb3cad8c20e83cf0b1220550eb31a4672d7bb78 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -2,11 +2,45 @@ @section('content') <div class="container"> +@isset(request()->msg) + @if( request()->get('msg') == 1 ) + <div class="alert alert-success alert-dismissible fade show" role="alert"> + Profil Berhasil Diubah + <button type="button" class="close" data-dismiss="alert" aria-label="Close"> + <span aria-hidden="true">×</span> + </button> + </div> + @elseif( request()->get('msg') == 2 ) + <div class="alert alert-success alert-dismissible fade show" role="alert"> + Pembuatan Kelas Berhasil + <button type="button" class="close" data-dismiss="alert" aria-label="Close"> + <span aria-hidden="true">×</span> + </button> + </div> + @elseif( request()->get('msg') == 3 ) + <div class="alert alert-success alert-dismissible fade show" role="alert"> + Daftar Kelas Berhasil + <button type="button" class="close" data-dismiss="alert" aria-label="Close"> + <span aria-hidden="true">×</span> + </button> + </div> + @elseif( request()->get('msg') == 4 ) + <div class="alert alert-success alert-dismissible fade show" role="alert"> + Kelas Berhasil Dihapus + <button type="button" class="close" data-dismiss="alert" aria-label="Close"> + <span aria-hidden="true">×</span> + </button> + </div> + @endif +@endisset <div class="row justify-content"> <div class="col-md-8"> <div class="card"> - <div class="card-header">Kelasku</div> + <div class="card-header"><b>Kelasku</b></div> <div class="card-columns card-body"> + @if( count($enrolled) == 0 ) + Tidak ada kelas yang diikuti + @endif @foreach($enrolled as $enroll) <div class="card course" style="width: 14rem"> <img src="img/course1.png" class="card-img-top" alt="No Picture"> @@ -16,49 +50,112 @@ @endforeach </div> </div> + @if(Auth::user()->role == 1) + <br/> + <button style="float: right;" type="button" class="btn btn-primary" data-toggle="modal" data-target="#newCourseModal"> + Tambah Kelas + </button> + <div class="modal fade" id="newCourseModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true"> + <div class="modal-dialog modal-dialog-centered" role="document"> + <div class="modal-content"> + <form action="/course/new" method="post"> + {{ csrf_field() }} + <div class="modal-header"> + <h5 class="modal-title" id="exampleModalCenterTitle">Tambah Kelas</h5> + <button type="button" class="close" data-dismiss="modal" aria-label="Close"> + <span aria-hidden="true">×</span> + </button> + </div> + <div class="modal-body"> + <div class="form-group"> + <label for="course-name" class="col-form-label">Masukkan Nama Kelas</label> + <input type="text" class="form-control" name="course_name" id="course-name" required="required" placeholder="Nama Kelas"> + </div> + <div class="form-group"> + <label for="course-description">Deskripsi</label> + <textarea class="form-control" name="course_description" id="course_description" rows="2"></textarea> + </div> + </div> + <div class="modal-footer"> + <button type="button" class="btn btn-secondary" data-dismiss="modal">Batal</button> + <button type="submit" class="btn btn-primary">Buat Kelas</button> + </div> + </form> + </div> + </div> + </div> + @endif </div> <div class="col-md-4"> <div class="card"> - <div class="card-header">Profil</div> + <div class="card-header"><b>Profil</b></div> <div class="card-body profile"> <img src="img/profile.jpg" style="width:120px;height:120px;" alt="No Picture"> <br/> <br/> - <a id="name">{{ $profile->name }}</a> <br/> + <a id="profile-name">{{ $profile->name }}</a> <br/> <a id="email">{{ $profile->email }}</a> <br/> - <a id="role">{{ $role }}</a> <br/> - <a id="edit" href="/edit_profile" class="btn btn-primary" role="button">Edit Profil</a> + <a id="role">{{ $role }}</a> <br/><br/> + <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModalCenter"> + Edit Profile + </button> + <div class="modal fade" id="exampleModalCenter" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true"> + <div class="modal-dialog modal-dialog-centered" role="document"> + <div class="modal-content"> + <form action="/profile" method="post"> + {{ csrf_field() }} + <div class="modal-header"> + <h5 class="modal-title" id="exampleModalCenterTitle">Edit Profil</h5> + <button type="button" class="close" data-dismiss="modal" aria-label="Close"> + <span aria-hidden="true">×</span> + </button> + </div> + <div class="modal-body"> + <div class="form-group"> + <label for="topic-name" class="col-form-label">Nama</label> + <input type="text" class="form-control" name="new_name" id="new_name" required="required" value="<?php echo $profile->name ?>"> + </div> + </div> + <div class="modal-footer"> + <button type="button" class="btn btn-secondary" data-dismiss="modal">Batal</button> + <button type="submit" class="btn btn-primary">Submit</button> + </div> + </form> + </div> + </div> + </div> </div> </div> </div> </div> - <div class="py-4 row justify-content-center"> - <div class="col-md-12"> - <div class="card"> - <div class="card-header">Kelas Tersedia</div> - <div class="card-body"> - <div class="accordion" id="accordionCourses"> - @foreach($courses as $index => $course) - <div class="card"> - <div class="card-header" id="heading<?php echo $course->id; ?>"> - <h5 class="mb-0"> - <button class="btn btn-link stretched-link" type="button" data-toggle="collapse" data-target="#collapse<?php echo $course->id; ?>" aria-expanded="false" aria-controls="collapse<?php echo $course->id; ?>"> - {{ $course->name }} - </button> - </h5> - </div> + @if(Auth::user()->role == 0) + <div class="py-4 row justify-content-center"> + <div class="col-md-12"> + <div class="card"> + <div class="card-header"><b>Kelas Tersedia</b></div> + <div class="card-body"> + <div class="accordion" id="accordionCourses"> + @foreach($courses as $index => $course) + <div class="card"> + <div class="card-header" id="heading<?php echo $course->id; ?>" style="transform: rotate(0);"> + <a class="stretched-link" type="button" data-toggle="collapse" data-target="#collapse<?php echo $course->id; ?>" aria-expanded="false" aria-controls="collapse<?php echo $course->id; ?>">{{ $course->name }}</a> + </div> - <div id="collapse<?php echo $course->id; ?>" class="collapse" aria-labelledby="heading<?php echo $course->id; ?>" data-parent="#accordionCourses"> - <div class="card-body"> - {{ $course->description }} <br/> - Pengajar : {{ $teachers[$index] }} <br/> <br/> - <a href="/enroll" class="btn btn-primary" role="button">Daftar Kelas</a> + <div id="collapse<?php echo $course->id; ?>" class="collapse" aria-labelledby="heading<?php echo $course->id; ?>" data-parent="#accordionCourses"> + <div class="card-body"> + {{ $course->description }} <br/><br/> + <form action="course/enroll" method="post"> + {{ csrf_field() }} + <input style="display: none;" type="number" class="form-control" name="enroll_id" id="enroll_id" required="required" value="<?php echo $course->id ?>"> + <button type="submit" class="btn btn-primary">Daftar Kelas</button> + </form> + </div> </div> </div> - </div> - @endforeach + @endforeach + </div> </div> </div> </div> </div> - </div> + @endif </div> @endsection \ No newline at end of file diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 4d7ae8364dc99a98734821db7ab180e66dafe610..fed7123e6123768b0f242c0648121c6b9af83ff9 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -14,7 +14,7 @@ <script src="{{ asset('js/text.js') }}" defer></script> <script src="{{ asset('js/learn.js') }}" defer></script> <script src="https://cdn.tiny.cloud/1/yaezxtmh9h1roazzxnkx70is63n62nbov3xskxim3rpnbcoj/tinymce/5/tinymce.min.js" referrerpolicy="origin"></script> - <script>tinymce.init({selector:'textarea'});</script> + <script>tinymce.init({selector:'mytextarea'});</script> <!-- Fonts --> <link rel="dns-prefetch" href="//fonts.gstatic.com"> @@ -28,7 +28,7 @@ <div id="app"> <nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm"> <div class="container"> - <a class="navbar-brand" href="{{ url('/home') }}"> + <a class="navbar-brand" href="{{ url('/') }}"> {{ config('app.name', 'Laravel') }} </a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}"> diff --git a/resources/views/learn.blade.php b/resources/views/learn.blade.php index 856d9afa09f650d3790c5f71e8d4537e31bc6ba6..40b0435bda34ef03ee8e995f3eb654eda22ec48f 100644 --- a/resources/views/learn.blade.php +++ b/resources/views/learn.blade.php @@ -5,7 +5,7 @@ <div class="row justify-content-center"> <div class="col-lg-4"> <div class="card"> - <div class="card-header">Judul</div> + <div class="card-header">{{ $topic_name }}</div> <div class="card-body"> <?php echo $content;?> </div> @@ -17,6 +17,7 @@ frameBorder="0" src="https://docs.google.com/spreadsheets/d/<?php echo $id_spreadsheet; ?>/edit?usp=drivesdk&rm=embedded"> </iframe> + <a href="/course/<?php echo $id_course; ?>" class="btn btn-primary" id="back" role="button">Kembali ke Kelas</a> <button id="submit" style="float: right;" type="text" onclick="submit('<?php echo $id_spreadsheet; ?>', '<?php echo Request::url(); ?>/submit')" class="btn btn-success"><b>Submit</b></button> </div> <div id="result" class="col-lg-10" style="margin-top: 1rem; display:none"> diff --git a/resources/views/test.blade.php b/resources/views/test.blade.php deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/routes/web.php b/routes/web.php index 7b30b804c53a6b5e4bc89aa7dbe64e8bbddf3491..c6aeaad0020624f0da7e71d60ae7f57e17c8e657 100644 --- a/routes/web.php +++ b/routes/web.php @@ -10,18 +10,17 @@ | contains the "web" middleware group. Now create something great! | */ - -Route::get('/', function () { - return view('welcome'); -}); - - Auth::routes(); -Route::get('/home', 'HomeController@index')->name('home'); -Route::get('/test', 'AutograderController@test')->name('test'); +Route::get('/', 'HomeController@index')->name('home'); +Route::redirect('/home', '/'); +Route::post('/profile', 'HomeController@profile')->name('profile'); Route::get('/course/{id_course}', 'CourseController@index')->name('course'); +Route::post('/course/new', 'CourseController@new')->name('course/new'); +Route::post('/course/enroll', 'CourseController@enroll')->name('course/enroll'); +Route::post('/course/{id_course}/delete', 'CourseController@delete')->name('course/delete'); Route::post('/course/{id_course}/learn/new', 'LearnController@new')->name('learn/new'); Route::get('/course/{id_course}/learn/{id_topic}', 'LearnController@index')->name('learn'); Route::get('/course/{id_course}/learn/{id_topic}/edit', 'LearnController@edit')->name('edit'); +Route::post('/course/{id_course}/learn/{id_topic}/delete', 'LearnController@delete')->name('learn/delete'); Route::post('/course/{id_course}/learn/{id_topic}/edit/save', 'LearnController@save')->name('edit/save'); Route::post('/course/{id_course}/learn/{id_topic}/submit', 'AutograderController@index')->name('autograder'); \ No newline at end of file