initial commit
This commit is contained in:
@@ -0,0 +1,472 @@
|
||||
@extends('layouts.backendTemplate')
|
||||
|
||||
@section('content')
|
||||
|
||||
<!--begin::Main-->
|
||||
<div class="app-main flex-column flex-row-fluid" id="kt_app_main">
|
||||
|
||||
<div class="d-flex flex-column flex-column-fluid">
|
||||
|
||||
|
||||
@include('uc.admin.breadcrumb', [
|
||||
'title' => 'WHERE ELSE : Add Sub Category',
|
||||
'pageName' => 'Add',
|
||||
'pageParent' => 'Sub Category Management',
|
||||
'pageParentLink' => url('where-else/sub-category'),
|
||||
])
|
||||
|
||||
<div id="kt_app_content" class="app-content flex-column-fluid">
|
||||
<div id="kt_app_content_container" class="app-container container-xxl">
|
||||
|
||||
|
||||
|
||||
<form id="frmAdd" class="form d-flex flex-column flex-lg-row"
|
||||
action="{{ url('where-else/insert-sub-category') }}" method="post" enctype="multipart/form-data">
|
||||
|
||||
<input type="hidden" name="_method" value="POST">
|
||||
<input type="hidden" name="_token" value="{{ csrf_token() }}">
|
||||
|
||||
|
||||
<div class="d-flex flex-column gap-7 gap-lg-10 w-100 w-lg-300px mb-7 me-lg-10">
|
||||
|
||||
<div class="card card-flush py-4">
|
||||
|
||||
|
||||
<div class="card-body text-center pt-0">
|
||||
|
||||
<style>
|
||||
.image-input-placeholder {
|
||||
background-image: url('{{ url('assets/media/svg/files/blank-image.svg') }}');
|
||||
}
|
||||
|
||||
[data-bs-theme="dark"] .image-input-placeholder {
|
||||
background-image: url('../media/svg/files/blank-image-dark.svg');
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="image-input image-input-empty image-input-outline image-input-placeholder mb-3"
|
||||
data-kt-image-input="true">
|
||||
|
||||
<div class="image-input-wrapper w-150px h-150px"></div>
|
||||
|
||||
<label
|
||||
class="btn btn-icon btn-circle btn-active-color-primary w-25px h-25px bg-body shadow"
|
||||
data-kt-image-input-action="change" data-bs-toggle="tooltip"
|
||||
title="Change avatar">
|
||||
|
||||
<i class="bi bi-pencil-fill fs-7"></i>
|
||||
|
||||
<input type="file" name="avatar" accept=".png, .jpg, .jpeg" />
|
||||
<input type="hidden" name="avatar_remove" />
|
||||
|
||||
</label>
|
||||
|
||||
<span
|
||||
class="btn btn-icon btn-circle btn-active-color-primary w-25px h-25px bg-body shadow"
|
||||
data-kt-image-input-action="cancel" data-bs-toggle="tooltip"
|
||||
title="Cancel avatar">
|
||||
<i class="bi bi-x fs-2"></i>
|
||||
</span>
|
||||
|
||||
<span
|
||||
class="btn btn-icon btn-circle btn-active-color-primary w-25px h-25px bg-body shadow"
|
||||
data-kt-image-input-action="remove" data-bs-toggle="tooltip"
|
||||
title="Remove avatar">
|
||||
<i class="bi bi-x fs-2"></i>
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="text-muted fs-7">Set the profile picture. Only *.png, *.jpg and *.jpeg
|
||||
image
|
||||
files are accepted</div>
|
||||
|
||||
</div>
|
||||
|
||||
{{-- Active --}}
|
||||
<div class="card-header" style="border: unset;">
|
||||
<div class="required card-title">
|
||||
<h2>Active</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body pt-0">
|
||||
|
||||
<label class="form-check form-switch form-check-custom form-check-solid">
|
||||
<input class="form-check-input" disabled readonly name="active" type="checkbox"
|
||||
value="1" checked />
|
||||
</label>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="d-flex flex-column flex-row-fluid gap-7 gap-lg-10">
|
||||
|
||||
<div class="card card-flush py-4">
|
||||
|
||||
|
||||
@if (Session::has('messageSuccess'))
|
||||
<div class="card-body">
|
||||
@include('uc/messageSuccess')
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if (Session::has('messageFail'))
|
||||
<div class="card-body">
|
||||
@include('uc/messageFail')
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="card-header">
|
||||
<div class="card-title">
|
||||
<h2>Overview</h2>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body pt-0">
|
||||
|
||||
|
||||
{{-- <div class="mb-10 fv-row">
|
||||
<label class="required form-label">Date</label>
|
||||
<div class="position-relative d-flex align-items-center">
|
||||
<span class="svg-icon svg-icon-2 position-absolute mx-4">
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path opacity="0.3"
|
||||
d="M21 22H3C2.4 22 2 21.6 2 21V5C2 4.4 2.4 4 3 4H21C21.6 4 22 4.4 22 5V21C22 21.6 21.6 22 21 22Z"
|
||||
fill="currentColor" />
|
||||
<path
|
||||
d="M6 6C5.4 6 5 5.6 5 5V3C5 2.4 5.4 2 6 2C6.6 2 7 2.4 7 3V5C7 5.6 6.6 6 6 6ZM11 5V3C11 2.4 10.6 2 10 2C9.4 2 9 2.4 9 3V5C9 5.6 9.4 6 10 6C10.6 6 11 5.6 11 5ZM15 5V3C15 2.4 14.6 2 14 2C13.4 2 13 2.4 13 3V5C13 5.6 13.4 6 14 6C14.6 6 15 5.6 15 5ZM19 5V3C19 2.4 18.6 2 18 2C17.4 2 17 2.4 17 3V5C17 5.6 17.4 6 18 6C18.6 6 19 5.6 19 5Z"
|
||||
fill="currentColor" />
|
||||
<path
|
||||
d="M8.8 13.1C9.2 13.1 9.5 13 9.7 12.8C9.9 12.6 10.1 12.3 10.1 11.9C10.1 11.6 10 11.3 9.8 11.1C9.6 10.9 9.3 10.8 9 10.8C8.8 10.8 8.59999 10.8 8.39999 10.9C8.19999 11 8.1 11.1 8 11.2C7.9 11.3 7.8 11.4 7.7 11.6C7.6 11.8 7.5 11.9 7.5 12.1C7.5 12.2 7.4 12.2 7.3 12.3C7.2 12.4 7.09999 12.4 6.89999 12.4C6.69999 12.4 6.6 12.3 6.5 12.2C6.4 12.1 6.3 11.9 6.3 11.7C6.3 11.5 6.4 11.3 6.5 11.1C6.6 10.9 6.8 10.7 7 10.5C7.2 10.3 7.49999 10.1 7.89999 10C8.29999 9.90003 8.60001 9.80003 9.10001 9.80003C9.50001 9.80003 9.80001 9.90003 10.1 10C10.4 10.1 10.7 10.3 10.9 10.4C11.1 10.5 11.3 10.8 11.4 11.1C11.5 11.4 11.6 11.6 11.6 11.9C11.6 12.3 11.5 12.6 11.3 12.9C11.1 13.2 10.9 13.5 10.6 13.7C10.9 13.9 11.2 14.1 11.4 14.3C11.6 14.5 11.8 14.7 11.9 15C12 15.3 12.1 15.5 12.1 15.8C12.1 16.2 12 16.5 11.9 16.8C11.8 17.1 11.5 17.4 11.3 17.7C11.1 18 10.7 18.2 10.3 18.3C9.9 18.4 9.5 18.5 9 18.5C8.5 18.5 8.1 18.4 7.7 18.2C7.3 18 7 17.8 6.8 17.6C6.6 17.4 6.4 17.1 6.3 16.8C6.2 16.5 6.10001 16.3 6.10001 16.1C6.10001 15.9 6.2 15.7 6.3 15.6C6.4 15.5 6.6 15.4 6.8 15.4C6.9 15.4 7.00001 15.4 7.10001 15.5C7.20001 15.6 7.3 15.6 7.3 15.7C7.5 16.2 7.7 16.6 8 16.9C8.3 17.2 8.6 17.3 9 17.3C9.2 17.3 9.5 17.2 9.7 17.1C9.9 17 10.1 16.8 10.3 16.6C10.5 16.4 10.5 16.1 10.5 15.8C10.5 15.3 10.4 15 10.1 14.7C9.80001 14.4 9.50001 14.3 9.10001 14.3C9.00001 14.3 8.9 14.3 8.7 14.3C8.5 14.3 8.39999 14.3 8.39999 14.3C8.19999 14.3 7.99999 14.2 7.89999 14.1C7.79999 14 7.7 13.8 7.7 13.7C7.7 13.5 7.79999 13.4 7.89999 13.2C7.99999 13 8.2 13 8.5 13H8.8V13.1ZM15.3 17.5V12.2C14.3 13 13.6 13.3 13.3 13.3C13.1 13.3 13 13.2 12.9 13.1C12.8 13 12.7 12.8 12.7 12.6C12.7 12.4 12.8 12.3 12.9 12.2C13 12.1 13.2 12 13.6 11.8C14.1 11.6 14.5 11.3 14.7 11.1C14.9 10.9 15.2 10.6 15.5 10.3C15.8 10 15.9 9.80003 15.9 9.70003C15.9 9.60003 16.1 9.60004 16.3 9.60004C16.5 9.60004 16.7 9.70003 16.8 9.80003C16.9 9.90003 17 10.2 17 10.5V17.2C17 18 16.7 18.4 16.2 18.4C16 18.4 15.8 18.3 15.6 18.2C15.4 18.1 15.3 17.8 15.3 17.5Z"
|
||||
fill="currentColor" />
|
||||
</svg>
|
||||
</span>
|
||||
<input class="form-control form-control-solid ps-12" placeholder="Date"
|
||||
name="due_date" id="due_date" />
|
||||
</div>
|
||||
</div> --}}
|
||||
|
||||
<div class="mb-10 fv-row">
|
||||
<label class="required form-label">Subject</label>
|
||||
<input type="text" name="name" class="form-control mb-2 col-6"
|
||||
value="{{ old('name') }}" />
|
||||
</div>
|
||||
|
||||
|
||||
<div class="mb-10 fv-row">
|
||||
<label class="required form-label">Subject (EN)</label>
|
||||
<input type="text" name="name_en" class="form-control mb-2 col-6"
|
||||
value="{{ old('name_en') }}" />
|
||||
</div>
|
||||
|
||||
{{-- <div class="mb-10 fv-row">
|
||||
<label class="required form-label">Description</label>
|
||||
<div class="form-control" id="description" name="description"></div>
|
||||
<input type="hidden" id="description_input" name="description" />
|
||||
</div>
|
||||
|
||||
|
||||
<div class="mb-10 fv-row">
|
||||
<label class="required form-label">Description (EN)</label>
|
||||
<div class="form-control" id="description_en" name="description_en"></div>
|
||||
<input type="hidden" id="description_input_en" name="description_en" />
|
||||
|
||||
</div> --}}
|
||||
|
||||
{{-- <div hidden class="mb-10">
|
||||
<label class="form-label required">File Video</label>
|
||||
<input class="files-video" type="file" name="file_video[]" multiple
|
||||
accept=".MP4, .MOV">
|
||||
<div class="text-muted fs-7">Allowed Types .MP4, .MOV</div>
|
||||
</div>
|
||||
|
||||
<div hidden class="mb-10">
|
||||
<label class="form-label required">File Image</label>
|
||||
<input class="files-image" type="file" name="file_image[]" multiple
|
||||
accept=".jpg, .bmp, .jpeg, .png">
|
||||
<div class="text-muted fs-7">Allowed Types .jpg, .bmp, .jpeg, .png</div>
|
||||
</div>
|
||||
|
||||
<div hidden class="mb-10">
|
||||
<label class="form-label required">File Sound</label>
|
||||
<input class="files-sound" type="file" name="file_sound[]" multiple
|
||||
accept=".m4a, .mp4, .mp3, .wav">
|
||||
<div class="text-muted fs-7">Allowed Types .m4a, .mp4, .mp3, .wav</div>
|
||||
</div>
|
||||
|
||||
<div hidden class="mb-10">
|
||||
<label class="form-label required">File Documents</label>
|
||||
<input class="files-document" type="file" name="file_document[]" multiple
|
||||
accept=".pdf, .xls, .doc, .docx, .pptx, .csv, .txt">
|
||||
<div class="text-muted fs-7">Allowed Types .pdf, .xls, .doc, .docx, .pptx, .csv,
|
||||
.txt</div>
|
||||
</div> --}}
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-end">
|
||||
|
||||
<a href="{{ url('where-else/sub-category') }}" id="kt_ecommerce_add_product_cancel"
|
||||
class="btn btn-light me-5">Cancel</a>
|
||||
|
||||
<button id="btn_submit" class="btn btn-primary">
|
||||
<span class="indicator-label">Save Changes</span>
|
||||
</button>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@stop
|
||||
|
||||
|
||||
@section('script')
|
||||
|
||||
<!-- Include Editor.js core -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/editorjs@latest"></script>
|
||||
|
||||
<!-- Include the plugins -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/header"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/list"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/paragraph"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/quote"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/image"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/editorjs-inline-image"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/embed"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/code"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/table"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/marker"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/checklist"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/delimiter"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/warning"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/link"></script>
|
||||
|
||||
<script>
|
||||
/*
|
||||
class VideoTool {
|
||||
constructor({
|
||||
data
|
||||
}) {
|
||||
this.data = data || {};
|
||||
}
|
||||
|
||||
// Render input for video URL
|
||||
render() {
|
||||
const wrapper = document.createElement("div");
|
||||
|
||||
const input = document.createElement("input");
|
||||
input.type = "text";
|
||||
input.placeholder = "Enter video URL";
|
||||
input.value = this.data.url || "";
|
||||
input.style.width = "100%";
|
||||
|
||||
const video = document.createElement("video");
|
||||
video.controls = true;
|
||||
video.style.width = "100%";
|
||||
video.style.marginTop = "10px";
|
||||
video.src = this.data.url || "";
|
||||
|
||||
input.addEventListener("input", (event) => {
|
||||
const value = event.target.value;
|
||||
this.data.url = value;
|
||||
video.src = value;
|
||||
});
|
||||
|
||||
wrapper.appendChild(input);
|
||||
wrapper.appendChild(video);
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
// Save the video URL
|
||||
save(blockContent) {
|
||||
const input = blockContent.querySelector("input");
|
||||
return {
|
||||
url: input.value,
|
||||
};
|
||||
}
|
||||
|
||||
// Editor.js toolbox definition
|
||||
static get toolbox() {
|
||||
return {
|
||||
title: "Video",
|
||||
icon: '<svg width="20" height="20" viewBox="0 0 24 24"><path d="M10 8.64L15.27 12 10 15.36V8.64M10 3.14L21 12 10 20.86V3.14M3 4h4v16H3V4z"></path></svg>',
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
const tools = {
|
||||
header: {
|
||||
class: Header,
|
||||
inlineToolbar: ['link', 'bold', 'italic'],
|
||||
config: {
|
||||
placeholder: 'Enter a header',
|
||||
levels: [2, 3, 4], // Set header levels
|
||||
defaultLevel: 3,
|
||||
},
|
||||
},
|
||||
embed: {
|
||||
class: Embed,
|
||||
inlineToolbar: true,
|
||||
config: {
|
||||
services: {
|
||||
youtube: true,
|
||||
vimeo: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
video: {
|
||||
class: VideoTool,
|
||||
inlineToolbar: true,
|
||||
},
|
||||
image: {
|
||||
class: InlineImage,
|
||||
inlineToolbar: true,
|
||||
config: {
|
||||
embed: {
|
||||
display: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
const editorDescription = new EditorJS({
|
||||
holder: 'description',
|
||||
tools: tools
|
||||
});
|
||||
const editorDescriptionEn = new EditorJS({
|
||||
holder: 'description_en',
|
||||
tools: tools,
|
||||
});
|
||||
*/
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
/*
|
||||
$('#due_date').flatpickr({
|
||||
enableTime: false,
|
||||
dateFormat: 'd-m-Y',
|
||||
defaultDate: null, // Do not preselect any date
|
||||
onReady: function(selectedDates, dateStr, instance) {
|
||||
// Highlight today's date with a custom CSS class
|
||||
const today = instance.todayDateElem;
|
||||
today.classList.add('flatpickr-today-highlight'); // Add a custom class to today
|
||||
}
|
||||
});
|
||||
|
||||
// file video
|
||||
$('.files-video').fileuploader({
|
||||
extensions: ['MP4', 'mp4', 'MOV', 'mov'],
|
||||
limit: null,
|
||||
fileMaxSize: null,
|
||||
changeInput: '<div class="fileuploader-input">' +
|
||||
'<div class="fileuploader-input-inner">' +
|
||||
'<p><i class="fileuploader-icon-main"></i></p>' +
|
||||
'<h6>Drag and drop files here</h6>' +
|
||||
'<p>or</p>' +
|
||||
'<br>' +
|
||||
'<button type="button" class="fileuploader-input-button"><span>${captions.button}</span></button>' +
|
||||
'</div>' +
|
||||
'</div>',
|
||||
theme: 'dragdrop',
|
||||
});
|
||||
|
||||
// file image
|
||||
$('.files-image').fileuploader({
|
||||
extensions: ['jpg', 'bmp', 'jpeg', 'png'],
|
||||
limit: null,
|
||||
fileMaxSize: null,
|
||||
changeInput: '<div class="fileuploader-input">' +
|
||||
'<div class="fileuploader-input-inner">' +
|
||||
'<p><i class="fileuploader-icon-main"></i></p>' +
|
||||
'<h6>Drag and drop files here</h6>' +
|
||||
'<p>or</p>' +
|
||||
'<br>' +
|
||||
'<button type="button" class="fileuploader-input-button"><span>${captions.button}</span></button>' +
|
||||
'</div>' +
|
||||
'</div>',
|
||||
theme: 'dragdrop',
|
||||
});
|
||||
|
||||
// file sound
|
||||
$('.files-sound').fileuploader({
|
||||
extensions: ['m4a', 'mp4', 'mp3', 'wav'],
|
||||
limit: null,
|
||||
fileMaxSize: null,
|
||||
changeInput: '<div class="fileuploader-input">' +
|
||||
'<div class="fileuploader-input-inner">' +
|
||||
'<p><i class="fileuploader-icon-main"></i></p>' +
|
||||
'<h6>Drag and drop files here</h6>' +
|
||||
'<p>or</p>' +
|
||||
'<br>' +
|
||||
'<button type="button" class="fileuploader-input-button"><span>${captions.button}</span></button>' +
|
||||
'</div>' +
|
||||
'</div>',
|
||||
theme: 'dragdrop',
|
||||
});
|
||||
|
||||
// file document
|
||||
$('.files-document').fileuploader({
|
||||
extensions: ['pdf', 'xls', 'doc', 'docx', 'pptx', 'csv', 'txt'],
|
||||
limit: null,
|
||||
fileMaxSize: null,
|
||||
changeInput: '<div class="fileuploader-input">' +
|
||||
'<div class="fileuploader-input-inner">' +
|
||||
'<p><i class="fileuploader-icon-main"></i></p>' +
|
||||
'<h6>Drag and drop files here</h6>' +
|
||||
'<p>or</p>' +
|
||||
'<br>' +
|
||||
'<button type="button" class="fileuploader-input-button"><span>${captions.button}</span></button>' +
|
||||
'</div>' +
|
||||
'</div>',
|
||||
theme: 'dragdrop',
|
||||
});
|
||||
*/
|
||||
|
||||
$(document).on('click', '#btn_submit', function(e) {
|
||||
e.preventDefault(); // Prevent default form submission
|
||||
|
||||
alertLoading("Loading..."); // Show loading alert (your custom function)
|
||||
$('#frmAdd').submit();
|
||||
|
||||
/*
|
||||
// Save both editor contents
|
||||
Promise.all([editorDescription.save(), editorDescriptionEn.save()])
|
||||
.then(([descriptionData, descriptionEnData]) => {
|
||||
|
||||
// Store the JSON output in the hidden input fields
|
||||
$('#description_input').val(JSON.stringify(descriptionData));
|
||||
$('#description_input_en').val(JSON.stringify(descriptionEnData));
|
||||
|
||||
// Submit the form after saving the data
|
||||
$('#frmAdd').submit();
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('Error saving editor content:', error);
|
||||
});
|
||||
*/
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
@endsection
|
||||
@@ -0,0 +1,505 @@
|
||||
@extends('layouts.backendTemplate')
|
||||
|
||||
@section('content')
|
||||
|
||||
<style>
|
||||
.video-responsive {
|
||||
position: relative;
|
||||
padding-bottom: 56.25%;
|
||||
/* Aspect ratio 16:9 */
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
max-width: 100%;
|
||||
background: #000;
|
||||
}
|
||||
|
||||
.video-responsive video {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
<!--begin::Main-->
|
||||
<div class="app-main flex-column flex-row-fluid" id="kt_app_main">
|
||||
|
||||
<div class="d-flex flex-column flex-column-fluid">
|
||||
|
||||
|
||||
@include('uc.admin.breadcrumb', [
|
||||
'title' => 'WHERE ELSE : Edit Sub Category',
|
||||
'pageName' => 'Edit',
|
||||
'pageParent' => 'Sub Category Management',
|
||||
'pageParentLink' => url('where-else/sub-category'),
|
||||
])
|
||||
<div id="kt_app_content" class="app-content flex-column-fluid">
|
||||
<div id="kt_app_content_container" class="app-container container-xxl">
|
||||
|
||||
|
||||
<form id="frmUpdate" class="form d-flex flex-column flex-lg-row"
|
||||
action="{{ url('where-else/update-sub-category') }}" method="post" enctype="multipart/form-data">
|
||||
|
||||
<input type="hidden" name="id" value="{{ $itemView->id }}">
|
||||
<input type="hidden" name="_method" value="POST">
|
||||
<input type="hidden" name="_token" value="{{ csrf_token() }}">
|
||||
|
||||
|
||||
{{-- Left --}}
|
||||
<div class="d-flex flex-column gap-7 gap-lg-10 w-100 w-lg-300px mb-7 me-lg-10">
|
||||
|
||||
<div class="card card-flush py-4">
|
||||
|
||||
<div class="card-body text-center pt-0">
|
||||
|
||||
<style>
|
||||
.image-input-placeholder {
|
||||
background-image: url('{{ url('assets/media/svg/files/blank-image.svg') }}');
|
||||
}
|
||||
|
||||
[data-bs-theme="dark"] .image-input-placeholder {
|
||||
background-image: url('../media/svg/files/blank-image-dark.svg');
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="image-input image-input-empty image-input-outline image-input-placeholder mb-3"
|
||||
data-kt-image-input="true">
|
||||
|
||||
|
||||
@if ($itemView->image_url && $itemView->image_name)
|
||||
<div class="image-input-wrapper w-150px h-150px"
|
||||
style="background-image: url('{{ $itemView->image_url . '/thumbnail/' . $itemView->image_name }}')">
|
||||
</div>
|
||||
@else
|
||||
<div class="image-input-wrapper w-150px h-150px"></div>
|
||||
@endif
|
||||
|
||||
<label
|
||||
class="btn btn-icon btn-circle btn-active-color-primary w-25px h-25px bg-body shadow"
|
||||
data-kt-image-input-action="change" data-bs-toggle="tooltip"
|
||||
title="Change avatar">
|
||||
|
||||
<i class="bi bi-pencil-fill fs-7"></i>
|
||||
|
||||
<input type="file" name="avatar" accept=".png, .jpg, .jpeg" />
|
||||
<input type="hidden" name="avatar_remove" />
|
||||
|
||||
</label>
|
||||
|
||||
<span
|
||||
class="btn btn-icon btn-circle btn-active-color-primary w-25px h-25px bg-body shadow"
|
||||
data-kt-image-input-action="cancel" data-bs-toggle="tooltip"
|
||||
title="Cancel avatar">
|
||||
<i class="bi bi-x fs-2"></i>
|
||||
</span>
|
||||
|
||||
<span
|
||||
class="btn btn-icon btn-circle btn-active-color-primary w-25px h-25px bg-body shadow"
|
||||
data-kt-image-input-action="remove" data-bs-toggle="tooltip"
|
||||
title="Remove avatar">
|
||||
<i class="bi bi-x fs-2"></i>
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="text-muted fs-7">Set the profile picture. Only *.png, *.jpg and *.jpeg
|
||||
image
|
||||
files are accepted</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="card-header" style="border: unset;">
|
||||
<!--begin::Card title-->
|
||||
<div class="required card-title">
|
||||
<h2>Active</h2>
|
||||
</div>
|
||||
<!--end::Card title-->
|
||||
</div>
|
||||
<div class="card-body pt-0">
|
||||
|
||||
<label class="form-check form-switch form-check-custom form-check-solid">
|
||||
<input class="form-check-input" name="active" type="checkbox" value="1"
|
||||
{{ $itemView->active == 1 ? 'checked' : '' }} />
|
||||
</label>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{{-- Right --}}
|
||||
<div class="d-flex flex-column flex-row-fluid gap-7 gap-lg-10">
|
||||
|
||||
<div class="card card-flush py-4">
|
||||
|
||||
@if (Session::has('messageSuccess'))
|
||||
<div class="card-body">
|
||||
@include('uc/messageSuccess')
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if (Session::has('messageFail'))
|
||||
<div class="card-body">
|
||||
@include('uc/messageFail')
|
||||
</div>
|
||||
@endif
|
||||
|
||||
|
||||
<div class="card-header">
|
||||
<div class="card-title">
|
||||
<h2>Overview</h2>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body pt-0">
|
||||
|
||||
{{-- <div class="mb-10 fv-row">
|
||||
<div class="position-relative d-flex align-items-center">
|
||||
<span class="svg-icon svg-icon-2 position-absolute mx-4">
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path opacity="0.3"
|
||||
d="M21 22H3C2.4 22 2 21.6 2 21V5C2 4.4 2.4 4 3 4H21C21.6 4 22 4.4 22 5V21C22 21.6 21.6 22 21 22Z"
|
||||
fill="currentColor" />
|
||||
<path
|
||||
d="M6 6C5.4 6 5 5.6 5 5V3C5 2.4 5.4 2 6 2C6.6 2 7 2.4 7 3V5C7 5.6 6.6 6 6 6ZM11 5V3C11 2.4 10.6 2 10 2C9.4 2 9 2.4 9 3V5C9 5.6 9.4 6 10 6C10.6 6 11 5.6 11 5ZM15 5V3C15 2.4 14.6 2 14 2C13.4 2 13 2.4 13 3V5C13 5.6 13.4 6 14 6C14.6 6 15 5.6 15 5ZM19 5V3C19 2.4 18.6 2 18 2C17.4 2 17 2.4 17 3V5C17 5.6 17.4 6 18 6C18.6 6 19 5.6 19 5Z"
|
||||
fill="currentColor" />
|
||||
<path
|
||||
d="M8.8 13.1C9.2 13.1 9.5 13 9.7 12.8C9.9 12.6 10.1 12.3 10.1 11.9C10.1 11.6 10 11.3 9.8 11.1C9.6 10.9 9.3 10.8 9 10.8C8.8 10.8 8.59999 10.8 8.39999 10.9C8.19999 11 8.1 11.1 8 11.2C7.9 11.3 7.8 11.4 7.7 11.6C7.6 11.8 7.5 11.9 7.5 12.1C7.5 12.2 7.4 12.2 7.3 12.3C7.2 12.4 7.09999 12.4 6.89999 12.4C6.69999 12.4 6.6 12.3 6.5 12.2C6.4 12.1 6.3 11.9 6.3 11.7C6.3 11.5 6.4 11.3 6.5 11.1C6.6 10.9 6.8 10.7 7 10.5C7.2 10.3 7.49999 10.1 7.89999 10C8.29999 9.90003 8.60001 9.80003 9.10001 9.80003C9.50001 9.80003 9.80001 9.90003 10.1 10C10.4 10.1 10.7 10.3 10.9 10.4C11.1 10.5 11.3 10.8 11.4 11.1C11.5 11.4 11.6 11.6 11.6 11.9C11.6 12.3 11.5 12.6 11.3 12.9C11.1 13.2 10.9 13.5 10.6 13.7C10.9 13.9 11.2 14.1 11.4 14.3C11.6 14.5 11.8 14.7 11.9 15C12 15.3 12.1 15.5 12.1 15.8C12.1 16.2 12 16.5 11.9 16.8C11.8 17.1 11.5 17.4 11.3 17.7C11.1 18 10.7 18.2 10.3 18.3C9.9 18.4 9.5 18.5 9 18.5C8.5 18.5 8.1 18.4 7.7 18.2C7.3 18 7 17.8 6.8 17.6C6.6 17.4 6.4 17.1 6.3 16.8C6.2 16.5 6.10001 16.3 6.10001 16.1C6.10001 15.9 6.2 15.7 6.3 15.6C6.4 15.5 6.6 15.4 6.8 15.4C6.9 15.4 7.00001 15.4 7.10001 15.5C7.20001 15.6 7.3 15.6 7.3 15.7C7.5 16.2 7.7 16.6 8 16.9C8.3 17.2 8.6 17.3 9 17.3C9.2 17.3 9.5 17.2 9.7 17.1C9.9 17 10.1 16.8 10.3 16.6C10.5 16.4 10.5 16.1 10.5 15.8C10.5 15.3 10.4 15 10.1 14.7C9.80001 14.4 9.50001 14.3 9.10001 14.3C9.00001 14.3 8.9 14.3 8.7 14.3C8.5 14.3 8.39999 14.3 8.39999 14.3C8.19999 14.3 7.99999 14.2 7.89999 14.1C7.79999 14 7.7 13.8 7.7 13.7C7.7 13.5 7.79999 13.4 7.89999 13.2C7.99999 13 8.2 13 8.5 13H8.8V13.1ZM15.3 17.5V12.2C14.3 13 13.6 13.3 13.3 13.3C13.1 13.3 13 13.2 12.9 13.1C12.8 13 12.7 12.8 12.7 12.6C12.7 12.4 12.8 12.3 12.9 12.2C13 12.1 13.2 12 13.6 11.8C14.1 11.6 14.5 11.3 14.7 11.1C14.9 10.9 15.2 10.6 15.5 10.3C15.8 10 15.9 9.80003 15.9 9.70003C15.9 9.60003 16.1 9.60004 16.3 9.60004C16.5 9.60004 16.7 9.70003 16.8 9.80003C16.9 9.90003 17 10.2 17 10.5V17.2C17 18 16.7 18.4 16.2 18.4C16 18.4 15.8 18.3 15.6 18.2C15.4 18.1 15.3 17.8 15.3 17.5Z"
|
||||
fill="currentColor" />
|
||||
</svg>
|
||||
</span>
|
||||
<input class="form-control form-control-solid ps-12" type="text"
|
||||
id="due_date" name="due_date"
|
||||
value="{{ $itemView->due_date ? date('d-m-Y', strtotime($itemView->due_date)) : '' }}">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div> --}}
|
||||
|
||||
<div class="mb-10 fv-row">
|
||||
<label class="required form-label">Subject</label>
|
||||
<input type="text" name="name" class="form-control mb-2 col-6"
|
||||
value="{{ $itemView->name }}" />
|
||||
</div>
|
||||
|
||||
|
||||
<div class="mb-10 fv-row">
|
||||
<label class="required form-label">Subject (EN)</label>
|
||||
<input type="text" name="name_en" class="form-control mb-2 col-6"
|
||||
value="{{ $itemView->name_en }}" />
|
||||
</div>
|
||||
|
||||
{{-- <div class="mb-10 fv-row">
|
||||
<label class="required form-label">Description</label>
|
||||
<div class="form-control" id="description" name="description"></div>
|
||||
<input type="hidden" id="description_input" name="description" />
|
||||
</div>
|
||||
|
||||
|
||||
<div class="mb-10 fv-row">
|
||||
<label class="required form-label">Description (EN)</label>
|
||||
<div class="form-control" id="description_en" name="description_en"></div>
|
||||
<input type="hidden" id="description_input_en" name="description_en" />
|
||||
|
||||
</div> --}}
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-end">
|
||||
|
||||
<a href="{{ url('where-else/sub-category') }}" id="kt_ecommerce_add_product_cancel"
|
||||
class="btn btn-light me-5">Cancel</a>
|
||||
|
||||
<button type="button" id="btn_submit" class="btn btn-primary">
|
||||
<span class="indicator-label">Save</span>
|
||||
</button>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@stop
|
||||
|
||||
|
||||
|
||||
|
||||
@section('script')
|
||||
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
/*
|
||||
$('#due_date').flatpickr({
|
||||
enableTime: false,
|
||||
dateFormat: 'd-m-Y',
|
||||
defaultDate: null, // Do not preselect any date
|
||||
onReady: function(selectedDates, dateStr, instance) {
|
||||
// Highlight today's date with a custom CSS class
|
||||
const today = instance.todayDateElem;
|
||||
today.classList.add('flatpickr-today-highlight'); // Add a custom class to today
|
||||
}
|
||||
});
|
||||
|
||||
// file video
|
||||
$('.files-video').fileuploader({
|
||||
extensions: ['MP4', 'mp4', 'MOV', 'mov'],
|
||||
limit: null,
|
||||
fileMaxSize: null,
|
||||
changeInput: '<div class="fileuploader-input">' +
|
||||
'<div class="fileuploader-input-inner">' +
|
||||
'<p><i class="fileuploader-icon-main"></i></p>' +
|
||||
'<h6>Drag and drop files here</h6>' +
|
||||
'<p>or</p>' +
|
||||
'<br>' +
|
||||
'<button type="button" class="fileuploader-input-button"><span>${captions.button}</span></button>' +
|
||||
'</div>' +
|
||||
'</div>',
|
||||
theme: 'dragdrop',
|
||||
});
|
||||
|
||||
// file image
|
||||
$('.files-image').fileuploader({
|
||||
extensions: ['jpg', 'bmp', 'jpeg', 'png'],
|
||||
limit: null,
|
||||
fileMaxSize: null,
|
||||
changeInput: '<div class="fileuploader-input">' +
|
||||
'<div class="fileuploader-input-inner">' +
|
||||
'<p><i class="fileuploader-icon-main"></i></p>' +
|
||||
'<h6>Drag and drop files here</h6>' +
|
||||
'<p>or</p>' +
|
||||
'<br>' +
|
||||
'<button type="button" class="fileuploader-input-button"><span>${captions.button}</span></button>' +
|
||||
'</div>' +
|
||||
'</div>',
|
||||
theme: 'dragdrop',
|
||||
});
|
||||
|
||||
// file sound
|
||||
$('.files-sound').fileuploader({
|
||||
extensions: ['m4a', 'mp4', 'mp3', 'wav'],
|
||||
limit: null,
|
||||
fileMaxSize: null,
|
||||
changeInput: '<div class="fileuploader-input">' +
|
||||
'<div class="fileuploader-input-inner">' +
|
||||
'<p><i class="fileuploader-icon-main"></i></p>' +
|
||||
'<h6>Drag and drop files here</h6>' +
|
||||
'<p>or</p>' +
|
||||
'<br>' +
|
||||
'<button type="button" class="fileuploader-input-button"><span>${captions.button}</span></button>' +
|
||||
'</div>' +
|
||||
'</div>',
|
||||
theme: 'dragdrop',
|
||||
});
|
||||
|
||||
// file document
|
||||
$('.files-document').fileuploader({
|
||||
extensions: ['pdf', 'xls', 'doc', 'docx', 'pptx', 'csv', 'txt'],
|
||||
limit: null,
|
||||
fileMaxSize: null,
|
||||
changeInput: '<div class="fileuploader-input">' +
|
||||
'<div class="fileuploader-input-inner">' +
|
||||
'<p><i class="fileuploader-icon-main"></i></p>' +
|
||||
'<h6>Drag and drop files here</h6>' +
|
||||
'<p>or</p>' +
|
||||
'<br>' +
|
||||
'<button type="button" class="fileuploader-input-button"><span>${captions.button}</span></button>' +
|
||||
'</div>' +
|
||||
'</div>',
|
||||
theme: 'dragdrop',
|
||||
});
|
||||
*/
|
||||
|
||||
$(document).on("click", "#btn_submit", function(e) {
|
||||
e.preventDefault();
|
||||
alertLoading("Loading")
|
||||
const form = $('#frmUpdate');
|
||||
form.submit();
|
||||
})
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
{{-- <!-- Include Editor.js core -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/editorjs@latest"></script>
|
||||
|
||||
<!-- Include the plugins -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/header"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/list"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/paragraph"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/quote"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/image"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/editorjs-inline-image"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/embed"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/code"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/table"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/marker"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/checklist"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/delimiter"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/warning"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@editorjs/link"></script> --}}
|
||||
|
||||
<script>
|
||||
/*
|
||||
// Custom video tool for embedding videos
|
||||
class VideoTool {
|
||||
constructor({
|
||||
data
|
||||
}) {
|
||||
this.data = data || {};
|
||||
}
|
||||
|
||||
// Render input for video URL
|
||||
render() {
|
||||
const wrapper = document.createElement("div");
|
||||
|
||||
const input = document.createElement("input");
|
||||
input.type = "text";
|
||||
input.placeholder = "Enter video URL";
|
||||
input.value = this.data.url || "";
|
||||
input.style.width = "100%";
|
||||
|
||||
const video = document.createElement("video");
|
||||
video.controls = true;
|
||||
video.style.width = "100%";
|
||||
video.style.marginTop = "10px";
|
||||
video.src = this.data.url || "";
|
||||
|
||||
input.addEventListener("input", (event) => {
|
||||
const value = event.target.value;
|
||||
this.data.url = value;
|
||||
video.src = value;
|
||||
});
|
||||
|
||||
wrapper.appendChild(input);
|
||||
wrapper.appendChild(video);
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
// Save the video URL
|
||||
save(blockContent) {
|
||||
const input = blockContent.querySelector("input");
|
||||
return {
|
||||
url: input.value,
|
||||
};
|
||||
}
|
||||
|
||||
// Editor.js toolbox definition
|
||||
static get toolbox() {
|
||||
return {
|
||||
title: "Video",
|
||||
icon: '<svg width="20" height="20" viewBox="0 0 24 24"><path d="M10 8.64L15.27 12 10 15.36V8.64M10 3.14L21 12 10 20.86V3.14M3 4h4v16H3V4z"></path></svg>',
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
const tools = {
|
||||
header: {
|
||||
class: Header,
|
||||
inlineToolbar: ['link', 'bold', 'italic'],
|
||||
config: {
|
||||
placeholder: 'Enter a header',
|
||||
levels: [2, 3, 4], // Set header levels
|
||||
defaultLevel: 3,
|
||||
},
|
||||
},
|
||||
embed: {
|
||||
class: Embed,
|
||||
inlineToolbar: true,
|
||||
config: {
|
||||
services: {
|
||||
youtube: true,
|
||||
vimeo: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
video: {
|
||||
class: VideoTool,
|
||||
inlineToolbar: true,
|
||||
},
|
||||
image: {
|
||||
class: InlineImage,
|
||||
inlineToolbar: true,
|
||||
config: {
|
||||
embed: {
|
||||
display: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
const descriptionData = {!! json_encode($itemView->description) !!};
|
||||
const editorDescription = new EditorJS({
|
||||
holder: 'description',
|
||||
tools: tools,
|
||||
data: descriptionData != "" ? JSON.parse(descriptionData) : {},
|
||||
onChange: () => {
|
||||
saveData(editorDescription, 'description_input')
|
||||
}
|
||||
});
|
||||
|
||||
const descriptionDataEn = {!! json_encode($itemView->description_en) !!};
|
||||
const editorDescriptionEn = new EditorJS({
|
||||
holder: 'description_en',
|
||||
tools: tools,
|
||||
data: descriptionDataEn !== "" ? JSON.parse(descriptionDataEn) : {},
|
||||
onChange: () => {
|
||||
saveData(editorDescriptionEn, 'description_input_en');
|
||||
}
|
||||
});
|
||||
*/
|
||||
|
||||
|
||||
// Function to save data to hidden inputs
|
||||
function saveData(editor, inputId) {
|
||||
editor.save().then((outputData) => {
|
||||
document.getElementById(inputId).value = JSON.stringify(outputData);
|
||||
}).catch((error) => {
|
||||
console.error('Saving failed: ', error);
|
||||
});
|
||||
}
|
||||
|
||||
$(document).on('click', '#btn_submit', function(e) {
|
||||
e.preventDefault(); // Prevent default form submission
|
||||
|
||||
alertLoading("Loading..."); // Show loading alert (your custom function)
|
||||
$('#frmUpdate').submit();
|
||||
|
||||
/*
|
||||
// Save both editor contents
|
||||
Promise.all([editorDescription.save(), editorDescriptionEn.save()])
|
||||
.then(([descriptionData, descriptionEnData]) => {
|
||||
// Store the JSON output in the hidden input fields
|
||||
$('#description_input').val(JSON.stringify(descriptionData));
|
||||
$('#description_input_en').val(JSON.stringify(descriptionEnData));
|
||||
|
||||
// Submit the form after saving the data
|
||||
$('#frmUpdate').submit();
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('Error saving editor content:', error);
|
||||
});
|
||||
*/
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
@endsection
|
||||
@@ -0,0 +1,403 @@
|
||||
@extends('layouts.backendTemplate')
|
||||
|
||||
@section('content')
|
||||
|
||||
<!--begin::Main-->
|
||||
<div class="app-main flex-column flex-row-fluid" id="kt_app_main">
|
||||
|
||||
<div class="d-flex flex-column flex-column-fluid">
|
||||
|
||||
|
||||
@include('uc.breadcrumbList', [
|
||||
'title' => 'WHERE ELSE : Sub Category Management',
|
||||
'pageName' => 'Sub Category Management',
|
||||
])
|
||||
|
||||
|
||||
<div id="kt_app_content" class="app-content flex-column-fluid">
|
||||
<!--begin::Content container-->
|
||||
<div id="kt_app_content_container" class="app-container container-xxl">
|
||||
<!--begin::Card-->
|
||||
<div class="card">
|
||||
|
||||
@if (Session::has('messageSuccess'))
|
||||
<div class="card-body">
|
||||
@include('uc/messageSuccess')
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if (Session::has('messageFail'))
|
||||
<div class="card-body">
|
||||
@include('uc/messageFail')
|
||||
</div>
|
||||
@endif
|
||||
|
||||
|
||||
<!--begin::Card header-->
|
||||
<div class="card-header border-0 pt-6">
|
||||
<!--begin::Card title-->
|
||||
<div class="d-flex align-items-center position-relative my-1">
|
||||
</div>
|
||||
|
||||
|
||||
@if (Auth::user()->role != 2)
|
||||
<div class="card-toolbar">
|
||||
<div class="d-flex justify-content-end" data-kt-customer-table-toolbar="base">
|
||||
<a href="{{ url('where-else/add-sub-category') }}" class="btn btn-primary">Add
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="card-header border-0 pt-5">
|
||||
|
||||
<div class="card-title">
|
||||
<div class="d-flex align-items-center position-relative my-1">
|
||||
<span class="svg-icon svg-icon-1 position-absolute ms-4">
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<rect opacity="0.5" x="17.0365" y="15.1223" width="8.15546" height="2"
|
||||
rx="1" transform="rotate(45 17.0365 15.1223)" fill="currentColor">
|
||||
</rect>
|
||||
<path
|
||||
d="M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z"
|
||||
fill="currentColor"></path>
|
||||
</svg>
|
||||
</span>
|
||||
|
||||
<input type="text" table-filter="search"
|
||||
class="form-control form-control-solid w-250px ps-15" placeholder="Search" />
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- <div class="card-toolbar flex-row-fluid justify-content-end gap-5">
|
||||
|
||||
<div class="w-100 mw-150px">
|
||||
<div class="position-relative d-flex align-items-center">
|
||||
<span class="svg-icon svg-icon-2 position-absolute mx-4">
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path opacity="0.3"
|
||||
d="M21 22H3C2.4 22 2 21.6 2 21V5C2 4.4 2.4 4 3 4H21C21.6 4 22 4.4 22 5V21C22 21.6 21.6 22 21 22Z"
|
||||
fill="currentColor" />
|
||||
<path
|
||||
d="M6 6C5.4 6 5 5.6 5 5V3C5 2.4 5.4 2 6 2C6.6 2 7 2.4 7 3V5C7 5.6 6.6 6 6 6ZM11 5V3C11 2.4 10.6 2 10 2C9.4 2 9 2.4 9 3V5C9 5.6 9.4 6 10 6C10.6 6 11 5.6 11 5ZM15 5V3C15 2.4 14.6 2 14 2C13.4 2 13 2.4 13 3V5C13 5.6 13.4 6 14 6C14.6 6 15 5.6 15 5ZM19 5V3C19 2.4 18.6 2 18 2C17.4 2 17 2.4 17 3V5C17 5.6 17.4 6 18 6C18.6 6 19 5.6 19 5Z"
|
||||
fill="currentColor" />
|
||||
<path
|
||||
d="M8.8 13.1C9.2 13.1 9.5 13 9.7 12.8C9.9 12.6 10.1 12.3 10.1 11.9C10.1 11.6 10 11.3 9.8 11.1C9.6 10.9 9.3 10.8 9 10.8C8.8 10.8 8.59999 10.8 8.39999 10.9C8.19999 11 8.1 11.1 8 11.2C7.9 11.3 7.8 11.4 7.7 11.6C7.6 11.8 7.5 11.9 7.5 12.1C7.5 12.2 7.4 12.2 7.3 12.3C7.2 12.4 7.09999 12.4 6.89999 12.4C6.69999 12.4 6.6 12.3 6.5 12.2C6.4 12.1 6.3 11.9 6.3 11.7C6.3 11.5 6.4 11.3 6.5 11.1C6.6 10.9 6.8 10.7 7 10.5C7.2 10.3 7.49999 10.1 7.89999 10C8.29999 9.90003 8.60001 9.80003 9.10001 9.80003C9.50001 9.80003 9.80001 9.90003 10.1 10C10.4 10.1 10.7 10.3 10.9 10.4C11.1 10.5 11.3 10.8 11.4 11.1C11.5 11.4 11.6 11.6 11.6 11.9C11.6 12.3 11.5 12.6 11.3 12.9C11.1 13.2 10.9 13.5 10.6 13.7C10.9 13.9 11.2 14.1 11.4 14.3C11.6 14.5 11.8 14.7 11.9 15C12 15.3 12.1 15.5 12.1 15.8C12.1 16.2 12 16.5 11.9 16.8C11.8 17.1 11.5 17.4 11.3 17.7C11.1 18 10.7 18.2 10.3 18.3C9.9 18.4 9.5 18.5 9 18.5C8.5 18.5 8.1 18.4 7.7 18.2C7.3 18 7 17.8 6.8 17.6C6.6 17.4 6.4 17.1 6.3 16.8C6.2 16.5 6.10001 16.3 6.10001 16.1C6.10001 15.9 6.2 15.7 6.3 15.6C6.4 15.5 6.6 15.4 6.8 15.4C6.9 15.4 7.00001 15.4 7.10001 15.5C7.20001 15.6 7.3 15.6 7.3 15.7C7.5 16.2 7.7 16.6 8 16.9C8.3 17.2 8.6 17.3 9 17.3C9.2 17.3 9.5 17.2 9.7 17.1C9.9 17 10.1 16.8 10.3 16.6C10.5 16.4 10.5 16.1 10.5 15.8C10.5 15.3 10.4 15 10.1 14.7C9.80001 14.4 9.50001 14.3 9.10001 14.3C9.00001 14.3 8.9 14.3 8.7 14.3C8.5 14.3 8.39999 14.3 8.39999 14.3C8.19999 14.3 7.99999 14.2 7.89999 14.1C7.79999 14 7.7 13.8 7.7 13.7C7.7 13.5 7.79999 13.4 7.89999 13.2C7.99999 13 8.2 13 8.5 13H8.8V13.1ZM15.3 17.5V12.2C14.3 13 13.6 13.3 13.3 13.3C13.1 13.3 13 13.2 12.9 13.1C12.8 13 12.7 12.8 12.7 12.6C12.7 12.4 12.8 12.3 12.9 12.2C13 12.1 13.2 12 13.6 11.8C14.1 11.6 14.5 11.3 14.7 11.1C14.9 10.9 15.2 10.6 15.5 10.3C15.8 10 15.9 9.80003 15.9 9.70003C15.9 9.60003 16.1 9.60004 16.3 9.60004C16.5 9.60004 16.7 9.70003 16.8 9.80003C16.9 9.90003 17 10.2 17 10.5V17.2C17 18 16.7 18.4 16.2 18.4C16 18.4 15.8 18.3 15.6 18.2C15.4 18.1 15.3 17.8 15.3 17.5Z"
|
||||
fill="currentColor" />
|
||||
</svg>
|
||||
</span>
|
||||
<input class="form-control form-control-solid ps-12" placeholder="From"
|
||||
id="due_date_from" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="w-100 mw-150px">
|
||||
<div class="position-relative d-flex align-items-center">
|
||||
<span class="svg-icon svg-icon-2 position-absolute mx-4">
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path opacity="0.3"
|
||||
d="M21 22H3C2.4 22 2 21.6 2 21V5C2 4.4 2.4 4 3 4H21C21.6 4 22 4.4 22 5V21C22 21.6 21.6 22 21 22Z"
|
||||
fill="currentColor" />
|
||||
<path
|
||||
d="M6 6C5.4 6 5 5.6 5 5V3C5 2.4 5.4 2 6 2C6.6 2 7 2.4 7 3V5C7 5.6 6.6 6 6 6ZM11 5V3C11 2.4 10.6 2 10 2C9.4 2 9 2.4 9 3V5C9 5.6 9.4 6 10 6C10.6 6 11 5.6 11 5ZM15 5V3C15 2.4 14.6 2 14 2C13.4 2 13 2.4 13 3V5C13 5.6 13.4 6 14 6C14.6 6 15 5.6 15 5ZM19 5V3C19 2.4 18.6 2 18 2C17.4 2 17 2.4 17 3V5C17 5.6 17.4 6 18 6C18.6 6 19 5.6 19 5Z"
|
||||
fill="currentColor" />
|
||||
<path
|
||||
d="M8.8 13.1C9.2 13.1 9.5 13 9.7 12.8C9.9 12.6 10.1 12.3 10.1 11.9C10.1 11.6 10 11.3 9.8 11.1C9.6 10.9 9.3 10.8 9 10.8C8.8 10.8 8.59999 10.8 8.39999 10.9C8.19999 11 8.1 11.1 8 11.2C7.9 11.3 7.8 11.4 7.7 11.6C7.6 11.8 7.5 11.9 7.5 12.1C7.5 12.2 7.4 12.2 7.3 12.3C7.2 12.4 7.09999 12.4 6.89999 12.4C6.69999 12.4 6.6 12.3 6.5 12.2C6.4 12.1 6.3 11.9 6.3 11.7C6.3 11.5 6.4 11.3 6.5 11.1C6.6 10.9 6.8 10.7 7 10.5C7.2 10.3 7.49999 10.1 7.89999 10C8.29999 9.90003 8.60001 9.80003 9.10001 9.80003C9.50001 9.80003 9.80001 9.90003 10.1 10C10.4 10.1 10.7 10.3 10.9 10.4C11.1 10.5 11.3 10.8 11.4 11.1C11.5 11.4 11.6 11.6 11.6 11.9C11.6 12.3 11.5 12.6 11.3 12.9C11.1 13.2 10.9 13.5 10.6 13.7C10.9 13.9 11.2 14.1 11.4 14.3C11.6 14.5 11.8 14.7 11.9 15C12 15.3 12.1 15.5 12.1 15.8C12.1 16.2 12 16.5 11.9 16.8C11.8 17.1 11.5 17.4 11.3 17.7C11.1 18 10.7 18.2 10.3 18.3C9.9 18.4 9.5 18.5 9 18.5C8.5 18.5 8.1 18.4 7.7 18.2C7.3 18 7 17.8 6.8 17.6C6.6 17.4 6.4 17.1 6.3 16.8C6.2 16.5 6.10001 16.3 6.10001 16.1C6.10001 15.9 6.2 15.7 6.3 15.6C6.4 15.5 6.6 15.4 6.8 15.4C6.9 15.4 7.00001 15.4 7.10001 15.5C7.20001 15.6 7.3 15.6 7.3 15.7C7.5 16.2 7.7 16.6 8 16.9C8.3 17.2 8.6 17.3 9 17.3C9.2 17.3 9.5 17.2 9.7 17.1C9.9 17 10.1 16.8 10.3 16.6C10.5 16.4 10.5 16.1 10.5 15.8C10.5 15.3 10.4 15 10.1 14.7C9.80001 14.4 9.50001 14.3 9.10001 14.3C9.00001 14.3 8.9 14.3 8.7 14.3C8.5 14.3 8.39999 14.3 8.39999 14.3C8.19999 14.3 7.99999 14.2 7.89999 14.1C7.79999 14 7.7 13.8 7.7 13.7C7.7 13.5 7.79999 13.4 7.89999 13.2C7.99999 13 8.2 13 8.5 13H8.8V13.1ZM15.3 17.5V12.2C14.3 13 13.6 13.3 13.3 13.3C13.1 13.3 13 13.2 12.9 13.1C12.8 13 12.7 12.8 12.7 12.6C12.7 12.4 12.8 12.3 12.9 12.2C13 12.1 13.2 12 13.6 11.8C14.1 11.6 14.5 11.3 14.7 11.1C14.9 10.9 15.2 10.6 15.5 10.3C15.8 10 15.9 9.80003 15.9 9.70003C15.9 9.60003 16.1 9.60004 16.3 9.60004C16.5 9.60004 16.7 9.70003 16.8 9.80003C16.9 9.90003 17 10.2 17 10.5V17.2C17 18 16.7 18.4 16.2 18.4C16 18.4 15.8 18.3 15.6 18.2C15.4 18.1 15.3 17.8 15.3 17.5Z"
|
||||
fill="currentColor" />
|
||||
</svg>
|
||||
</span>
|
||||
<input class="form-control form-control-solid ps-12" placeholder="To"
|
||||
id="due_date_to" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="button" id="btn-submit" class="btn btn-primary">
|
||||
Search
|
||||
</button>
|
||||
|
||||
</div> --}}
|
||||
</div>
|
||||
|
||||
<div class="card-body py-4">
|
||||
<!--begin::Table-->
|
||||
<table class="table align-middle table-row-dashed fs-6 gy-5" id="data-table-category">
|
||||
<!--begin::Table head-->
|
||||
<thead>
|
||||
<!--begin::Table row-->
|
||||
<tr class="text-start text-muted fw-bold fs-7 text-uppercase gs-0">
|
||||
<th class="min-w-125px">Pic</th>
|
||||
{{-- <th class="min-w-125px">Date</th> --}}
|
||||
<th class="min-w-125px">Subject</th>
|
||||
<th class="min-w-125px">Subject (EN)</th>
|
||||
<th class="min-w-125px">Created</th>
|
||||
<th class="min-w-125px">Active</th>
|
||||
<th class="text-end min-w-100px">Manage</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody class="text-gray-600 fw-semibold">
|
||||
|
||||
@foreach ($itemView as $obj)
|
||||
<tr>
|
||||
<td class="d-flex align-items-center">
|
||||
<div class="symbol symbol-100px symbol-2by3 me-4">
|
||||
@if ($obj->image_url && $obj->image_name)
|
||||
<a class="show-image-preview d-block overlay"
|
||||
href="{{ url($obj->image_url . '/original/' . $obj->image_name) }}">
|
||||
<div class="symbol-label"
|
||||
style="background-image: url('{{ url($obj->image_url . '/thumbnail/' . $obj->image_name) }}')">
|
||||
</div>
|
||||
</a>
|
||||
@else
|
||||
<div class="symbol-label"
|
||||
style="background-image: url('{{ url('assets/media/avatars/blank.png') }}')">
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<a href="#" class="text-gray-800 text-hover-primary mb-1">
|
||||
{{ $obj->name }}
|
||||
</a>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<a href="#" class="text-gray-800 text-hover-primary mb-1">
|
||||
{{ $obj->name_en }}
|
||||
</a>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
{{ Carbon\Carbon::parse($obj->created_at)->format('d, M Y') }}
|
||||
</td>
|
||||
|
||||
|
||||
<td>
|
||||
@if ($obj->active == 1)
|
||||
<span class="badge py-3 px-4 fs-7 badge-light-success">Active</span>
|
||||
@else
|
||||
<span class="badge py-3 px-4 fs-7 badge-light-danger">Inactive</span>
|
||||
@endif
|
||||
</td>
|
||||
|
||||
|
||||
<td class="min-w-100px text-end">
|
||||
|
||||
{{-- View --}}
|
||||
<a href="{{ url('where-else/article/' . $obj->id) }}"
|
||||
class="btn btn-icon btn-bg-light btn-active-color-primary btn-sm me-1">
|
||||
<span class="svg-icon svg-icon-3">
|
||||
<svg width="24" height="24" viewBox="0 0 24 24"
|
||||
fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M17.5 11H6.5C4 11 2 9 2 6.5C2 4 4 2 6.5 2H17.5C20 2 22 4 22 6.5C22 9 20 11 17.5 11ZM15 6.5C15 7.9 16.1 9 17.5 9C18.9 9 20 7.9 20 6.5C20 5.1 18.9 4 17.5 4C16.1 4 15 5.1 15 6.5Z"
|
||||
fill="currentColor"></path>
|
||||
<path opacity="0.3"
|
||||
d="M17.5 22H6.5C4 22 2 20 2 17.5C2 15 4 13 6.5 13H17.5C20 13 22 15 22 17.5C22 20 20 22 17.5 22ZM4 17.5C4 18.9 5.1 20 6.5 20C7.9 20 9 18.9 9 17.5C9 16.1 7.9 15 6.5 15C5.1 15 4 16.1 4 17.5Z"
|
||||
fill="currentColor"></path>
|
||||
</svg>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
{{-- Edit --}}
|
||||
<a href="{{ url('where-else/edit-sub-category/' . $obj->id) }}"
|
||||
class="btn btn-icon btn-bg-light btn-active-color-primary btn-sm me-1">
|
||||
<span class="svg-icon svg-icon-3">
|
||||
<svg width="24" height="24" viewBox="0 0 24 24"
|
||||
fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path opacity="0.3"
|
||||
d="M21.4 8.35303L19.241 10.511L13.485 4.755L15.643 2.59595C16.0248 2.21423 16.5426 1.99988 17.0825 1.99988C17.6224 1.99988 18.1402 2.21423 18.522 2.59595L21.4 5.474C21.7817 5.85581 21.9962 6.37355 21.9962 6.91345C21.9962 7.45335 21.7817 7.97122 21.4 8.35303ZM3.68699 21.932L9.88699 19.865L4.13099 14.109L2.06399 20.309C1.98815 20.5354 1.97703 20.7787 2.03189 21.0111C2.08674 21.2436 2.2054 21.4561 2.37449 21.6248C2.54359 21.7934 2.75641 21.9115 2.989 21.9658C3.22158 22.0201 3.4647 22.0084 3.69099 21.932H3.68699Z"
|
||||
fill="currentColor" />
|
||||
<path
|
||||
d="M5.574 21.3L3.692 21.928C3.46591 22.0032 3.22334 22.0141 2.99144 21.9594C2.75954 21.9046 2.54744 21.7864 2.3789 21.6179C2.21036 21.4495 2.09202 21.2375 2.03711 21.0056C1.9822 20.7737 1.99289 20.5312 2.06799 20.3051L2.696 18.422L5.574 21.3ZM4.13499 14.105L9.891 19.861L19.245 10.507L13.489 4.75098L4.13499 14.105Z"
|
||||
fill="currentColor" />
|
||||
</svg>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
{{-- Delete --}}
|
||||
@if ($obj->active == 1 && Auth::user()->role != 2)
|
||||
<a href="#" data-id="{{ $obj->id }}"
|
||||
class="btn btn-icon btn-bg-light btn-active-color-primary btn-sm delete-item">
|
||||
<span class="svg-icon svg-icon-3">
|
||||
<svg width="24" height="24" viewBox="0 0 24 24"
|
||||
fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M5 9C5 8.44772 5.44772 8 6 8H18C18.5523 8 19 8.44772 19 9V18C19 19.6569 17.6569 21 16 21H8C6.34315 21 5 19.6569 5 18V9Z"
|
||||
fill="currentColor" />
|
||||
<path opacity="0.5"
|
||||
d="M5 5C5 4.44772 5.44772 4 6 4H18C18.5523 4 19 4.44772 19 5V5C19 5.55228 18.5523 6 18 6H6C5.44772 6 5 5.55228 5 5V5Z"
|
||||
fill="currentColor" />
|
||||
<path opacity="0.5"
|
||||
d="M9 4C9 3.44772 9.44772 3 10 3H14C14.5523 3 15 3.44772 15 4V4H9V4Z"
|
||||
fill="currentColor" />
|
||||
</svg>
|
||||
</span>
|
||||
</a>
|
||||
@endif
|
||||
</td>
|
||||
|
||||
|
||||
</tr>
|
||||
@endforeach
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@stop
|
||||
|
||||
|
||||
@section('script')
|
||||
|
||||
<script type="text/javascript">
|
||||
const baseUrl = "{{ url('where-else/sub-category') }}";
|
||||
var datatable;
|
||||
datatable = $("#data-table-category").DataTable({
|
||||
"info": false,
|
||||
"order": []
|
||||
});
|
||||
|
||||
// Filter by search
|
||||
const filterSearch = document.querySelector('[table-filter="search"]');
|
||||
filterSearch.addEventListener('keyup', function(e) {
|
||||
datatable.search(e.target.value).draw();
|
||||
});
|
||||
|
||||
// filter by status
|
||||
const filterStatus = document.querySelector('[table-filter="status"]');
|
||||
$(filterStatus).on('change', e => {
|
||||
let value = e.target.value;
|
||||
if (value === 'all') {
|
||||
value = '';
|
||||
}
|
||||
datatable.column(4).search(value).draw();
|
||||
});
|
||||
|
||||
|
||||
// Remove
|
||||
$(document).on('click', '.delete-item', function() {
|
||||
swal.fire({
|
||||
allowOutsideClick: false,
|
||||
text: "Are you sure you would like to Delete?",
|
||||
icon: "warning",
|
||||
buttonsStyling: false,
|
||||
showDenyButton: true,
|
||||
confirmButtonText: "Yes",
|
||||
denyButtonText: 'No',
|
||||
customClass: {
|
||||
confirmButton: "btn btn-primary",
|
||||
denyButton: "btn btn-light-danger"
|
||||
}
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
|
||||
alertLoading("Loading")
|
||||
|
||||
// set up ajax
|
||||
initAjaxSetupToken();
|
||||
|
||||
const ajaxProp = {
|
||||
url: "{{ url('where-else/delete-sub-category') }}",
|
||||
type: 'POST',
|
||||
data: {
|
||||
item_id: $(this).data('id')
|
||||
},
|
||||
};
|
||||
|
||||
$.ajax(ajaxProp).done(function(res) {
|
||||
if (res.status) {
|
||||
const url = "{{ url('where-else/sub-category') }}";
|
||||
alertSuccessWithUrl('Notice', "Delete success", url);
|
||||
hideLoading();
|
||||
} else {
|
||||
alertFail('Notice', res.message ?? "Unsuccessfully");
|
||||
hideLoading();
|
||||
}
|
||||
}).fail(function(xhr, status, error) {
|
||||
logAjaxError(xhr, status, error);
|
||||
alertFail('Notice', error.message ?? "Unsuccessfully");
|
||||
hideLoading();
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
var today = new Date();
|
||||
var dateFormat = "d-m-Y";
|
||||
|
||||
var dueDateFrom = $("#due_date_from");
|
||||
var dueDateTo = $("#due_date_to");
|
||||
|
||||
const dateFrom = "{{ $fromDateView }}";
|
||||
const dateTo = "{{ $toDateView }}";
|
||||
|
||||
dueDateFrom.flatpickr({
|
||||
showClearButton: true,
|
||||
enableTime: false,
|
||||
dateFormat: dateFormat,
|
||||
maxDate: today,
|
||||
defaultDate: dateFrom,
|
||||
|
||||
});
|
||||
|
||||
dueDateTo.flatpickr({
|
||||
showClearButton: true,
|
||||
enableTime: false,
|
||||
dateFormat: dateFormat,
|
||||
maxDate: today,
|
||||
defaultDate: dateTo,
|
||||
|
||||
});
|
||||
|
||||
const clearDatePicker = () => {
|
||||
dueDateFrom.flatpickr().clear();
|
||||
dueDateTo.flatpickr().clear();
|
||||
|
||||
// Set the date format again after clearing
|
||||
dueDateFrom.flatpickr({
|
||||
dateFormat: dateFormat
|
||||
});
|
||||
dueDateTo.flatpickr({
|
||||
dateFormat: dateFormat
|
||||
});
|
||||
}
|
||||
|
||||
$('#btn-submit').on('click', (e) => {
|
||||
e.preventDefault(); // Prevent the default behavior of the anchor element
|
||||
|
||||
// from
|
||||
const fromDateSelected = $("#due_date_from").val();
|
||||
|
||||
// to
|
||||
const toDateSelected = $("#due_date_to").val();
|
||||
|
||||
if (fromDateSelected && toDateSelected) {
|
||||
var newUrl =
|
||||
`${baseUrl}/${fromDateSelected}/${toDateSelected}`;
|
||||
window.location.href = newUrl;
|
||||
} else {
|
||||
var newUrl = `${baseUrl}/all/all/`;
|
||||
window.location.href = newUrl;
|
||||
}
|
||||
|
||||
})
|
||||
</script>
|
||||
|
||||
@endsection
|
||||
Reference in New Issue
Block a user