feat: Implement Event management features including CRUD operations and routing
This commit is contained in:
147
Modules/CCMS/app/Http/Controllers/EventController.php
Normal file
147
Modules/CCMS/app/Http/Controllers/EventController.php
Normal file
@@ -0,0 +1,147 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\CCMS\Http\Controllers;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Str;
|
||||
use Modules\CCMS\Models\Event;
|
||||
use Yajra\DataTables\Facades\DataTables;
|
||||
|
||||
class EventController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
if (request()->ajax()) {
|
||||
$model = Event::query()->orderBy('order');
|
||||
return DataTables::eloquent($model)
|
||||
->addIndexColumn()
|
||||
->setRowClass('tableRow')
|
||||
->editColumn('image', function (Event $event) {
|
||||
return $event->getRawOriginal('image') ? "<img src='{$event->image}' alt='{$event->title}' class='rounded avatar-sm material-shadow ms-2 img-thumbnail'>" : '-';
|
||||
})
|
||||
->editColumn('parent_id', function (Event $event) {
|
||||
return $event->parent ? "<span class='badge bg-primary p-1'>{$event->parent?->title}</span>" : '-';
|
||||
})
|
||||
->editColumn('status', function (Event $event) {
|
||||
$status = $event->status ? 'Published' : 'Draft';
|
||||
$color = $event->status ? 'text-success' : 'text-danger';
|
||||
return "<p class='{$color}'>{$status}</p>";
|
||||
})
|
||||
->addColumn('action', 'ccms::event.datatable.action')
|
||||
->rawColumns(['parent_id', 'image', 'status', 'action'])
|
||||
->toJson();
|
||||
}
|
||||
|
||||
return view('ccms::event.index', [
|
||||
'title' => 'Event List',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$eventOptions = Event::where('status', 1)->pluck('title', 'id');
|
||||
return view('ccms::event.create', [
|
||||
'title' => 'Create Event',
|
||||
'editable' => false,
|
||||
'eventOptions' => $eventOptions
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$maxOrder = Event::max('order');
|
||||
$order = $maxOrder ? ++$maxOrder : 1;
|
||||
|
||||
$request->mergeIfMissing([
|
||||
'slug' => Str::slug($request->title),
|
||||
'order' => $order,
|
||||
]);
|
||||
|
||||
|
||||
|
||||
$validated = $request->validate([
|
||||
'title' => 'required',
|
||||
]);
|
||||
Event::create($request->all());
|
||||
flash()->success("Event has been created!");
|
||||
return redirect()->route('event.index');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the specified resource.
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
return view('ccms::show');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*/
|
||||
public function edit($id)
|
||||
{
|
||||
$eventOptions = Event::where('status', 1)->pluck('title', 'id');
|
||||
$event = Event::findOrFail($id);
|
||||
return view('ccms::event.edit', [
|
||||
'title' => 'Edit Event',
|
||||
'editable' => true,
|
||||
'event' => $event,
|
||||
'eventOptions' => $eventOptions
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$request->merge([
|
||||
'slug' => Str::slug($request->title),
|
||||
]);
|
||||
$validated = $request->validate([]);
|
||||
$event = Event::findOrFail($id);
|
||||
$event->update($request->all());
|
||||
flash()->success("Event has been updated.");
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
$event = Event::findOrFail($id);
|
||||
$event->delete();
|
||||
return response()->json(['status' => 200, 'message' => "Event has been deleted."], 200);
|
||||
}
|
||||
|
||||
public function reorder(Request $request)
|
||||
{
|
||||
$events = Event::all();
|
||||
foreach ($events as $event) {
|
||||
foreach ($request->order as $order) {
|
||||
if ($order['id'] == $event->id) {
|
||||
$event->update(['order' => $order['position']]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return response(['status' => true, 'message' => 'Reordered successfully'], 200);
|
||||
}
|
||||
|
||||
public function toggle($id)
|
||||
{
|
||||
$event = Event::findOrFail($id);
|
||||
$event->update(['status' => !$event->status]);
|
||||
return response(['status' => 200, 'message' => 'Toggled successfully'], 200);
|
||||
}
|
||||
}
|
113
Modules/CCMS/app/Models/Event.php
Normal file
113
Modules/CCMS/app/Models/Event.php
Normal file
@@ -0,0 +1,113 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\CCMS\Models;
|
||||
|
||||
use App\Traits\CreatedUpdatedBy;
|
||||
use Illuminate\Database\Eloquent\Casts\Attribute;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Modules\CCMS\Traits\UpdateCustomFields;
|
||||
use Modules\Document\Models\Document;
|
||||
use App\Traits\AddToDocumentCollection;
|
||||
|
||||
class Event extends Model
|
||||
{
|
||||
use HasFactory, UpdateCustomFields, AddToDocumentCollection, CreatedUpdatedBy;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*/
|
||||
protected $fillable = [
|
||||
'title',
|
||||
'slug',
|
||||
'short_description',
|
||||
'description',
|
||||
'parent_id',
|
||||
'icon_class',
|
||||
'icon_image',
|
||||
'image',
|
||||
'images',
|
||||
'start_date',
|
||||
'end_date',
|
||||
'custom',
|
||||
'banner',
|
||||
'meta_title',
|
||||
'meta_description',
|
||||
'meta_keywords',
|
||||
'sidebar_title',
|
||||
'sidebar_content',
|
||||
'sidebar_image',
|
||||
'button_text',
|
||||
'button_url',
|
||||
'button_target',
|
||||
'status',
|
||||
'createdby',
|
||||
'updatedby',
|
||||
'order',
|
||||
];
|
||||
|
||||
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'custom' => 'array',
|
||||
];
|
||||
}
|
||||
|
||||
protected function images(): Attribute
|
||||
{
|
||||
return Attribute::make(
|
||||
get: function ($value) {
|
||||
if (empty($value)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$parts = explode(',', $value);
|
||||
return array_map(fn($part) => asset(trim($part)), $parts);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
protected function image(): Attribute
|
||||
{
|
||||
return Attribute::make(
|
||||
get: fn($value) => asset($value),
|
||||
);
|
||||
}
|
||||
|
||||
protected function banner(): Attribute
|
||||
{
|
||||
return Attribute::make(
|
||||
get: fn($value) => asset($value),
|
||||
);
|
||||
}
|
||||
|
||||
protected function sidebarImage(): Attribute
|
||||
{
|
||||
return Attribute::make(
|
||||
get: fn($value) => asset($value),
|
||||
);
|
||||
}
|
||||
|
||||
protected function iconImage(): Attribute
|
||||
{
|
||||
return Attribute::make(
|
||||
get: fn($value) => asset($value),
|
||||
);
|
||||
}
|
||||
|
||||
public function children()
|
||||
{
|
||||
return $this->hasMany(Event::class, 'parent_id');
|
||||
}
|
||||
|
||||
public function parent()
|
||||
{
|
||||
return $this->belongsTo(Event::class, 'parent_id');
|
||||
}
|
||||
|
||||
public function documents()
|
||||
{
|
||||
return $this->morphMany(Document::class, 'documentable');
|
||||
}
|
||||
}
|
@@ -0,0 +1,58 @@
|
||||
<?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('events', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->text('title');
|
||||
$table->text('slug')->nullable();
|
||||
$table->text('short_description')->nullable();
|
||||
$table->longText('description')->nullable();
|
||||
$table->json('custom')->nullable();
|
||||
$table->integer('parent_id')->unsigned()->nullable();
|
||||
|
||||
$table->string('image')->nullable();
|
||||
$table->string('banner')->nullable();
|
||||
|
||||
$table->text('images')->nullable();
|
||||
$table->date('start_date')->nullable();
|
||||
$table->date('end_date')->nullable();
|
||||
$table->text('meta_title')->nullable();
|
||||
$table->text('meta_description')->nullable();
|
||||
$table->text('meta_keywords')->nullable();
|
||||
|
||||
$table->text('sidebar_title')->nullable();
|
||||
$table->mediumText('sidebar_content')->nullable();
|
||||
$table->string('sidebar_image')->nullable();
|
||||
|
||||
$table->string('button_text')->nullable();
|
||||
$table->string('button_url')->nullable();
|
||||
$table->string('button_target')->nullable();
|
||||
|
||||
$table->integer('status')->default(1);
|
||||
$table->string('icon_class')->nullable();
|
||||
$table->string('icon_image')->nullable();
|
||||
$table->integer('createdby')->unsigned()->nullable();
|
||||
$table->integer('updatedby')->unsigned()->nullable();
|
||||
$table->integer('order')->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('events');
|
||||
}
|
||||
};
|
16
Modules/CCMS/resources/views/event/create.blade.php
Normal file
16
Modules/CCMS/resources/views/event/create.blade.php
Normal file
@@ -0,0 +1,16 @@
|
||||
@extends('layouts.app')
|
||||
@section('content')
|
||||
<x-dashboard.breadcumb :title="$title" />
|
||||
<div class="container-fluid">
|
||||
@if ($errors->any())
|
||||
<x-flash-message type="danger" :messages="$errors->all()" />
|
||||
@endif
|
||||
<div class="row">
|
||||
<div class="col-xl-12">
|
||||
{{ html()->form('POST')->route('event.store')->class('needs-validation')->attributes(['novalidate'])->open() }}
|
||||
@include('ccms::event.partials._form')
|
||||
{{ html()->form()->close() }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
@@ -0,0 +1,12 @@
|
||||
<div class="hstack flex-wrap gap-3">
|
||||
<a href="{{ route('event.edit', $id) }}" data-bs-toggle="tooltip"
|
||||
data-bs-placement="bottom" data-bs-title="Edit" class="link-success fs-15 edit-item-btn"><i
|
||||
class=" ri-edit-2-line"></i></a>
|
||||
|
||||
<a data-link="{{ route('event.toggle', $id) }}" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-title="Toggle" data-status="{{ $status == 1 ? 'Draft' : 'Published' }}"
|
||||
class="link-info fs-15 toggle-item"><i class="{{ $status == 1 ? 'ri-toggle-line' : 'ri-toggle-fill' }}"></i></a>
|
||||
|
||||
<a href="javascript:void(0);" data-link="{{ route('event.destroy', $id) }}" class="link-danger fs-15 remove-item"
|
||||
data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-title="Delete"><i class="ri-delete-bin-6-line"></i>
|
||||
</a>
|
||||
</div>
|
16
Modules/CCMS/resources/views/event/edit.blade.php
Normal file
16
Modules/CCMS/resources/views/event/edit.blade.php
Normal file
@@ -0,0 +1,16 @@
|
||||
@extends('layouts.app')
|
||||
@section('content')
|
||||
<x-dashboard.breadcumb :title="$title" />
|
||||
<div class="container-fluid">
|
||||
@if ($errors->any())
|
||||
<x-flash-message type="danger" :messages="$errors->all()" />
|
||||
@endif
|
||||
<div class="row">
|
||||
<div class="col-xl-12">
|
||||
{{ html()->modelForm($event, 'PUT')->route('event.update', $event->id)->class('needs-validation')->attributes(['novalidate'])->open() }}
|
||||
@include('ccms::event.partials._form')
|
||||
{{ html()->closeModelForm() }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
50
Modules/CCMS/resources/views/event/index.blade.php
Normal file
50
Modules/CCMS/resources/views/event/index.blade.php
Normal file
@@ -0,0 +1,50 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container-fluid">
|
||||
<x-dashboard.breadcumb :title="$title" />
|
||||
@if ($errors->any())
|
||||
<x-flash-message type="danger" :messages="$errors->all()" />
|
||||
@endif
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xl-12">
|
||||
<div class="card">
|
||||
<div class="card-header d-flex align-items-center justify-content-between">
|
||||
<h5 class="card-title mb-0">{{ $title }}</h5>
|
||||
<a href="{{ route('event.create') }}" class="btn btn-primary waves-effect waves-light text-white"><i
|
||||
class="ri-add-line align-middle"></i> Create</a>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
@php
|
||||
$columns = [
|
||||
[
|
||||
'title' => 'S.N',
|
||||
'data' => 'DT_RowIndex',
|
||||
'name' => 'DT_RowIndex',
|
||||
'orderable' => false,
|
||||
'searchable' => false,
|
||||
'sortable' => false,
|
||||
],
|
||||
['title' => 'Image', 'data' => 'image', 'name' => 'image'],
|
||||
['title' => 'Parent', 'data' => 'parent_id', 'name' => 'parent_ids'],
|
||||
['title' => 'Title', 'data' => 'title', 'name' => 'title'],
|
||||
['title' => 'Start Date', 'data' => 'start_date', 'name' => 'start_date'],
|
||||
['title' => 'End Date', 'data' => 'end_date', 'name' => 'end_date'],
|
||||
['title' => 'Slug', 'data' => 'slug', 'name' => 'slug'],
|
||||
['title' => 'Status', 'data' => 'status', 'name' => 'status'],
|
||||
[
|
||||
'title' => 'Action',
|
||||
'data' => 'action',
|
||||
'orderable' => false,
|
||||
'searchable' => false,
|
||||
],
|
||||
];
|
||||
@endphp
|
||||
<x-data-table-script :route="route('event.index')" :reorder="route('event.reorder')" :columns="$columns" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
196
Modules/CCMS/resources/views/event/partials/_form.blade.php
Normal file
196
Modules/CCMS/resources/views/event/partials/_form.blade.php
Normal file
@@ -0,0 +1,196 @@
|
||||
<div class="row">
|
||||
<div class="col-xl-8">
|
||||
<div class="card h-auto">
|
||||
<div class="card-body">
|
||||
<div class="row gy-3">
|
||||
<div class="col-12">
|
||||
{{ html()->label('Title')->class('form-label')->for('title') }}
|
||||
{{ html()->span('*')->class('text-danger') }}
|
||||
{{ html()->text('title')->class('form-control')->placeholder('Enter Event Title')->required(true) }}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{{ html()->label('Start Date')->class('form-label') }}
|
||||
<div class="input-group">
|
||||
{{ html()->text('start_date')->class('form-control')->id('event-start-date')->placeholder('Event Start Date')->attributes([
|
||||
'data-provider' => 'flatpickr',
|
||||
'data-date-format' => 'Y-m-d',
|
||||
'data-enable-time' => '',
|
||||
])->required() }}
|
||||
<span class="input-group-text"><i class="ri-calendar-event-line"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{{ html()->label('End Date')->class('form-label') }}
|
||||
<div class="input-group">
|
||||
{{ html()->text('end_date')->class('form-control')->id('event-end-date')->placeholder('Event End Date')->attributes([
|
||||
'data-provider' => 'flatpickr',
|
||||
'data-date-format' => 'Y-m-d',
|
||||
'data-enable-time' => '',
|
||||
]) }}
|
||||
<span class="input-group-text"><i class="ri-calendar-event-line"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
{{ html()->label('Description (Short)')->class('form-label')->for('short_description') }}
|
||||
{{ html()->textarea('short_description')->class('form-control')->placeholder('Enter Description (Short)')->rows(5) }}
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
{{ html()->label('Description')->class('form-label')->for('description') }}
|
||||
{{ html()->textarea('description')->class('form-control ckeditor-classic')->placeholder('Enter Description') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<x-ccms::custom-form-field :data="$event->custom ?? []" />
|
||||
|
||||
<div class="card meta-section">
|
||||
<div class="card-header">
|
||||
<h6 class="card-title mb-0 fs-14">Meta</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-xl-12 col-sm-12">
|
||||
{{ html()->label('Meta Title')->class('form-label')->for('meta_title') }}
|
||||
{{ html()->text('meta_title')->class('form-control mb-3')->placeholder('Meta Title') }}
|
||||
</div>
|
||||
<div class="col-xl-12 col-sm-12">
|
||||
{{ html()->label('Meta Keywords')->class('form-label')->for('meta_keywords') }}
|
||||
{{ html()->textarea('meta_keywords')->class('form-control mb-3')->placeholder('Meta Keywords') }}
|
||||
</div>
|
||||
|
||||
<div class="col-xl-12 col-sm-12">
|
||||
{{ html()->label('Meta Description')->class('form-label')->for('meta_description') }}
|
||||
{{ html()->textarea('meta_description')->class('form-control mb-3')->placeholder('Meta wire:Description')->rows(3) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xl-4">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h6 class="card-title mb-0 fs-14">
|
||||
Published
|
||||
</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
{{ html()->label('Status')->class('form-label visually-hidden')->for('status') }}
|
||||
{{ html()->select('status', config('constants.page_status_options'))->class('form-select choices-select') }}
|
||||
</div>
|
||||
|
||||
<x-form-buttons :href="route('event.index')" :label="isset($event) ? 'Update' : 'Create'" />
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h6 class="card-title mb-0 fs-14">
|
||||
Page Attributes
|
||||
</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
{{ html()->label('Parent Event')->class('form-label')->for('parent_id') }}
|
||||
{{ html()->select('parent_id', $eventOptions ?? [])->value($event->parent_id ?? old('parent_id'))->class('form-select choices-select')->placeholder('Select') }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card media-gallery-section">
|
||||
<div class="card-header">
|
||||
<h6 class="card-title mb-0 fs-14">
|
||||
Icon
|
||||
</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="mb-3">
|
||||
{{ html()->label('Icon')->class('form-label')->for('icon_class') }}
|
||||
{{ html()->text('icon_class')->class('form-control')->placeholder('Icon class') }}
|
||||
</div>
|
||||
|
||||
{{ html()->label('Icon Image')->class('form-label')->for('icon_image') }}
|
||||
<x-image-input :data="$editable ? $event->getRawOriginal('icon_image') : null" id="icon_image" name="icon_image" :editable="$editable" :multiple=false />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="card featured-image-section">
|
||||
<div class="card-header">
|
||||
<h6 class="card-title mb-0 fs-14">
|
||||
Featured Image
|
||||
</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="mb-3">
|
||||
{{ html()->label('Featured')->class('form-label')->for('image') }}
|
||||
<x-image-input :data="$editable ? $event->getRawOriginal('image') : null" id="image" name="image" :editable="$editable" :multiple=false />
|
||||
</div>
|
||||
|
||||
{{ html()->label('Banner')->class('form-label')->for('banner') }}
|
||||
<x-image-input :data="$editable ? $event->getRawOriginal('banner') : null" id="banner" name="banner" :editable="$editable" :multiple=false />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card media-gallery-section">
|
||||
<div class="card-header">
|
||||
<h6 class="card-title mb-0 fs-14">
|
||||
Media Gallery
|
||||
</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<x-image-input :editable="$editable" id="images" name="images" :data="$editable ? $event->getRawOriginal('images') : null" :multiple="true"
|
||||
label="Select Images" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card sidebar-section">
|
||||
<div class="card-header d-flex jusitfy-content-between align-items-center">
|
||||
<h6 class="card-title mb-0 fs-14">Sidebar</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row gy-3">
|
||||
<div class="col-lg-12">
|
||||
{{ html()->label('Title')->class('form-label')->for('sidebar_title') }}
|
||||
{{ html()->text('sidebar_title')->class('form-control') }}
|
||||
</div>
|
||||
<div class="col-lg-12">
|
||||
{{ html()->label('Content')->class('form-label')->for('sidebar_content') }}
|
||||
{{ html()->textarea('sidebar_content')->class('form-control')->placeholder('Short Content (optional)')->rows(3) }}
|
||||
</div>
|
||||
|
||||
<div class="col-lg-12">
|
||||
{{ html()->label('Image')->class('form-label')->for('sidebar_content') }}
|
||||
<x-image-input :data="$editable ? $event->getRawOriginal('sidebar_image') : null" id="sidebar_image" name="sidebar_image" :editable="$editable"
|
||||
:multiple=false />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card button-section">
|
||||
<div class="card-header d-flex jusitfy-content-between align-items-center">
|
||||
<h6 class="card-title mb-0 fs-14">Button</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row gy-3">
|
||||
<div class="col-lg-12">
|
||||
{{ html()->label('Text')->class('form-label')->for('button_text') }}
|
||||
{{ html()->text('button_text')->class('form-control') }}
|
||||
</div>
|
||||
<div class="col-lg-12">
|
||||
{{ html()->label('Link')->class('form-label')->for('button_url') }}
|
||||
{{ html()->text('button_url')->class('form-control')->placeholder('Button Link') }}
|
||||
</div>
|
||||
|
||||
<div class="col-lg-12">
|
||||
{{ html()->label('Target')->class('form-label')->for('button_target') }}
|
||||
{{ html()->select('button_target', config('constants.redirect_options'))->class('form-select choices-select') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@@ -8,6 +8,7 @@ use Modules\CCMS\Http\Controllers\CounselorController;
|
||||
use Modules\CCMS\Http\Controllers\CounterController;
|
||||
use Modules\CCMS\Http\Controllers\CountryController;
|
||||
use Modules\CCMS\Http\Controllers\EnquiryController;
|
||||
use Modules\CCMS\Http\Controllers\EventController;
|
||||
use Modules\CCMS\Http\Controllers\FaqCategoryController;
|
||||
use Modules\CCMS\Http\Controllers\FaqController;
|
||||
use Modules\CCMS\Http\Controllers\FranchiseController;
|
||||
@@ -33,7 +34,7 @@ use Modules\CCMS\Http\Controllers\TestimonialController;
|
||||
| Here is where you can register web routes for your application. These
|
||||
| routes are loaded by the RouteServiceProvider within a group which
|
||||
| contains the "web" middleware group. Now create something great!
|
||||
|
|
||||
|Eventcontr
|
||||
*/
|
||||
|
||||
Route::group(['middleware' => ['web', 'auth', 'permission'], 'prefix' => 'admin/'], function () {
|
||||
@@ -85,6 +86,10 @@ Route::group(['middleware' => ['web', 'auth', 'permission'], 'prefix' => 'admin/
|
||||
Route::get('service/toggle/{id}', [ServiceController::class, 'toggle'])->name('service.toggle');
|
||||
Route::resource('service', ServiceController::class)->names('service');
|
||||
|
||||
Route::post('event/reorder', [EventController::class, 'reorder'])->name('event.reorder');
|
||||
Route::get('event/toggle/{id}', [EventController::class, 'toggle'])->name('event.toggle');
|
||||
Route::resource('event', EventController::class)->names('event');
|
||||
|
||||
Route::post('branch/reorder', [BranchController::class, 'reorder'])->name('branch.reorder');
|
||||
Route::get('branch/toggle/{id}', [BranchController::class, 'toggle'])->name('branch.toggle');
|
||||
Route::resource('branch', BranchController::class)->names('branch');
|
||||
|
@@ -16,10 +16,9 @@ use Modules\Meeting\Http\Controllers\MeetingController;
|
||||
*/
|
||||
|
||||
Route::group(['middleware' => ['web', 'auth', 'permission'], 'prefix' => 'admin/'], function () {
|
||||
Route::resource('event', EventController::class)->names('event');
|
||||
// Route::resource('event', EventController::class)->names('event');
|
||||
|
||||
Route::post('meeting/sub-task', [MeetingController::class, 'storeSubTask'])->name('meeting.storeSubTask');
|
||||
Route::resource('meeting', MeetingController::class)->names('meeting');
|
||||
Route::get('meeting/{id}/send-email', [MeetingController::class, 'sendEmail'])->name('meeting.sendmail');
|
||||
|
||||
});
|
||||
|
@@ -66,13 +66,13 @@ return [
|
||||
[
|
||||
'text' => 'Franchise Request',
|
||||
'url' => 'admin/franchise',
|
||||
// 'can' => ['franchise.index'],
|
||||
'can' => ['franchise.index'],
|
||||
],
|
||||
|
||||
[
|
||||
'text' => 'Newsletter',
|
||||
'url' => 'admin/newsletter',
|
||||
// 'can' => ['newsletter.index'],
|
||||
'can' => ['newsletter.index'],
|
||||
],
|
||||
],
|
||||
],
|
||||
@@ -133,6 +133,14 @@ return [
|
||||
'can' => ['service.index'],
|
||||
],
|
||||
|
||||
[
|
||||
'text' => 'Events',
|
||||
'url' => 'admin/event',
|
||||
'icon' => 'ri-feedback-line',
|
||||
'module' => 'CCMS',
|
||||
'can' => ['event.index'],
|
||||
],
|
||||
|
||||
[
|
||||
'text' => 'Team',
|
||||
'url' => 'admin/team',
|
||||
|
Reference in New Issue
Block a user