Skip to content

izin membantu #4

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions app/Http/Controllers/DashboardController.php
Original file line number Diff line number Diff line change
@@ -4,6 +4,10 @@

use Illuminate\Http\Request;

use App\Models\Menu;

use Auth;

class DashboardController extends Controller
{
public function index()
173 changes: 172 additions & 1 deletion app/Http/Controllers/ProfileController.php
Original file line number Diff line number Diff line change
@@ -6,7 +6,178 @@
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;

use App\Models\education;
use App\Models\user_education;
use App\Models\user_achievements;
use App\Models\user_experience;

class ProfileController extends Controller
{

public function index(){
$data['user'] = Auth::user();
$data['profile'] = 1;
$data['education'] = education::all();
$data['user_education'] = education::join('user_educations', 'education_id', '=', 'educations.id')
->where('user_id', Auth::user()->id)
->orderBy('education_id', 'asc')
->get();
return view('system.users.profile', $data);
}

public function set_education(Request $request){
$request->validate([
'user_id' => 'required|exists:users,id',
'education_id' => 'required|exists:educations,id',
'institution' => 'required',
'from_year' => 'required',
'to_year' => 'required'
]);

$user_education = new user_education();
$user_education->user_id = $request->user_id;
$user_education->education_id = $request->education_id;
$user_education->institution = $request->institution;
$user_education->from_year = $request->from_year;
$user_education->to_year = $request->to_year;
$user_education->save();

return redirect(route('account.profile'))->with('message', [
'class' => 'success',
'text' => 'Berhasil menambah riwayat pendidikan'
]);
}

public function update_education(Request $request){
// dd($request->all());
$validatedInput = $request->validate([
'user_education_id' => 'required',
'education_id' => 'required',
'institution' => 'required',
'from_year' => 'required',
'to_year' => 'required'
]);

$education = user_education::find($request->user_education_id);

$education->education_id = $request->education_id;
$education->institution = $request->institution;
$education->from_year = $request->from_year;
$education->to_year = $request->to_year;
$education->update();

return redirect(route('account.profile'))->with('message', [
'class' => 'success',
'text' => 'Berhasil mengubah riwayat pendidikan'
]);
}

public function delete_education(Request $request){
// dd($request->all());
$validatedInput = $request->validate([
'user_id' => 'required',
'user_education_id' => 'required'
]);

user_education::where('id', $validatedInput['user_education_id'])->where('user_id', $validatedInput['user_id'])->delete();

return redirect(route('account.profile'))->with('message', [
'class' => 'warning',
'text' => 'Berhasil menghapus riwayat pendidikan'
]);
}

public function set_achievements(Request $request){
// dd($request->all());
$request->validate([
'user_id' => 'required|exists:users,id',
'deskripsi' => 'required'
]);

$pencapaian = new user_achievements();
$pencapaian->description = $request->deskripsi;
$pencapaian->user_id = $request->user_id;
$pencapaian->save();

return redirect(route('account.profile'))->with('message', [
'class' => 'success',
'text' => 'Berhasil menambahkan pencapaian'
]);
}

public function update_achievements(Request $request){
// dd($request->all());
$request->validate([
'user_id' => 'required|exists:users,id',
'id_achievements' => 'required:exists:achievements,id',
'deskripsi' => 'required'
]);

$pencapaian = user_achievements::find($request->id_achievements);
$pencapaian->description = $request->deskripsi;
$pencapaian->update();

return redirect(route('account.profile'))->with('message', [
'class' => 'success',
'text' => 'Berhasil mengubah pencapaian'
]);
}

public function delete_achievements(Request $request){
// dd($request->all());
$request->validate([
'user_id' => 'required|exists:users,id',
'id_achievements' => 'required:exists:achievements,id',
]);

user_achievements::where('id', $request->id_achievements)->where('user_id', $request->user_id)->delete();

return redirect(route('account.profile'))->with('message', [
'class' => 'warning',
'text' => 'Berhasil menghapus pencapaian'
]);
}

public function set_experience(Request $request){
// dd($request->all());
$request->validate([
'user_id' => 'required|exists:users,id',
'institution' => 'required',
'position' => 'required'
]);

$exp = new user_experience();
$exp->user_id = $request->user_id;
$exp->institution = $request->institution;
$exp->position = $request->position;
$exp->save();

return redirect(route('account.profile'))->with('message', [
'class' => 'success',
'text' => 'Berhasil menambahkan pengalaman'
]);
}

public function update_experience(Request $request){
// dd($request->all());
$request->validate([
'user_id' => 'required|exists:users,id',
'exp_id' => 'required|',
'institution' => 'required',
'position' => 'required'
]);

$exp = user_experience::find($request->exp_id);
$exp->institution = $request->institution;
$exp->position = $request->position;
$exp->update();

return redirect(route('account.profile'))->with('message', [
'class' => 'success',
'text' => 'Berhasil mengubah pengalaman'
]);
}

public function delete_experience(Request $request){

}
}
55 changes: 49 additions & 6 deletions app/Http/Controllers/UserController.php
Original file line number Diff line number Diff line change
@@ -7,6 +7,8 @@
use App\Models\UserRole;
use Illuminate\Http\Request;

use File;

class UserController extends Controller
{
/**
@@ -95,7 +97,7 @@ public function roleDestroy(Request $request)
*/
public function show(User $user)
{
//

}

/**
@@ -107,7 +109,8 @@ public function show(User $user)
public function edit(User $user)
{
$roles = Role::all();
return view('system.users.form', compact('user', 'roles'));
$profile = 0;
return view('system.users.form', compact('user', 'roles', 'profile'));
}

/**
@@ -119,10 +122,50 @@ public function edit(User $user)
*/
public function update(Request $request, User $user)
{
return redirect(route('system.users.edit', $user))->with('message', [
'class' => 'success',
'text' => 'Berhasil menyimpan perubahan'
]);
$ubah = User::find($request->user_id);
$ubah->is_male = ($request->isMale == 'on' ? 1 : 0);
$ubah->religion = $request->religion;
$ubah->birth_date = $request->birthDate;
$ubah->birth_city = $request->birthCity;
$ubah->hobby = $request->hobi;
$ubah->motto = $request->moto;
$ubah->bio = $request->bio;
$ubah->id_number = $request->id_number;
if ($request->foto) {
$foto = ['png', 'jpeg', 'jpg'];
if (in_array($request->file('foto')->extension(), $foto)) {
if (File::exists('assets/foto/'.$ubah->img_path)) {
File::delete('assets/foto/'.$ubah->img_path);
$name = time().'.'.$request->file('foto')->extension();
$request->file('foto')->move('assets/foto', $name);
$ubah->img_path = $name;
} else {
$name = time().'.'.$request->file('foto')->extension();
$request->file('foto')->move('assets/foto', $name);
$ubah->img_path = $name;
}
} else {
return redirect(route('account.profile', $user))->with('message', [
'class' => 'danger',
'text' => 'File hanya boleh ber-extensi : .png, .jpg, .jpeg'
]);
}
}
$ubah->update();

if ($request->profile == 0) {
return redirect(route('system.users.edit', $user))->with('message', [
'class' => 'success',
'text' => 'Berhasil menyimpan perubahan'
]);
} else {
return redirect(route('account.profile'))->with('message', [
'class' => 'success',
'text' => 'Berhasil menyimpan perubahan'
]);
}


}

/**
12 changes: 12 additions & 0 deletions app/Models/User.php
Original file line number Diff line number Diff line change
@@ -61,8 +61,20 @@ public function menus()
return $this->hasManyThrough(Menu::class, UserMenu::class, 'user_id', 'id', 'id', 'menu_id');
}

public function educations(){
return $this->hasManyThrough(education::class, user_education::class, 'user_id', 'id', 'id', 'education_id');
}

public function setPasswordAttribute($value)
{
$this->attributes['password'] = bcrypt($value);
}

public function achievements(){
return $this->hasMany(user_achievements::class);
}

public function experience(){
return $this->hasMany(user_experience::class);
}
}
13 changes: 13 additions & 0 deletions app/Models/education.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class education extends Model
{
use HasFactory;

protected $table = 'educations';
}
13 changes: 13 additions & 0 deletions app/Models/user_achievements.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class user_achievements extends Model
{
use HasFactory;
protected $table = 'achievements';
protected $fillable = ['user_id', 'description'];
}
19 changes: 19 additions & 0 deletions app/Models/user_education.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class user_education extends Model
{
use HasFactory;

protected $table = 'user_educations';

protected $fillable = ['id_user', 'education_id', 'from_year', 'to_year', 'institution'];

public function edu(){
return $this->belongsTo('education', 'id', 'education_id');
}
}
13 changes: 13 additions & 0 deletions app/Models/user_experience.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class user_experience extends Model
{
protected $table = 'experience';
protected $fillable = ['user_id', 'institution', 'position'];
use HasFactory;
}
32 changes: 32 additions & 0 deletions database/migrations/2022_10_23_132312_create_educations_table.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateEducationsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('educations', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->softDeletes();
});
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('educations');
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateUserEducationsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('user_educations', function (Blueprint $table) {
$table->id();

$table->foreignId('user_id')
->constrained('users')
->cascadeOnUpdate()
->restrictOnDelete();

$table->foreignId('education_id')
->constrained('educations')
->cascadeOnUpdate()
->restrictOnDelete();

$table->string('institution');
$table->integer('from_year');
$table->integer('to_year');
$table->timestamps();
});
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('user_educations');
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateAchievementsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('achievements', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')
->constrained('users')
->cascadeOnUpdate()
->restrictOnDelete();
$table->text('description');
$table->timestamps();
});
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('achievements');
}
}
37 changes: 37 additions & 0 deletions database/migrations/2022_10_29_090602_create_experience_table.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateExperienceTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('experience', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')
->constrained('users')
->cascadeOnUpdate()
->restrictOnDelete();
$table->string('institution');
$table->string('position');
$table->timestamps();
});
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('experience');
}
}
3 changes: 2 additions & 1 deletion database/seeders/DatabaseSeeder.php
Original file line number Diff line number Diff line change
@@ -16,7 +16,8 @@ public function run()
$this->call([
MenuSeeder::class,
RoleSeeder::class,
RoleMenuSeeder::class
RoleMenuSeeder::class,
EducationSeeder::class
]);
}
}
51 changes: 51 additions & 0 deletions database/seeders/EducationSeeder.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use DB;

class EducationSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('educations')->insert([
[
'id' => 1,
'name' => 'SD/MI'
], [
'id' => 2,
'name' => 'SMP/MTS'
],
[
'id' => 3,
'name' => 'SMK/SMA/MA'
],
[
'id' => 4,
'name' => 'D3'
],
[
'id' => 5,
'name' => 'D4'
],
[
'id' => 6,
'name' => 'S1'
],
[
'id' => 7,
'name' => 'S2'
],
[
'id' => 8,
'name' => 'S3'
]
]);
}
}
Binary file added public/assets/foto/1666494603.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/assets/foto/1666494653.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/assets/foto/1667014581.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/assets/foto/kosong.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
33 changes: 33 additions & 0 deletions resources/views/layouts/main.blade.php
Original file line number Diff line number Diff line change
@@ -19,6 +19,8 @@

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.9.1/font/bootstrap-icons.css">

<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />

<style>
.bd-placeholder-img {
font-size: 1.125rem;
@@ -285,6 +287,37 @@
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))
</script>

<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>

<script>
async function select2Init() {
const jsonURL =
"https://raw.githubusercontent.com/yusufsyaifudin/wilayah-indonesia/master/data/list_of_area/regencies.json";
const res = await fetch(jsonURL);
const cities = await res.json();
const select2Data = cities.map(city => {
return {
id: city.id,
text: city.name
}
})
$("#addressCity1").select2({
data: select2Data
});
$("#addressCity2").select2({
data: select2Data
});
}
select2Init();
</script>

<script src="https://cdn.ckeditor.com/ckeditor5/35.2.1/classic/ckeditor.js"></script>

@yield('scripts')
@stack('scripts')
</body>
62 changes: 28 additions & 34 deletions resources/views/system/users/_form.blade.php
Original file line number Diff line number Diff line change
@@ -9,13 +9,12 @@
rel="stylesheet" /> --}}
@endsection

{{ bcrypt('12345678') }}

<form action="{{ $user->exists ? route('system.users.update', $user) : route('system.users.store') }}"
enctype="multipart/form-data" method="POST">
@csrf
@method('PUT')

<input type="hidden" name="user_id" value="{{$user->id}}">
<input type="hidden" name="profile" value="{{$profile}}">
<div class="mb-3">
<label for="name" class="form-label">Nama*</label>
<input value="{{ $user->name }}" class="form-control" id="name" required>
@@ -29,20 +28,20 @@

<div class="mb-3">
<label for="name" class="form-label">Nomor Induk</label>
<input value="{{ $user->name }}" class="form-control" id="name">
<input value="{{ $user->id_number }}" class="form-control" id="name" name="id_number">
</div>

<div class="mb-3">
<div class="row">
<div class="col-md-6">

<label for="birthCity" class="form-label">Tempat Lahir</label>
<input value="{{ $user->birth_city }}" class="form-control" id="birthCity">
<input value="{{ $user->birth_city }}" class="form-control" id="birthCity" name="birthCity">
</div>

<div class="col-md-6">
<label for="birthDate" class="form-label">Tanggal Lahir</label>
<input value="{{ $user->birth_city }}" type="date" class="form-control" id="birthDate">
<input value="{{ $user->birth_date }}" type="date" class="form-control" id="birthDate" name="birthDate">
</div>
</div>
</div>
@@ -53,13 +52,13 @@
<label for="birthDate" class="form-label">Jenis Kelamin</label>

<div class="form-check">
<input class="form-check-input" type="radio" name="isMale" id="maleRadio">
<input class="form-check-input" type="radio" name="isMale" id="maleRadio" {{($user->is_male == 1 ? 'checked' : '')}}>
<label class="form-check-label" for="maleRadio">
Laki-laki
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="isMale" id="femaleRadio">
<input class="form-check-input" type="radio" name="isMale" id="femaleRadio" {{($user->is_male == 0 ? 'checked' : '')}}>
<label class="form-check-label" for="femaleRadio">
Perempuan
</label>
@@ -71,30 +70,36 @@

<select class="form-select" name="religion" id="religion">
<option selected value="" disabled></option>
<option>Islam</option>
<option>Katolik</option>
<option>Protestan</option>
<option>Hindu</option>
<option>Budha</option>
<option>Lainnya</option>
<option {{($user->religion == 'Islam' ? 'selected' : '')}}>Islam</option>
<option {{($user->religion == 'Katolik' ? 'selected' : '')}}>Katolik</option>
<option {{($user->religion == 'Protestan' ? 'selected' : '')}}>Protestan</option>
<option {{($user->religion == 'Hindu' ? 'selected' : '')}}>Hindu</option>
<option {{($user->religion == 'Budha' ? 'selected' : '')}}>Budha</option>
<option {{($user->religion == 'Lainnya' ? 'selected' : '')}}>Lainnya</option>
</select>
</div>
</div>
</div>

<div class="mb-3">
<label for="name" class="form-label">Hobi</label>
<textarea class="form-control"></textarea>
<textarea class="form-control" name="hobi" >{{($user->hobby)}}</textarea>
</div>

<div class="mb-3">
<label for="name" class="form-label">Moto Hidup</label>
<textarea class="form-control"></textarea>
<textarea class="form-control" name="moto" >{{($user->motto)}}</textarea>
</div>

<div class="mb-3">
<label for="name" class="form-label">Bio</label>
<textarea class="form-control"></textarea>
<textarea class="form-control" name="bio" >{{($user->bio)}}</textarea>
</div>

<div class="mb-3">
<p><label for="formFile" class="form-label form-foto">Foto</label></p>
<label class="text-center border border-1 rounded d-block mb-1" for="formFile"><img src="{{($user->img_path == null ? '/assets/foto/kosong.png' : '/assets/foto/'.$user->img_path)}}" height="250px"></label>
<input class="form-control" type="file" id="formFile" name="foto">
</div>

<h3>Alamat</h3>
@@ -108,14 +113,8 @@

<div class="col-md-5">
<label for="birthDate" class="form-label">Kota</label>
<select class="form-select" name="address_city" id="addressCity">
<option selected value="" disabled>Pilih Kota</option>
<option>Islam</option>
<option>Katolik</option>
<option>Protestan</option>
<option>Hindu</option>
<option>Budha</option>
<option>Lainnya</option>
<select class="form-control" name="address_city[]" id="addressCity1">
<option selected disabled>Pilih kota</option>
</select>
</div>
</div>
@@ -130,19 +129,14 @@

<div class="col-md-5">
<label for="birthDate" class="form-label">Kota</label>
<select class="form-select" name="address_city" id="addressCity">
<option selected value="" disabled>Pilih Kota</option>
<option>Islam</option>
<option>Katolik</option>
<option>Protestan</option>
<option>Hindu</option>
<option>Budha</option>
<option>Lainnya</option>
<select class="form-control" name="address_city[]" id="addressCity2">
<option selected disabled>Pilih kota</option>
</select>
</div>
</div>
</div>


<button type="submit" class="btn btn-success">{{ 'Tambah' }}</button>
<button type="submit" class="btn btn-success">{{ ($user->exists ? 'Ubah' : 'Tambah') }}</button>
</form>

2 changes: 1 addition & 1 deletion resources/views/system/users/form.blade.php
Original file line number Diff line number Diff line change
@@ -54,7 +54,7 @@
</form>

<h2 class="h3 mt-5">Biodata</h2>
@include('admin.user._form')
@include('system.users._form')


@endsection
357 changes: 357 additions & 0 deletions resources/views/system/users/profile.blade.php

Large diffs are not rendered by default.

13 changes: 13 additions & 0 deletions routes/web.php
Original file line number Diff line number Diff line change
@@ -9,6 +9,7 @@
use App\Http\Controllers\LogoutController;
use App\Http\Controllers\PresenceController;
use App\Http\Controllers\UserController;
use App\Http\Controllers\ProfileController;
use Illuminate\Support\Facades\Route;

/*
@@ -72,6 +73,16 @@
->group(function () {
Route::get('change-password', [ChangePasswordController::class, 'index'])->name('change-password');
Route::post('change-password', [ChangePasswordController::class, 'update']);
Route::get('profile', [ProfileController::class, 'index'])->name('profile');
Route::post('set-education', [ProfileController::class, 'set_education'])->name('set-education');
Route::post('delete-education', [ProfileController::class, 'delete_education'])->name('delete-education');
Route::post('update-education', [ProfileController::class, 'update_education'])->name('update-education');
Route::post('set-achievements', [ProfileController::class, 'set_achievements'])->name('set-achievements');
Route::post('delete-achievements', [ProfileController::class, 'delete_achievements'])->name('delete-achievements');
Route::post('update-achievements', [ProfileController::class, 'update_achievements'])->name('update-achievements');
Route::post('set-experience', [ProfileController::class, 'set_experience'])->name('set-experience');
Route::post('delete-experience', [ProfileController::class, 'delete_experience'])->name('delete-experience');
Route::post('update-experience', [ProfileController::class, 'update_experience'])->name('update-experience');
});


@@ -94,7 +105,9 @@
->name('system.')
->group(function () {
Route::resource('users', UserController::class);

Route::post('users/roles/store', [UserController::class, 'roleStore'])->name('users.roleStore');
Route::post('users/roles', [UserController::class, 'roleDestroy'])->name('users.roleDestroy');
});
});