This commit is contained in:
2026-07-23 10:01:02 +07:00
commit 79f9e1d324
105 changed files with 5813 additions and 0 deletions
+120
View File
@@ -0,0 +1,120 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="Responsive Admin &amp; Dashboard Template based on Bootstrap 5">
<meta name="author" content="AdminKit">
<meta name="keywords" content="adminkit, bootstrap, bootstrap 5, admin, dashboard, template, responsive, css, sass, html, theme, front-end, ui kit, web">
<link rel="preconnect" href="https://fonts.gstatic.com">
<link rel="shortcut icon" href="img/icons/icon-48x48.png" />
<link rel="canonical" href="https://demo-basic.adminkit.io/pages-sign-in.html" />
<title>Sign In | AdminKit Demo</title>
<link href="{{ asset('layouts/admin/css/app.css') }}" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600&display=swap" rel="stylesheet">
</head>
<body>
<main class="d-flex w-100">
<div class="container d-flex flex-column">
<div class="row vh-100">
<div class="col-sm-10 col-md-8 col-lg-6 col-xl-5 mx-auto d-table h-100">
<div class="d-table-cell align-middle">
<div class="text-center mt-4">
<h1 class="h2">Sign in</h1>
</div>
<div class="card">
<div class="card-body">
@if ($errors->any())
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close">
</button>
</div>
@endif
<div class="m-sm-3">
<form id="login" action="{{ route('admin.auth.authenticate') }}" method="POST" novalidate>
@csrf
<div class="mb-3 form-group">
<label class="form-label">Username</label>
<input class="form-control form-control-lg" type="text" name="username" />
</div>
<div class="mb-3 form-group">
<label class="form-label">Password</label>
<input class="form-control form-control-lg" type="password" name="password" />
</div>
<div>
<div class="form-check align-items-center">
<input id="customControlInline" type="checkbox" class="form-check-input" value="remember" name="remember" checked>
<label class="form-check-label text-small" for="customControlInline">Remember me</label>
</div>
</div>
<div class="d-grid gap-2 mt-3">
<button type="submit" class="btn btn-lg btn-primary">Sign in</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</main>
<script src="{{ asset('layouts/admin/js/app.js') }}"></script>
<script src="https://code.jquery.com/jquery-3.7.1.min.js"
integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo="
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.22.1/jquery.validate.min.js"
integrity="sha512-aK+gwLBXdXY6QDrdpK6jYtTlIfzChVNqAh3V6D5c8nV8U9O5NvC/EJ44aAKj9moRsx7bAibHZbX0wvblVp8wSA=="
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
$(function () {
$('#login').validate({
rules: {
username: {
required: true,
},
password: {
required: true,
}
},
messages: {
username: {
required: "Username harus diisi.",
},
password: {
required: "Password harus diisi.",
}
},
errorElement: 'div',
errorPlacement: function (error, element) {
error.addClass('invalid-feedback');
element.closest('.form-group').append(error);
},
highlight: function (element, errorClass, validClass) {
$(element).addClass('is-invalid');
},
unhighlight: function (element, errorClass, validClass) {
$(element).removeClass('is-invalid');
}
});
});
</script>
</body>
</html>
@@ -0,0 +1,259 @@
@extends('layouts.admin.main')
@section('content')
<div class="mb-3">
<h1 class="h3 d-inline align-middle">Profil</h1>
</div>
@if (session('success'))
<div class="alert alert-success alert-dismissible fade show" role="alert">
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
<strong>{{ session('success') }}</strong>
</div>
@endif
<div class="row">
<div class="col-md-4 col-xl-3">
<div class="card mb-3">
<div class="card-header">
<h5 class="card-title mb-0">Profil</h5>
</div>
<div class="card-body text-center">
<h5 class="card-title mb-0">{{ $user->name }}</h5>
<div class="text-muted mb-0">Username: {{ $user->username }}</div>
<div class="text-muted mb-2">Role: Administrator</div>
<div>
<button id="edit-profile" class="btn btn-primary btn-sm" type="button"
data-bs-toggle="modal" data-bs-target="#edit-profile-modal">
<span data-feather="user"></span> Update</button>
<button id="change-password" class="btn btn-primary btn-sm" type="button"
data-bs-toggle="modal" data-bs-target="#change-password-modal">
<span data-feather="lock"></span> Password</button>
</div>
</div>
</div>
</div>
<div class="col-md-8 col-xl-9">
<div class="card">
<div class="card-header">
<h5 class="card-title mb-0">Aktivitas</h5>
</div>
<div class="card-body h-100">
<div class="d-flex align-items-start">
<img src="img/avatars/avatar-5.jpg" width="36" height="36" class="rounded-circle me-2" alt="Vanessa Tucker">
<div class="flex-grow-1">
<small class="float-end text-navy">5m ago</small>
<strong>Vanessa Tucker</strong> started following <strong>Christina Mason</strong><br />
<small class="text-muted">Today 7:51 pm</small><br />
</div>
</div>
<hr />
<div class="d-flex align-items-start">
<img src="img/avatars/avatar.jpg" width="36" height="36" class="rounded-circle me-2" alt="Charles Hall">
<div class="flex-grow-1">
<small class="float-end text-navy">30m ago</small>
<strong>Charles Hall</strong> posted something on <strong>Christina Mason</strong>'s timeline<br />
<small class="text-muted">Today 7:21 pm</small>
<div class="border text-sm text-muted p-2 mt-1">
Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus
pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante.
</div>
<a href="#" class="btn btn-sm btn-danger mt-1"><i class="feather-sm" data-feather="heart"></i> Like</a>
</div>
</div>
<hr />
<div class="d-flex align-items-start">
<img src="img/avatars/avatar-4.jpg" width="36" height="36" class="rounded-circle me-2" alt="Christina Mason">
<div class="flex-grow-1">
<small class="float-end text-navy">1h ago</small>
<strong>Christina Mason</strong> posted a new blog<br />
<small class="text-muted">Today 6:35 pm</small>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal" tabindex="-1" role="dialog" id="edit-profile-modal">
<div class="modal-dialog" role="document">
<div class="modal-content">
<form id="form-edit-profile" action="{{ route('admin.auth.profile.update') }}" method="POST">
@csrf
@method('PUT')
<div class="modal-header">
<h1 class="modal-title fs-5" id="exampleModalLabel">Update Profil</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="mb-3 form-group">
<label class="form-label">Nama</label>
<input class="form-control @error('name') is-invalid @enderror" type="text" name="name" />
@error('name')
<div class="error invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3 form-group">
<label class="form-label">Username</label>
<input class="form-control @error('username') is-invalid @enderror" type="text" name="username" />
@error('username')
<div class="error invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal"><span data-feather="x"></span> Batal</button>
<button type="submit" class="btn btn-sm btn-success"><span data-feather="save"></span> Simpan Perubahan</button>
</div>
</form>
</div>
</div>
</div>
<div class="modal" tabindex="-1" role="dialog" id="change-password-modal">
<div class="modal-dialog" role="document">
<div class="modal-content">
<form id="form-change-password" action="{{ route('admin.auth.profile.password') }}" method="POST">
@csrf
@method('PUT')
<div class="modal-header">
<h1 class="modal-title fs-5" id="exampleModalLabel">Update Profil</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="mb-3 form-group">
<label class="form-label">Password Lama</label>
<input id="current_password" class="form-control @error('current_password') is-invalid @enderror" type="password" name="current_password" />
@error('current_password')
<div class="error invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3 form-group">
<label class="form-label">Password</label>
<input id="password" class="form-control @error('password') is-invalid @enderror" type="password" name="password" />
@error('password')
<div class="error invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3 form-group">
<label class="form-label">Konfirmasi Password</label>
<input id="password_confirmation" class="form-control @error('password_confirmation') is-invalid @enderror" type="password" name="password_confirmation" />
@error('password_confirmation')
<div class="error invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal"><span data-feather="x"></span> Batal</button>
<button type="submit" class="btn btn-sm btn-success"><span data-feather="save"></span> Simpan Perubahan</button>
</div>
</form>
</div>
</div>
</div>
@endsection
@push('scripts')
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.22.1/jquery.validate.min.js"
integrity="sha512-aK+gwLBXdXY6QDrdpK6jYtTlIfzChVNqAh3V6D5c8nV8U9O5NvC/EJ44aAKj9moRsx7bAibHZbX0wvblVp8wSA=="
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
$(function () {
@if($errors->has('name') || $errors->has('username'))
let profileModal = new bootstrap.Modal($('#edit-profile-modal'));
profileModal.show();
@endif
@if(
$errors->has('current_password') ||
$errors->has('password') ||
$errors->has('password_confirmation')
)
let passwordModal = new bootstrap.Modal($('#change-password-modal'));
passwordModal.show();
@endif
$('#form-edit-profile').validate({
rules: {
username: {
required: true,
},
name: {
required: true,
}
},
messages: {
username: {
required: "Username harus diisi.",
},
name: {
required: "Nama harus diisi.",
}
},
errorElement: 'div',
errorPlacement: function (error, element) {
error.addClass('invalid-feedback');
element.closest('.form-group').append(error);
},
highlight: function (element, errorClass, validClass) {
$(element).addClass('is-invalid');
},
unhighlight: function (element, errorClass, validClass) {
$(element).removeClass('is-invalid');
}
});
$('#form-change-password').validate({
rules: {
old_password: {
required: true,
},
password: {
required: true,
minlength: 8
},
password_confirmation: {
required: true,
equalTo: "#password"
}
},
messages: {
old_password: {
required: "Password lama harus diisi.",
},
password: {
required: "Password baru harus diisi.",
minlength: "Password minimal 8 karakter."
},
password_confirmation: {
required: "Konfirmasi password harus diisi.",
equalTo: "Konfirmasi password tidak cocok."
}
},
errorElement: 'div',
errorPlacement: function (error, element) {
error.addClass('invalid-feedback');
element.closest('.form-group').append(error);
},
highlight: function (element, errorClass, validClass) {
$(element).addClass('is-invalid');
},
unhighlight: function (element, errorClass, validClass) {
$(element).removeClass('is-invalid');
}
});
});
</script>
@endpush
@@ -0,0 +1,189 @@
@extends('layouts.admin.main')
@push('styles')
<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0/dist/css/select2.min.css" rel="stylesheet"/>
@endpush
@section('content')
<div class="mb-3">
<h1 class="h3 d-inline align-middle">Konten</h1>
</div>
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header pb-0">
<div class="card-actions float-end">
<a href="{{ route('admin.contents.contents.index', ['type' => $type->value()]) }}" class="btn btn-secondary"><i class="align-middle me-2" data-feather="table"></i>Daftar Konten</a>
</div>
<h4 class="card-title mb-0">Tambah Konten {{ $type->label() }} Baru</h4>
</div>
<div class="card-body">
<form id="form-create-content" action="{{ route('admin.contents.contents.store', ['type' => $type->value()]) }}" method="POST" class="needs-validation" novalidate>
@csrf
<div class="row g-3">
<div class="col-md-8 col-12">
<h5 class="mb-3">Informasi Konten</h5>
<div class="row mb-3">
<div class="col-12 form-group">
<label for="title" class="form-label">Judul</label>
<input type="text" id="title" name="title" class="form-control @error('title') is-invalid @enderror" value="{{ old('title') }}">
@error('title')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<div class="row mb-3">
<div class="col-4 form-group">
<label for="category" class="form-label">
Kategori
</label>
<select id="category" name="category"
class="form-select @error('category') is-invalid @enderror">
@foreach ($taxonomies->where('type', \App\Enums\TaxonomyType::CATEGORY) as $category)
<option value="{{ $category->id }}" {{ old('category') == $category->id ? 'selected' : '' }}>{{ $category->name }}</option>
@endforeach
</select>
@error('category')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
<div class="col-8 form-group">
<label for="tag" class="form-label">
Tag
</label>
<select id="tag" name="tag[]" multiple
class="form-select @error('tag[]') is-invalid @enderror">
@foreach ($taxonomies->where('type', \App\Enums\TaxonomyType::TAG) as $tag)
<option value="{{ $tag->id }}" {{ collect(old('tag', []))->contains($tag->id) ? 'selected' : '' }}>{{ $tag->name }}</option>
@endforeach
</select>
@error('tag')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<div class="row mb-3">
<div class="col-12 form-group">
<label for="excerpt" class="form-label">Ringkasan</label>
<textarea id="excerpt" name="excerpt" class="form-control @error('excerpt') is-invalid @enderror" rows="3">{{ old('excerpt') }}</textarea>
@error('excerpt')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<div class="row mb-3">
<div class="col-12 form-group">
<label for="content" class="form-label">Konten</label>
<textarea id="content" name="content" class="form-control @error('content') is-invalid @enderror" rows="8">{{ old('content') }}</textarea>
@error('content')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<div class="row mb-3">
<div class="col-md-6 col-12 form-group">
<label for="featured_image_id" class="form-label">Featured Image</label>
<select id="featured_image_id" name="featured_image_id" class="form-select @error('featured_image_id') is-invalid @enderror">
<option value="">Pilih gambar</option>
</select>
@error('featured_image_id')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
</div>
<div class="col-md-4 col-12">
<div class="row mb-3">
<h5 class="mb-3">Meta Informasi</h5>
<div class="col-md-6 col-12 form-group">
<label for="meta_title" class="form-label">Meta Title</label>
<input type="text" id="meta_title" name="meta_title" class="form-control @error('meta_title') is-invalid @enderror" value="{{ old('meta_title') }}">
@error('meta_title')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<div class="row mb-3">
<div class="col-12 form-group">
<label for="meta_description" class="form-label">Meta Description</label>
<textarea id="meta_description" name="meta_description" class="form-control @error('meta_description') is-invalid @enderror" rows="3">{{ old('meta_description') }}</textarea>
@error('meta_description')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<div class="row mb-3">
<div class="col-12 form-group">
<label for="meta_keywords" class="form-label">Meta Keywords</label>
<select type="text" id="meta_keywords" name="meta_keywords[]" multiple
class="form-control @error('meta_keywords') is-invalid @enderror" value="{{ old('meta_keywords[]') }}">
</select>
@error('meta_keywords')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<div class="row mb-3">
<hr/>
<h5 class="mb-3">Status Publikasi</h5>
<div class="col-md-6 col-12 form-group">
<label for="published_at" class="form-label">Tanggal Publikasi</label>
<input type="datetime-local" id="published_at" name="published_at" class="form-control @error('published_at') is-invalid @enderror" value="{{ old('published_at') }}">
@error('published_at')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
<div class="col-12 col-md-6 form-group">
<label for="status" class="form-label">Status</label>
<select id="status" name="status" class="form-select @error('status') is-invalid @enderror">
@foreach (\App\Enums\ContentStatus::cases() as $status)
<option value="{{ $status->value() }}" {{ old('status') ?? \App\Enums\ContentStatus::DRAFT == $status->value() ? 'selected' : '' }}>{{ $status->label() }}</option>
@endforeach
</select>
@error('status')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
</div>
</div>
<button type="reset" class="btn btn-secondary mt-3"><i class="align-middle me-2" data-feather="refresh-ccw"></i>Reset</button>
<button type="submit" class="btn btn-success mt-3"><i class="align-middle me-2" data-feather="save"></i>Simpan</button>
</form>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script src="https://cdn.ckeditor.com/ckeditor5/36.0.1/classic/ckeditor.js"></script>
<script src="https://cdn.ckeditor.com/ckeditor5/36.0.1/classic/translations/id.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.22.1/jquery.validate.min.js" integrity="sha512-aK+gwLBXdXY6QDrdpK6jYtTlIfzChVNqAh3V6D5c8nV8U9O5NvC/EJ44aAKj9moRsx7bAibHZbX0wvblVp8wSA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.22.1/additional-methods.min.js" integrity="sha512-prU59crmDRtArYh698UgT9nZVsFz3aIU7hIwvWT6iUKM5CvlWzZU6ATd/yO9lbrV7ie5WoGGJrifw6vWqppmJQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0/dist/js/select2.min.js"></script>
<script>
ClassicEditor
.create($('#content')[0])
.catch(error => {
console.error( error );
});
ClassicEditor
.create($('#excerpt')[0])
.catch(error => {
console.error( error );
});
@foreach(\App\Enums\TaxonomyType::cases() as $taxonomyType)
$('#{{ $taxonomyType->value() }}').select2();
@endforeach
$('#status').select2();
$('#meta_keywords').select2({
tags: true,
tokenSeparators: [',', ' '],
placeholder: 'Masukkan keyword',
});
$("#form-create-content").validate({
rules: {
title: { required: true, maxlength: 255 },
},
messages: {
title: { required: 'Judul harus diisi.', maxlength: 'Judul maksimal 255 karakter.' },
},
errorElement: 'div',
errorPlacement: function (error, element) {
error.addClass('invalid-feedback');
element.closest('.form-group').append(error);
},
highlight: function (element) {
$(element).addClass('is-invalid');
},
unhighlight: function (element) {
$(element).removeClass('is-invalid');
}
});
</script>
@endpush
@@ -0,0 +1,199 @@
@extends('layouts.admin.main')
@push('styles')
<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0/dist/css/select2.min.css" rel="stylesheet"/>
@endpush
@section('content')
<div class="mb-3">
<h1 class="h3 d-inline align-middle">Konten</h1>
</div>
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header pb-0">
<div class="card-actions float-end">
<a href="{{ route('admin.contents.contents.index', ['type' => $type->value()]) }}" class="btn btn-secondary"><i class="align-middle me-2" data-feather="table"></i>Daftar Konten</a>
</div>
<h4 class="card-title mb-0">Edit Konten {{ $type->label() }}: {{ $content->title }}</h4>
</div>
<div class="card-body">
<form id="form-create-content" action="{{ route('admin.contents.contents.update', ['content' => $content->id, 'type' => $type->value()]) }}" method="POST" class="needs-validation" novalidate>
@csrf
@method('PUT')
<div class="row g-3">
<div class="col-md-8 col-12">
<h5 class="mb-3">Informasi Konten</h5>
<div class="row mb-3">
<div class="col-12 form-group">
<label for="title" class="form-label">Judul</label>
<input type="text" id="title" name="title" class="form-control @error('title') is-invalid @enderror" value="{{ old('title', $content->title) }}">
@error('title')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<div class="row mb-3">
<div class="col-4 form-group">
<label for="category" class="form-label">
Kategori
</label>
<select id="category" name="category"
class="form-select @error('category') is-invalid @enderror">
@php
$selectedCategory = old('category', data_get($content->taxonomies, 'category'));
@endphp
@foreach ($taxonomies->where('type', \App\Enums\TaxonomyType::CATEGORY) as $category)
<option value="{{ $category->id }}" {{ $selectedCategory == $category->id ? 'selected' : '' }}>{{ $category->name }}</option>
@endforeach
</select>
@error('category')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
<div class="col-8 form-group">
<label for="tag" class="form-label">
Tag
</label>
<select id="tag" name="tag[]" multiple
class="form-select @error('tag[]') is-invalid @enderror">
@php
$selectedTags = collect(old('tag', data_get($content->taxonomies, 'tag', [])));
@endphp
@foreach ($taxonomies->where('type', \App\Enums\TaxonomyType::TAG) as $tag)
<option value="{{ $tag->id }}" {{ $selectedTags->contains((string) $tag->id) ? 'selected' : '' }}>{{ $tag->name }}</option>
@endforeach
</select>
@error('tag')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<div class="row mb-3">
<div class="col-12 form-group">
<label for="excerpt" class="form-label">Ringkasan</label>
<textarea id="excerpt" name="excerpt" class="form-control @error('excerpt') is-invalid @enderror" rows="3">{{ old('excerpt', $content->excerpt) }}</textarea>
@error('excerpt')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<div class="row mb-3">
<div class="col-12 form-group">
<label for="content" class="form-label">Konten</label>
<textarea id="content" name="content" class="form-control @error('content') is-invalid @enderror" rows="8">{{ old('content', $content->content) }}</textarea>
@error('content')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<div class="row mb-3">
<div class="col-md-6 col-12 form-group">
<label for="featured_image_id" class="form-label">Featured Image</label>
<select id="featured_image_id" name="featured_image_id" class="form-select @error('featured_image_id') is-invalid @enderror">
<option value="">Pilih gambar</option>
</select>
@error('featured_image_id')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
</div>
<div class="col-md-4 col-12">
<div class="row mb-3">
<h5 class="mb-3">Meta Informasi</h5>
<div class="col-md-6 col-12 form-group">
<label for="meta_title" class="form-label">Meta Title</label>
<input type="text" id="meta_title" name="meta_title" class="form-control @error('meta_title') is-invalid @enderror" value="{{ old('meta_title', $content->meta_title) }}">
@error('meta_title')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<div class="row mb-3">
<div class="col-12 form-group">
<label for="meta_description" class="form-label">Meta Description</label>
<textarea id="meta_description" name="meta_description" class="form-control @error('meta_description') is-invalid @enderror" rows="3">{{ old('meta_description', $content->meta_description) }}</textarea>
@error('meta_description')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<div class="row mb-3">
<div class="col-12 form-group">
<label for="meta_keywords" class="form-label">Meta Keywords</label>
<select type="text" id="meta_keywords" name="meta_keywords[]" multiple
class="form-control @error('meta_keywords') is-invalid @enderror" value="{{ old('meta_keywords[]') }}">
@foreach (old('meta_keywords', $content->meta_keywords ?? []) as $keyword)
<option value="{{ $keyword }}" selected>{{ $keyword }}</option>
@endforeach
</select>
@error('meta_keywords')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<div class="row mb-3">
<hr/>
<h5 class="mb-3">Status Publikasi</h5>
<div class="col-md-6 col-12 form-group">
<label for="published_at" class="form-label">Tanggal Publikasi</label>
<input type="datetime-local" id="published_at" name="published_at" class="form-control @error('published_at') is-invalid @enderror" value="{{ old('published_at', $content->published_at) }}">
@error('published_at')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
<div class="col-12 col-md-6 form-group">
<label for="status" class="form-label">Status</label>
<select id="status" name="status" class="form-select @error('status') is-invalid @enderror">
@foreach (\App\Enums\ContentStatus::cases() as $status)
<option value="{{ $status->value() }}" {{ old('status', $content->status?->value() ?? \App\Enums\ContentStatus::DRAFT->value()) == $status->value() ? 'selected' : '' }}>{{ $status->label() }}</option>
@endforeach
</select>
@error('status')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
</div>
</div>
<button type="reset" class="btn btn-secondary mt-3"><i class="align-middle me-2" data-feather="refresh-ccw"></i>Reset</button>
<button type="submit" class="btn btn-success mt-3"><i class="align-middle me-2" data-feather="save"></i>Simpan</button>
</form>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script src="https://cdn.ckeditor.com/ckeditor5/36.0.1/classic/ckeditor.js"></script>
<script src="https://cdn.ckeditor.com/ckeditor5/36.0.1/classic/translations/id.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.22.1/jquery.validate.min.js" integrity="sha512-aK+gwLBXdXY6QDrdpK6jYtTlIfzChVNqAh3V6D5c8nV8U9O5NvC/EJ44aAKj9moRsx7bAibHZbX0wvblVp8wSA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.22.1/additional-methods.min.js" integrity="sha512-prU59crmDRtArYh698UgT9nZVsFz3aIU7hIwvWT6iUKM5CvlWzZU6ATd/yO9lbrV7ie5WoGGJrifw6vWqppmJQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0/dist/js/select2.min.js"></script>
<script>
ClassicEditor
.create($('#content')[0])
.catch(error => {
console.error( error );
});
ClassicEditor
.create($('#excerpt')[0])
.catch(error => {
console.error( error );
});
@foreach(\App\Enums\TaxonomyType::cases() as $taxonomyType)
$('#{{ $taxonomyType->value() }}').select2();
@endforeach
$('#status').select2();
$('#meta_keywords').select2({
tags: true,
tokenSeparators: [',', ' '],
placeholder: 'Masukkan keyword',
});
$("#form-create-content").validate({
rules: {
title: { required: true, maxlength: 255 },
},
messages: {
title: { required: 'Judul harus diisi.', maxlength: 'Judul maksimal 255 karakter.' },
},
errorElement: 'div',
errorPlacement: function (error, element) {
error.addClass('invalid-feedback');
element.closest('.form-group').append(error);
},
highlight: function (element) {
$(element).addClass('is-invalid');
},
unhighlight: function (element) {
$(element).removeClass('is-invalid');
}
});
</script>
@endpush
@@ -0,0 +1,123 @@
@extends('layouts.admin.main')
@push('styles')
<link rel="stylesheet" href="https://cdn.datatables.net/2.3.8/css/dataTables.bootstrap5.min.css" />
@endpush
@section('content')
<div class="mb-3">
<h1 class="h3 d-inline align-middle">Konten</h1>
</div>
@if (session('success'))
<div class="alert alert-success alert-dismissible fade show" role="alert">
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
<strong>{{ session('success') }}</strong>
</div>
@endif
<div class="row">
<div class="col-xl-2 col-12">
<div class="card">
<ul class="nav nav-pills flex-column">
@foreach(\App\Enums\ContentType::cases() as $t)
<li class="nav-item">
<a class="nav-link {{ $type->value() == $t->value() ? 'active' : '' }}"
href="{{ route('admin.contents.contents.index', ['type' => $t->value()]) }}">
{{ $t->label() }}
</a>
</li>
@endforeach
</ul>
</div>
</div>
<div class="col-xl-10 col-12">
<div class="card">
<div class="card-header pb-0">
<div class="card-actions float-end">
<a href="{{ route('admin.contents.contents.create', ['type' => $type->value()]) }}" class="btn btn-sm btn-secondary"><i class="align-middle me-2" data-feather="plus"></i>Tambah</a>
</div>
<h4 class="card-title mb-0">Daftar Konten {{ $type->label() }}</h4>
</div>
<div class="card-body">
<div class="table-responsive">
<table id="table-content" class="table table-hover">
<thead>
<tr>
<th>No</th>
<th>Judul</th>
<th>Status</th>
<th>Publikasi</th>
<th class="text-end">Aksi</th>
</tr>
</thead>
<tbody>
@foreach ($contents as $item)
<tr>
<td>{{ $loop->iteration }}</td>
<td>{{ $item->title }}</td>
<td>{{ $item->status->label() }}</td>
<td>{{ $item->published_at?->format('d-m-Y H:i') ?? '-' }}</td>
<td class="text-end">
<a href="{{ route('admin.contents.contents.show', $item->id) }}" class="btn btn-sm btn-info"><i class="align-middle me-2" data-feather="eye"></i>Detail</a>
<a href="{{ route('admin.contents.contents.edit', $item->id) }}" class="btn btn-sm btn-primary"><i class="align-middle me-2" data-feather="edit"></i>Edit</a>
<button type="button" class="btn btn-sm btn-danger delete" data-id="{{ $item->id }}" data-title="{{ $item->title }}"><i class="align-middle me-2" data-feather="trash"></i>Hapus</button>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="delete-modal" tabindex="-1" aria-labelledby="delete-modal-label" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="delete-modal-label">Hapus Konten</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
Apakah anda yakin ingin menghapus konten: <b><span id="content-title"></span></b>?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal"><i class="align-middle me-2" data-feather="x"></i>Batal</button>
<form id="form-delete" action="" method="POST">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-sm btn-danger"><i class="align-middle me-2" data-feather="trash"></i>Hapus</button>
</form>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script src="https://cdn.datatables.net/2.3.8/js/dataTables.js"></script>
<script src="https://cdn.datatables.net/2.3.8/js/dataTables.bootstrap5.min.js"></script>
<script>
$(function() {
$('#table-content').DataTable({
paging: true,
ordering: true,
info: true,
searching: true,
lengthMenu: [[10, 25, 50, 100, -1], [10, 25, 50, 100, "Semua"]],
});
$('.delete').click(function() {
let id = $(this).data('id');
let title = $(this).data('title');
$('#content-title').text(title);
let url = "{{ route('admin.contents.contents.destroy', ':id') }}";
url = url.replace(':id', id);
$('#form-delete').attr('action', url);
$('#delete-modal').modal('show');
});
});
</script>
@endpush
@@ -0,0 +1,70 @@
@extends('layouts.admin.main')
@section('content')
<div class="mb-3">
<h1 class="h3 d-inline align-middle">Konten</h1>
</div>
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header pb-0">
<div class="card-actions float-end">
<a href="{{ route('admin.contents.index') }}" class="btn btn-secondary"><i class="align-middle me-2" data-feather="table"></i>Daftar Konten</a>
<a href="{{ route('admin.contents.edit', $content->id) }}" class="btn btn-primary"><i class="align-middle me-2" data-feather="edit"></i>Edit</a>
</div>
<h4 class="card-title mb-0">Detail Konten: {{ $content->title }}</h4>
</div>
<div class="card-body">
<div class="row">
<div class="col-lg-8 col-12">
<div class="card mb-3">
<div class="card-body">
<h3>{{ $content->title }}</h3>
<p><strong>Tipe:</strong> {{ $content->type->label() }}</p>
<p><strong>Status:</strong> {{ $content->status->label() }}</p>
<p><strong>Published:</strong> {{ $content->published_at?->format('d-m-Y H:i') ?? '-' }}</p>
<p><strong>Excerpt:</strong><br>{{ $content->excerpt ?? '-' }}</p>
<hr />
<div>{!! nl2br(e($content->content)) !!}</div>
</div>
</div>
</div>
<div class="col-lg-4 col-12">
<div class="card mb-3">
<div class="card-body">
<table class="table table-borderless">
<tr>
<th>Slug</th>
<td>{{ $content->slug }}</td>
</tr>
<tr>
<th>Featured Image</th>
<td>{{ $content->featuredImage?->filename ?? '-' }}</td>
</tr>
<tr>
<th>Meta Title</th>
<td>{{ $content->meta_title ?? '-' }}</td>
</tr>
<tr>
<th>Meta Description</th>
<td>{{ $content->meta_description ?? '-' }}</td>
</tr>
<tr>
<th>Meta Keywords</th>
<td>{{ is_array($content->meta_keywords) ? implode(', ', $content->meta_keywords) : ($content->meta_keywords ?? '-') }}</td>
</tr>
<tr>
<th>Dibuat</th>
<td>{{ $content->created_at?->format('d-m-Y H:i') }}</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@@ -0,0 +1,85 @@
@extends('layouts.admin.main')
@section('content')
<div class="mb-3">
<h1 class="h3 d-inline align-middle">Media</h1>
</div>
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header pb-0">
<div class="card-actions float-end">
<a href="{{ route('admin.contents.media.index') }}" class="btn btn-secondary"><i class="align-middle me-2" data-feather="table"></i>Daftar Media</a>
</div>
<h4 class="card-title mb-0">Tambah Media Baru</h4>
</div>
<div class="card-body">
<form id="form-create-media" action="{{ route('admin.contents.media.store') }}" method="POST" enctype="multipart/form-data" class="needs-validation" novalidate>
@csrf
<div class="row mb-3">
<div class="col-md-4 col-12 form-group">
<label for="file" class="form-label">File</label>
<input type="file" class="form-control @error('file') is-invalid @enderror" id="file" name="file"
accept="image/*, video/*, audio/*">
@error('file')
<div class="error invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-4 col-12 form-group">
<label for="alt" class="form-label">Alt</label>
<input type="text" class="form-control @error('alt') is-invalid @enderror" id="alt" name="alt" value="{{ old('alt') }}">
@error('alt')
<div class="error invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-4 col-12 form-group">
<label for="caption" class="form-label">Caption</label>
<input type="text" class="form-control @error('caption') is-invalid @enderror" id="caption" name="caption" value="{{ old('caption') }}">
@error('caption')
<div class="error invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
<button type="reset" class="btn btn-secondary mt-3"><i class="align-middle me-2" data-feather="refresh-ccw"></i>Reset</button>
<button type="submit" class="btn btn-success mt-3"><i class="align-middle me-2" data-feather="save"></i>Simpan</button>
</form>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.22.1/jquery.validate.min.js" integrity="sha512-aK+gwLBXdXY6QDrdpK6jYtTlIfzChVNqAh3V6D5c8nV8U9O5NvC/EJ44aAKj9moRsx7bAibHZbX0wvblVp8wSA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.22.1/additional-methods.min.js" integrity="sha512-prU59crmDRtArYh698UgT9nZVsFz3aIU7hIwvWT6iUKM5CvlWzZU6ATd/yO9lbrV7ie5WoGGJrifw6vWqppmJQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
$(function() {
$("#form-create-media").validate({
rules: {
file: { required: true, accept: "image/*, video/*, audio/*" },
alt: { maxlength: 255 },
caption: { maxlength: 255 },
},
messages: {
file: { required: "File harus diunggah.", accept: "File harus berupa gambar, video, atau audio." },
alt: { maxlength: "Alt maksimal 255 karakter." },
caption: { maxlength: "Caption maksimal 255 karakter." },
},
errorElement: 'div',
errorPlacement: function (error, element) {
error.addClass('invalid-feedback');
element.closest('.form-group').append(error);
},
highlight: function (element) {
$(element).addClass('is-invalid');
},
unhighlight: function (element) {
$(element).removeClass('is-invalid');
}
});
});
</script>
@endpush
@@ -0,0 +1,87 @@
@extends('layouts.admin.main')
@section('content')
<div class="mb-3">
<h1 class="h3 d-inline align-middle">Media</h1>
</div>
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header pb-0">
<div class="card-actions float-end">
<a href="{{ route('admin.contents.media.index') }}" class="btn btn-secondary"><i class="align-middle me-2" data-feather="table"></i>Daftar Media</a>
</div>
<h4 class="card-title mb-0">Edit Media: {{ $medium->filename }}</h4>
</div>
<div class="card-body">
<form id="form-edit-media" action="{{ route('admin.contents.media.update', $medium->id) }}" method="POST" enctype="multipart/form-data" class="needs-validation" novalidate>
@csrf
@method('PUT')
<div class="row mb-3">
<div class="col-md-4 col-12 form-group">
<label for="file" class="form-label">Ganti File</label>
<input type="file" class="form-control @error('file') is-invalid @enderror" id="file" name="file"
accept="image/*, video/*, audio/*">
@error('file')
<div class="error invalid-feedback">{{ $message }}</div>
@enderror
<div class="form-text">Biarkan kosong jika tidak ingin mengganti file.</div>
</div>
<div class="col-md-4 col-12 form-group">
<label for="alt" class="form-label">Alt</label>
<input type="text" class="form-control @error('alt') is-invalid @enderror" id="alt" name="alt" value="{{ old('alt', $medium->alt) }}">
@error('alt')
<div class="error invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-4 col-12 form-group">
<label for="caption" class="form-label">Caption</label>
<input type="text" class="form-control @error('caption') is-invalid @enderror" id="caption" name="caption" value="{{ old('caption', $medium->caption) }}">
@error('caption')
<div class="error invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
<button type="reset" class="btn btn-secondary mt-3"><i class="align-middle me-2" data-feather="refresh-ccw"></i>Reset</button>
<button type="submit" class="btn btn-success mt-3"><i class="align-middle me-2" data-feather="save"></i>Simpan</button>
</form>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.22.1/jquery.validate.min.js" integrity="sha512-aK+gwLBXdXY6QDrdpK6jYtTlIfzChVNqAh3V6D5c8nV8U9O5NvC/EJ44aAKj9moRsx7bAibHZbX0wvblVp8wSA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.22.1/additional-methods.min.js" integrity="sha512-prU59crmDRtArYh698UgT9nZVsFz3aIU7hIwvWT6iUKM5CvlWzZU6ATd/yO9lbrV7ie5WoGGJrifw6vWqppmJQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
$(function() {
$("#form-edit-media").validate({
rules: {
file: { accept: "image/*, video/*, audio/*" },
alt: { maxlength: 255 },
caption: { maxlength: 255 },
},
messages: {
file: { accept: "File harus berupa gambar, video, atau audio." },
alt: { maxlength: "Alt maksimal 255 karakter." },
caption: { maxlength: "Caption maksimal 255 karakter." },
},
errorElement: 'div',
errorPlacement: function (error, element) {
error.addClass('invalid-feedback');
element.closest('.form-group').append(error);
},
highlight: function (element) {
$(element).addClass('is-invalid');
},
unhighlight: function (element) {
$(element).removeClass('is-invalid');
}
});
});
</script>
@endpush
@@ -0,0 +1,131 @@
@extends('layouts.admin.main')
@push('styles')
<link rel="stylesheet" href="https://cdn.datatables.net/2.3.8/css/dataTables.bootstrap5.min.css" />
@endpush
@section('content')
<div class="mb-3">
<h1 class="h3 d-inline align-middle">Media</h1>
</div>
@if (session('success'))
<div class="alert alert-success alert-dismissible fade show" role="alert">
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
<strong>{{ session('success') }}</strong>
</div>
@endif
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header pb-0">
<div class="card-actions float-end">
<a href="{{ route('admin.contents.media.create') }}" class="btn btn-sm btn-secondary"><i class="align-middle me-2" data-feather="plus"></i>Tambah</a>
</div>
<h4 class="card-title mb-0">Daftar Media</h4>
</div>
<div class="card-body">
<div class="table-responsive">
<table id="table-media" class="table table-hover">
<thead>
<tr>
<th>No</th>
<th>Preview</th>
<th>Nama File</th>
<th>Type</th>
<th>Ukuran</th>
<th class="text-end">Aksi</th>
</tr>
</thead>
<tbody>
@foreach ($media as $item)
<tr>
<td>{{ $loop->iteration }}</td>
<td style="width: 100px;">
@if (str_starts_with($item->mime_type, 'image/'))
<img src="{{ asset('storage/' . $item->path) }}" alt="{{ $item->alt ?? $item->filename }}" class="img-fluid" style="max-height: 60px;" />
@else
<span class="badge bg-secondary">{{ strtoupper($item->extension) }}</span>
@endif
</td>
<td>{{ $item->filename }}</td>
<td>{{ $item->mime_type }}</td>
<td>{{ number_format($item->size / 1024, 2) }} KB</td>
<td class="text-end">
<a href="{{ route('admin.contents.media.show', $item->id) }}" class="btn btn-sm btn-info">
<i class="align-middle me-2" data-feather="eye"></i>Detail
</a>
<a href="{{ route('admin.contents.media.edit', $item->id) }}" class="btn btn-sm btn-primary">
<i class="align-middle me-2" data-feather="edit"></i>Edit
</a>
<button type="button" class="btn btn-sm btn-danger delete"
data-id="{{ $item->id }}" data-name="{{ $item->filename }}">
<i class="align-middle me-2" data-feather="trash"></i>Hapus
</button>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
<div class="mt-3">
{{ $media->links() }}
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="delete-modal" tabindex="-1" aria-labelledby="delete-modal-label" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="delete-modal-label">Hapus Media</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
Apakah anda yakin ingin menghapus file media: <b><span id="media-name"></span></b>?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">
<i class="align-middle me-2" data-feather="x"></i>Batal
</button>
<form id="form-delete" action="" method="POST">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-sm btn-danger">
<i class="align-middle me-2" data-feather="trash"></i>Hapus
</button>
</form>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script src="https://cdn.datatables.net/2.3.8/js/dataTables.js"></script>
<script src="https://cdn.datatables.net/2.3.8/js/dataTables.bootstrap5.min.js"></script>
<script>
$(function() {
$('#table-media').DataTable({
paging: true,
ordering: true,
info: true,
searching: true,
});
$('.delete').click(function() {
let id = $(this).data('id');
let name = $(this).data('name');
$('#media-name').text(name);
let url = "{{ route('admin.contents.media.destroy', ':id') }}";
url = url.replace(':id', id);
$('#form-delete').attr('action', url);
$('#delete-modal').modal('show');
});
});
</script>
@endpush
@@ -0,0 +1,93 @@
@extends('layouts.admin.main')
@section('content')
<div class="mb-3">
<h1 class="h3 d-inline align-middle">Media</h1>
</div>
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header pb-0">
<div class="card-actions float-end">
<a href="{{ route('admin.contents.media.index') }}" class="btn btn-secondary"><i class="align-middle me-2" data-feather="table"></i>Daftar Media</a>
<a href="{{ route('admin.contents.media.edit', $medium->id) }}" class="btn btn-primary"><i class="align-middle me-2" data-feather="edit"></i>Edit</a>
</div>
<h4 class="card-title mb-0">Detail Media: {{ $medium->filename }}</h4>
</div>
<div class="card-body">
<div class="row">
<div class="col-lg-4 col-12 mb-3">
<div class="card">
<div class="card-body text-center">
@if (str_starts_with($medium->mime_type, 'image/'))
<img src="{{ asset('storage/' . $medium->path) }}" alt="{{ $medium->alt ?? $medium->filename }}" class="img-fluid" />
@else
<div class="h1 mb-3">{{ strtoupper($medium->extension) }}</div>
<p>{{ $media->mime_type }}</p>
@endif
</div>
</div>
</div>
<div class="col-lg-8 col-12">
<div class="card">
<div class="card-body">
<table class="table table-borderless">
<tr>
<th>Nama File</th>
<td>{{ $medium->filename }}</td>
</tr>
<tr>
<th>Path</th>
<td>{{ $medium->path }}</td>
</tr>
<tr>
<th>Mime Type</th>
<td>{{ $medium->mime_type }}</td>
</tr>
<tr>
<th>Ekstensi</th>
<td>{{ $medium->extension }}</td>
</tr>
<tr>
<th>Ukuran</th>
<td>{{ number_format($medium->size / 1024, 2) }} KB</td>
</tr>
<tr>
<th>Dimensi</th>
<td>{{ $medium->width ? $medium->width . ' x ' . $medium->height : '-' }}</td>
</tr>
<tr>
<th>Alt</th>
<td>{{ $medium->alt ?? '-' }}</td>
</tr>
<tr>
<th>Caption</th>
<td>{{ $medium->caption ?? '-' }}</td>
</tr>
<tr>
<th>Dibuat Oleh</th>
<td>{{ $medium->createdBy?->name }}</td>
</tr>
<tr>
<th>Dibuat Pada</th>
<td>{{ $medium->created_at?->format('d-m-Y H:i') }}</td>
</tr>
<tr>
<th>Diubah Oleh</th>
<td>{{ $medium->updatedBy?->name }}</td>
</tr>
<tr>
<th>Diubah Pada</th>
<td>{{ $medium->updated_at?->format('d-m-Y H:i') }}</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@@ -0,0 +1,2 @@
@extends('layouts.admin.main')
@@ -0,0 +1,68 @@
@extends('layouts.admin.main')
@section('content')
<div class="mb-3">
<h1 class="h3 d-inline align-middle">Taxonomy</h1>
</div>
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header pb-0">
<div class="card-actions float-end">
<a href="{{ route('admin.settings.taxonomies.index', ['type' => $type->value()]) }}" class="btn btn-sm btn-secondary">
<i class="align-middle me-2" data-feather="table"></i>Daftar {{ $type->label() }}
</a>
</div>
<h4 class="card-title mb-0">Tambah {{ $type->label() }} Baru</h4>
</div>
<div class="card-body">
<form id="form-create-taxonomy" action="{{ route('admin.settings.taxonomies.store', ['type' => $type]) }}" method="POST" class="needs-validation" novalidate>
@csrf
<input type="hidden" name="type" value="{{ $type }}">
<div class="row mb-3">
<div class="col-md-3 col-12 form-group">
<label for="name" class="form-label">Nama</label>
<input type="text" class="form-control @error('name') is-invalid @enderror" id="name" name="name" value="{{ old('name') }}">
@error('name')
<div class="error invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
<button type="reset" class="btn btn-sm btn-secondary mt-3"><i class="align-middle me-2" data-feather="refresh-ccw"></i>Reset</button>
<button type="submit" class="btn btn-sm btn-success mt-3"><i class="align-middle me-2" data-feather="save"></i>Simpan</button>
</form>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.22.1/jquery.validate.min.js" integrity="sha512-aK+gwLBXdXY6QDrdpK6jYtTlIfzChVNqAh3V6D5c8nV8U9O5NvC/EJ44aAKj9moRsx7bAibHZbX0wvblVp8wSA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
$(function() {
$("#form-create-taxonomy").validate({
rules: {
name: { required: true, maxlength: 255 },
},
messages: {
name: { required: "Nama harus diisi.", maxlength: "Nama maksimal 255 karakter." },
},
errorElement: 'div',
errorPlacement: function (error, element) {
error.addClass('invalid-feedback');
element.closest('.form-group').append(error);
},
highlight: function (element) {
$(element).addClass('is-invalid');
},
unhighlight: function (element) {
$(element).removeClass('is-invalid');
}
});
});
</script>
@endpush
@@ -0,0 +1,66 @@
@extends('layouts.admin.main')
@section('content')
<div class="mb-3">
<h1 class="h3 d-inline align-middle">Taxonomy</h1>
</div>
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header pb-0">
<div class="card-actions float-end">
<a href="{{ route('admin.settings.taxonomies.index', ['type' => $type->value()]) }}" class="btn btn-sm btn-secondary"><i class="align-middle me-2" data-feather="table"></i>Daftar Taxonomy</a>
</div>
<h4 class="card-title mb-0">Edit {{ $type->label() }}: {{ $taxonomy->name }}</h4>
</div>
<div class="card-body">
<form id="form-edit-taxonomy" action="{{ route('admin.settings.taxonomies.update', [$taxonomy->id, 'type' => $type->value()]) }}" method="POST" class="needs-validation" novalidate>
@csrf
@method('PUT')
<input type="hidden" name="type" value="{{ $type->value() }}">
<div class="row mb-3">
<div class="col-md-3 col-12 form-group">
<label for="name" class="form-label">Nama</label>
<input type="text" class="form-control @error('name') is-invalid @enderror" id="name" name="name" value="{{ old('name', $taxonomy->name) }}">
@error('name')
<div class="error invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
<button type="reset" class="btn btn-sm btn-secondary mt-3"><i class="align-middle me-2" data-feather="refresh-ccw"></i>Reset</button>
<button type="submit" class="btn btn-sm btn-success mt-3"><i class="align-middle me-2" data-feather="save"></i>Simpan</button>
</form>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.22.1/jquery.validate.min.js" integrity="sha512-aK+gwLBXdXY6QDrdpK6jYtTlIfzChVNqAh3V6D5c8nV8U9O5NvC/EJ44aAKj9moRsx7bAibHZbX0wvblVp8wSA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
$(function() {
$("#form-edit-taxonomy").validate({
rules: {
name: { required: true, maxlength: 255 },
},
messages: {
name: { required: "Nama harus diisi.", maxlength: "Nama maksimal 255 karakter." },
},
errorElement: 'div',
errorPlacement: function (error, element) {
error.addClass('invalid-feedback');
element.closest('.form-group').append(error);
},
highlight: function (element) {
$(element).addClass('is-invalid');
},
unhighlight: function (element) {
$(element).removeClass('is-invalid');
}
});
});
</script>
@endpush
@@ -0,0 +1,132 @@
@extends('layouts.admin.main')
@push('styles')
<link rel="stylesheet" href="https://cdn.datatables.net/2.3.8/css/dataTables.bootstrap5.min.css" />
@endpush
@section('content')
<div class="mb-3">
<h1 class="h3 d-inline align-middle">Taxonomy</h1>
</div>
@if (session('success'))
<div class="alert alert-success alert-dismissible fade show" role="alert">
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
<strong>{{ session('success') }}</strong>
</div>
@endif
<div class="row">
<div class="col-xl-2 col-12">
<div class="card">
<ul class="nav nav-pills flex-column">
@foreach(\App\Enums\TaxonomyType::cases() as $t)
<li class="nav-item">
<a class="nav-link {{ $type->value() == $t->value() ? 'active' : '' }}"
href="{{ route('admin.settings.taxonomies.index', ['type' => $t->value()]) }}">
{{ $t->label() }}
</a>
</li>
@endforeach
</ul>
</div>
</div>
<div class="col-xl-10 col-12">
<div class="card">
<div class="card-header pb-0">
<div class="card-actions float-end">
<a href="{{ route('admin.settings.taxonomies.create', ['type' => $type->value()]) }}" class="btn btn-sm btn-secondary"><i class="align-middle me-2" data-feather="plus"></i>Tambah</a>
</div>
<h4 class="card-title mb-0">Daftar {{ $type->label() }}</h4>
</div>
<div class="card-body">
<div class="table-responsive">
<table id="table-taxonomy" class="table table-hover">
<thead>
<tr>
<th>No</th>
<th>Nama</th>
<th>Slug</th>
<th class="text-end">Aksi</th>
</tr>
</thead>
<tbody>
@foreach ($taxonomies as $taxonomy)
<tr>
<td>{{ $loop->iteration }}</td>
<td>{{ $taxonomy->name }}</td>
<td>{{ $taxonomy->slug }}</td>
<td class="text-end">
<a href="{{ route('admin.settings.taxonomies.show', [$taxonomy->id, 'type' => $type->value()]) }}" class="btn btn-sm btn-info">
<i class="align-middle me-2" data-feather="eye"></i>Lihat
</a>
<a href="{{ route('admin.settings.taxonomies.edit', [$taxonomy->id, 'type' => $type->value()]) }}" class="btn btn-sm btn-primary">
<i class="align-middle me-2" data-feather="edit"></i>Edit
</a>
<button type="button" class="btn btn-sm btn-danger delete"
data-id="{{ $taxonomy->id }}" data-name="{{ $taxonomy->name }}"">
<i class="align-middle me-2" data-feather="trash"></i>Hapus
</button>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="delete-modal" tabindex="-1" aria-labelledby="delete-modal-label" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="delete-modal-label">Hapus {{ $type->label() }}</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
Apakah anda yakin ingin menghapus {{ $type->label() }}: <b><span id="taxonomy-name"></span></b> ini?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">
<i class="align-middle me-2" data-feather="x"></i>Batal
</button>
<form id="form-delete" action="" method="POST">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-sm btn-danger">
<i class="align-middle me-2" data-feather="trash"></i>Hapus
</button>
</form>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script src="https://cdn.datatables.net/2.3.8/js/dataTables.js"></script>
<script src="https://cdn.datatables.net/2.3.8/js/dataTables.bootstrap5.min.js"></script>
<script>
$(function() {
$('#table-taxonomy').DataTable({
paging: true,
ordering: true,
info: true,
searching: true,
lengthMenu: [[10, 25, 50, 100, -1], [10, 25, 50, 100, "Semua"]],
});
$('.delete').click(function() {
let id = $(this).data('id');
let name = $(this).data('name');
$('#taxonomy-name').text(name);
let url = "{{ route('admin.settings.taxonomies.destroy', ['type' => $type->value(), ':id']) }}";
url = url.replace(':id', id);
$('#form-delete').attr('action', url);
$('#delete-modal').modal('show');
});
});
</script>
@endpush
@@ -0,0 +1,44 @@
@extends('layouts.admin.main')
@section('content')
<div class="mb-3">
<h1 class="h3 d-inline align-middle">Taxonomy</h1>
</div>
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header pb-0">
<div class="card-actions float-end">
<a href="{{ route('admin.settings.taxonomies.index', ['type' => $type->value()]) }}" class="btn btn-sm btn-secondary"><i class="align-middle me-2" data-feather="table"></i>Daftar {{ $type->label() }}</a>
</div>
<h4 class="card-title mb-0">Detail {{ $type->label() }}</h4>
</div>
<div class="card-body">
<dl class="row">
<dt class="col-sm-3">Tipe</dt>
<dd class="col-sm-9">{{ $taxonomy->type->label() }}</dd>
<dt class="col-sm-3">Nama</dt>
<dd class="col-sm-9">{{ $taxonomy->name }}</dd>
<dt class="col-sm-3">Slug</dt>
<dd class="col-sm-9">{{ $taxonomy->slug }}</dd>
<dt class="col-sm-3">Dibuat oleh</dt>
<dd class="col-sm-9">{{ $taxonomy->createdBy?->name }}</dd>
<dt class="col-sm-3">Dibuat pada</dt>
<dd class="col-sm-9">{{ $taxonomy->created_at?->format('d-m-Y H:i') }}</dd>
<dt class="col-sm-3">Diperbarui oleh</dt>
<dd class="col-sm-9">{{ $taxonomy->updatedBy?->name }}</dd>
<dt class="col-sm-3">Diperbarui pada</dt>
<dd class="col-sm-9">{{ $taxonomy->updated_at?->format('d-m-Y H:i') }}</dd>
</dl>
</div>
</div>
</div>
</div>
@endsection
@@ -0,0 +1,101 @@
@extends('layouts.admin.main')
@section('content')
<div class="mb-3">
<h1 class="h3 d-inline align-middle">User</h1>
</div>
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header pb-0">
<div class="card-actions float-end">
<a href="{{ route('admin.settings.users.index') }}" class="btn btn-sm btn-secondary"><i class="align-middle me-2" data-feather="table"></i>Daftar User</a>
</div>
<h4 class="card-title mb-0">Tambah User Baru</h4>
</div>
<div class="card-body">
<form id="form-create-user" action="{{ route('admin.settings.users.store') }}" method="POST" class="needs-validation" novalidate>
@csrf
<div class="row mb-3">
<div class="col-md-3 col-12 form-group">
<label for="name" class="form-label">Nama</label>
<input type="text" class="form-control @error('name') is-invalid @enderror"
id="name" name="name" value="{{ old('name') }}" >
@error('name')
<div class="error invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-3 col-12 form-group">
<label for="username" class="form-label">Username</label>
<input type="text" class="form-control @error('username') is-invalid @enderror"
id="username" name="username" value="{{ old('username') }}" >
@error('username')
<div class="error invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-3 col-12 form-group">
<label for="password" class="form-label">Password</label>
<input type="password" class="form-control @error('password') is-invalid @enderror"
id="password" name="password" value="{{ old('password') }}" >
@error('password')
<div class="error invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
<button type="reset" class="btn btn-sm btn-secondary mt-3"><i class="align-middle me-2" data-feather="refresh-ccw"></i>Reset</button>
<button type="submit" class="btn btn-sm btn-success mt-3"><i class="align-middle me-2" data-feather="save"></i>Simpan</button>
</form>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.22.1/jquery.validate.min.js"
integrity="sha512-aK+gwLBXdXY6QDrdpK6jYtTlIfzChVNqAh3V6D5c8nV8U9O5NvC/EJ44aAKj9moRsx7bAibHZbX0wvblVp8wSA=="
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
$(function() {
$("#form-create-user").validate({
rules: {
name: {
required: true,
},
password: {
required: true,
minlength: 8
},
username: {
required: true,
}
},
messages: {
name: {
required: "Nama harus diisi.",
},
password: {
required: "Password baru harus diisi.",
minlength: "Password minimal 8 karakter."
},
username: {
required: "Username harus diisi.",
}
},
errorElement: 'div',
errorPlacement: function (error, element) {
error.addClass('invalid-feedback');
element.closest('.form-group').append(error);
},
highlight: function (element, errorClass, validClass) {
$(element).addClass('is-invalid');
},
unhighlight: function (element, errorClass, validClass) {
$(element).removeClass('is-invalid');
}
});
});
</script>
@endpush
@@ -0,0 +1,90 @@
@extends('layouts.admin.main')
@section('content')
<div class="mb-3">
<h1 class="h3 d-inline align-middle">User</h1>
</div>
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header pb-0">
<div class="card-actions float-end">
<a href="{{ route('admin.settings.users.index') }}" class="btn btn-sm btn-secondary"><i class="align-middle me-2" data-feather="table"></i>Daftar User</a>
</div>
<h4 class="card-title mb-0">Ubah Password User: {{ $user->name }}</h4>
</div>
<div class="card-body">
<form id="form-edit-password" action="{{ route('admin.settings.users.update-password', $user->id) }}" method="POST" class="needs-validation" novalidate>
@csrf
@method('PUT')
<div class="row mb-3">
<div class="col-md-3 col-12 form-group">
<label for="password" class="form-label">Password</label>
<input type="password" class="form-control @error('password') is-invalid @enderror"
id="password" name="password" value="{{ old('name') }}" >
@error('password')
<div class="error invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-3 col-12 form-group">
<label for="password_confirmation" class="form-label">Konfirmasi Password</label>
<input type="password" class="form-control @error('password_confirmation') is-invalid @enderror"
id="password_confirmation" name="password_confirmation" value="{{ old('password_confirmation') }}" >
@error('password_confirmation')
<div class="error invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
<button type="reset" class="btn btn-sm btn-secondary mt-3"><i class="align-middle me-2" data-feather="refresh-ccw"></i>Reset</button>
<button type="submit" class="btn btn-sm btn-success mt-3"><i class="align-middle me-2" data-feather="save"></i>Simpan</button>
</form>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.22.1/jquery.validate.min.js"
integrity="sha512-aK+gwLBXdXY6QDrdpK6jYtTlIfzChVNqAh3V6D5c8nV8U9O5NvC/EJ44aAKj9moRsx7bAibHZbX0wvblVp8wSA=="
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
$(function() {
$("#form-edit-password").validate({
rules: {
password: {
required: true,
minlength: 8
},
password_confirmation: {
required: true,
equalTo: "#password"
}
},
messages: {
password: {
required: "Password baru harus diisi.",
minlength: "Password minimal 8 karakter."
},
password_confirmation: {
required: "Konfirmasi password harus diisi.",
equalTo: "Konfirmasi password tidak cocok."
}
},
errorElement: 'div',
errorPlacement: function (error, element) {
error.addClass('invalid-feedback');
element.closest('.form-group').append(error);
},
highlight: function (element, errorClass, validClass) {
$(element).addClass('is-invalid');
},
unhighlight: function (element, errorClass, validClass) {
$(element).removeClass('is-invalid');
}
});
});
</script>
@endpush
@@ -0,0 +1,94 @@
@extends('layouts.admin.main')
@section('content')
<div class="mb-3">
<h1 class="h3 d-inline align-middle">User</h1>
</div>
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header pb-0">
<div class="card-actions float-end">
<a href="{{ route('admin.settings.users.index') }}" class="btn btn-sm btn-secondary"><i class="align-middle me-2" data-feather="table"></i>Daftar User</a>
</div>
<h4 class="card-title mb-0">Edit User: {{ $user->name }}</h4>
</div>
<div class="card-body">
<form id="form-edit-user" action="{{ route('admin.settings.users.update', $user->id) }}" method="POST" class="needs-validation" novalidate>
@csrf
@method('PUT')
<div class="row mb-3">
<div class="col-md-3 col-12 form-group">
<label for="name" class="form-label">Nama</label>
<input type="text" class="form-control @error('name') is-invalid @enderror"
id="name" name="name" value="{{ old('name', $user->name) }}" >
@error('name')
<div class="error invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-3 col-12 form-group">
<label for="username" class="form-label">Username</label>
<input type="text" class="form-control @error('username') is-invalid @enderror"
id="username" name="username" value="{{ old('username', $user->username) }}" >
@error('username')
<div class="error invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
<button type="reset" class="btn btn-sm btn-secondary mt-3"><i class="align-middle me-2" data-feather="refresh-ccw"></i>Reset</button>
<button type="submit" class="btn btn-sm btn-success mt-3"><i class="align-middle me-2" data-feather="save"></i>Simpan</button>
</form>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.22.1/jquery.validate.min.js"
integrity="sha512-aK+gwLBXdXY6QDrdpK6jYtTlIfzChVNqAh3V6D5c8nV8U9O5NvC/EJ44aAKj9moRsx7bAibHZbX0wvblVp8wSA=="
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
$(function() {
$("#form-edit-user").validate({
rules: {
name: {
required: true,
},
password: {
required: true,
minlength: 8
},
username: {
required: true,
}
},
messages: {
name: {
required: "Nama harus diisi.",
},
password: {
required: "Password baru harus diisi.",
minlength: "Password minimal 8 karakter."
},
username: {
required: "Username harus diisi.",
}
},
errorElement: 'div',
errorPlacement: function (error, element) {
error.addClass('invalid-feedback');
element.closest('.form-group').append(error);
},
highlight: function (element, errorClass, validClass) {
$(element).addClass('is-invalid');
},
unhighlight: function (element, errorClass, validClass) {
$(element).removeClass('is-invalid');
}
});
});
</script>
@endpush
@@ -0,0 +1,121 @@
@extends('layouts.admin.main')
@push('styles')
<link rel="stylesheet" href="https://cdn.datatables.net/2.3.8/css/dataTables.bootstrap5.min.css" />
@endpush
@section('content')
<div class="mb-3">
<h1 class="h3 d-inline align-middle">User</h1>
</div>
@if (session('success'))
<div class="alert alert-success alert-dismissible fade show" role="alert">
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
<strong>{{ session('success') }}</strong>
</div>
@endif
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header pb-0">
<div class="card-actions float-end">
<a href="{{ route('admin.settings.users.create') }}" class="btn btn-sm btn-secondary"><i class="align-middle me-2" data-feather="plus"></i>Tambah</a>
</div>
<h4 class="card-title mb-0">Daftar User</h4>
</div>
<div class="card-body">
<div class="table-responsive">
<table id="table-users" class="table table-hover">
<thead>
<tr>
<th>No</th>
<th>Nama</th>
<th>Username</th>
<th class="text-end">Aksi</th>
</tr>
</thead>
<tbody>
@foreach ($users as $user)
<tr>
<td>{{ $loop->iteration }}</td>
<td>{{ $user->name }}</td>
<td>{{ $user->username }}</td>
<td class="text-end">
<a href="{{ route('admin.settings.users.show', $user->id) }}" class="btn btn-sm btn-info">
<i class="align-middle me-2" data-feather="eye"></i>Lihat
</a>
<a href="{{ route('admin.settings.users.edit', $user->id) }}" class="btn btn-sm btn-primary">
<i class="align-middle me-2" data-feather="edit"></i>Edit
</a>
<a href="{{ route('admin.settings.users.edit-password', $user->id) }}" class="btn btn-sm btn-primary">
<i class="align-middle me-2" data-feather="lock"></i>Ubah Password
</a>
<button type="button" class="btn btn-sm btn-danger delete" data-id="{{ $user->id }}" data-name="{{ $user->name }}">
<i class="align-middle me-2" data-feather="trash"></i>Hapus
</button>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="delete-modal" tabindex="-1" aria-labelledby="delete-modal-label" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="delete-modal-label">Hapus User</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
Apakah anda yakin ingin menghapus user: <b><span id="user-name"></span></b> ini?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">
<i class="align-middle me-2" data-feather="x"></i>Batal
</button>
<form id="form-delete" action="" method="POST">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-sm btn-danger">
<i class="align-middle me-2" data-feather="trash"></i>Hapus
</button>
</form>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script src="https://cdn.datatables.net/2.3.8/js/dataTables.js"></script>
<script src="https://cdn.datatables.net/2.3.8/js/dataTables.bootstrap5.min.js"></script>
<script>
$(function() {
$('#table-users').DataTable({
paging: true,
ordering: true,
info: true,
searching: true,
lengthMenu: [[10, 25, 50, 100, -1], [10, 25, 50, 100, "Semua"]]
});
$('.delete').click(function() {
let id = $(this).data('id');
let name = $(this).data('name');
$('#user-name').text(name);
let url = "{{ route('admin.settings.users.destroy', ':id') }}";
url = url.replace(':id', id);
$('#form-delete').attr('action', url);
$('#delete-modal').modal('show');
});
});
</script>
@endpush
@@ -0,0 +1,41 @@
@extends('layouts.admin.main')
@section('content')
<div class="mb-3">
<h1 class="h3 d-inline align-middle">Taxonomy</h1>
</div>
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header pb-0">
<div class="card-actions float-end">
<a href="{{ route('admin.settings.users.index') }}" class="btn btn-sm btn-secondary"><i class="align-middle me-2" data-feather="table"></i>Daftar User</a>
</div>
<h4 class="card-title mb-0">Detail User: {{ $user->name }}</h4>
</div>
<div class="card-body">
<dl class="row">
<dt class="col-sm-3">Nama</dt>
<dd class="col-sm-9">{{ $user->name }}</dd>
<dt class="col-sm-3">Username</dt>
<dd class="col-sm-9">{{ $user->username }}</dd>
<dt class="col-sm-3">Dibuat oleh</dt>
<dd class="col-sm-9">{{ $user->createdBy?->name }}</dd>
<dt class="col-sm-3">Dibuat pada</dt>
<dd class="col-sm-9">{{ $user->created_at?->format('d-m-Y H:i') }}</dd>
<dt class="col-sm-3">Diperbarui oleh</dt>
<dd class="col-sm-9">{{ $user->updatedBy?->name }}</dd>
<dt class="col-sm-3">Diperbarui pada</dt>
<dd class="col-sm-9">{{ $user->updated_at?->format('d-m-Y H:i') }}</dd>
</dl>
</div>
</div>
</div>
</div>
@endsection