feat: contact message
This commit is contained in:
parent
20c535e14e
commit
c0bf629239
@ -17,114 +17,114 @@
|
||||
// }
|
||||
// }
|
||||
|
||||
if(env('FILESYSTEM_DISK') === 's3'){
|
||||
if (! function_exists('store_file')) {
|
||||
function store_file($file = null, $path, $disk = null)
|
||||
{
|
||||
$disk = $disk ?? env('FILESYSTEM_DISK', 'public');
|
||||
// if(env('FILESYSTEM_DISK') === 's3'){
|
||||
// if (! function_exists('store_file')) {
|
||||
// function store_file($file = null, $path, $disk = null)
|
||||
// {
|
||||
// $disk = $disk ?? env('FILESYSTEM_DISK', 'public');
|
||||
|
||||
if (filled($file) && $file instanceof \Illuminate\Http\UploadedFile) {
|
||||
$randomFilename = Str::random(35) . time() . '.' . $file->getClientOriginalExtension();
|
||||
$originalFileName = Str::slug(pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME)) . '.' . $file->getClientOriginalExtension();
|
||||
// if (filled($file) && $file instanceof \Illuminate\Http\UploadedFile) {
|
||||
// $randomFilename = Str::random(35) . time() . '.' . $file->getClientOriginalExtension();
|
||||
// $originalFileName = Str::slug(pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME)) . '.' . $file->getClientOriginalExtension();
|
||||
|
||||
$stored = $file->storeAs($path, $randomFilename, $disk);
|
||||
// $stored = $file->storeAs($path, $randomFilename, $disk);
|
||||
|
||||
if ($stored) {
|
||||
$url = Storage::disk($disk)->url($stored);
|
||||
// if ($stored) {
|
||||
// $url = Storage::disk($disk)->url($stored);
|
||||
|
||||
return [
|
||||
'randomFileName' => $randomFilename,
|
||||
'originalFileName' => $originalFileName,
|
||||
'url' => $url,
|
||||
'isSuccess' => true,
|
||||
];
|
||||
}
|
||||
}
|
||||
// return [
|
||||
// 'randomFileName' => $randomFilename,
|
||||
// 'originalFileName' => $originalFileName,
|
||||
// 'url' => $url,
|
||||
// 'isSuccess' => true,
|
||||
// ];
|
||||
// }
|
||||
// }
|
||||
|
||||
return [
|
||||
'randomFileName' => null,
|
||||
'originalFileName' => null,
|
||||
'url' => null,
|
||||
'isSuccess' => false,
|
||||
];
|
||||
}
|
||||
}
|
||||
// return [
|
||||
// 'randomFileName' => null,
|
||||
// 'originalFileName' => null,
|
||||
// 'url' => null,
|
||||
// 'isSuccess' => false,
|
||||
// ];
|
||||
// }
|
||||
// }
|
||||
|
||||
if (!function_exists('display_file')) {
|
||||
function display_file($dir, $filename, $disk = null, $expirationMinutes = 60): string
|
||||
{
|
||||
$disk = $disk ?? env('FILESYSTEM_DISK', 'public');
|
||||
// if (!function_exists('display_file')) {
|
||||
// function display_file($dir, $filename, $disk = null, $expirationMinutes = 60): string
|
||||
// {
|
||||
// $disk = $disk ?? env('FILESYSTEM_DISK', 'public');
|
||||
|
||||
if (!filled($filename)) {
|
||||
return '<p class="text-center">Belum ditambahkan.</p>';
|
||||
}
|
||||
// if (!filled($filename)) {
|
||||
// return '<p class="text-center">Belum ditambahkan.</p>';
|
||||
// }
|
||||
|
||||
$path = "uploads/{$dir}/{$filename}";
|
||||
// $path = "uploads/{$dir}/{$filename}";
|
||||
|
||||
try {
|
||||
$fileExists = is_file_exists($path, $disk);
|
||||
// try {
|
||||
// $fileExists = is_file_exists($path, $disk);
|
||||
|
||||
if (!$fileExists) {
|
||||
return '<p class="text-center">File tidak ditemukan.</p>';
|
||||
}
|
||||
// if (!$fileExists) {
|
||||
// return '<p class="text-center">File tidak ditemukan.</p>';
|
||||
// }
|
||||
|
||||
if ($disk === 's3') {
|
||||
$fileUrl = Storage::disk($disk)->temporaryUrl($path, now()->addMinutes($expirationMinutes));
|
||||
} else {
|
||||
$fileUrl = Storage::disk($disk)->url($path);
|
||||
}
|
||||
// if ($disk === 's3') {
|
||||
// $fileUrl = Storage::disk($disk)->temporaryUrl($path, now()->addMinutes($expirationMinutes));
|
||||
// } else {
|
||||
// $fileUrl = Storage::disk($disk)->url($path);
|
||||
// }
|
||||
|
||||
$ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
|
||||
$mimeType = match ($ext) {
|
||||
'jpg', 'jpeg', 'png', 'gif', 'webp' => 'image/' . $ext,
|
||||
'pdf' => 'application/pdf',
|
||||
default => 'unknown',
|
||||
};
|
||||
// $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
|
||||
// $mimeType = match ($ext) {
|
||||
// 'jpg', 'jpeg', 'png', 'gif', 'webp' => 'image/' . $ext,
|
||||
// 'pdf' => 'application/pdf',
|
||||
// default => 'unknown',
|
||||
// };
|
||||
|
||||
if (str_contains($mimeType, 'image')) {
|
||||
return "<img src='{$fileUrl}' alt='File Image' class='img-fluid'>";
|
||||
} elseif ($mimeType === 'application/pdf') {
|
||||
return "<iframe src='{$fileUrl}' width='100%' height='600px'></iframe>";
|
||||
}
|
||||
// if (str_contains($mimeType, 'image')) {
|
||||
// return "<img src='{$fileUrl}' alt='File Image' class='img-fluid'>";
|
||||
// } elseif ($mimeType === 'application/pdf') {
|
||||
// return "<iframe src='{$fileUrl}' width='100%' height='600px'></iframe>";
|
||||
// }
|
||||
|
||||
return '<p class="text-center">Format file tidak didukung</p>';
|
||||
} catch (\Exception $e) {
|
||||
return '<p class="text-center text-danger">Terjadi kesalahan saat menampilkan file.</p>';
|
||||
}
|
||||
}
|
||||
}
|
||||
// return '<p class="text-center">Format file tidak didukung</p>';
|
||||
// } catch (\Exception $e) {
|
||||
// return '<p class="text-center text-danger">Terjadi kesalahan saat menampilkan file.</p>';
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
if (! function_exists('delete_file')) {
|
||||
function delete_file($path, $disk = null): bool
|
||||
{
|
||||
$disk = $disk ?? env('FILESYSTEM_DISK', 'public');
|
||||
// if (! function_exists('delete_file')) {
|
||||
// function delete_file($path, $disk = null): bool
|
||||
// {
|
||||
// $disk = $disk ?? env('FILESYSTEM_DISK', 'public');
|
||||
|
||||
try {
|
||||
if(is_file_exists($path)){
|
||||
return Storage::disk($disk)->delete($path);
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
// try {
|
||||
// if(is_file_exists($path)){
|
||||
// return Storage::disk($disk)->delete($path);
|
||||
// }else{
|
||||
// return false;
|
||||
// }
|
||||
// } catch (\Exception $e) {
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
if (!function_exists('is_file_exists')) {
|
||||
function is_file_exists($path, $disk = null): bool
|
||||
{
|
||||
$disk = $disk ?? env('FILESYSTEM_DISK', 'public');
|
||||
// if (!function_exists('is_file_exists')) {
|
||||
// function is_file_exists($path, $disk = null): bool
|
||||
// {
|
||||
// $disk = $disk ?? env('FILESYSTEM_DISK', 'public');
|
||||
|
||||
try {
|
||||
$file = Storage::disk($disk)->get($path);
|
||||
return !empty($file);
|
||||
} catch (\Throwable $e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}else if(env('FILESYSTEM_DISK') === 'local'){
|
||||
// try {
|
||||
// $file = Storage::disk($disk)->get($path);
|
||||
// return !empty($file);
|
||||
// } catch (\Throwable $e) {
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }else if(env('FILESYSTEM_DISK') === 'local'){
|
||||
if (! function_exists('store_file')) {
|
||||
function store_file($file = null, $path, $disk = 'public')
|
||||
{
|
||||
@ -196,7 +196,7 @@ function is_file_exists($path)
|
||||
return File::exists(public_path('storage/' . $path));
|
||||
}
|
||||
}
|
||||
}
|
||||
// }
|
||||
|
||||
if (!function_exists('get_role_name')) {
|
||||
function get_role_name($role = null) {
|
||||
|
||||
64
app/Http/Controllers/Dashboard/ContactController.php
Normal file
64
app/Http/Controllers/Dashboard/ContactController.php
Normal file
@ -0,0 +1,64 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Dashboard;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\ReceiveMessageContactRequest;
|
||||
use App\Models\Contact;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ContactController extends Controller
|
||||
{
|
||||
public function index(Request $request){
|
||||
return view('dashboard.contacts.index', [
|
||||
'title' => 'Pesan Kontak',
|
||||
'status' => $request->input('status', null)
|
||||
]);
|
||||
}
|
||||
|
||||
public function show($id){
|
||||
$contact = Contact::findOrFail(decrypt_id($id));
|
||||
|
||||
return view('dashboard.contacts.show', [
|
||||
'title' => 'Detail Pesan',
|
||||
'contact' => $contact
|
||||
]);
|
||||
}
|
||||
|
||||
public function reply($id){
|
||||
$contact = Contact::findOrFail(decrypt_id($id));
|
||||
|
||||
return view('dashboard.contacts.reply', [
|
||||
'title' => 'Balas Pesan',
|
||||
'contact' => $contact
|
||||
]);
|
||||
}
|
||||
|
||||
public function replyAction(Request $request, $id){
|
||||
$validatedData = $request->validate([
|
||||
'reply_message' => ['required'],
|
||||
], [
|
||||
'reply_message.required' => 'Pesan balasan wajib diisi.',
|
||||
]);
|
||||
|
||||
$contact = Contact::findOrFail(decrypt_id($id));
|
||||
|
||||
$contact->update([
|
||||
'reply_message' => $validatedData['reply_message'],
|
||||
'status' => '1'
|
||||
]);
|
||||
|
||||
return redirect()->route('dashboard.contact.messages.show', ['id' => encrypt_id($contact->id)])->with('success-status', 'Berhasil membalas pesan.');
|
||||
}
|
||||
|
||||
public function destroy($id){
|
||||
try {
|
||||
$contact = Contact::findOrFail(decrypt_id($id));
|
||||
$contact->delete();
|
||||
|
||||
return response()->json(['message' => 'Berhasil menghapus kontak pesan.']);
|
||||
} catch (\Exception $e) {
|
||||
return response()->json(['message' => 'Gagal menghapus kontak pesan.'], 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -7,6 +7,7 @@
|
||||
use App\Models\Announcement;
|
||||
use App\Models\Classification;
|
||||
use App\Models\Company;
|
||||
use App\Models\Contact;
|
||||
use App\Models\ContentRecap;
|
||||
use App\Models\ContentRecapClassification;
|
||||
use App\Models\Cooperation;
|
||||
@ -1426,8 +1427,8 @@ public function cooperation(Request $request){
|
||||
$mediaId = Auth::user()->company->media->id;
|
||||
|
||||
$query->whereHas('proposals', function ($q) use ($mediaId) {
|
||||
$q->where('status', 1)
|
||||
->where('media_id', $mediaId);
|
||||
$q->where('status', '=', '1');
|
||||
$q ->where('media_id', $mediaId);
|
||||
});
|
||||
}
|
||||
|
||||
@ -2647,6 +2648,89 @@ public function issueManagement(Request $request){
|
||||
|
||||
}
|
||||
|
||||
public function contactMessage(Request $request){
|
||||
if ($request->ajax()) {
|
||||
|
||||
$status = $request->input('status', null);
|
||||
|
||||
$query = Contact::query();
|
||||
|
||||
|
||||
if($status && in_array($status, ['replied','not_yet_replied'])){
|
||||
switch($status){
|
||||
case 'not_yet_replied':
|
||||
$statusNum = '0';
|
||||
break;
|
||||
case 'replied':
|
||||
$statusNum = '1';
|
||||
break;
|
||||
}
|
||||
$query->where('status', '=', $statusNum)->get();
|
||||
}
|
||||
|
||||
$data = $query->get();
|
||||
|
||||
return DataTables::of($data)
|
||||
->addIndexColumn()
|
||||
->addColumn('status', function ($data){
|
||||
switch($data->status){
|
||||
case '0':
|
||||
return '<span class="badge bg-warning" style="display:inline-block;font-size:0.8rem;">Belum Dibalas</span>';
|
||||
case '1':
|
||||
return '<span class="badge bg-primary" style="display:inline-block;font-size:0.8rem;">Sudah Dibalas</span>';
|
||||
default:
|
||||
return '<span class="badge bg-secondary" style="display:inline-block;font-size:0.8rem;">Tidak Diketahui</span>';
|
||||
|
||||
}
|
||||
})
|
||||
->addColumn('date', function ($data){
|
||||
return idn_date($data->created_at, 'H:i l, d F Y');
|
||||
})
|
||||
->addColumn('action', function ($data) {
|
||||
$showUrl = route('dashboard.contact.messages.show', ['id' => encrypt_id($data->id)]);
|
||||
|
||||
$replyUrl = route('dashboard.contact.messages.reply', ['id' => encrypt_id($data->id)]);
|
||||
|
||||
$deleteUrl = route('dashboard.contact.messages.destroy', ['id' => encrypt_id($data->id)]);
|
||||
|
||||
$dropdown = '<div class="dropdown" style="display:flex; justify-content:center;">
|
||||
<a class="dropdown-toggle btn btn-icon btn-light" data-bs-toggle="dropdown"><em class="icon ni ni-more-v"></em></a>
|
||||
<div class="dropdown-menu dropdown-menu-datatable-custom dropdown-menu-end">
|
||||
<ul class="link-list-opt">
|
||||
<li><a href="'.$showUrl.'"><em class="icon ni ni-eye"></em><span>Detail</span></a></li>';
|
||||
|
||||
// if (is_role([1]) && $data->status === '0') {
|
||||
// $dropdown .= '<li><a href="javascript:void(0);" onclick="statusAction(\''.$acceptUrl.'\', \'Apakah Anda yakin ingin menyetujui pengguna '.$data->name.'?\', \'Ya, Setujui\')"><em class="icon ni ni-check"></em><span>Setujui</span></a></li>';
|
||||
// }
|
||||
|
||||
// if (is_role([1]) && $data->status === '0') {
|
||||
// $dropdown .= '<li><a href="javascript:void(0);" onclick="statusAction(\''.$rejectUrl.'\', \'Apakah Anda yakin ingin menolak pengguna '.$data->name.'?\', \'Ya, Tolak\')"><em class="icon ni ni-cross"></em><span>Tolak</span></a></li>';
|
||||
// }
|
||||
|
||||
if (is_role([1]) && $data->status === '0') {
|
||||
$dropdown .= '<li><a href="'.$replyUrl.'"><em class="icon ni ni-mail"></em><span>Balas</span></a></li>';
|
||||
}
|
||||
|
||||
if (is_role([1])) {
|
||||
$dropdown .= '<li><a href="javascript:void(0);" onclick="deleteItem(\''.$deleteUrl.'\', \'Apakah Anda yakin ingin menghapus pengguna '.$data->name.'? Akun pengguna dan data yang berhubungan dengannya juga akan dihapus secara permanen!\')"><em class="icon ni ni-trash"></em><span>Hapus</span></a></li>';
|
||||
|
||||
}
|
||||
|
||||
$dropdown .= '</ul>
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
return $dropdown;
|
||||
})
|
||||
|
||||
->rawColumns(['status', 'action'])
|
||||
->make(true);
|
||||
}
|
||||
|
||||
return response()->json(['error' => 'Unauthorized'], 401);
|
||||
|
||||
}
|
||||
|
||||
public function user(Request $request){
|
||||
if ($request->ajax()) {
|
||||
|
||||
|
||||
@ -34,6 +34,7 @@ public function create(){
|
||||
}
|
||||
|
||||
public function store(NewsRequest $request){
|
||||
// dd('hai');
|
||||
$validatedData = $request->validated();
|
||||
|
||||
$isNewsExists = News::withTrashed()->where('slug', $validatedData['slug'])->first();
|
||||
|
||||
@ -2,6 +2,8 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Requests\ReceiveMessageContactRequest;
|
||||
use App\Models\Contact;
|
||||
use App\Models\News;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
@ -187,6 +189,19 @@ public function contact(){
|
||||
return view('homepage.contacts.index', $data);
|
||||
}
|
||||
|
||||
public function receiveMessage(ReceiveMessageContactRequest $request){
|
||||
$validatedData = $request->validated();
|
||||
$validatedData['ip_address'] = $request->ip();
|
||||
|
||||
$createdMessage = Contact::create($validatedData);
|
||||
|
||||
if($createdMessage){
|
||||
return "Berhasil mengirim pesan";
|
||||
}else{
|
||||
return "Gagal mengirim pesan";
|
||||
}
|
||||
}
|
||||
|
||||
public function customError($code){
|
||||
abort($code);
|
||||
}
|
||||
|
||||
@ -29,7 +29,7 @@ public function rules(): array
|
||||
->mixedCase()
|
||||
->numbers()
|
||||
->symbols()],
|
||||
'g-recaptcha-response' => 'recaptcha',
|
||||
// 'g-recaptcha-response' => 'recaptcha',
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@ -31,7 +31,7 @@ public function rules(): array
|
||||
'category' => ['required', 'in:0,1'],
|
||||
'image' => ['nullable', 'image', 'mimes:png,jpg,jpeg', 'max:2048'],
|
||||
'slug' => ['required'],
|
||||
'enhancer_id' => ['required'],
|
||||
'author_id' => ['required'],
|
||||
];
|
||||
|
||||
return $rules;
|
||||
@ -58,7 +58,7 @@ protected function prepareForValidation()
|
||||
{
|
||||
$this->merge([
|
||||
'slug' => filled($this->title) ? Str::slug($this->title) : null,
|
||||
'enhancer_id' => Auth::check() ? Auth::id() : null,
|
||||
'author_id' => Auth::check() ? Auth::id() : null,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
32
app/Http/Requests/ReceiveMessageContactRequest.php
Normal file
32
app/Http/Requests/ReceiveMessageContactRequest.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class ReceiveMessageContactRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'name' => ['required', 'max:25'],
|
||||
'email' => ['required', 'max:25'],
|
||||
'phone_number' => ['required', 'max:15'],
|
||||
'message' => ['required'],
|
||||
];
|
||||
}
|
||||
}
|
||||
23
app/Models/Contact.php
Normal file
23
app/Models/Contact.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
|
||||
class Contact extends Model
|
||||
{
|
||||
use SoftDeletes;
|
||||
|
||||
protected $table = 'contacts';
|
||||
|
||||
protected $fillable = [
|
||||
'name',
|
||||
'email',
|
||||
'phone_number',
|
||||
'message',
|
||||
'reply_message',
|
||||
'ip_address',
|
||||
'status',
|
||||
];
|
||||
}
|
||||
@ -27,5 +27,11 @@ public function boot(): void
|
||||
return redirect()->back()->with('toManyRequest', 'Harap tunggu 1 menit untuk login ulang.');
|
||||
});
|
||||
});
|
||||
|
||||
RateLimiter::for('contact_message', function (Request $request) {
|
||||
return Limit::perDay(2)->by($request->ip())->response(function (Request $request) {
|
||||
return redirect()->back()->with('toManyRequest', 'Harap tunggu 1 hari untuk mengirim pesan ulang.');
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('contacts', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('name');
|
||||
$table->string('email');
|
||||
$table->string('phone_number');
|
||||
$table->text('message');
|
||||
$table->text('reply_message')->nullable();
|
||||
$table->string('ip_address');
|
||||
$table->enum('status', ['0', '1'])->default('0');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('contacts');
|
||||
}
|
||||
};
|
||||
17
database/seeders/ContactSeeder.php
Normal file
17
database/seeders/ContactSeeder.php
Normal file
@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class ContactSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
100
resources/views/dashboard/contacts/index.blade.php
Normal file
100
resources/views/dashboard/contacts/index.blade.php
Normal file
@ -0,0 +1,100 @@
|
||||
@include('partials.dashboard.head')
|
||||
@include('partials.dashboard.sidebar', ['page' => 'contact_messages'])
|
||||
@include('partials.dashboard.header')
|
||||
<!-- content @s -->
|
||||
<div class="nk-content ">
|
||||
<div class="container-fluid">
|
||||
<div class="nk-content-inner">
|
||||
<div class="nk-content-body">
|
||||
<div class="nk-block-head nk-block-head-sm">
|
||||
<div class="nk-block-between">
|
||||
<div class="nk-block-head-content">
|
||||
<h3 class="nk-block-title page-title">{{$title}}</h3>
|
||||
</div><!-- .nk-block-head-content -->
|
||||
<div class="nk-block-head-content">
|
||||
<div class="toggle-wrap nk-block-tools-toggle">
|
||||
<a href="#" class="btn btn-icon btn-trigger toggle-expand me-n1" data-target="pageMenu"><em class="icon ni ni-more-v"></em></a>
|
||||
<div class="toggle-expand-content" data-content="pageMenu">
|
||||
<ul class="nk-block-tools g-3">
|
||||
{{-- <li>
|
||||
<div class="drodown">
|
||||
<a href="#" class="dropdown-toggle btn btn-white btn-dim btn-outline-light" data-bs-toggle="dropdown"><em class="d-none d-sm-inline icon ni ni-calender-date"></em><span><span class="d-none d-md-inline">Last</span> 30 Days</span><em class="dd-indc icon ni ni-chevron-right"></em></a>
|
||||
<div class="dropdown-menu dropdown-menu-end">
|
||||
<ul class="link-list-opt no-bdr">
|
||||
<li><a href="#"><span>Last 30 Days</span></a></li>
|
||||
<li><a href="#"><span>Last 6 Months</span></a></li>
|
||||
<li><a href="#"><span>Last 1 Years</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</li> --}}
|
||||
<li>
|
||||
<div class="drodown">
|
||||
<a href="javascript: void(0);" class="btn btn-white btn-dim btn-outline-light" data-bs-toggle="modal" data-bs-target="#modalFilter"><em class="d-none d-sm-inline icon ni ni-filter"></em><span><span class="d-none d-md-inline">Filter</a>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- .nk-block-head-content -->
|
||||
</div><!-- .nk-block-between -->
|
||||
</div><!-- .nk-block-head -->
|
||||
<div class="nk-block nk-block-lg">
|
||||
<div class="card card-bordered card-preview">
|
||||
<div class="card-inner">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-bordered nowrap" id="contactMessagesTable" border="1">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 10% !important;">No</th>
|
||||
<th>Nama</th>
|
||||
<th>Email</th>
|
||||
<th>Status</th>
|
||||
<th>Tanggal</th>
|
||||
<th style="width: 10% !important;"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal fade" id="modalFilter">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Filter</h5>
|
||||
<a href="javascript:void(0);" class="close" data-bs-dismiss="modal" aria-label="Close">
|
||||
<em class="icon ni ni-cross"></em>
|
||||
</a>
|
||||
</div>
|
||||
<form action="{{route('dashboard.users.filter')}}" class="form-validate is-alter" method="post">
|
||||
@csrf
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<label class="form-label">Status</label>
|
||||
<div class="form-control-wrap">
|
||||
<select class="form-select js-select2" name="status">
|
||||
<option value="all" @selected(isset($status) && $status === 'all')>Semua</option>
|
||||
<option value="waiting" @selected(isset($status) && $status === 'waiting')>Menunggu</option>
|
||||
<option value="active" @selected(isset($status) && $status === 'active')>Aktif</option>
|
||||
<option value="nonactive" @selected(isset($status) && $status === 'nonactive')>Nonaktif</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer bg-light">
|
||||
<span class="sub-text">
|
||||
<button type="submit" class="btn btn-sm btn-primary">Filter</button>
|
||||
</span>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- content @e -->
|
||||
@include('partials.dashboard.footer' ,['datatable' => 'contact_message'])
|
||||
142
resources/views/dashboard/contacts/reply.blade.php
Normal file
142
resources/views/dashboard/contacts/reply.blade.php
Normal file
@ -0,0 +1,142 @@
|
||||
@include('partials.dashboard.head')
|
||||
@include('partials.dashboard.sidebar', ['page' => 'contact_messages'])
|
||||
@include('partials.dashboard.header')
|
||||
<!-- content @s -->
|
||||
<div class="nk-content ">
|
||||
<div class="container-fluid">
|
||||
<div class="nk-content-inner">
|
||||
<div class="nk-content-body">
|
||||
<div class="nk-block-head nk-block-head-sm">
|
||||
<div class="nk-block-between g-3">
|
||||
<div class="nk-block-head-content">
|
||||
<h3 class="nk-block-title page-title">Balas Pesan</h3>
|
||||
<div class="nk-block-des text-soft">
|
||||
<ul class="list-inline">
|
||||
<li>Balas pesan masuk.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="nk-block-head-content">
|
||||
<a href="{{route('dashboard.contact.messages.index')}}" class="btn btn-icon btn-outline-light bg-white d-inline-flex d-sm-none"><em class="icon ni ni-arrow-left"></em></a>
|
||||
<a href="{{route('dashboard.contact.messages.index')}}" class="btn btn-outline-light bg-white d-none d-sm-inline-flex"><em class="icon ni ni-arrow-left"></em><span>Kembali</span></a>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- .nk-block-head -->
|
||||
<div class="nk-block nk-block-lg">
|
||||
<div class="card">
|
||||
<div class="card-aside-wrap">
|
||||
<div class="card-content">
|
||||
<ul class="nav nav-tabs nav-tabs-mb-icon nav-tabs-card">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-primary" href="javascript:void(0);"><em class="icon ni ni-info"></em><span>Detail Informasi</span></a>
|
||||
</li>
|
||||
</ul><!-- .nav-tabs -->
|
||||
<div class="card-inner">
|
||||
<div class="nk-block">
|
||||
{{-- <div class="nk-block-head">
|
||||
<h5 class="title">Personal Information</h5>
|
||||
<p>Basic info, like your name and address, that you use on Nio Platform.</p>
|
||||
</div> --}}
|
||||
<div class="profile-ud-list">
|
||||
<div class="profile-ud-item">
|
||||
<div class="profile-ud wider">
|
||||
<span class="profile-ud-label">Nama</span>
|
||||
<span class="profile-ud-value">{{$contact->name}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="profile-ud-item">
|
||||
<div class="profile-ud wider">
|
||||
<span class="profile-ud-label">Email</span>
|
||||
<span class="profile-ud-value">{{$contact->email}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="profile-ud-item">
|
||||
<div class="profile-ud wider">
|
||||
<span class="profile-ud-label">Nomor Telepon</span>
|
||||
<span class="profile-ud-value">{{$contact->phone_number}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="profile-ud-item">
|
||||
<div class="profile-ud wider">
|
||||
<span class="profile-ud-label">Tanggal</span>
|
||||
<span class="profile-ud-value">{{idn_date($contact->created_at, 'H:i l, d F Y')}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="profile-ud-item">
|
||||
<div class="profile-ud wider">
|
||||
<span class="profile-ud-label">Status</span>
|
||||
@if (filled($contact->deleted_at))
|
||||
<span class="profile-ud-value"><span class="badge bg-danger">Dihapus</span></span>
|
||||
@elseif ($contact->status == '0')
|
||||
<span class="profile-ud-value"><span class="badge bg-warning">Belum Dibalas</span></span>
|
||||
@elseif ($contact->status == '1')
|
||||
<span class="profile-ud-value"><span class="badge bg-primary">Sudah Dibalas</span></span>
|
||||
@else
|
||||
<span class="profile-ud-value"><span class="badge bg-secondary">Tidak Diketahui</span></span>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div><!-- .profile-ud-list -->
|
||||
</div><!-- .nk-block -->
|
||||
{{-- <div class="nk-divider divider md"></div> --}}
|
||||
<div class="nk-block">
|
||||
<div class="nk-block-head nk-block-head-sm nk-block-between">
|
||||
<span class="profile-ud-label">Pesan</span>
|
||||
</div><!-- .nk-block-head -->
|
||||
<div class="bq-note">
|
||||
<div class="bq-note-item">
|
||||
<div class="bq-note-text">
|
||||
{{$contact->message}}
|
||||
</div>
|
||||
</div><!-- .bq-note-item -->
|
||||
</div><!-- .bq-note -->
|
||||
</div><!-- .nk-block -->
|
||||
</div><!-- .card-inner -->
|
||||
</div><!-- .card-content -->
|
||||
</div><!-- .card-aside-wrap -->
|
||||
</div>
|
||||
</div>
|
||||
@if ($contact->status != '1')
|
||||
<div class="nk-block nk-block-lg">
|
||||
<div class="card">
|
||||
<div class="card-aside-wrap">
|
||||
<div class="card-content">
|
||||
<ul class="nav nav-tabs nav-tabs-mb-icon nav-tabs-card">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-primary" href="javascript:void(0);"><em class="icon ni ni-mail"></em><span>Balas Pesan</span></a>
|
||||
</li>
|
||||
</ul><!-- .nav-tabs -->
|
||||
<div class="card-inner">
|
||||
{{-- <div class="nk-divider divider md"></div> --}}
|
||||
<div class="nk-block">
|
||||
<form action="{{route('dashboard.contact.messages.replyAction', ['id' => encrypt_id($contact->id)])}}" method="post" id="myForm">
|
||||
@csrf
|
||||
<div class="bq-note">
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="default-textarea">Pesan Balasan</label>
|
||||
@error('reply_message')
|
||||
<span class="validation-error">{{$message}}</span>
|
||||
@enderror
|
||||
<div class="form-control-wrap">
|
||||
<textarea class="form-control no-resize" id="default-textarea" name="reply_message"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- .bq-note -->
|
||||
<div style="margin-top: 1rem; text-align: right;">
|
||||
<button type="button" class="btn btn-md btn-primary" id="submitButton">Kirim</button>
|
||||
</div>
|
||||
</form>
|
||||
</div><!-- .nk-block -->
|
||||
</div><!-- .card-inner -->
|
||||
</div><!-- .card-content -->
|
||||
</div><!-- .card-aside-wrap -->
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- content @e -->
|
||||
@include('partials.dashboard.footer', ['rich_editor' => false])
|
||||
135
resources/views/dashboard/contacts/show.blade.php
Normal file
135
resources/views/dashboard/contacts/show.blade.php
Normal file
@ -0,0 +1,135 @@
|
||||
@include('partials.dashboard.head')
|
||||
@include('partials.dashboard.sidebar', ['page' => 'contact_messages'])
|
||||
@include('partials.dashboard.header')
|
||||
<!-- content @s -->
|
||||
<div class="nk-content ">
|
||||
<div class="container-fluid">
|
||||
<div class="nk-content-inner">
|
||||
<div class="nk-content-body">
|
||||
<div class="nk-block-head nk-block-head-sm">
|
||||
<div class="nk-block-between g-3">
|
||||
<div class="nk-block-head-content">
|
||||
<h3 class="nk-block-title page-title">Detail Pesan</h3>
|
||||
<div class="nk-block-des text-soft">
|
||||
<ul class="list-inline">
|
||||
<li>Detail pesan dapat dilihat di sini.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="nk-block-head-content">
|
||||
<a href="{{route('dashboard.contact.messages.index')}}" class="btn btn-icon btn-outline-light bg-white d-inline-flex d-sm-none"><em class="icon ni ni-arrow-left"></em></a>
|
||||
<a href="{{route('dashboard.contact.messages.index')}}" class="btn btn-outline-light bg-white d-none d-sm-inline-flex"><em class="icon ni ni-arrow-left"></em><span>Kembali</span></a>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- .nk-block-head -->
|
||||
<div class="nk-block nk-block-lg">
|
||||
<div class="card">
|
||||
<div class="card-aside-wrap">
|
||||
<div class="card-content">
|
||||
<ul class="nav nav-tabs nav-tabs-mb-icon nav-tabs-card">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-primary" href="javascript:void(0);"><em class="icon ni ni-info"></em><span>Detail Informasi</span></a>
|
||||
</li>
|
||||
</ul><!-- .nav-tabs -->
|
||||
<div class="card-inner">
|
||||
<div class="nk-block">
|
||||
{{-- <div class="nk-block-head">
|
||||
<h5 class="title">Personal Information</h5>
|
||||
<p>Basic info, like your name and address, that you use on Nio Platform.</p>
|
||||
</div> --}}
|
||||
<div class="profile-ud-list">
|
||||
<div class="profile-ud-item">
|
||||
<div class="profile-ud wider">
|
||||
<span class="profile-ud-label">Nama</span>
|
||||
<span class="profile-ud-value">{{$contact->name}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="profile-ud-item">
|
||||
<div class="profile-ud wider">
|
||||
<span class="profile-ud-label">Email</span>
|
||||
<span class="profile-ud-value">{{$contact->email}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="profile-ud-item">
|
||||
<div class="profile-ud wider">
|
||||
<span class="profile-ud-label">Nomor Telepon</span>
|
||||
<span class="profile-ud-value">{{$contact->phone_number}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="profile-ud-item">
|
||||
<div class="profile-ud wider">
|
||||
<span class="profile-ud-label">Tanggal</span>
|
||||
<span class="profile-ud-value">{{idn_date($contact->created_at, 'H:i l, d F Y')}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="profile-ud-item">
|
||||
<div class="profile-ud wider">
|
||||
<span class="profile-ud-label">Status</span>
|
||||
@if (filled($contact->deleted_at))
|
||||
<span class="profile-ud-value"><span class="badge bg-danger">Dihapus</span></span>
|
||||
@elseif ($contact->status == '0')
|
||||
<span class="profile-ud-value"><span class="badge bg-warning">Belum Dibalas</span></span>
|
||||
@elseif ($contact->status == '1')
|
||||
<span class="profile-ud-value"><span class="badge bg-primary">Sudah Dibalas</span></span>
|
||||
@else
|
||||
<span class="profile-ud-value"><span class="badge bg-secondary">Tidak Diketahui</span></span>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div><!-- .profile-ud-list -->
|
||||
</div><!-- .nk-block -->
|
||||
{{-- <div class="nk-divider divider md"></div> --}}
|
||||
<div class="nk-block">
|
||||
<div class="nk-block-head nk-block-head-sm nk-block-between">
|
||||
<span class="profile-ud-label">Pesan</span>
|
||||
</div><!-- .nk-block-head -->
|
||||
<div class="bq-note">
|
||||
<div class="bq-note-item">
|
||||
<div class="bq-note-text">
|
||||
{{$contact->message}}
|
||||
</div>
|
||||
</div><!-- .bq-note-item -->
|
||||
</div><!-- .bq-note -->
|
||||
</div><!-- .nk-block -->
|
||||
</div><!-- .card-inner -->
|
||||
</div><!-- .card-content -->
|
||||
</div><!-- .card-aside-wrap -->
|
||||
</div>
|
||||
</div>
|
||||
@if ($contact->status === '1')
|
||||
<div class="nk-block nk-block-lg">
|
||||
<div class="card">
|
||||
<div class="card-aside-wrap">
|
||||
<div class="card-content">
|
||||
<ul class="nav nav-tabs nav-tabs-mb-icon nav-tabs-card">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-primary" href="javascript:void(0);"><em class="icon ni ni-mail"></em><span>Balasan Pesan</span></a>
|
||||
</li>
|
||||
</ul><!-- .nav-tabs -->
|
||||
<div class="card-inner">
|
||||
{{-- <div class="nk-divider divider md"></div> --}}
|
||||
<div class="nk-block">
|
||||
<div class="nk-block-head nk-block-head-sm nk-block-between">
|
||||
<span class="profile-ud-label">Pesan Balasan</span>
|
||||
</div><!-- .nk-block-head -->
|
||||
<div class="bq-note">
|
||||
<div class="bq-note-item">
|
||||
<div class="bq-note-text">
|
||||
{{$contact->reply_message}}
|
||||
</div>
|
||||
</div><!-- .bq-note-item -->
|
||||
</div><!-- .bq-note -->
|
||||
</div><!-- .nk-block -->
|
||||
</div><!-- .card-inner -->
|
||||
</div><!-- .card-content -->
|
||||
</div><!-- .card-aside-wrap -->
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- content @e -->
|
||||
@include('partials.dashboard.footer', ['rich_editor' => false])
|
||||
0
resources/views/emails/contact/message.blade.php
Normal file
0
resources/views/emails/contact/message.blade.php
Normal file
@ -117,7 +117,8 @@
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12">
|
||||
<div class="bg-very-light-gray p-7 border-radius-8px">
|
||||
<form action="email-templates/contact-form.php" method="post" class="contact-form-style-05">
|
||||
<form action="{{route('homepage.contacts.receive.message')}}" method="post" class="contact-form-style-05">
|
||||
@csrf
|
||||
<div class="col-12 text-center mb-5" data-anime='{ "el": "childs", "translateY": [30, 0], "opacity": [0,1], "duration": 600, "delay": 100, "staggervalue": 300, "easing": "easeOutQuad" }'>
|
||||
<span class="text-base-color fw-600 mb-5px text-uppercase d-block">Lebih mudah</span>
|
||||
<h2 class="text-dark-gray fw-700 ls-minus-1px">Hubungi kami</h2>
|
||||
@ -126,7 +127,7 @@
|
||||
<div class="col-md-6 sm-mb-30px">
|
||||
<input class="mb-30px form-control bg-white required" type="text" name="name" placeholder="Nama Anda*" />
|
||||
<input class="mb-30px form-control bg-white required" type="email" name="email" placeholder="Alamat email Anda*" />
|
||||
<input class="form-control bg-white" type="tel" name="phone" placeholder="Nomor telepon Anda*" />
|
||||
<input class="form-control bg-white" type="tel" name="phone_number" placeholder="Nomor telepon Anda*" />
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<textarea class="h-100 form-control bg-white" name="message" cols="40" rows="6" placeholder="Pesan Anda"></textarea>
|
||||
@ -136,7 +137,7 @@
|
||||
</div>
|
||||
<div class="col-md-6 text-center text-md-end mt-30px sm-mt-20px">
|
||||
<input type="hidden" name="redirect" value="">
|
||||
<button class="btn btn-medium btn-dark-gray btn-box-shadow btn-rounded submit" type="submit">Kirim pesan</button>
|
||||
<button class="btn btn-medium btn-dark-gray btn-box-shadow btn-rounded" type="submit">Kirim pesan</button>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<div class="form-results mt-20px d-none"></div>
|
||||
|
||||
@ -1206,6 +1206,41 @@
|
||||
</script>
|
||||
@endif
|
||||
|
||||
@if ($datatable === 'contact_message')
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#contactMessagesTable').DataTable({
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
ajax: {
|
||||
url: '{{ route('dashboard.contact.messages.data') }}',
|
||||
type: 'GET',
|
||||
data: function(d) {
|
||||
d.status = '{{ $status }}';
|
||||
}
|
||||
},
|
||||
columns: [
|
||||
{ data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false },
|
||||
{ data: 'name', name: 'name' },
|
||||
{ data: 'email', name: 'email' },
|
||||
{ data: 'status', name: 'status' },
|
||||
{ data: 'date', name: 'date' },
|
||||
{ data: 'action', name: 'action', orderable: false, searchable: false },
|
||||
{ data: 'created_at', name: 'created_at', visible: false },
|
||||
{ data: 'id', name: 'id', orderable: true, searchable: false, visible: false },
|
||||
],
|
||||
language: datatableLanguage,
|
||||
responsive: true,
|
||||
autoWidth: false,
|
||||
order: [[5, 'desc']],
|
||||
pagingType: "simple",
|
||||
lengthMenu: [[10, 25, 50, 100, -1], ['Tampilkan 10 data', 'Tampilkan 25 data', 'Tampilkan 50 data', 'Tampilkan 100 data', 'Tampilkan semua']],
|
||||
scrollX: true
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endif
|
||||
|
||||
@if ($datatable === 'user')
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
|
||||
@ -196,6 +196,17 @@
|
||||
</li><!-- .nk-menu-item -->
|
||||
@endif
|
||||
@endif
|
||||
@if (is_role(['1', '2', '4']))
|
||||
<li class="nk-menu-heading">
|
||||
<h6 class="overline-title text-primary-alt">Kontak</h6>
|
||||
</li><!-- .nk-menu-item -->
|
||||
<li class="nk-menu-item">
|
||||
<a href="{{route('dashboard.contact.messages.index')}}" class="nk-menu-link {{$page === 'contac_messages' ? 'active-page' : ''}}">
|
||||
<span class="nk-menu-icon"><em class="icon ni ni-mail"></em></span>
|
||||
<span class="nk-menu-text">Pesan</span>
|
||||
</a>
|
||||
</li><!-- .nk-menu-item -->
|
||||
@endif
|
||||
@if (is_role(['1']))
|
||||
<li class="nk-menu-heading">
|
||||
<h6 class="overline-title text-primary-alt">Autentikasi</h6>
|
||||
|
||||
@ -5,6 +5,7 @@
|
||||
use App\Http\Controllers\Dashboard\AnnouncementController;
|
||||
use App\Http\Controllers\Dashboard\ClassificationController;
|
||||
use App\Http\Controllers\Dashboard\CompanyController;
|
||||
use App\Http\Controllers\Dashboard\ContactController;
|
||||
use App\Http\Controllers\Dashboard\ContentRecapClassificationController;
|
||||
use App\Http\Controllers\Dashboard\ContentRecapController;
|
||||
use App\Http\Controllers\Dashboard\CooperationArchiveController;
|
||||
@ -51,6 +52,8 @@
|
||||
|
||||
Route::prefix('contacts')->name('contacts.')->group(function(){
|
||||
Route::get('/', 'contact')->name('index');
|
||||
Route::post('/', 'receiveMessage')->name('receive.message');
|
||||
// Route::post('/', 'receiveMessage')->name('receive.message')->middleware('throttle:contact_message');
|
||||
});
|
||||
|
||||
Route::get('/errors/{code}', 'customError')->name('error.custom');
|
||||
@ -65,7 +68,7 @@
|
||||
Route::get('/register', 'register')->name('register')->middleware('authenticated');
|
||||
Route::post('/register', 'registerAction')->name('register.action');
|
||||
Route::get('/register-success', 'registerSuccess')->name('register.success')->middleware('authenticated');
|
||||
Route::get('/logout', 'logout')->name('logout');
|
||||
Route::get('/logout', 'logout')->name('logout' );
|
||||
});
|
||||
});
|
||||
});
|
||||
@ -572,6 +575,22 @@
|
||||
});
|
||||
});
|
||||
|
||||
Route::prefix('contact-messages')->name('contact.messages.')->group(function(){
|
||||
Route::controller(ContactController::class)->group(function(){
|
||||
Route::middleware(['role:1'])->group(function(){
|
||||
Route::get('/', 'index')->name('index');
|
||||
Route::get('/{id}/show', 'show')->name('show');
|
||||
|
||||
Route::get('/{id}/reply', 'reply')->name('reply');
|
||||
Route::post('/{id}/reply', 'replyAction')->name('replyAction');
|
||||
|
||||
Route::delete('/{id}', 'destroy')->name('destroy');
|
||||
});
|
||||
});
|
||||
|
||||
Route::get('/data', [DatatableController::class, 'contactMessage'])->name('data');
|
||||
});
|
||||
|
||||
Route::prefix('users')->name('users.')->group(function(){
|
||||
Route::controller(UserController::class)->group(function(){
|
||||
Route::middleware(['role:1'])->group(function(){
|
||||
|
||||
Loading…
Reference in New Issue
Block a user