feat: content recap classification
chore: add classification_id, social_media, and image field
This commit is contained in:
parent
18de674acc
commit
48560b9b3f
@ -0,0 +1,111 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Dashboard;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\ContentRecapClassificationRequest;
|
||||
use App\Models\ContentRecap;
|
||||
use App\Models\ContentRecapClassification;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class ContentRecapClassificationController extends Controller
|
||||
{
|
||||
public function index(){
|
||||
return view('dashboard.content-recaps.classifications.index', [
|
||||
'title' => "Klasifikasi Rekap Konten"
|
||||
]);
|
||||
}
|
||||
|
||||
public function create(){
|
||||
return view('dashboard.content-recaps.classifications.create', [
|
||||
'title' => "Tambah Klasifikasi Rekap Konten"
|
||||
]);
|
||||
}
|
||||
|
||||
public function store(ContentRecapClassificationRequest $request){
|
||||
$validatedData = $request->validated();
|
||||
$validatedData['slug'] = Str::slug($validatedData['name']);
|
||||
$validatedData['enhancer_id'] = Auth::id();
|
||||
|
||||
$existedData = ContentRecapClassification::withTrashed()->where('slug', $validatedData['slug'])->first();
|
||||
|
||||
if($existedData && filled($existedData->deleted_at)){
|
||||
return redirect()->back()->with('data-exists', $validatedData['slug']);
|
||||
}elseif($existedData){
|
||||
return redirect()->back()->with('failed-status', 'Tema dengan nama tersebut sudah ada.');
|
||||
}
|
||||
|
||||
$createdClassification = ContentRecapClassification::create($validatedData);
|
||||
|
||||
if($createdClassification){
|
||||
return redirect()->route('dashboard.content.recap.classifications.index')->with('success-status', 'Berhasil menambahkan klasifikasi rekap konten.');
|
||||
}else{
|
||||
return redirect()->back()->with('failed-status', 'Gagal menambahkan klasifikasi rekap konten.');
|
||||
}
|
||||
}
|
||||
|
||||
public function edit($id){
|
||||
$contentRecapClassification = ContentRecapClassification::findOrFail(decrypt_id($id));
|
||||
|
||||
return view('dashboard.content-recaps.classifications.edit', [
|
||||
'title' => "Ubah Klasifikasi Rekap Konten",
|
||||
'contentRecapClassification' => $contentRecapClassification
|
||||
]);
|
||||
}
|
||||
|
||||
public function update(ContentRecapClassificationRequest $request, $id){
|
||||
$validatedData = $request->validated();
|
||||
$validatedData['slug'] = Str::slug($validatedData['name']);
|
||||
$validatedData['enhancer_id'] = Auth::id();
|
||||
|
||||
$contentRecapClassification = ContentRecapClassification::findOrFail(decrypt_id($id));
|
||||
$updatedContentRecapClassification = $contentRecapClassification->update($validatedData);
|
||||
|
||||
if($updatedContentRecapClassification){
|
||||
return redirect()->back()->with('success-status', 'Berhasil mengubah klasifikasi rekap konten.');
|
||||
}else{
|
||||
return redirect()->back()->with('failed-status', 'Gagal mengubah klasifikasi rekap konten.');
|
||||
}
|
||||
}
|
||||
|
||||
public function show($id){
|
||||
$contentRecapClassification = ContentRecapClassification::findOrFail(decrypt_id($id));
|
||||
|
||||
return view('dashboard.content-recaps.classifications.show', [
|
||||
'title' => "Detail Klasifikasi Rekap Konten",
|
||||
'contentRecapClassification' => $contentRecapClassification
|
||||
]);
|
||||
}
|
||||
|
||||
public function destroy($id){
|
||||
try {
|
||||
$contentRecapClassification = ContentRecapClassification::findOrFail(decrypt_id($id));
|
||||
|
||||
$contentRecapClassification->delete();
|
||||
|
||||
return response()->json(['message' => 'Berhasil menghapus klasifikasi rekap konten.']);
|
||||
} catch (\Exception $e) {
|
||||
return response()->json(['message' => 'Gagal menghapus klasifikasi rekap konten.'], 500);
|
||||
}
|
||||
}
|
||||
|
||||
public function restore($slug)
|
||||
{
|
||||
$recapContentClassification = ContentRecapClassification::withTrashed()
|
||||
->where('slug', $slug)
|
||||
->first();
|
||||
|
||||
if (!$recapContentClassification) {
|
||||
return redirect()->back()->with('failed-status', 'Klasifikasi tidak ditemukan.');
|
||||
}
|
||||
|
||||
if (filled($recapContentClassification->deleted_at)) {
|
||||
$recapContentClassification->restore();
|
||||
return redirect()->back()->with('success-status', 'Klasifikasi berhasil dipulihkan.');
|
||||
}
|
||||
|
||||
return redirect()->back()->with('info-status', 'Klasifikasi sudah aktif.');
|
||||
}
|
||||
}
|
||||
@ -5,6 +5,7 @@
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\ContentRecapRequest;
|
||||
use App\Models\ContentRecap;
|
||||
use App\Models\ContentRecapClassification;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
@ -18,7 +19,8 @@ public function index(){
|
||||
|
||||
public function create(){
|
||||
return view('dashboard.content-recaps.create', [
|
||||
'title' => 'Tambah Rekap Konten'
|
||||
'title' => 'Tambah Rekap Konten',
|
||||
'classifications' => ContentRecapClassification::all()
|
||||
]);
|
||||
}
|
||||
|
||||
@ -26,6 +28,10 @@ public function store(ContentRecapRequest $request){
|
||||
$validatedData = $request->validated();
|
||||
$validatedData['enhancer_id'] = Auth::id();
|
||||
|
||||
if($request->has('image')){
|
||||
$validatedData['image'] = store_file($validatedData['image'], '/uploads/content-recaps', 'public')['randomFileName'];
|
||||
}
|
||||
|
||||
$createdContentRecap = ContentRecap::create($validatedData);
|
||||
|
||||
if($createdContentRecap){
|
||||
@ -40,7 +46,8 @@ public function edit($id){
|
||||
|
||||
return view('dashboard.content-recaps.edit', [
|
||||
'title' => 'Ubah Rekap Konten',
|
||||
'contentRecap' => $contentRecap
|
||||
'contentRecap' => $contentRecap,
|
||||
'classifications' => ContentRecapClassification::all()
|
||||
]);
|
||||
}
|
||||
|
||||
@ -49,6 +56,13 @@ public function update(ContentRecapRequest $request, $id){
|
||||
$validatedData['enhancer_id'] = Auth::id();
|
||||
|
||||
$contentRecap = ContentRecap::findOrFail(decrypt_id($id));
|
||||
if($request->has('image')){
|
||||
delete_file('app/public/uploads/content-recaps/'.$contentRecap->image);
|
||||
$validatedData['image'] = store_file($validatedData['image'], '/uploads/content-recaps', 'public')['randomFileName'];
|
||||
}else{
|
||||
$validatedData['image'] = $contentRecap->image;
|
||||
}
|
||||
|
||||
$updatedContentRecap = $contentRecap->update($validatedData);
|
||||
|
||||
if($updatedContentRecap){
|
||||
@ -79,4 +93,13 @@ public function destroy($id){
|
||||
return response()->json(['message' => 'Gagal menghapus rekap konten.'], 500);
|
||||
}
|
||||
}
|
||||
|
||||
public function checkLink(Request $request)
|
||||
{
|
||||
$linkExists = ContentRecap::where('link', $request->link)->exists();
|
||||
|
||||
return response()->json([
|
||||
'exists' => $linkExists
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,6 +8,7 @@
|
||||
use App\Models\Classification;
|
||||
use App\Models\Company;
|
||||
use App\Models\ContentRecap;
|
||||
use App\Models\ContentRecapClassification;
|
||||
use App\Models\Cooperation;
|
||||
use App\Models\CooperationProposal;
|
||||
use App\Models\GovernmentAgency;
|
||||
@ -412,6 +413,113 @@ public function governmentAgency(Request $request){
|
||||
|
||||
}
|
||||
|
||||
public function airingProofTheme(Request $request){
|
||||
if ($request->ajax()) {
|
||||
|
||||
|
||||
|
||||
$data = AiringProofTheme::all();
|
||||
|
||||
return DataTables::of($data)
|
||||
->addIndexColumn()
|
||||
->addColumn('date_created', function ($data) {
|
||||
return idn_date($data->created_at, 'l, d F Y');
|
||||
})
|
||||
->addColumn('action', function ($data) {
|
||||
$showUrl = route('dashboard.airing.proof.themes.show', ['id' => encrypt_id($data->id)]);
|
||||
|
||||
$editUrl = route('dashboard.airing.proof.themes.edit', ['id' => encrypt_id($data->id)]);
|
||||
|
||||
$deleteUrl = route('dashboard.airing.proof.themes.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 tema '.$data->name.'? 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 contentRecapClassification(Request $request){
|
||||
if ($request->ajax()) {
|
||||
|
||||
|
||||
|
||||
$data = ContentRecapClassification::all();
|
||||
|
||||
return DataTables::of($data)
|
||||
->addIndexColumn()
|
||||
->addColumn('content_recaps', function ($data) {
|
||||
$contentRecapsCount = $data->contentRecaps->count();
|
||||
|
||||
if($contentRecapsCount > 0){
|
||||
return $contentRecapsCount. ' [<a href="'.route('dashboard.content.recaps.index', ['classification' => encrypt_id($data->id)]).'">Lihat</a>]';
|
||||
}else{
|
||||
return $contentRecapsCount;
|
||||
}
|
||||
})
|
||||
->addColumn('date_created', function ($data) {
|
||||
return idn_date($data->created_at, 'l, d F Y');
|
||||
})
|
||||
->addColumn('action', function ($data) {
|
||||
$showUrl = route('dashboard.content.recap.classifications.show', ['id' => encrypt_id($data->id)]);
|
||||
|
||||
$editUrl = route('dashboard.content.recap.classifications.edit', ['id' => encrypt_id($data->id)]);
|
||||
|
||||
$deleteUrl = route('dashboard.content.recap.classifications.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 klasifikasi '.$data->name.'? 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 news(Request $request){
|
||||
if ($request->ajax()) {
|
||||
|
||||
@ -643,55 +751,6 @@ public function mediaAnnouncement(Request $request, $category){
|
||||
|
||||
}
|
||||
|
||||
public function airingProofTheme(Request $request){
|
||||
if ($request->ajax()) {
|
||||
|
||||
|
||||
|
||||
$data = AiringProofTheme::all();
|
||||
|
||||
return DataTables::of($data)
|
||||
->addIndexColumn()
|
||||
->addColumn('date_created', function ($data) {
|
||||
return idn_date($data->created_at, 'l, d F Y');
|
||||
})
|
||||
->addColumn('action', function ($data) {
|
||||
$showUrl = route('dashboard.airing.proof.themes.show', ['id' => encrypt_id($data->id)]);
|
||||
|
||||
$editUrl = route('dashboard.airing.proof.themes.edit', ['id' => encrypt_id($data->id)]);
|
||||
|
||||
$deleteUrl = route('dashboard.airing.proof.themes.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 tema '.$data->name.'? 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 company(Request $request){
|
||||
if ($request->ajax()) {
|
||||
|
||||
@ -1991,6 +2050,9 @@ public function contentRecap(Request $request){
|
||||
->addColumn('channel', function ($data){
|
||||
return Str::ucfirst($data->channel);
|
||||
})
|
||||
->addColumn('classification', function ($data){
|
||||
return Str::ucfirst($data->classification->name);
|
||||
})
|
||||
->addColumn('posted_date', function ($data){
|
||||
return idn_date($data->posted_date, 'd F Y');
|
||||
})
|
||||
|
||||
39
app/Http/Requests/ContentRecapClassificationRequest.php
Normal file
39
app/Http/Requests/ContentRecapClassificationRequest.php
Normal file
@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class ContentRecapClassificationRequest 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 [
|
||||
'name' => ['required', 'max:100'],
|
||||
'description' => ['nullable'],
|
||||
];
|
||||
}
|
||||
|
||||
public function messages(): array
|
||||
{
|
||||
return [
|
||||
'name.required' => 'Nama harus diisi.',
|
||||
'name.max' => 'Nama tidak boleh lebih dari 100 karakter.',
|
||||
'description.nullable' => 'Deskripsi bersifat opsional.',
|
||||
];
|
||||
}
|
||||
}
|
||||
@ -22,13 +22,22 @@ public function authorize(): bool
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
$rules = [
|
||||
'title' => ['required'],
|
||||
'posted_date' => ['required', 'date'],
|
||||
'channel'=> ['required', 'in:website,tiktok,youtube,instagram,facebook,twitter,cetak'],
|
||||
'link' => ['required', 'url'],
|
||||
'classification' => ['required'],
|
||||
'classification_id' => ['required', 'exists:content_recap_classifications,id'],
|
||||
'social_media' => ['required'],
|
||||
];
|
||||
|
||||
if($this->isMethod('post')){
|
||||
$rules['image'] = ['required', 'image', 'mimes:png,jpg,jpeg', 'max:2048'];
|
||||
}else if($this->isMethod('put')){
|
||||
$rules['image'] = ['nullable', 'image', 'mimes:png,jpg,jpeg', 'max:2048'];
|
||||
}
|
||||
|
||||
return $rules;
|
||||
}
|
||||
|
||||
public function messages()
|
||||
@ -41,8 +50,15 @@ public function messages()
|
||||
'channel.in' => 'Channel harus salah satu dari: website, tiktok, youtube, instagram, facebook, twitter, atau cetak.',
|
||||
'link.required' => 'Link wajib diisi.',
|
||||
'link.url' => 'Link harus berupa URL yang valid.',
|
||||
'classification.required' => 'Klasifikasi wajib diisi.',
|
||||
'classification_id.required' => 'Klasifikasi wajib dipilih.',
|
||||
'classification_id.exists' => 'Klasifikasi tidak ditemukan dalam data yang tersedia.',
|
||||
'social_media.required' => 'Media sosial wajib diisi.',
|
||||
'image.required' => 'Gambar wajib diunggah.',
|
||||
'image.image' => 'File yang diunggah harus berupa gambar.',
|
||||
'image.mimes' => 'Format gambar harus PNG, JPG, atau JPEG.',
|
||||
'image.max' => 'Ukuran gambar maksimal 2MB.',
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -28,7 +28,7 @@ public function rules(): array
|
||||
'link' => ['nullable', 'url'],
|
||||
'tag' => ['nullable'],
|
||||
'category' => ['required', 'in:0,1'],
|
||||
'image' => 'nullable', 'image', 'mimes:png,jpg,jpeg', 'max:4096'
|
||||
'image' => ['nullable', 'image', 'mimes:png,jpg,jpeg', 'max:2048']
|
||||
];
|
||||
|
||||
return $rules;
|
||||
|
||||
@ -3,9 +3,11 @@
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
|
||||
class ContentRecap extends Model
|
||||
{
|
||||
use SoftDeletes;
|
||||
protected $table = 'content_recaps';
|
||||
|
||||
protected $fillable = [
|
||||
@ -13,7 +15,9 @@ class ContentRecap extends Model
|
||||
'posted_date',
|
||||
'channel',
|
||||
'link',
|
||||
'classification',
|
||||
'classification_id',
|
||||
'social_media',
|
||||
'image',
|
||||
'enhancer_id',
|
||||
];
|
||||
|
||||
@ -21,4 +25,8 @@ public function enhancer()
|
||||
{
|
||||
return $this->belongsTo(User::class, 'enhancer_id', 'id');
|
||||
}
|
||||
|
||||
public function classification(){
|
||||
return $this->belongsTo(ContentRecapClassification::class, 'classification_id', 'id');
|
||||
}
|
||||
}
|
||||
|
||||
24
app/Models/ContentRecapClassification.php
Normal file
24
app/Models/ContentRecapClassification.php
Normal file
@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
|
||||
class ContentRecapClassification extends Model
|
||||
{
|
||||
use SoftDeletes;
|
||||
protected $table = 'content_recap_classifications';
|
||||
|
||||
protected $fillable = [
|
||||
'name',
|
||||
'slug',
|
||||
'year',
|
||||
'description',
|
||||
'enhancer_id'
|
||||
];
|
||||
|
||||
public function contentRecaps(){
|
||||
return $this->hasMany(ContentRecap::class, 'classification_id', 'id');
|
||||
}
|
||||
}
|
||||
12
app/Models/Legacy/OldContentRecap.php
Normal file
12
app/Models/Legacy/OldContentRecap.php
Normal file
@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Legacy;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class OldContentRecap extends Model
|
||||
{
|
||||
protected $connection = 'legacy';
|
||||
|
||||
protected $table = 'content_recap';
|
||||
}
|
||||
12
app/Models/Legacy/OldContentRecapClassification.php
Normal file
12
app/Models/Legacy/OldContentRecapClassification.php
Normal file
@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Legacy;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class OldContentRecapClassification extends Model
|
||||
{
|
||||
protected $connection = 'legacy';
|
||||
|
||||
protected $table = 'content_recap_classifications';
|
||||
}
|
||||
@ -0,0 +1,34 @@
|
||||
<?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('content_recap_classifications', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('name');
|
||||
$table->string('slug');
|
||||
$table->string('year');
|
||||
$table->text('description')->nullable();
|
||||
$table->unsignedBigInteger('enhancer_id');
|
||||
$table->foreign('enhancer_id')->references('id')->on('users');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('content_recap_classifications');
|
||||
}
|
||||
};
|
||||
@ -13,14 +13,19 @@ public function up(): void
|
||||
{
|
||||
Schema::create('content_recaps', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('title');
|
||||
$table->text('title');
|
||||
$table->date('posted_date');
|
||||
$table->enum('channel', ['website', 'tiktok', 'youtube', 'instagram', 'facebook', 'twitter', 'cetak']);
|
||||
$table->string('link');
|
||||
$table->string('classification');
|
||||
$table->string('image')->nullable();
|
||||
$table->string('social_media')->nullable();
|
||||
$table->text('description')->nullable();
|
||||
$table->unsignedBigInteger('classification_id')->nullable();
|
||||
$table->unsignedBigInteger('enhancer_id');
|
||||
$table->foreign('enhancer_id')->references('id')->on('users');
|
||||
$table->foreign('classification_id')->references('id')->on('content_recap_classifications');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
});
|
||||
}
|
||||
|
||||
32
database/seeders/ContentRecapClassificationSeeder.php
Normal file
32
database/seeders/ContentRecapClassificationSeeder.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\ContentRecapClassification;
|
||||
use App\Models\Legacy\OldContentRecapClassification;
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class ContentRecapClassificationSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$legacyContentRecapClassifications = OldContentRecapClassification::all();
|
||||
|
||||
foreach($legacyContentRecapClassifications as $legacyContentRecapClassification){
|
||||
ContentRecapClassification::create([
|
||||
'id' => $legacyContentRecapClassification->id,
|
||||
'name' => $legacyContentRecapClassification->name,
|
||||
'slug' => slugify($legacyContentRecapClassification->name.' '.$legacyContentRecapClassification->year),
|
||||
'year' => $legacyContentRecapClassification->year,
|
||||
'created_at' => $legacyContentRecapClassification->created_at,
|
||||
'updated_at' => $legacyContentRecapClassification->updated_at,
|
||||
'deleted_at' => $legacyContentRecapClassification->deleted_at,
|
||||
'enhancer_id' => 1,
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2,6 +2,8 @@
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\ContentRecap;
|
||||
use App\Models\Legacy\OldContentRecap;
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
@ -12,6 +14,23 @@ class ContentRecapSeeder extends Seeder
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
//
|
||||
$legacyContentRecaps = OldContentRecap::all();
|
||||
|
||||
foreach($legacyContentRecaps as $legacyContentRecap){
|
||||
ContentRecap::create([
|
||||
'id' => $legacyContentRecap->id,
|
||||
'title' => $legacyContentRecap->title,
|
||||
'posted_date' => $legacyContentRecap->posting_date == '0000-00-00' ? now() : $legacyContentRecap->posting_date,
|
||||
'channel' => $legacyContentRecap->channel,
|
||||
'link' => $legacyContentRecap->link,
|
||||
'image' => $legacyContentRecap->image,
|
||||
'classification_id' => $legacyContentRecap->classification_id,
|
||||
'created_at' => $legacyContentRecap->created_at,
|
||||
'updated_at' => $legacyContentRecap->updated_at,
|
||||
'deleted_at' => $legacyContentRecap->deleted_at,
|
||||
'enhancer_id' => $legacyContentRecap->enhancer,
|
||||
'social_media' => $legacyContentRecap->social_media,
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -20,6 +20,8 @@ public function run(): void
|
||||
$this->call(SubClassificationSeeder::class);
|
||||
$this->call(LocationSeeder::class);
|
||||
$this->call(SubLocationSeeder::class);
|
||||
$this->call(ContentRecapClassificationSeeder::class);
|
||||
$this->call(ContentRecapSeeder::class);
|
||||
$this->call(NewsSeeder::class);
|
||||
$this->call(CompanySeeder::class);
|
||||
$this->call(MediaSeeder::class);
|
||||
|
||||
@ -28,105 +28,63 @@
|
||||
// strengthStatus.className = colorClass;
|
||||
// });
|
||||
|
||||
$(document).ready(function() {
|
||||
// Setup CSRF token untuk semua AJAX request
|
||||
$(document).ready(function () {
|
||||
$.ajaxSetup({
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
|
||||
}
|
||||
});
|
||||
|
||||
let typingTimer;
|
||||
let delay = 500;
|
||||
function setupLinkChecker(inputSelector, feedbackSelector, checkUrl) {
|
||||
let typingTimer;
|
||||
let delay = 500;
|
||||
|
||||
$('#link').on('keyup', function() {
|
||||
clearTimeout(typingTimer);
|
||||
let inputField = $(this);
|
||||
let linkValue = inputField.val();
|
||||
$(inputSelector).on('keyup', function () {
|
||||
clearTimeout(typingTimer);
|
||||
const inputField = $(this);
|
||||
const linkValue = inputField.val();
|
||||
|
||||
if (linkValue.length > 0) {
|
||||
typingTimer = setTimeout(function() {
|
||||
$.ajax({
|
||||
url: '/dashboard/media-monitorings/check-link', // Sesuaikan dengan route yang benar
|
||||
method: 'POST',
|
||||
data: { link: linkValue }, // CSRF sudah otomatis ditambahkan
|
||||
success: function(response) {
|
||||
console.log('Response:', response);
|
||||
if (response.exists) {
|
||||
$('#linkFeedback')
|
||||
.removeClass('d-none text-success')
|
||||
.addClass('text-danger')
|
||||
.text('Link tersebut sudah ada di database!');
|
||||
inputField.addClass('is-invalid').removeClass('is-valid');
|
||||
} else {
|
||||
$('#linkFeedback')
|
||||
.removeClass('d-none text-danger')
|
||||
.addClass('text-success')
|
||||
.text('Link tidak ada di database.');
|
||||
inputField.addClass('is-valid').removeClass('is-invalid');
|
||||
if (linkValue.length > 0) {
|
||||
typingTimer = setTimeout(function () {
|
||||
$.ajax({
|
||||
url: checkUrl,
|
||||
method: 'POST',
|
||||
data: { link: linkValue },
|
||||
success: function (response) {
|
||||
console.log('Response:', response);
|
||||
const feedbackEl = $(feedbackSelector);
|
||||
if (response.exists) {
|
||||
feedbackEl
|
||||
.removeClass('d-none text-success')
|
||||
.addClass('text-danger')
|
||||
.text('Link tersebut sudah ada di database!');
|
||||
inputField.addClass('is-invalid').removeClass('is-valid');
|
||||
} else {
|
||||
feedbackEl
|
||||
.removeClass('d-none text-danger')
|
||||
.addClass('text-success')
|
||||
.text('Link tidak ada di database.');
|
||||
inputField.addClass('is-valid').removeClass('is-invalid');
|
||||
}
|
||||
},
|
||||
error: function (xhr, status, error) {
|
||||
console.error('AJAX Error:', error);
|
||||
}
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
console.error('AJAX Error:', error); // Debugging
|
||||
}
|
||||
});
|
||||
}, delay);
|
||||
} else {
|
||||
$('#linkFeedback').addClass('d-none');
|
||||
inputField.removeClass('is-invalid is-valid');
|
||||
}
|
||||
});
|
||||
});
|
||||
}, delay);
|
||||
} else {
|
||||
$(feedbackSelector).addClass('d-none').text('');
|
||||
inputField.removeClass('is-invalid is-valid');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Panggil fungsi untuk masing-masing input
|
||||
setupLinkChecker('#mediaMonitoringLink', '#mediaMonitoringLinkFeedback', '/dashboard/media-monitorings/check-link');
|
||||
setupLinkChecker('#reportLink', '#reportLinkFeedback', '/dashboard/reports/check-link');
|
||||
setupLinkChecker('#contentRecapLink', '#contentRecapLinkFeedback', '/dashboard/content-recaps/check-link');
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
// Setup CSRF token untuk semua AJAX request
|
||||
$.ajaxSetup({
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
|
||||
}
|
||||
});
|
||||
|
||||
let typingTimer;
|
||||
let delay = 500;
|
||||
|
||||
$('#reportLink').on('keyup', function() {
|
||||
clearTimeout(typingTimer);
|
||||
let inputField = $(this);
|
||||
let linkValue = inputField.val();
|
||||
|
||||
if (linkValue.length > 0) {
|
||||
typingTimer = setTimeout(function() {
|
||||
$.ajax({
|
||||
url: '/dashboard/reports/check-link', // Sesuaikan dengan route yang benar
|
||||
method: 'POST',
|
||||
data: { link: linkValue }, // CSRF sudah otomatis ditambahkan
|
||||
success: function(response) {
|
||||
console.log('Response:', response);
|
||||
if (response.exists) {
|
||||
$('#linkFeedback')
|
||||
.removeClass('d-none text-success')
|
||||
.addClass('text-danger')
|
||||
.text('Link tersebut sudah ada di database!');
|
||||
inputField.addClass('is-invalid').removeClass('is-valid');
|
||||
} else {
|
||||
$('#linkFeedback')
|
||||
.removeClass('d-none text-danger')
|
||||
.addClass('text-success')
|
||||
.text('Link tidak ada di database.');
|
||||
inputField.addClass('is-valid').removeClass('is-invalid');
|
||||
}
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
console.error('AJAX Error:', error); // Debugging
|
||||
}
|
||||
});
|
||||
}, delay);
|
||||
} else {
|
||||
$('#linkFeedback').addClass('d-none');
|
||||
inputField.removeClass('is-invalid is-valid');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
document.querySelector('.image-preview').addEventListener('change', function(event) {
|
||||
var reader = new FileReader();
|
||||
|
||||
@ -0,0 +1,76 @@
|
||||
@include('partials.dashboard.head')
|
||||
@include('partials.dashboard.sidebar', ['page' => 'content_recap_classifications'])
|
||||
@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">
|
||||
@if (session()->has('data-exists'))
|
||||
<div class="example-alert mb-3">
|
||||
<div class="alert alert-warning alert-icon">
|
||||
<em class="icon ni ni-alert-circle"></em> <strong>Tema Sudah Ada.</strong><br>Tema dengan nama dan tahun tersebut sudah ada di database, namun dalam kondisi <span class="text-danger">terhapus</span>. Anda ingin mengembalikannya?
|
||||
<div class="text-center mt-1">
|
||||
<a href="{{route('dashboard.content.recap.classifications.restore', ['slug' => session()->get('data-exists')])}}" class="btn btn-sm btn-primary mx-1">Ya</a>
|
||||
<a href="{{route('dashboard.content.recap.classifications.create')}}" class="btn btn-sm btn-warning">Tidak</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
<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.content.recap.classifications.store')}}" method="post" id="myForm">
|
||||
@csrf
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-6">
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="name">Nama<span class="required-input">*</span></label>
|
||||
<div class="form-control-wrap">
|
||||
<input type="text" class="form-control @error('name') border-danger @enderror" id="name" name="name" placeholder="Masukan nama tema" value="{{old('name')}}">
|
||||
</div>
|
||||
@error('name')
|
||||
<span class="validation-error">{{$message}}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="year">Tahun<span class="required-input">*</span></label>
|
||||
<div class="form-control-wrap">
|
||||
<input type="text" class="form-control @error('year') border-danger @enderror" id="year" year="year" placeholder="Masukan year tema" value="{{old('year')}}">
|
||||
</div>
|
||||
@error('year')
|
||||
<span class="validation-error">{{$message}}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-12">
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="phone-no-1">Deskripsi</label>
|
||||
<div class="form-control-wrap">
|
||||
<textarea class="tinymce-basic form-control" name="description">{!!old('description')!!}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<hr>
|
||||
<div class="form-group d-flex justify-content-end">
|
||||
<a href="{{route('dashboard.content.recap.classifications.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
|
||||
<button type="button" class="btn btn-md btn-primary" id="submitButton">Tambahkan</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- content @e -->
|
||||
@include('partials.dashboard.footer', ['rich_editor' => true])
|
||||
@ -0,0 +1,70 @@
|
||||
@include('partials.dashboard.head')
|
||||
@include('partials.dashboard.sidebar', ['page' => 'content_recap_classifications'])
|
||||
@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.content.recap.classifications.update', ['id' => encrypt_id($contentRecapClassification->id)])}}" method="post" id="myForm">
|
||||
@csrf
|
||||
@method('put')
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-6">
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="name">Nama<span class="required-input">*</span></label>
|
||||
<div class="form-control-wrap">
|
||||
<input type="text" class="form-control @error('name') border-danger @enderror" id="name" name="name" placeholder="Masukan nama tema" value="{{$contentRecapClassification->name}}">
|
||||
</div>
|
||||
@error('name')
|
||||
<span class="validation-error">{{$message}}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="year">Tahun<span class="required-input">*</span></label>
|
||||
<div class="form-control-wrap">
|
||||
<input type="text" class="form-control @error('year') border-danger @enderror" id="year" name="year" placeholder="Masukan tahun tema" value="{{$contentRecapClassification->year}}">
|
||||
</div>
|
||||
@error('year')
|
||||
<span class="validation-error">{{$message}}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-12">
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="phone-no-1">Deskripsi</label>
|
||||
<div class="form-control-wrap">
|
||||
<textarea class="tinymce-basic form-control" name="description">{!!$contentRecapClassification->description!!}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<hr>
|
||||
<div class="form-group d-flex justify-content-end">
|
||||
@if (request()->query('show'))
|
||||
<a href="{{route('dashboard.content.recap.classifications.show', ['id' => encrypt_id($contentRecapClassification->id)])}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
|
||||
@else
|
||||
<a href="{{route('dashboard.content.recap.classifications.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
|
||||
@endif
|
||||
<button type="button" class="btn btn-md btn-primary" id="submitButton">Simpan</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- content @e -->
|
||||
@include('partials.dashboard.footer', ['rich_editor' => true])
|
||||
@ -0,0 +1,62 @@
|
||||
@include('partials.dashboard.head')
|
||||
@include('partials.dashboard.sidebar', ['page' => 'content_recap_classifications'])
|
||||
@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 class="nk-block-tools-opt"><a href="{{route('dashboard.content.recap.classifications.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 -->
|
||||
</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="contentRecapClassificationsTable" border="1">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 10% !important;">No</th>
|
||||
<th>Nama</th>
|
||||
<th>Rekap Konten</th>
|
||||
<th>Tanggal Dibuat</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' => 'content_recap_classification'])
|
||||
@ -0,0 +1,79 @@
|
||||
@include('partials.dashboard.head')
|
||||
@include('partials.dashboard.sidebar', ['page' => 'content_recap_classifications'])
|
||||
@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 Klasifikasi Rekap Konten</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 Klasifikasi</span>
|
||||
<span class="profile-ud-value">{{$contentRecapClassification->name}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="profile-ud-item">
|
||||
<div class="profile-ud wider">
|
||||
<span class="profile-ud-label">Rekap Konten</span>
|
||||
<span class="profile-ud-value">
|
||||
@if ($contentRecapClassification->contentRecaps->count() > 0)
|
||||
<a href="{{route('dashboard.issue.managements.index', ['government_agency' => encrypt_id($contentRecapClassification->id)])}}"><u>{{$contentRecapClassification->contentRecaps->count()}}</u></a>
|
||||
@else
|
||||
{{$contentRecapClassification->contentRecaps->count()}}
|
||||
@endif
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="profile-ud-item">
|
||||
<div class="profile-ud wider">
|
||||
<span class="profile-ud-label">Dibuat Pada</span>
|
||||
<span class="profile-ud-value">{{idn_date($contentRecapClassification->created_at, 'l, d 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">Deskripsi</span>
|
||||
</div><!-- .nk-block-head -->
|
||||
<div class="bq-note">
|
||||
<div class="bq-note-item">
|
||||
<div class="bq-note-text">
|
||||
{!! filled($contentRecapClassification->description) ? $contentRecapClassification->description : '-' !!}
|
||||
</div>
|
||||
</div><!-- .bq-note-item -->
|
||||
</div><!-- .bq-note -->
|
||||
</div><!-- .nk-block -->
|
||||
<hr>
|
||||
<div class="nk-block d-flex justify-content-end">
|
||||
<a href="{{route('dashboard.content.recap.classifications.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
|
||||
<a href="{{route('dashboard.content.recap.classifications.edit', ['id' => encrypt_id($contentRecapClassification->id), 'show' => true])}}" 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])
|
||||
@ -12,10 +12,7 @@
|
||||
<div class="card-head">
|
||||
<h5 class="card-title">{{$title}}</h5>
|
||||
</div>
|
||||
@foreach ($errors->all() as $item)
|
||||
{{$item}}
|
||||
@endforeach
|
||||
<form action="{{route('dashboard.content.recaps.store')}}" method="post" enctype="multipart/form-data">
|
||||
<form action="{{route('dashboard.content.recaps.store')}}" method="post" enctype="multipart/form-data" id="myForm">
|
||||
@csrf
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-6">
|
||||
@ -33,7 +30,8 @@
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="link">Link<span class="required-input">*</span></label>
|
||||
<div class="form-control-wrap">
|
||||
<input type="text" class="form-control @error('link') border-danger @enderror" id="link" name="link" placeholder="Masukan link" value="{{old('link')}}">
|
||||
<input type="text" class="form-control @error('link') border-danger @enderror" id="contentRecapLink" name="link" placeholder="Masukan link" value="{{old('link')}}">
|
||||
<small id="contentRecapLinkFeedback" class="d-none"></small>
|
||||
</div>
|
||||
@error('link')
|
||||
<span class="validation-error">{{$message}}</span>
|
||||
@ -42,13 +40,26 @@
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="classification">Klasifikasi<span class="required-input">*</span></label>
|
||||
<label class="form-label">Klasifikasi<span class="required-input">*</span></label>
|
||||
<div class="form-control-wrap">
|
||||
<input type="text" class="form-control @error('classification') border-danger @enderror" id="classification" name="classification" placeholder="Masukan Klasifikasi" value="{{old('classification')}}">
|
||||
<select class="form-select js-select2" name="classification_id" id="classification" data-search="on">
|
||||
@foreach ($classifications as $classification)
|
||||
<option value="{{$classification->id}}" {{ old('classification_id') == $classification->id ? 'selected' : '' }}>{{$classification->name}}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="form-group">
|
||||
<label class="form-label">Media Sosial<span class="required-input">*</span></label>
|
||||
<div class="form-control-wrap">
|
||||
<select class="form-select js-select2" name="social_media" id="social_media" data-search="on">
|
||||
<option value="PPID Diskominfo Purwakarta" {{ old('social_media') == 'PPID Diskominfo Purwakarta' ? 'selected' : '' }}>PPID Diskominfo Purwakarta</option>
|
||||
<option value="Diskominfo Purwakarta" {{ old('social_media') == 'Diskominfo Purwakarta' ? 'selected' : '' }}>Diskominfo Purwakarta</option>
|
||||
<option value="Purwakarta Saber Hoaks" {{ old('social_media') == 'Purwakarta Saber Hoaks' ? 'selected' : '' }}>Purwakarta Saber Hoaks</option>
|
||||
</select>
|
||||
</div>
|
||||
@error('classification')
|
||||
<span class="validation-error">{{$message}}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
@ -78,11 +89,25 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="posted_date">Gambar<span class="required-input">*</span></label>
|
||||
<div class="form-control-wrap">
|
||||
<div class="form-file">
|
||||
<input type="file" accept="image/*" class="form-file-input" id="image" name="image">
|
||||
<label class="form-file-label" for="image">Gambar berupa screenshoot</label>
|
||||
</div>
|
||||
</div>
|
||||
@error('posted_date')
|
||||
<span class="validation-error">{{$message}}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<hr>
|
||||
<div class="form-group d-flex justify-content-end">
|
||||
<a href="{{route('dashboard.content.recaps.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>
|
||||
<button type="button" class="btn btn-md btn-primary" id="submitButton">Tambahkan</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
@foreach ($errors->all() as $item)
|
||||
{{$item}}
|
||||
@endforeach
|
||||
<form action="{{route('dashboard.content.recaps.update', ['id' => encrypt_id($contentRecap->id)])}}" method="post" enctype="multipart/form-data">
|
||||
<form action="{{route('dashboard.content.recaps.update', ['id' => encrypt_id($contentRecap->id)])}}" method="post" enctype="multipart/form-data" id="myForm">
|
||||
@csrf
|
||||
@method('put')
|
||||
<div class="row g-4">
|
||||
@ -43,13 +43,26 @@
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="classification">Klasifikasi<span class="required-input">*</span></label>
|
||||
<label class="form-label">Klasifikasi<span class="required-input">*</span></label>
|
||||
<div class="form-control-wrap">
|
||||
<input type="text" class="form-control @error('classification') border-danger @enderror" id="classification" name="classification" placeholder="Masukan Klasifikasi" value="{{$contentRecap->classification}}">
|
||||
<select class="form-select js-select2" name="classification_id" id="classification" data-search="on">
|
||||
@foreach ($classifications as $classification)
|
||||
<option value="{{$classification->id}}" {{ $contentRecap->classification_id == $classification->id ? 'selected' : '' }}>{{$classification->name}}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="form-group">
|
||||
<label class="form-label">Media Sosial<span class="required-input">*</span></label>
|
||||
<div class="form-control-wrap">
|
||||
<select class="form-select js-select2" name="social_media" id="social_media" data-search="on">
|
||||
<option value="PPID Diskominfo Purwakarta" {{$contentRecap->social_media == 'PPID Diskominfo Purwakarta' ? 'selected' : ''}}>PPID Diskominfo Purwakarta</option>
|
||||
<option value="Diskominfo Purwakarta" {{$contentRecap->social_media == 'Diskominfo Purwakarta' ? 'selected' : ''}}>Diskominfo Purwakarta</option>
|
||||
<option value="Purwakarta Saber Hoaks" {{$contentRecap->social_media == 'Purwakarta Saber Hoaks' ? 'selected' : ''}}>Purwakarta Saber Hoaks</option>
|
||||
</select>
|
||||
</div>
|
||||
@error('classification')
|
||||
<span class="validation-error">{{$message}}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
@ -79,11 +92,25 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="posted_date">Gambar<span class="required-input">*</span></label>
|
||||
<div class="form-control-wrap">
|
||||
<div class="form-file">
|
||||
<input type="file" accept="image/*" class="form-file-input" id="image" name="image">
|
||||
<label class="form-file-label" for="image">Gambar berupa screenshoot</label>
|
||||
</div>
|
||||
</div>
|
||||
@error('posted_date')
|
||||
<span class="validation-error">{{$message}}</span>
|
||||
@enderror
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<hr>
|
||||
<div class="form-group d-flex justify-content-end">
|
||||
<a href="{{route('dashboard.content.recaps.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>
|
||||
<button type="button" class="btn btn-md btn-primary" id="submitButton">Simpan</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
<th style="width: 10% !important;">No</th>
|
||||
<th>Judul</th>
|
||||
<th>Kanal</th>
|
||||
<th>Social Media</th>
|
||||
<th>Tanggal Posting</th>
|
||||
<th>Klasifikasi</th>
|
||||
<th>Link</th>
|
||||
|
||||
@ -173,7 +173,7 @@
|
||||
<div class="form-control-wrap">
|
||||
<select class="form-select js-select2" name="classification_id" id="classification" data-search="on">
|
||||
@foreach ($classifications as $classification)
|
||||
<option value="{{$classification->id}}" {{ old('classification') == $classification->id ? 'selected' : '' }}>{{$classification->name}}</option>
|
||||
<option value="{{$classification->id}}" {{ old('classification_id') == $classification->id ? 'selected' : '' }}>{{$classification->name}}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
|
||||
@ -111,7 +111,7 @@
|
||||
@case(3)
|
||||
<span class="profile-ud-value">
|
||||
<span class="badge bg-danger">
|
||||
<a href="javascript:void(0);" onclick="showDetail({{ json_encode(strip_tags($user->company->edit_rejection_reason)) }})" class="text-light text-decoration-underline">Ditolak</a>
|
||||
<a href="javascript:void(0);" onclick="showDetail({{ json_encode(strip_tags($journalist->edit_rejection_reason)) }})" class="text-light text-decoration-underline">Ditolak</a>
|
||||
</span>
|
||||
</span>
|
||||
@break
|
||||
|
||||
@ -52,8 +52,8 @@
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="link">Link</label>
|
||||
<div class="form-control-wrap">
|
||||
<input type="text" class="form-control @error('link') border-danger @enderror" id="link" name="link" placeholder="Masukan link" value="{{old('link')}}">
|
||||
<small id="linkFeedback" class="d-none"></small>
|
||||
<input type="text" class="form-control @error('link') border-danger @enderror" id="mediaMonitoringLink" name="link" placeholder="Masukan link" value="{{old('link')}}">
|
||||
<small id="mediaMonitoringLinkFeedback" class="d-none"></small>
|
||||
</div>
|
||||
@error('link')
|
||||
<span class="validation-error">{{$message}}</span>
|
||||
|
||||
@ -254,6 +254,62 @@
|
||||
</script>
|
||||
@endif
|
||||
|
||||
@if ($datatable === 'airing_proof_theme')
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#airingProofThemesTable').DataTable({
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
ajax: '{{ route('dashboard.airing.proof.themes.data') }}',
|
||||
columns: [
|
||||
{ data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false },
|
||||
{ data: 'name', name: 'name' },
|
||||
{ data: 'year', name: 'year' },
|
||||
{ data: 'date_created', name: 'date_created' },
|
||||
{ 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 === 'content_recap_classification')
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#contentRecapClassificationsTable').DataTable({
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
ajax: '{{ route('dashboard.content.recap.classifications.data') }}',
|
||||
columns: [
|
||||
{ data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false },
|
||||
{ data: 'name', name: 'name' },
|
||||
{ data: 'content_recaps', name: 'content_recaps' },
|
||||
{ data: 'date_created', name: 'date_created' },
|
||||
{ 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 === 'news')
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
@ -408,34 +464,6 @@
|
||||
</script>
|
||||
@endif
|
||||
|
||||
@if ($datatable === 'airing_proof_theme')
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#airingProofThemesTable').DataTable({
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
ajax: '{{ route('dashboard.airing.proof.themes.data') }}',
|
||||
columns: [
|
||||
{ data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false },
|
||||
{ data: 'name', name: 'name' },
|
||||
{ data: 'year', name: 'year' },
|
||||
{ data: 'date_created', name: 'date_created' },
|
||||
{ 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 === 'company')
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
@ -895,6 +923,7 @@
|
||||
{ data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false },
|
||||
{ data: 'title', name: 'title' },
|
||||
{ data: 'channel', name: 'channel' },
|
||||
{ data: 'social_media', name: 'social_media' },
|
||||
{ data: 'posted_date', name: 'posted_date' },
|
||||
{ data: 'classification', name: 'classification' },
|
||||
{ data: 'link', name: 'link' },
|
||||
@ -902,10 +931,30 @@
|
||||
{ data: 'created_at', name: 'created_at', visible: false },
|
||||
{ data: 'id', name: 'id', orderable: true, searchable: false, visible: false },
|
||||
],
|
||||
columnDefs: [
|
||||
{ targets: 0, width: '5%' }, // Index
|
||||
{ targets: 1, width: '25%' }, // Title
|
||||
{ targets: 2, width: '10%' }, // Channel
|
||||
{ targets: 3, width: '7%' }, // Social Media
|
||||
{ targets: 4, width: '10%' }, // Posted Date
|
||||
{ targets: 5, width: '12%' }, // Classification
|
||||
{ targets: 6, width: '20%' }, // Link
|
||||
{ targets: 7, width: '8%', className: 'text-center' }, // Action button
|
||||
|
||||
{
|
||||
targets: [1, 3, 5, 6], // Title & Link
|
||||
createdCell: function(td) {
|
||||
$(td).css({
|
||||
'white-space': 'normal',
|
||||
'word-break': 'break-word',
|
||||
});
|
||||
}
|
||||
}
|
||||
],
|
||||
language: datatableLanguage,
|
||||
// responsive: true,
|
||||
autoWidth: false,
|
||||
order: [[7, 'desc']],
|
||||
order: [[9, '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
|
||||
|
||||
@ -35,7 +35,7 @@ function deleteItem(url, message) {
|
||||
Swal.fire({
|
||||
icon: 'success',
|
||||
title: 'Berhasil',
|
||||
text: 'Data jurnalis berhasil dihapus.',
|
||||
text: 'Data berhasil dihapus.',
|
||||
confirmButtonText: 'OK'
|
||||
}).then(() => location.reload());
|
||||
}
|
||||
|
||||
@ -49,44 +49,9 @@
|
||||
</a>
|
||||
</li><!-- .nk-menu-item -->
|
||||
@endif
|
||||
@if (is_role('1'))
|
||||
<li class="nk-menu-heading">
|
||||
<h6 class="overline-title text-primary-alt">Master</h6>
|
||||
</li><!-- .nk-menu-item -->
|
||||
<li class="nk-menu-item">
|
||||
<a href="{{route('dashboard.classifications.index')}}" class="nk-menu-link {{$page === 'classifications' ? 'active-page' : ''}}">
|
||||
<span class="nk-menu-icon"><em class="icon ni ni-dot-box"></em></span>
|
||||
<span class="nk-menu-text">Klasifikasi</span>
|
||||
</a>
|
||||
</li><!-- .nk-menu-item -->
|
||||
<li class="nk-menu-item">
|
||||
<a href="{{route('dashboard.sub.classifications.index')}}" class="nk-menu-link {{$page === 'sub_classifications' ? 'active-page' : ''}}">
|
||||
<span class="nk-menu-icon"><em class="icon ni ni-dot-box"></em></span>
|
||||
<span class="nk-menu-text">Sub Klasifikasi</span>
|
||||
</a>
|
||||
</li><!-- .nk-menu-item -->
|
||||
<li class="nk-menu-item">
|
||||
<a href="{{route('dashboard.locations.index')}}" class="nk-menu-link {{$page === 'locations' ? 'active-page' : ''}}">
|
||||
<span class="nk-menu-icon"><em class="icon ni ni-list-round"></em></span>
|
||||
<span class="nk-menu-text">Lokus</span>
|
||||
</a>
|
||||
</li><!-- .nk-menu-item -->
|
||||
<li class="nk-menu-item">
|
||||
<a href="{{route('dashboard.sub.locations.index')}}" class="nk-menu-link {{$page === 'sub_locations' ? 'active-page' : ''}}">
|
||||
<span class="nk-menu-icon"><em class="icon ni ni-list-round"></em></span>
|
||||
<span class="nk-menu-text">Sub Lokus</span>
|
||||
</a>
|
||||
</li><!-- .nk-menu-item -->
|
||||
<li class="nk-menu-item">
|
||||
<a href="{{route('dashboard.government.agencies.index')}}" class="nk-menu-link {{$page === 'government_agencies' ? 'active-page' : ''}}">
|
||||
<span class="nk-menu-icon"><em class="icon ni ni-building"></em></span>
|
||||
<span class="nk-menu-text">OPD</span>
|
||||
</a>
|
||||
</li><!-- .nk-menu-item -->
|
||||
@endif
|
||||
@if (is_role(['1']))
|
||||
<li class="nk-menu-heading">
|
||||
<h6 class="overline-title text-primary-alt">Kelola</h6>
|
||||
<h6 class="overline-title text-primary-alt">Informasi</h6>
|
||||
</li><!-- .nk-menu-item -->
|
||||
<li class="nk-menu-item">
|
||||
<a href="{{route('dashboard.news.index')}}" class="nk-menu-link {{$page === 'news' ? 'active-page' : ''}}">
|
||||
@ -100,6 +65,41 @@
|
||||
<span class="nk-menu-text">Pengumuman</span>
|
||||
</a>
|
||||
</li><!-- .nk-menu-item -->
|
||||
@endif
|
||||
@if (is_role('1'))
|
||||
<li class="nk-menu-heading">
|
||||
<h6 class="overline-title text-primary-alt">Master</h6>
|
||||
</li><!-- .nk-menu-item -->
|
||||
<li class="nk-menu-item">
|
||||
<a href="{{route('dashboard.classifications.index')}}" class="nk-menu-link {{$page === 'classifications' ? 'active-page' : ''}}">
|
||||
<span class="nk-menu-icon"><em class="icon ni ni-list-round"></em></span>
|
||||
<span class="nk-menu-text">Klasifikasi</span>
|
||||
</a>
|
||||
</li><!-- .nk-menu-item -->
|
||||
<li class="nk-menu-item">
|
||||
<a href="{{route('dashboard.sub.classifications.index')}}" class="nk-menu-link {{$page === 'sub_classifications' ? 'active-page' : ''}}">
|
||||
<span class="nk-menu-icon"><em class="icon ni ni-list-round"></em></span>
|
||||
<span class="nk-menu-text">Sub Klasifikasi</span>
|
||||
</a>
|
||||
</li><!-- .nk-menu-item -->
|
||||
<li class="nk-menu-item">
|
||||
<a href="{{route('dashboard.locations.index')}}" class="nk-menu-link {{$page === 'locations' ? 'active-page' : ''}}">
|
||||
<span class="nk-menu-icon"><em class="icon ni ni-location"></em></span>
|
||||
<span class="nk-menu-text">Lokus</span>
|
||||
</a>
|
||||
</li><!-- .nk-menu-item -->
|
||||
<li class="nk-menu-item">
|
||||
<a href="{{route('dashboard.sub.locations.index')}}" class="nk-menu-link {{$page === 'sub_locations' ? 'active-page' : ''}}">
|
||||
<span class="nk-menu-icon"><em class="icon ni ni-location"></em></span>
|
||||
<span class="nk-menu-text">Sub Lokus</span>
|
||||
</a>
|
||||
</li><!-- .nk-menu-item -->
|
||||
<li class="nk-menu-item">
|
||||
<a href="{{route('dashboard.government.agencies.index')}}" class="nk-menu-link {{$page === 'government_agencies' ? 'active-page' : ''}}">
|
||||
<span class="nk-menu-icon"><em class="icon ni ni-building"></em></span>
|
||||
<span class="nk-menu-text">OPD</span>
|
||||
</a>
|
||||
</li><!-- .nk-menu-item -->
|
||||
<li class="nk-menu-item">
|
||||
<a href="{{route('dashboard.airing.proof.themes.index')}}" class="nk-menu-link {{$page === 'airing_proof_themes' ? 'active-page' : ''}}">
|
||||
<span class="nk-menu-icon"><em class="icon ni ni-puzzle"></em></span>
|
||||
@ -107,9 +107,9 @@
|
||||
</a>
|
||||
</li><!-- .nk-menu-item -->
|
||||
<li class="nk-menu-item">
|
||||
<a href="{{route('dashboard.settings.index')}}" class="nk-menu-link {{$page === 'settings' ? 'active-page' : ''}}">
|
||||
<span class="nk-menu-icon"><em class="icon ni ni-setting"></em></span>
|
||||
<span class="nk-menu-text">Pengaturan Aplikasi</span>
|
||||
<a href="{{route('dashboard.content.recap.classifications.index')}}" class="nk-menu-link {{$page === 'content_recap_classifications' ? 'active-page' : ''}}">
|
||||
<span class="nk-menu-icon"><em class="icon ni ni-view-list-sq"></em></span>
|
||||
<span class="nk-menu-text">Klasifikasi Rekap Konten</span>
|
||||
</a>
|
||||
</li><!-- .nk-menu-item -->
|
||||
@endif
|
||||
@ -218,6 +218,15 @@
|
||||
<span class="nk-menu-text">Aktivitas Login</span>
|
||||
</a>
|
||||
</li><!-- .nk-menu-item -->
|
||||
<li class="nk-menu-heading">
|
||||
<h6 class="overline-title text-primary-alt">Aplikasi</h6>
|
||||
</li><!-- .nk-menu-item -->
|
||||
<li class="nk-menu-item">
|
||||
<a href="{{route('dashboard.settings.index')}}" class="nk-menu-link {{$page === 'settings' ? 'active-page' : ''}}">
|
||||
<span class="nk-menu-icon"><em class="icon ni ni-setting"></em></span>
|
||||
<span class="nk-menu-text">Pengaturan</span>
|
||||
</a>
|
||||
</li><!-- .nk-menu-item -->
|
||||
@endif
|
||||
</ul><!-- .nk-menu -->
|
||||
</div><!-- .nk-sidebar-menu -->
|
||||
|
||||
@ -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\ContentRecapClassificationController;
|
||||
use App\Http\Controllers\Dashboard\ContentRecapController;
|
||||
use App\Http\Controllers\Dashboard\CooperationCompletionController;
|
||||
use App\Http\Controllers\Dashboard\CooperationRequestController;
|
||||
@ -245,6 +246,26 @@
|
||||
});
|
||||
});
|
||||
|
||||
Route::middleware('role:1,2,4')->group(function(){
|
||||
Route::prefix('content-recap-classifications')->name('content.recap.classifications.')->group(function(){
|
||||
Route::controller(ContentRecapClassificationController::class)->group(function(){
|
||||
Route::get('/', 'index')->name('index');
|
||||
Route::get('/{id}/show', 'show')->name('show');
|
||||
|
||||
Route::middleware('role:1')->group(function(){
|
||||
Route::get('/create', 'create')->name('create');
|
||||
Route::get('/create/restore/{slug}', 'restore')->name('restore');
|
||||
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('/data', [DatatableController::class, 'contentRecapClassification'])->name('data');
|
||||
});
|
||||
});
|
||||
|
||||
Route::middleware('role:1,3')->group(function(){
|
||||
Route::prefix('companies')->name('companies.')->group(function(){
|
||||
Route::controller(CompanyController::class)->group(function(){
|
||||
@ -467,6 +488,7 @@
|
||||
Route::controller(ContentRecapController::class)->group(function(){
|
||||
Route::get('/', 'index')->name('index');
|
||||
Route::get('/create', 'create')->name('create');
|
||||
Route::post('/check-link', 'checkLink')->name('check.link');
|
||||
Route::post('/', 'store')->name('store');
|
||||
Route::get('/{id}/show', 'show')->name('show');
|
||||
Route::get('/{id}/edit', 'edit')->name('edit');
|
||||
|
||||
Loading…
Reference in New Issue
Block a user