diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index 9897320c8097e769ee5bc4db40492adc3db84449..35713a55f8fde8abbc3bd86f375c2f3e452c921a 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -81,13 +81,20 @@ class RegisterController extends Controller } } - public function registerUser(Request $request) { - $data = $request->all(); + public function registerUser(array $data) { + $username = $data['username']; + $email = $data['email']; if(User::where('username',$username)->count()>0) { echo '<div class="alert alert-warning alert-dismissible fade show text-center"> <button type="button" class="close" data-dismiss="alert">×</button> - This user <strong>already exist.</strong> + User ' . $username . ' <strong>already exist.</strong> + </div>'; + return view('auth.register'); + } else if (User::where('email',$email)->count()>0) { + echo '<div class="alert alert-warning alert-dismissible fade show text-center"> + <button type="button" class="close" data-dismiss="alert">×</button> + User with <strong>email</strong> ' . $email . ' <strong>already exist.</strong> </div>'; return view('auth.register'); } else if(strlen($data['username']) > 18){ @@ -102,26 +109,89 @@ class RegisterController extends Controller <strong>Invalid</strong> phone number. </div>'; return view('auth.register'); - } else { - $user = $this->create($data); - $role = $data['role']; - if($role == User::ROLE_DOSEN) { - Dosen::create(['id'=>$user->id]); - }else if($role == User::ROLE_MAHASISWA) { - $id_kelas_tesis = KelasTesis::orderByRaw('updated_at - created_at DESC')->first(); - Mahasiswa::create(['id'=>$user->id, 'id_kelas_tesis'=>$id_kelas_tesis->id]); - } else if($role == User::ROLE_MANAJER) { - Manajer::create(['id'=>$user->id]); - } - echo '<div class="alert alert-success alert-dismissible fade show text-center"> + } else if($data['password'] != $data['password_confirmation']){ + echo '<div class="alert alert-warning alert-dismissible fade show text-center"> <button type="button" class="close" data-dismiss="alert">×</button> - <strong>Success !</strong> New user has successfully registered! + <strong>Invalid</strong> password confirmation. </div>'; - return view('auth.register'); + return view('auth.register'); + } else { + $user = $this->create($data); + $role = $data['role']; + if($role == User::ROLE_DOSEN) { + Dosen::create(['id'=>$user->id]); + } else if ($role == User::ROLE_MAHASISWA) { + $id_kelas_tesis = KelasTesis::orderByRaw('updated_at - created_at DESC')->first(); + if ($id_kelas_tesis == NULL) { + $user->delete(); + echo '<div class="alert alert-warning alert-dismissible fade show text-center"> + <button type="button" class="close" data-dismiss="alert">×</button> + Please create <strong>Kelas Tesis</strong> first. + </div>'; + return view('auth.register'); + } else { + Mahasiswa::create(['id'=>$user->id, 'id_kelas_tesis'=>$id_kelas_tesis->id]); + } + } else if ($role == User::ROLE_MANAJER) { + Manajer::create(['id'=>$user->id]); + } + echo '<div class="alert alert-success alert-dismissible fade show text-center"> + <button type="button" class="close" data-dismiss="alert">×</button> + <strong>Success !</strong> New user has successfully registered! + </div>'; + return view('auth.register'); } -// echo $id; + } + public function massRegister(String $filename, String $role) { + $file = fopen($filename, 'r'); + while (($line = fgetcsv($file, 1000, ",")) !== FALSE) { + $data['name'] = $line[0]; + $data['username'] = $line[1]; + $data['email'] = $line[2]; + $data['phone'] = $line[3]; + $data['password'] = $line[4]; + $data['password_confirmation'] = $line[4]; + $data['role'] = $role; + $this->registerUser($data); + } + + fclose($file); } + public function registerUsers(Request $request) { + $data = $request->all(); + + if (isset($_FILES["file"])) { + $file = $_FILES["file"]; + //if there was an error uploading the file + if ($file["error"] > 0) { + echo '<div class="alert alert-success alert-dismissible fade show text-center"> + <button type="button" class="close" data-dismiss="alert">×</button> + <strong>File Error!</strong> Please try to reupload the file. + </div>'; + return view('auth.register'); + } + else { + $extension = explode(".", $file["name"]); + + if (end($extension) != 'csv') { + echo '<div class="alert alert-success alert-dismissible fade show text-center"> + <button type="button" class="close" data-dismiss="alert">×</button> + <strong>File Error!</strong> Extension of the file must be csv. + </div>'; + return view('auth.register'); + } + else { + $this->massRegister($file["tmp_name"], $data["role"]); + return view('auth.register'); + } + } + } + else { + $this->registerUser($data); + return view('auth.register'); + } + } } diff --git a/doc/changerequest.md b/doc/changerequest.md new file mode 100644 index 0000000000000000000000000000000000000000..f1e4ab191aefdf732cd5566862ed1cea50a23f28 --- /dev/null +++ b/doc/changerequest.md @@ -0,0 +1,132 @@ +# Dokumentasi + +## Deskripsi Pekerjaan + +## Daftar Feature dan Change Request + +1. Membuat datepicker baru yang lebih mudah digunakan +2. Membuat fitur _mass-register_ +3. Merapikan tampilan _dashboard_ dosen +4. _Fix bug_ pada registrasi + +## Product Backlog + +1. Membuat datepicker +2. Membuat fitur _mass-register_ dengan menggunakan file .csv +3. Merapikan tampilan _dashboard_ dosen +4. _Fix bug_: membuat _handler_ untuk pembuatan akun mahasiswa tanpa pembuatan kelas tesis +5. _Fix bug_: membuat _handler_ untuk pembuatan akun dengan alamat _e-mail_ yang sama +6. _Fix bug_: membuat _handler_ pada registrasi dengan isi _password_ dengan _confirm password_ berbeda + +## Sprint + +### Sprint 1 + +#### Product Backlog 1 + +1. Membuat datepicker +2. Membuat fitur _mass-register_ dengan menggunakan file .csv +3. Merapikan tampilan _dashboard_ dosen +4. _Fix bug_: membuat _handler_ untuk pembuatan akun mahasiswa tanpa pembuatan kelas tesis +5. _Fix bug_: membuat _handler_ untuk pembuatan akun dengan alamat _e-mail_ yang sama + +#### Sprint Backlog 1 + +1. Front-end/mass-register: Membuat fitur _mass-register_ dengan menggunakan file .csv +2. Back-end/mass-register: Membuat fitur _mass-register_ dengan menggunakan file .csv +3. Membuat _handler_ untuk pembuatan akun mahasiswa tanpa pembuatan kelas tesis +4. Membuat _handler_ untuk pembuatan akun dengan alamat _e-mail_ yang sama +5. _Fix bug_:Membuat pada tampilan _dashboard_ dosen dengan css +#### Dokumentasi Teknis 1 + +Struktur PL + +Perilaku PL + +- Membuat fitur _mass-register_ dengan menggunakan file .csv + + Before: registrasi dalam jumlah banyak dilakukan dengan mendaftarkan akun satu persatu + + After: registrasi dalam jumlah banyak dapat dilakukan dengan mengunggah file .csv dengan format: + + ```txt + Nama, Username, E-Mail Address, Phone Number, Password + ``` + +- Membuat _handler_ untuk pembuatan akun mahasiswa tanpa pembuatan kelas tesis + + Before: registrasi akun mahasiswa tanpa pembuatan kelas tesis menghasilkan error, namun akun mahasiswa tetap terdaftar tetapi tanpa memiliki _role_. + + After: registrasi akun mahasiswa tanpa pembuatan kelas tesis menghasilkan notifikasi untuk melakukan pembuatan kelas tesis terlebih dahulu dan akun menjadi tidak terdaftar. + +- Membuat _handler_ untuk pembuatan akun dengan alamat _e-mail_ yang sama + + Before: registrasi akun dengan alamat _e-mail_ yang sudah terdaftar menghasilkan error. + + After: registrasi akun dengan alamat _e-mail_ yang sudah terdaftar menghasilkan notifikasi bahwa _e-mail_ sudah terdaftar. + +Antarmuka PL + +- Membuat fitur _mass-register_ dengan menggunakan file .csv + + Before: +  + + After: +  + +- Membuat _handler_ untuk pembuatan akun mahasiswa tanpa pembuatan kelas tesis + + Before: +  + + After: +  + +- Membuat _handler_ untuk pembuatan akun dengan alamat _e-mail_ yang sama + + Before: +  + + After: +  + +- Membuat pada tampilan _dashboard_ dosen dengan css + + Before: +  + + After: +  + +### Sprint 2 + +#### Product Backlog 2 + +1. _Fix bug_: membuat _handler_ pada registrasi dengan isi _password_ dengan _confirm password_ berbeda + +#### Sprint Backlog 2 + +1. Membuat _handler_ untuk registrasi dengan isi _password_ dengan _confirm password_ berbeda + +#### Dokumentasi Teknis 2 + +Struktur PL + +Perilaku PL + +- Membuat _handler_ untuk registrasi dengan isi _password_ dengan _confirm password_ berbeda + + Before: registrasi akun dengan isi _password_ dengan _confirm password_ berbeda akan tetap berhasil, dan akun terdaftar dengan _password_ pada input _password_. + + After: registrasi akun dengan isi _password_ dengan _confirm password_ berbeda akan gagal dan muncul notifikasi bahwa isi _confirm password_ berbeda. + +Antarmuka PL + +- Membuat _handler_ untuk registrasi dengan isi _password_ dengan _confirm password_ berbeda + + Before: +  + + After: +  \ No newline at end of file diff --git a/doc/screenshots/confirmpasswordhandle_after.JPG b/doc/screenshots/confirmpasswordhandle_after.JPG new file mode 100644 index 0000000000000000000000000000000000000000..209113c4176ba742e6828ed5e87a7cb7c50b564a Binary files /dev/null and b/doc/screenshots/confirmpasswordhandle_after.JPG differ diff --git a/doc/screenshots/confirmpasswordhandle_before.JPG b/doc/screenshots/confirmpasswordhandle_before.JPG new file mode 100644 index 0000000000000000000000000000000000000000..25065e01fd4ca8e3423dd634b083795f2be483b6 Binary files /dev/null and b/doc/screenshots/confirmpasswordhandle_before.JPG differ diff --git a/doc/screenshots/emailhandle_after.jpg b/doc/screenshots/emailhandle_after.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a76fd301a953aabef70627cf416b6242f711ba07 Binary files /dev/null and b/doc/screenshots/emailhandle_after.jpg differ diff --git a/doc/screenshots/emailhandle_before.JPG b/doc/screenshots/emailhandle_before.JPG new file mode 100644 index 0000000000000000000000000000000000000000..cac4aa4b925d8dcbe72170e56a9b7da030b18661 Binary files /dev/null and b/doc/screenshots/emailhandle_before.JPG differ diff --git a/doc/screenshots/kelastesishandle_after.jpg b/doc/screenshots/kelastesishandle_after.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ae09d92f1468f8ed33aedd476cc975a7427f6d0 Binary files /dev/null and b/doc/screenshots/kelastesishandle_after.jpg differ diff --git a/doc/screenshots/kelastesishandle_before.JPG b/doc/screenshots/kelastesishandle_before.JPG new file mode 100644 index 0000000000000000000000000000000000000000..88378c1277bc62458fa898ae5314d54e68cdc971 Binary files /dev/null and b/doc/screenshots/kelastesishandle_before.JPG differ diff --git a/doc/screenshots/massregister_after.jpg b/doc/screenshots/massregister_after.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7ed9cdf15bf36badbcccc69a7f2ff846c094e4b Binary files /dev/null and b/doc/screenshots/massregister_after.jpg differ diff --git a/doc/screenshots/massregister_before.JPG b/doc/screenshots/massregister_before.JPG new file mode 100644 index 0000000000000000000000000000000000000000..789c0c418f91ede9f3ae745e8c57b16b72b1930a Binary files /dev/null and b/doc/screenshots/massregister_before.JPG differ diff --git a/doc/screenshots/tampilan_after.png b/doc/screenshots/tampilan_after.png new file mode 100644 index 0000000000000000000000000000000000000000..44ba034fdd6e967b1db78827a60a98fac15dd614 Binary files /dev/null and b/doc/screenshots/tampilan_after.png differ diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php index bcc6f7ec4438e5ab13d62c96c3f86b5db5242288..6ff9c8dd47445bd2f7ac3aa3b124b58044fa8e5a 100644 --- a/resources/views/auth/register.blade.php +++ b/resources/views/auth/register.blade.php @@ -104,6 +104,56 @@ </div> </div> </div> + + <!-- mass register --> + <div class="col-md-8"> + <div class="card"> + <div class="card-header">Mass Register</div> + + <div class="card-body"> + Upload CSV file with format: + name, NIM, e-mail, phone, password + <form method="POST" action="/register" enctype="multipart/form-data"> + @csrf + + <div class="form-group row"> + <label for="role" class="col-md-4 col-form-label text-md-right">Role</label> + + <div class="col-md-6"> + <select type="text" id="role" name="role" class="form-control"> + <option value="Mahasiswa">Mahasiswa</option> + <option value="Dosen">Dosen</option> + <option value="Manajer">Manajer</option> + </select> + </div> + </div> + + <div class="form-group row"> + <label for="file" class="col-md-4 col-form-label text-md-right">File</label> + + <div class="col-md-6"> + <input id="file" type="file" name="file" class="form-control{{ $errors->has('file') ? ' is-invalid' : '' }}" name="name" value="{{ old('name') }}" required autofocus> + + @if ($errors->has('file')) + <span class="invalid-feedback"> + <strong>{{ $errors->first('file') }}</strong> + </span> + @endif + </div> + </div> + + <div class="form-group row mb-0"> + <div class="col-md-6 offset-md-4"> + <button type="submit" class="btn btn-primary"> + Register + </button> + </div> + </div> + </form> + </div> + </div> + </div> + </div> </div> @endsection diff --git a/routes/web.php b/routes/web.php index 0c8ba7b91ca95216a58edac90647f55d96d75676..638df8d65fe9908d3c7ca3acb80a2c2536246f41 100644 --- a/routes/web.php +++ b/routes/web.php @@ -35,7 +35,8 @@ Route::post('mahasiswa/edit/{id}', 'MahasiswaController@edit'); Route::get('register','Auth\RegisterController@showForm')->name('register'); -Route::post('register','Auth\RegisterController@registerUser')->name('registerPost'); +Route::post('register','Auth\RegisterController@registerUsers')->name('registerPost'); + Route::get('/home', 'HomeController@index')->name('home'); Route::get('/generate/admin', 'Auth\RegisterController@generateAdmin');