feat: announcement
This commit is contained in:
parent
859502a7e2
commit
52dd954e54
@ -154,3 +154,20 @@ function slugify($param) {
|
||||
return Str::slug($param);
|
||||
}
|
||||
}
|
||||
|
||||
if (! function_exists('get_unread_announcements')) {
|
||||
function get_unread_announcements() {
|
||||
$user = User::findOrFail(Auth::id());
|
||||
if($user->role_id === 3){
|
||||
$mediaId = $user->company->media->id;
|
||||
|
||||
$media = Media::with('announcements')->findOrFail($mediaId);
|
||||
return $media->announcements()
|
||||
->wherePivot('status', '=', '0')
|
||||
->count();
|
||||
|
||||
}else{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
121
app/Http/Controllers/Dashboard/AnnouncementController.php
Normal file
121
app/Http/Controllers/Dashboard/AnnouncementController.php
Normal file
@ -0,0 +1,121 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Dashboard;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\AnnouncementRequest;
|
||||
use App\Models\Announcement;
|
||||
use App\Models\Media;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class AnnouncementController extends Controller
|
||||
{
|
||||
public function index(){
|
||||
if(is_role(['1'])){
|
||||
return view('dashboard.announcements.index', [
|
||||
'title' => 'Pengumuman'
|
||||
]);
|
||||
}else if(is_role(['3'])){
|
||||
return view('dashboard.announcements.media.index', [
|
||||
'title' => 'Pengumuman'
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
public function create(){
|
||||
return view('dashboard.announcements.create', [
|
||||
'title' => 'Tambah Pengumuman',
|
||||
'media' => Media::all()
|
||||
]);
|
||||
}
|
||||
|
||||
public function store(AnnouncementRequest $request){
|
||||
$validatedData = $request->validated();
|
||||
$validatedData['enhancer_id'] = Auth::id();
|
||||
|
||||
$announcement = Announcement::create($validatedData);
|
||||
$announcement->media()->attach($validatedData['media_ids']);
|
||||
|
||||
if ($announcement->media()->count() > 0) {
|
||||
return redirect()->back()->with('success-status', 'Berhasil membuat pengumuman.');
|
||||
} else {
|
||||
return redirect()->back()->with('failed-status', 'Gagal membuat pengumuman');
|
||||
}
|
||||
}
|
||||
|
||||
public function edit($id){
|
||||
$announcement = Announcement::with(['media'])->findOrFail(decrypt_id($id));
|
||||
|
||||
return view('dashboard.announcements.edit', [
|
||||
'title' => 'Tambah Pengumuman',
|
||||
'announcement' => $announcement,
|
||||
'media' => Media::all(),
|
||||
'selectedMediaIds' => $announcement->media->pluck('id')->toArray()
|
||||
]);
|
||||
}
|
||||
|
||||
public function update(AnnouncementRequest $request, $id){
|
||||
$validatedData = $request->validated();
|
||||
$validatedData['enhancer_id'] = Auth::id();
|
||||
|
||||
$announcement = Announcement::with(['media'])->findOrFail(decrypt_id($id));
|
||||
|
||||
$announcement->update($validatedData);
|
||||
if ($request->has('media_ids')) {
|
||||
$mediaData = [];
|
||||
foreach ($validatedData['media_ids'] as $mediaId) {
|
||||
$mediaData[$mediaId] = ['status' => '0'];
|
||||
}
|
||||
|
||||
$announcement->media()->sync($mediaData);
|
||||
}
|
||||
|
||||
if ($announcement->media()->count() > 0) {
|
||||
return redirect()->back()->with('success-status', 'Berhasil mengubah pengumuman.');
|
||||
} else {
|
||||
return redirect()->back()->with('failed-status', 'Gagal mengubah pengumuman');
|
||||
}
|
||||
}
|
||||
|
||||
public function show($id){
|
||||
$announcement = Announcement::with(['media'])->findOrFail(decrypt_id($id));
|
||||
|
||||
return view('dashboard.announcements.show', [
|
||||
'title' => 'Detail Pengumuman',
|
||||
'announcement' => $announcement,
|
||||
]);
|
||||
}
|
||||
|
||||
public function read($id){
|
||||
$announcement = Announcement::with(['media'])->findOrFail(decrypt_id($id));
|
||||
|
||||
$mediaId = Auth::user()->company->media->id;
|
||||
if(!in_array($mediaId, $announcement->media->pluck('id')->toArray())){
|
||||
abort(404, "Pengumuman tidak ditemukan.");
|
||||
}
|
||||
|
||||
$announcement->media()->updateExistingPivot($mediaId, [
|
||||
'status' => '1',
|
||||
]);
|
||||
|
||||
return view('dashboard.announcements.read', [
|
||||
'title' => 'Detail Pengumuman',
|
||||
'announcement' => $announcement,
|
||||
]);
|
||||
}
|
||||
|
||||
public function destroy($id){
|
||||
try {
|
||||
$announcement = Announcement::with(['media'])->findOrFail(decrypt_id($id));
|
||||
|
||||
$announcement->media()->detach();
|
||||
|
||||
$announcement->delete();
|
||||
|
||||
return response()->json(['message' => 'Berhasil menghapus pengumuman.']);
|
||||
} catch (\Exception $e) {
|
||||
return response()->json(['message' => 'Gagal menghapus pengumuman.'], 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -4,6 +4,7 @@
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\AiringProofTheme;
|
||||
use App\Models\Announcement;
|
||||
use App\Models\Classification;
|
||||
use App\Models\Company;
|
||||
use App\Models\ContentRecap;
|
||||
@ -399,6 +400,112 @@ public function news(Request $request){
|
||||
|
||||
}
|
||||
|
||||
public function announcement(Request $request){
|
||||
if ($request->ajax()) {
|
||||
$data = Announcement::whereHas('media', function ($query) {
|
||||
$query->where('announcements_media.category', 'general');
|
||||
})->get();
|
||||
|
||||
|
||||
return DataTables::of($data)
|
||||
->addIndexColumn()
|
||||
->addColumn('sent_at', function ($data) {
|
||||
return idn_date($data->created_at, 'l, d F Y');
|
||||
})
|
||||
->addColumn('action', function ($data) {
|
||||
$showUrl = route('dashboard.announcements.show', ['id' => encrypt_id($data->id)]);
|
||||
|
||||
$editUrl = route('dashboard.announcements.edit', ['id' => encrypt_id($data->id)]);
|
||||
|
||||
$deleteUrl = route('dashboard.announcements.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])) {
|
||||
$dropdown .= '<li><a href="'.$editUrl.'"><em class="icon ni ni-edit"></em><span>Ubah</span></a></li>';
|
||||
}
|
||||
|
||||
if (is_role([1])) {
|
||||
$dropdown .= '<li><a href="javascript:void(0);" onclick="deleteItem(\''.$deleteUrl.'\', \'Apakah Anda yakin ingin menghapus pengumuman '.$data->headline.'? Item ini akan dihapus secara permanen!\')"><em class="icon ni ni-trash"></em><span>Hapus</span></a></li>';
|
||||
|
||||
}
|
||||
|
||||
$dropdown .= '</ul>
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
return $dropdown;
|
||||
})
|
||||
|
||||
->rawColumns(['action'])
|
||||
->make(true);
|
||||
}
|
||||
|
||||
return response()->json(['error' => 'Unauthorized'], 401);
|
||||
|
||||
}
|
||||
|
||||
public function mediaAnnouncement(Request $request){
|
||||
if ($request->ajax()) {
|
||||
$data = Media::with(['announcements'])->findOrFail(Auth::user()->company->media->id)->announcements;
|
||||
|
||||
|
||||
return DataTables::of($data)
|
||||
->addIndexColumn()
|
||||
->addColumn('sent_at', function ($data) {
|
||||
return idn_date($data->created_at, 'l, d F Y');
|
||||
})
|
||||
->addColumn('sender', function ($data) {
|
||||
return $data->enhancer->name. ' (admin)';
|
||||
})
|
||||
->addColumn('status', function ($data) {
|
||||
if ($data->pivot->status == '0') {
|
||||
return '<span class="badge bg-warning" style="display:inline-block;font-size:0.8rem;">Belum Dibaca</span>';
|
||||
}else{
|
||||
return '<span class="badge bg-primary" style="display:inline-block;font-size:0.8rem;">Sudah Dibaca</span>';
|
||||
}
|
||||
})
|
||||
->addColumn('action', function ($data) {
|
||||
$showUrl = route('dashboard.announcements.read', ['id' => encrypt_id($data->id)]);
|
||||
|
||||
$editUrl = route('dashboard.announcements.edit', ['id' => encrypt_id($data->id)]);
|
||||
|
||||
$deleteUrl = route('dashboard.announcements.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])) {
|
||||
$dropdown .= '<li><a href="'.$editUrl.'"><em class="icon ni ni-edit"></em><span>Ubah</span></a></li>';
|
||||
}
|
||||
|
||||
if (is_role([1])) {
|
||||
$dropdown .= '<li><a href="javascript:void(0);" onclick="deleteItem(\''.$deleteUrl.'\', \'Apakah Anda yakin ingin menghapus pengumuman '.$data->headline.'? Item ini akan dihapus secara permanen!\')"><em class="icon ni ni-trash"></em><span>Hapus</span></a></li>';
|
||||
|
||||
}
|
||||
|
||||
$dropdown .= '</ul>
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
return $dropdown;
|
||||
})
|
||||
|
||||
->rawColumns(['sender', 'status', 'action'])
|
||||
->make(true);
|
||||
}
|
||||
|
||||
return response()->json(['error' => 'Unauthorized'], 401);
|
||||
|
||||
}
|
||||
|
||||
public function airingProofTheme(Request $request){
|
||||
if ($request->ajax()) {
|
||||
|
||||
@ -1167,13 +1274,13 @@ public function mediaMonitoring(Request $request){
|
||||
}
|
||||
})
|
||||
->addColumn('action', function ($data) {
|
||||
$showUrl = route('dashboard.media.monitoring.show', ['id' => encrypt_id($data->id)]);
|
||||
$showUrl = route('dashboard.media.monitorings.show', ['id' => encrypt_id($data->id)]);
|
||||
|
||||
$addIssueUrl = route('dashboard.issue.managements.create', ['media_monitoring' => encrypt_id($data->id)]);
|
||||
|
||||
$editUrl = route('dashboard.media.monitoring.edit', ['id' => encrypt_id($data->id)]);
|
||||
$editUrl = route('dashboard.media.monitorings.edit', ['id' => encrypt_id($data->id)]);
|
||||
|
||||
$deleteUrl = route('dashboard.media.monitoring.destroy', ['id' => encrypt_id($data->id)]);
|
||||
$deleteUrl = route('dashboard.media.monitorings.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>
|
||||
|
||||
32
app/Http/Middleware/AnnouncementMiddleware.php
Normal file
32
app/Http/Middleware/AnnouncementMiddleware.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use App\Models\Announcement;
|
||||
use App\Models\Media;
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\View;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
class AnnouncementMiddleware
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
|
||||
*/
|
||||
public function handle(Request $request, Closure $next): Response
|
||||
{
|
||||
if(Auth::check() && Auth::user()->role_id == 3){
|
||||
$media = Media::with(['announcements' => function($query) {
|
||||
$query->orderBy('id', 'desc');
|
||||
}])->find(Auth::user()->company->media->id);
|
||||
|
||||
View::share('announcements', $media->announcements);
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
44
app/Http/Requests/AnnouncementRequest.php
Normal file
44
app/Http/Requests/AnnouncementRequest.php
Normal file
@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class AnnouncementRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
return Auth::check() && is_role(['1']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'headline' => ['required'],
|
||||
'media_ids' => ['required', 'array'],
|
||||
'media_ids.*' => ['required', 'exists:media,id'],
|
||||
'content' => ['required'],
|
||||
];
|
||||
}
|
||||
|
||||
public function messages(): array
|
||||
{
|
||||
return [
|
||||
'headline.required' => 'Judul pengumuman harus diisi.',
|
||||
'media_ids.required' => 'Pilih setidaknya satu media untuk pengumuman.',
|
||||
'media_ids.array' => 'Media harus dalam format array.',
|
||||
'media_ids.*.required' => 'Media yang dipilih tidak boleh kosong.',
|
||||
'media_ids.*.exists' => 'Salah satu media yang dipilih tidak ditemukan.',
|
||||
'content.required' => 'Konten pengumuman harus diisi.',
|
||||
];
|
||||
}
|
||||
}
|
||||
28
app/Models/Announcement.php
Normal file
28
app/Models/Announcement.php
Normal file
@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Announcement extends Model
|
||||
{
|
||||
protected $table = 'announcements';
|
||||
|
||||
protected $fillable = [
|
||||
'headline',
|
||||
'content',
|
||||
'enhancer_id'
|
||||
];
|
||||
|
||||
public function enhancer(){
|
||||
return $this->belongsTo(User::class, 'enhancer_id', 'id');
|
||||
}
|
||||
|
||||
public function media()
|
||||
{
|
||||
return $this->belongsToMany(Media::class, 'announcements_media', 'announcement_id', 'media_id')
|
||||
->using(AnnouncementMedia::class)
|
||||
->withPivot(['status', 'category'])
|
||||
->withTimestamps();
|
||||
}
|
||||
}
|
||||
26
app/Models/AnnouncementMedia.php
Normal file
26
app/Models/AnnouncementMedia.php
Normal file
@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\Pivot;
|
||||
|
||||
class AnnouncementMedia extends Pivot
|
||||
{
|
||||
protected $table = 'announcements_media';
|
||||
|
||||
protected $fillable = [
|
||||
'announcement_id',
|
||||
'media_id',
|
||||
'status',
|
||||
'category'
|
||||
];
|
||||
|
||||
public function announcement(){
|
||||
return $this->belongsTo(Announcement::class, 'announcement_id', 'id');
|
||||
}
|
||||
|
||||
public function media(){
|
||||
return $this->belongsTo(Media::class, 'media_id', 'id');
|
||||
}
|
||||
}
|
||||
@ -41,4 +41,12 @@ public function cooperations()
|
||||
->withPivot(['status', 'rejection_reason'])
|
||||
->withTimestamps();
|
||||
}
|
||||
|
||||
public function announcements()
|
||||
{
|
||||
return $this->belongsToMany(Announcement::class, 'announcements_media', 'media_id', 'announcement_id')
|
||||
->using(AnnouncementMedia::class)
|
||||
->withPivot(['status', 'category'])
|
||||
->withTimestamps();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Middleware\AnnouncementMiddleware;
|
||||
use App\Http\Middleware\AuthenticatedMiddleware;
|
||||
use App\Http\Middleware\RoleMiddleware;
|
||||
use Illuminate\Auth\Middleware\Authenticate;
|
||||
@ -19,7 +20,8 @@
|
||||
]);
|
||||
$middleware->alias([
|
||||
'role' => RoleMiddleware::class,
|
||||
'authenticated' => AuthenticatedMiddleware::class
|
||||
'authenticated' => AuthenticatedMiddleware::class,
|
||||
'announcement' => AnnouncementMiddleware::class,
|
||||
]);
|
||||
})
|
||||
->withExceptions(function (Exceptions $exceptions) {
|
||||
|
||||
@ -0,0 +1,31 @@
|
||||
<?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('announcements', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('headline');
|
||||
$table->text('content');
|
||||
$table->unsignedBigInteger('enhancer_id');
|
||||
$table->foreign('enhancer_id')->references('id')->on('users');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('announcements');
|
||||
}
|
||||
};
|
||||
@ -0,0 +1,33 @@
|
||||
<?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('announcements_media', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->unsignedBigInteger('announcement_id');
|
||||
$table->unsignedBigInteger('media_id');
|
||||
$table->foreign('announcement_id')->references('id')->on('announcements');
|
||||
$table->foreign('media_id')->references('id')->on('media');
|
||||
$table->enum('status', ['0', '1'])->default('0');
|
||||
$table->enum('category', ['general', 'cooperation','non_general'])->default('general');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('announcements_media');
|
||||
}
|
||||
};
|
||||
17
database/seeders/AnnouncementSeeder.php
Normal file
17
database/seeders/AnnouncementSeeder.php
Normal file
@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class AnnouncementSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
BIN
public/assets/dashboard/images/information.png
Normal file
BIN
public/assets/dashboard/images/information.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
BIN
public/assets/dashboard/images/marketing.png
Normal file
BIN
public/assets/dashboard/images/marketing.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
72
resources/views/dashboard/announcements/create.blade.php
Normal file
72
resources/views/dashboard/announcements/create.blade.php
Normal file
@ -0,0 +1,72 @@
|
||||
@include('partials.dashboard.head')
|
||||
@include('partials.dashboard.sidebar', ['page' => 'announcements'])
|
||||
@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 nk-block-lg">
|
||||
<div class="card card-bordered card-preview">
|
||||
<div class="card-inner">
|
||||
<div class="card-head">
|
||||
<h5 class="card-title">{{$title}}</h5>
|
||||
</div>
|
||||
<form action="{{route('dashboard.announcements.store')}}" method="post">
|
||||
@csrf
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-6">
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="headline">Headline<span class="required-input">*</span></label>
|
||||
<div class="form-control-wrap">
|
||||
<input type="text" class="form-control @error('headline') border-danger @enderror" id="headline" name="headline" placeholder="Masukan headline" value="{{old('headline')}}">
|
||||
</div>
|
||||
@error('headline')
|
||||
<span class="validation-error">{{$message}}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-12">
|
||||
<div class="form-group">
|
||||
<label class="form-label">Media<span class="required-input">*</span></label>
|
||||
<div class="form-control-wrap">
|
||||
<select class="form-select js-select2" data-search="on" name="media_ids[]" multiple="multiple" data-placeholder="Pilih Media">
|
||||
@foreach ($media as $item)
|
||||
<option value="{{ $item->id }}"
|
||||
{{ is_array(old('media_ids')) && in_array($item->id, old('media_ids')) ? 'selected' : '' }}>
|
||||
{{ $item->name }}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
@error('media_ids')
|
||||
<span class="validation-error">{{$message}}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-12">
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="content">Konten Pengumuman<span class="required-input">*</span></label>
|
||||
<div class="form-control-wrap">
|
||||
<textarea class="tinymce-basic form-control" name="content">{!!old('content')!!}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<hr>
|
||||
<div class="form-group d-flex justify-content-end">
|
||||
<a href="{{route('dashboard.announcements.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
|
||||
<button type="submit" class="btn btn-md btn-primary">Tambahkan</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- content @e -->
|
||||
@include('partials.dashboard.footer', ['rich_editor' => true])
|
||||
73
resources/views/dashboard/announcements/edit.blade.php
Normal file
73
resources/views/dashboard/announcements/edit.blade.php
Normal file
@ -0,0 +1,73 @@
|
||||
@include('partials.dashboard.head')
|
||||
@include('partials.dashboard.sidebar', ['page' => 'announcements'])
|
||||
@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 nk-block-lg">
|
||||
<div class="card card-bordered card-preview">
|
||||
<div class="card-inner">
|
||||
<div class="card-head">
|
||||
<h5 class="card-title">{{$title}}</h5>
|
||||
</div>
|
||||
<form action="{{route('dashboard.announcements.update', ['id' => encrypt_id($announcement->id)])}}" method="post">
|
||||
@csrf
|
||||
@method('put')
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-6">
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="headline">Headline<span class="required-input">*</span></label>
|
||||
<div class="form-control-wrap">
|
||||
<input type="text" class="form-control @error('headline') border-danger @enderror" id="headline" name="headline" placeholder="Masukan headline" value="{{$announcement->headline}}">
|
||||
</div>
|
||||
@error('headline')
|
||||
<span class="validation-error">{{$message}}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-12">
|
||||
<div class="form-group">
|
||||
<label class="form-label">Media<span class="required-input">*</span></label>
|
||||
<div class="form-control-wrap">
|
||||
<select class="form-select js-select2" data-search="on" name="media_ids[]" multiple="multiple" data-placeholder="Pilih Media">
|
||||
@foreach ($media as $item)
|
||||
<option value="{{ $item->id }}"
|
||||
{{ in_array($item->id, old('media_ids', $selectedMediaIds)) ? 'selected' : '' }}>
|
||||
{{ $item->name }}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
@error('media_ids')
|
||||
<span class="validation-error">{{ $message }}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-12">
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="content">Konten Pengumuman<span class="required-input">*</span></label>
|
||||
<div class="form-control-wrap">
|
||||
<textarea class="tinymce-basic form-control" name="content">{!!$announcement->content!!}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<hr>
|
||||
<div class="form-group d-flex justify-content-end">
|
||||
<a href="{{route('dashboard.announcements.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
|
||||
<button type="submit" class="btn btn-md btn-primary">Simpan</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- content @e -->
|
||||
@include('partials.dashboard.footer', ['rich_editor' => true])
|
||||
63
resources/views/dashboard/announcements/index.blade.php
Normal file
63
resources/views/dashboard/announcements/index.blade.php
Normal file
@ -0,0 +1,63 @@
|
||||
@include('partials.dashboard.head')
|
||||
@include('partials.dashboard.sidebar', ['page' => 'announcements'])
|
||||
@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 -->
|
||||
@if (is_role(['1']))
|
||||
<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 class="nk-block-tools-opt"><a href="{{route('dashboard.announcements.create')}}" class="btn btn-primary"><em class="icon ni ni-plus"></em><span>Tambah</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- .nk-block-head-content -->
|
||||
@endif
|
||||
</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="announcementsTable" border="1">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 10% !important;">No</th>
|
||||
<th>Headline</th>
|
||||
<th>Tanggal Kirim</th>
|
||||
<th style="width: 10% !important;"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- content @e -->
|
||||
@include('partials.dashboard.footer' ,['datatable' => 'announcement'])
|
||||
@ -0,0 +1,65 @@
|
||||
@include('partials.dashboard.head')
|
||||
@include('partials.dashboard.sidebar', ['page' => 'announcements'])
|
||||
@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 -->
|
||||
@if (is_role(['1']))
|
||||
<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 class="nk-block-tools-opt"><a href="{{route('dashboard.announcements.create')}}" class="btn btn-primary"><em class="icon ni ni-plus"></em><span>Tambah</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- .nk-block-head-content -->
|
||||
@endif
|
||||
</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="mediaAnnouncementsTable" border="1">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 10% !important;">No</th>
|
||||
<th>Headline</th>
|
||||
<th>Tanggal</th>
|
||||
<th>Pengirim</th>
|
||||
<th>Status</th>
|
||||
<th style="width: 10% !important;"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- content @e -->
|
||||
@include('partials.dashboard.footer' ,['datatable' => 'media_announcement'])
|
||||
65
resources/views/dashboard/announcements/read.blade.php
Normal file
65
resources/views/dashboard/announcements/read.blade.php
Normal file
@ -0,0 +1,65 @@
|
||||
@include('partials.dashboard.head')
|
||||
@include('partials.dashboard.sidebar', ['page' => 'announcements'])
|
||||
@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 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="#"><em class="icon ni ni-info"></em><span>Detail Pengumuman</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">Headline</span>
|
||||
<span class="profile-ud-value">{{$announcement->headline}}</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($announcement->created_at, 'l, m F Y')}}</span>
|
||||
</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">Konten</span>
|
||||
</div><!-- .nk-block-head -->
|
||||
<div class="bq-note">
|
||||
<div class="bq-note-item">
|
||||
<div class="bq-note-text">
|
||||
{!!$announcement->content!!}
|
||||
</div>
|
||||
</div><!-- .bq-note-item -->
|
||||
</div><!-- .bq-note -->
|
||||
</div><!-- .nk-block -->
|
||||
<div class="nk-block d-flex justify-content-end">
|
||||
<a href="{{route('dashboard.announcements.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
|
||||
</div><!-- .nk-block -->
|
||||
</div><!-- .card-inner -->
|
||||
</div><!-- .card-content -->
|
||||
</div><!-- .card-aside-wrap -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- content @e -->
|
||||
@include('partials.dashboard.footer', ['rich_editor' => false])
|
||||
80
resources/views/dashboard/announcements/show.blade.php
Normal file
80
resources/views/dashboard/announcements/show.blade.php
Normal file
@ -0,0 +1,80 @@
|
||||
@include('partials.dashboard.head')
|
||||
@include('partials.dashboard.sidebar', ['page' => 'announcements'])
|
||||
@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 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="#"><em class="icon ni ni-info"></em><span>Detail Pengumuman</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">Headline</span>
|
||||
<span class="profile-ud-value">{{$announcement->headline}}</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($announcement->created_at, 'l, m F Y')}}</span>
|
||||
</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">Media</span>
|
||||
</div><!-- .nk-block-head -->
|
||||
<div class="bq-note">
|
||||
<div class="bq-note-item">
|
||||
<div class="bq-note-text">
|
||||
@foreach ($announcement->media as $media)
|
||||
<span class="profile-ud-value"><span class="badge bg-info">{{$media->name}}</span></span>
|
||||
@endforeach
|
||||
</div>
|
||||
</div><!-- .bq-note-item -->
|
||||
</div><!-- .bq-note -->
|
||||
</div><!-- .nk-block -->
|
||||
<div class="nk-block">
|
||||
<div class="nk-block-head nk-block-head-sm nk-block-between">
|
||||
<span class="profile-ud-label">Konten</span>
|
||||
</div><!-- .nk-block-head -->
|
||||
<div class="bq-note">
|
||||
<div class="bq-note-item">
|
||||
<div class="bq-note-text">
|
||||
{!!$announcement->content!!}
|
||||
</div>
|
||||
</div><!-- .bq-note-item -->
|
||||
</div><!-- .bq-note -->
|
||||
</div><!-- .nk-block -->
|
||||
<div class="nk-block d-flex justify-content-end">
|
||||
<a href="{{route('dashboard.announcements.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
|
||||
<a href="{{route('dashboard.announcements.edit', ['id' => encrypt_id($announcement->id)])}}" class="btn btn-warning"><span>Ubah</span></a>
|
||||
</div><!-- .nk-block -->
|
||||
</div><!-- .card-inner -->
|
||||
</div><!-- .card-content -->
|
||||
</div><!-- .card-aside-wrap -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- content @e -->
|
||||
@include('partials.dashboard.footer', ['rich_editor' => false])
|
||||
@ -241,7 +241,7 @@
|
||||
<div class="col-12">
|
||||
<hr>
|
||||
<div class="form-group d-flex justify-content-end">
|
||||
<a href="{{route('dashboard.media.monitoring.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
|
||||
<a href="{{route('dashboard.media.monitorings.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
|
||||
<button type="submit" class="btn btn-md btn-primary">Tambahkan</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -245,7 +245,7 @@
|
||||
<div class="col-12">
|
||||
<hr>
|
||||
<div class="form-group d-flex justify-content-end">
|
||||
<a href="{{route('dashboard.media.monitoring.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
|
||||
<a href="{{route('dashboard.media.monitorings.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
|
||||
<button type="submit" class="btn btn-md btn-primary">Tambahkan</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -28,7 +28,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="nk-block-tools-opt"><a href="{{route('dashboard.media.monitoring.create')}}" class="btn btn-primary"><em class="icon ni ni-plus"></em><span>Tambah</span></a></li>
|
||||
<li class="nk-block-tools-opt"><a href="{{route('dashboard.media.monitorings.create')}}" class="btn btn-primary"><em class="icon ni ni-plus"></em><span>Tambah</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
<div class="card-head">
|
||||
<h5 class="card-title">{{$title}}</h5>
|
||||
</div>
|
||||
<form action="{{route('dashboard.media.monitoring.store')}}" method="post" enctype="multipart/form-data">
|
||||
<form action="{{route('dashboard.media.monitorings.store')}}" method="post" enctype="multipart/form-data">
|
||||
@csrf
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-6">
|
||||
@ -153,7 +153,7 @@
|
||||
<div class="col-12">
|
||||
<hr>
|
||||
<div class="form-group d-flex justify-content-end">
|
||||
<a href="{{route('dashboard.media.monitoring.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
|
||||
<a href="{{route('dashboard.media.monitorings.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
|
||||
<button type="submit" class="btn btn-md btn-primary">Tambahkan</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
<div class="card-head">
|
||||
<h5 class="card-title">{{$title}}</h5>
|
||||
</div>
|
||||
<form action="{{route('dashboard.media.monitoring.update', ['id' => encrypt_id($mediaMonitoring->id)])}}" method="post" enctype="multipart/form-data">
|
||||
<form action="{{route('dashboard.media.monitorings.update', ['id' => encrypt_id($mediaMonitoring->id)])}}" method="post" enctype="multipart/form-data">
|
||||
@csrf
|
||||
@method('put')
|
||||
<div class="row g-4">
|
||||
@ -154,7 +154,7 @@
|
||||
<div class="col-12">
|
||||
<hr>
|
||||
<div class="form-group d-flex justify-content-end">
|
||||
<a href="{{route('dashboard.media.monitoring.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
|
||||
<a href="{{route('dashboard.media.monitorings.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
|
||||
<button type="submit" class="btn btn-md btn-primary">Tambahkan</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -28,7 +28,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</li> --}}
|
||||
<li class="nk-block-tools-opt"><a href="{{route('dashboard.media.monitoring.create')}}" class="btn btn-primary"><em class="icon ni ni-plus"></em><span>Tambah</span></a></li>
|
||||
<li class="nk-block-tools-opt"><a href="{{route('dashboard.media.monitorings.create')}}" class="btn btn-primary"><em class="icon ni ni-plus"></em><span>Tambah</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -128,8 +128,8 @@
|
||||
</div><!-- .bq-note -->
|
||||
</div><!-- .nk-block -->
|
||||
<div class="nk-block d-flex justify-content-end">
|
||||
<a href="{{route('dashboard.media.monitoring.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
|
||||
<a href="{{route('dashboard.content.recaps.edit', ['id' => encrypt_id($mediaMonitoring->id)])}}" class="btn btn-warning"><span>Ubah</span></a>
|
||||
<a href="{{route('dashboard.media.monitorings.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
|
||||
<a href="{{route('dashboard.media.monitorings.edit', ['id' => encrypt_id($mediaMonitoring->id)])}}" class="btn btn-warning"><span>Ubah</span></a>
|
||||
</div><!-- .nk-block -->
|
||||
</div><!-- .card-inner -->
|
||||
</div><!-- .card-content -->
|
||||
|
||||
@ -184,6 +184,60 @@
|
||||
</script>
|
||||
@endif
|
||||
|
||||
@if ($datatable === 'announcement')
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#announcementsTable').DataTable({
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
ajax: '{{ route('dashboard.announcements.data') }}',
|
||||
columns: [
|
||||
{ data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false },
|
||||
{ data: 'headline', name: 'headline' },
|
||||
{ data: 'sent_at', name: 'sent_at' },
|
||||
{ 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,
|
||||
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 === 'media_announcement')
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#mediaAnnouncementsTable').DataTable({
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
ajax: '{{ route('dashboard.announcements.media.data') }}',
|
||||
columns: [
|
||||
{ data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false },
|
||||
{ data: 'headline', name: 'headline' },
|
||||
{ data: 'sent_at', name: 'sent_at' },
|
||||
{ data: 'sender', name: 'sender' },
|
||||
{ data: 'status', name: 'status' },
|
||||
{ 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,
|
||||
autoWidth: false,
|
||||
order: [[6, '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 === 'airing_proof_theme')
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
@ -488,7 +542,7 @@
|
||||
$('#mediaMonitoringsTable').DataTable({
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
ajax: '{{ route('dashboard.media.monitoring.data') }}',
|
||||
ajax: '{{ route('dashboard.media.monitorings.data') }}',
|
||||
columns: [
|
||||
{ data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false },
|
||||
{ data: 'enhancer', name: 'enhancer' },
|
||||
|
||||
@ -15,7 +15,60 @@
|
||||
</div><!-- .nk-header-brand -->
|
||||
<div class="nk-header-tools">
|
||||
<ul class="nk-quick-nav">
|
||||
<li class="dropdown notification-dropdown">
|
||||
@if (is_role(['3']))
|
||||
{{-- {{dd($announcements)}} --}}
|
||||
{{-- @foreach ($announcements as $item)
|
||||
{{$item->pivot}}
|
||||
@endforeach --}}
|
||||
<li class="dropdown chats-dropdown hide-mb-xs">
|
||||
<a href="#" class="dropdown-toggle nk-quick-nav-icon" data-bs-toggle="dropdown">
|
||||
<div class="icon-status icon-status-na"><em class="icon ni ni-bell"></em>
|
||||
</div>
|
||||
</a>
|
||||
<div class="dropdown-menu dropdown-menu-xl dropdown-menu-end">
|
||||
<div class="dropdown-head">
|
||||
<span class="sub-title nk-dropdown-title">Pengumuman</span>
|
||||
{{-- <a href="#">Setting</a> --}}
|
||||
</div>
|
||||
<div class="dropdown-body">
|
||||
<ul class="chat-list">
|
||||
@foreach ($announcements as $item)
|
||||
{{-- {{dd($item->pivot)}} --}}
|
||||
<li class="chat-item">
|
||||
<a class="chat-link" href="{{route('dashboard.announcements.read', ['id' => encrypt_id($item->id)])}}" title="{{$item->headline}}">
|
||||
<div class="chat-media user-avatar bg-transparent">
|
||||
<img src="{{asset('assets/dashboard/images/marketing.png')}}" alt="">
|
||||
</div>
|
||||
<div class="chat-info">
|
||||
<div class="chat-from">
|
||||
<div class="name">Administrator</div>
|
||||
<span class="time">{{idn_date($item->created_at, 'd M Y')}}</span>
|
||||
</div>
|
||||
<div class="chat-context">
|
||||
<div class="text">{{$item->headline}}</div>
|
||||
@if ($item->pivot->status == '0')
|
||||
<div class="status delivered">
|
||||
<em class="icon ni ni-check-circle"></em>
|
||||
</div>
|
||||
@else
|
||||
<div class="status delivered">
|
||||
<em class="icon ni ni-check-circle-fill text-primary"></em>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</li><!-- .chat-item -->
|
||||
@endforeach
|
||||
</ul><!-- .chat-list -->
|
||||
</div><!-- .nk-dropdown-body -->
|
||||
<div class="dropdown-foot center">
|
||||
<a href="{{route('dashboard.announcements.index')}}">Lihat Semua</a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
@endif
|
||||
{{-- <li class="dropdown notification-dropdown">
|
||||
<a href="#" class="dropdown-toggle nk-quick-nav-icon" data-bs-toggle="dropdown">
|
||||
<div class="icon-status icon-status-info"><em class="icon ni ni-bell"></em></div>
|
||||
</a>
|
||||
@ -55,7 +108,7 @@
|
||||
<a href="#">View All</a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</li> --}}
|
||||
<li class="dropdown user-dropdown">
|
||||
<a href="#" class="dropdown-toggle me-n1" data-bs-toggle="dropdown">
|
||||
<div class="user-toggle">
|
||||
|
||||
@ -38,6 +38,16 @@
|
||||
<span class="nk-menu-badge bg-success text-white" style="color: white !important;">{{get_cooperation_notif()}}</span>
|
||||
</a>
|
||||
</li><!-- .nk-menu-item -->
|
||||
<li class="nk-menu-heading">
|
||||
<h6 class="overline-title text-primary-alt">Informasi</h6>
|
||||
</li><!-- .nk-menu-item -->
|
||||
<li class="nk-menu-item">
|
||||
<a href="{{route('dashboard.announcements.index')}}" class="nk-menu-link {{$page === 'announcements' ? 'active-page' : ''}}">
|
||||
<span class="nk-menu-icon"><em class="icon ni ni-bell"></em></span>
|
||||
<span class="nk-menu-text">Pengumuman</span>
|
||||
<span class="nk-menu-badge bg-success text-white" style="color: white !important;">{{get_unread_announcements()}}</span>
|
||||
</a>
|
||||
</li><!-- .nk-menu-item -->
|
||||
@endif
|
||||
@if (is_role('1'))
|
||||
<li class="nk-menu-heading">
|
||||
@ -85,7 +95,7 @@
|
||||
</a>
|
||||
</li><!-- .nk-menu-item -->
|
||||
<li class="nk-menu-item">
|
||||
<a href="javascript:void(0);" class="nk-menu-link">
|
||||
<a href="{{route('dashboard.announcements.index')}}" class="nk-menu-link {{$page === 'announcements' ? 'active-page' : ''}}">
|
||||
<span class="nk-menu-icon"><em class="icon ni ni-info"></em></span>
|
||||
<span class="nk-menu-text">Pengumuman</span>
|
||||
</a>
|
||||
@ -173,7 +183,7 @@
|
||||
@endif
|
||||
@if (is_role(['1', '2']))
|
||||
<li class="nk-menu-item">
|
||||
<a href="{{route('dashboard.media.monitoring.index')}}" class="nk-menu-link {{$page === 'media_monitorings' ? 'active-page' : ''}}">
|
||||
<a href="{{route('dashboard.media.monitorings.index')}}" class="nk-menu-link {{$page === 'media_monitorings' ? 'active-page' : ''}}">
|
||||
<span class="nk-menu-icon"><em class="icon ni ni-layers"></em></span>
|
||||
<span class="nk-menu-text">Monitoring Media</span>
|
||||
</a>
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
|
||||
use App\Http\Controllers\AuthController;
|
||||
use App\Http\Controllers\Dashboard\AiringProofThemeController;
|
||||
use App\Http\Controllers\Dashboard\AnnouncementController;
|
||||
use App\Http\Controllers\Dashboard\ClassificationController;
|
||||
use App\Http\Controllers\Dashboard\CompanyController;
|
||||
use App\Http\Controllers\Dashboard\ContentRecapController;
|
||||
@ -41,7 +42,7 @@
|
||||
});
|
||||
});
|
||||
|
||||
Route::middleware(['auth', 'role:1,2,3,4'])->group(function(){
|
||||
Route::middleware(['auth', 'role:1,2,3,4', 'announcement'])->group(function(){
|
||||
Route::prefix('dashboard')->name('dashboard.')->group(function(){
|
||||
Route::controller(OverviewController::class)->group(function(){
|
||||
Route::get('/overview', 'index')->name('overview');
|
||||
@ -149,6 +150,29 @@
|
||||
Route::get('/data', [DatatableController::class, 'news'])->name('data');
|
||||
});
|
||||
|
||||
|
||||
Route::prefix('announcements')->name('announcements.')->group(function(){
|
||||
Route::controller(AnnouncementController::class)->group(function(){
|
||||
|
||||
Route::get('/', 'index')->name('index');
|
||||
Route::middleware('role:1')->group(function(){
|
||||
Route::get('/{id}/show', 'show')->name('show');
|
||||
|
||||
Route::get('/create', 'create')->name('create');
|
||||
Route::post('/', 'store')->name('store');
|
||||
Route::get('/{id}/edit', 'edit')->name('edit');
|
||||
Route::put('/{id}', 'update')->name('update');
|
||||
Route::delete('/{id}', 'destroy')->name('destroy');
|
||||
});
|
||||
|
||||
Route::get('/{id}/read', 'read')->name('read');
|
||||
});
|
||||
|
||||
Route::get('/data', [DatatableController::class, 'announcement'])->name('data');
|
||||
Route::get('/announcement-media-data', [DatatableController::class, 'mediaAnnouncement'])->name('media.data');
|
||||
});
|
||||
|
||||
|
||||
Route::middleware('role:1')->group(function(){
|
||||
Route::prefix('settings')->name('settings.')->group(function(){
|
||||
Route::controller(SettingController::class)->group(function(){
|
||||
@ -293,7 +317,7 @@
|
||||
});
|
||||
|
||||
Route::middleware('role:1,2')->group(function(){
|
||||
Route::prefix('media-monitorings')->name('media.monitoring.')->group(function(){
|
||||
Route::prefix('media-monitorings')->name('media.monitorings.')->group(function(){
|
||||
Route::controller(MediaMonitoringController::class)->group(function(){
|
||||
Route::get('/', 'index')->name('index');
|
||||
Route::get('/create', 'create')->name('create');
|
||||
|
||||
Loading…
Reference in New Issue
Block a user