diff --git a/.~lock.exampleCSV.csv# b/.~lock.exampleCSV.csv# new file mode 100644 index 0000000000000000000000000000000000000000..14b5460cbe12543dee445f7c5334707b71d958d6 --- /dev/null +++ b/.~lock.exampleCSV.csv# @@ -0,0 +1 @@ +,wildansupernova,wildansupernova,28.01.2019 21:29,file:///home/wildansupernova/.config/libreoffice/4; \ No newline at end of file diff --git a/README.md b/README.md index ec3fb23e91030be280464772e1bd2bb7771ed789..175a98e40a6164f4c06fe22728058e3777743a53 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,10 @@ 11. Run `npm run production` 12. Please make sure that your web server already configured to `public/` folder +### Jalanin Kalo mau nge development +- `npm run watch` lalu buka satu terminal lagi terus jalanin `php artisan serve` + + ### User Seeding `php artisan db:seed --class=UsersVariantTableSeeder` diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index 9897320c8097e769ee5bc4db40492adc3db84449..7b6bbc6803d270cafaf46d2d3100f03b35c8478f 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -11,6 +11,7 @@ use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Validator; use Illuminate\Foundation\Auth\RegistersUsers; +use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Auth; use Illuminate\Http\Request; @@ -81,8 +82,86 @@ class RegisterController extends Controller } } + private function combineArray(array $temp1, array $temp2) { + $result = []; + // custom PHP array combine code + $i=0; + if(count($temp1) == count($temp2)){ + foreach($temp1 as $key => $value){ + $result[$value]=$temp2[$i]; + $i++; + } + } + + return $result; + } + + public function massRegisterCSV(Request $request) { +// $path = $request->file('upload-file')->openFile(); +// // return $path->fread($path->getSize()); +// return $path->fgetcsv($delimiter=';'); +// // $uploadedFile = $request->file('upload-file'); +// // $path = $uploadedFile->store('public/files'); +// // Storage::delete($path); + + + + $fileObject = $request->file('upload-file')->openFile(); + $countRow = 1; + $header = $fileObject->fgetcsv($delimiter=";"); + while (!$fileObject->eof()) { + $dataArray = $fileObject->fgetcsv($delimiter=";"); + if (array(null) !== $dataArray) { // ignore blank lines + $data = $this->combineArray($header, $dataArray); + $username = $data['username']; + $countRow = $countRow + 1; + $strLine = ' At line '.$countRow; + 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>'.$strLine.' + </div>'; + return view('auth.register'); + } else if(strlen($data['username']) > 18){ + echo '<div class="alert alert-warning alert-dismissible fade show text-center"> + <button type="button" class="close" data-dismiss="alert">×</button> + <strong>Username</strong> too long (maximum size: 18 characters).'.$strLine.' + </div>'; + return view('auth.register'); + } else if(strlen($data['phone']) > 18){ + echo '<div class="alert alert-warning alert-dismissible fade show text-center"> + <button type="button" class="close" data-dismiss="alert">×</button> + <strong>Invalid</strong> phone number.'.$strLine.' + </div>'; + return view('auth.register'); + } + } + + } + $fileObject = $request->file('upload-file')->openFile(); + $header = $fileObject->fgetcsv($delimiter=";"); + while (!$fileObject->eof()) { + $dataArray = $fileObject->fgetcsv($delimiter=";"); + if (array(null) !== $dataArray) { + $data = array_combine($header, $dataArray); + $user = $this->create($data); + $this->createRole($data, $user); + } + } + 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 users has successfully registered! + </div>'; + return view('auth.register'); + } + public function registerUser(Request $request) { $data = $request->all(); + return $this->validationAndCreateUser($data); +// echo $id; + } + + private function validationAndCreateUser($data) { $username = $data['username']; if(User::where('username',$username)->count()>0) { echo '<div class="alert alert-warning alert-dismissible fade show text-center"> @@ -102,26 +181,33 @@ class RegisterController extends Controller <strong>Invalid</strong> phone number. </div>'; return view('auth.register'); + } 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>Password is not the same with password confirmation</strong> + </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]); - } + $user = $this->create($data); + $this->createRole($data, $user); 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'); + return view('auth.register'); } -// echo $id; - + } + private function createRole(array $data, User $user) { + $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]); + } else if($role == User::ROLE_MANAJER) { + Manajer::create(['id'=>$user->id]); + } } } diff --git a/exampleCSV.csv b/exampleCSV.csv new file mode 100644 index 0000000000000000000000000000000000000000..acb8a640b877d949c8d87b3bbc4e80001a689d0e --- /dev/null +++ b/exampleCSV.csv @@ -0,0 +1,4 @@ +name;username;email;phone;password;role +Bianca Jodie;biancajod;wil@gmaillll.com;111111111111;123123;Mahasiswa +Marion;marion;wwwwil@gmail.com;111111111111;123123;Dosen +luna maya;mayaes;mayase@gmail.com;111111111111;123123;Manajer diff --git a/public/mix-manifest.json b/public/mix-manifest.json index e2b79fac9599b1e528cdc5ab76585029dcd4ff87..585e57f4862c59104ee7dc943aa40f83bdace6b8 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -1,3 +1,4 @@ { - "/js/app.js": "/js/app.js" + "/js/app.js": "/js/app.js", + "/css/app.css": "/css/app.css" } \ No newline at end of file diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php index bcc6f7ec4438e5ab13d62c96c3f86b5db5242288..297dd3573aaf315a7cf88d8ba3e07b045450c07c 100644 --- a/resources/views/auth/register.blade.php +++ b/resources/views/auth/register.blade.php @@ -4,8 +4,79 @@ <div class="container"> <div class="row justify-content-center"> <div class="col-md-8"> + + <div class="card"> + <div class="card-header">Mass Register</div> + + <div class="card-body"> + <form method="POST" enctype="multipart/form-data" action="{{ route('massRegisterPost') }}"> + @csrf + + <div class="form-group row"> + <label for="upload-file">Upload CSV file</label> + <input accept=".csv" type="file" class="form-control-file" id="upload-file" name="upload-file"> + </div> + <p> + <a class="btn btn-primary" data-toggle="collapse" href="#collapseExample" role="button" aria-expanded="false" aria-controls="collapseExample"> + Show csv template + </a> + </p> + <div class="collapse" id="collapseExample"> + <ul> + <li>Don't forget to include the header too</li> + <li>Field delimiter use semicolon(";")</li> + </ul> + <table class="table table-bordered table-dark" > + <thead> + <tr> + <th>name</th> + <th>username</th> + <th>email</th> + <th>phone</th> + <th>password</th> + <th>role</th> + </tr> + </thead> + <tbody> + <tr> + <td>Bianca Jodie</td> + <td>biancajod</td> + <td>wil@gmaillll.com</td> + <td>111111111111</td> + <td>123123</td> + <td>Mahasiswa</td> + </tr> + <tr> + <td>Marion</td> + <td>marion</td> + <td>wwwwil@gmail.com</td> + <td>111111111111</td> + <td>123123</td> + <td>Dosen</td> + </tr> + <tr> + <td>luna maya</td> + <td>mayaes</td> + <td>mayase@gmail.com</td> + <td>111111111111</td> + <td>123123</td> + <td>Manajer</td> + </tr> + </tbody> + </table> + </div> + <div class="form-group row mb-0"> + <div class="col-md-6 offset-md-4"> + <button type="submit" class="btn btn-primary"> + Mass Register + </button> + </div> + </div> + </form> + </div> + </div> <div class="card"> - <div class="card-header">Register</div> + <div class="card-header">Single Register</div> <div class="card-body"> <form method="POST" action="/register"> diff --git a/routes/web.php b/routes/web.php index 0c8ba7b91ca95216a58edac90647f55d96d75676..2420e0ffb2b6678de19044417668229e4a69cf90 100644 --- a/routes/web.php +++ b/routes/web.php @@ -36,6 +36,7 @@ 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/batch','Auth\RegisterController@massRegisterCSV')->name('massRegisterPost'); Route::get('/home', 'HomeController@index')->name('home'); Route::get('/generate/admin', 'Auth\RegisterController@generateAdmin');