tambah berita dan pengumuman
This commit is contained in:
parent
e0119a4ff0
commit
d59c9faaf0
|
|
@ -0,0 +1,90 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Admin;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Models\Berita;
|
||||||
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
|
||||||
|
class BeritaController extends Controller
|
||||||
|
{
|
||||||
|
// Menampilkan semua berita
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$berita = Berita::orderBy('tanggal_berita', 'desc')->get();
|
||||||
|
return view('admin.berita.index', compact('berita'));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Form tambah berita
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return view('admin.berita.create');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Simpan berita baru
|
||||||
|
public function store(Request $request)
|
||||||
|
{
|
||||||
|
$validator = Validator::make($request->all(), [
|
||||||
|
'judul_berita' => 'required|string|max:255',
|
||||||
|
'isi_berita' => 'required|string',
|
||||||
|
'tanggal_berita' => 'required|date',
|
||||||
|
'gambar_berita' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($validator->fails()) return redirect()->back()->withErrors($validator)->withInput();
|
||||||
|
|
||||||
|
$data = $request->only('judul_berita','isi_berita','tanggal_berita');
|
||||||
|
|
||||||
|
if ($request->hasFile('gambar_berita')) {
|
||||||
|
$data['gambar_berita'] = $request->file('gambar_berita')->store('berita', 'public');
|
||||||
|
}
|
||||||
|
|
||||||
|
Berita::create($data);
|
||||||
|
|
||||||
|
return redirect()->route('admin.berita.index')->with('success','Berita berhasil ditambahkan.');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Form edit berita
|
||||||
|
public function edit($id_berita)
|
||||||
|
{
|
||||||
|
$berita = Berita::findOrFail($id_berita);
|
||||||
|
return view('admin.berita.edit', compact('berita'));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update berita
|
||||||
|
public function update(Request $request, $id_berita)
|
||||||
|
{
|
||||||
|
$berita = Berita::findOrFail($id_berita);
|
||||||
|
|
||||||
|
$validator = Validator::make($request->all(), [
|
||||||
|
'judul_berita' => 'required|string|max:255',
|
||||||
|
'isi_berita' => 'required|string',
|
||||||
|
'tanggal_berita' => 'required|date',
|
||||||
|
'gambar_berita' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($validator->fails()) return redirect()->back()->withErrors($validator)->withInput();
|
||||||
|
|
||||||
|
$data = $request->only('judul_berita','isi_berita','tanggal_berita');
|
||||||
|
|
||||||
|
if ($request->hasFile('gambar_berita')) {
|
||||||
|
if ($berita->gambar_berita) Storage::disk('public')->delete($berita->gambar_berita);
|
||||||
|
$data['gambar_berita'] = $request->file('gambar_berita')->store('berita','public');
|
||||||
|
}
|
||||||
|
|
||||||
|
$berita->update($data);
|
||||||
|
|
||||||
|
return redirect()->route('admin.berita.index')->with('success','Berita berhasil diperbarui.');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hapus berita
|
||||||
|
public function destroy($id_berita)
|
||||||
|
{
|
||||||
|
$berita = Berita::findOrFail($id_berita);
|
||||||
|
if ($berita->gambar_berita) Storage::disk('public')->delete($berita->gambar_berita);
|
||||||
|
$berita->delete();
|
||||||
|
return redirect()->route('admin.berita.index')->with('success','Berita berhasil dihapus.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,82 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Admin;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Models\Pengumuman;
|
||||||
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
|
||||||
|
class PengumumanController extends Controller
|
||||||
|
{
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$pengumuman = Pengumuman::orderBy('tanggal_pengumuman', 'desc')->get();
|
||||||
|
return view('admin.pengumuman.index', compact('pengumuman'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return view('admin.pengumuman.create');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function store(Request $request)
|
||||||
|
{
|
||||||
|
$validator = Validator::make($request->all(), [
|
||||||
|
'judul_pengumuman' => 'required|string|max:255',
|
||||||
|
'isi_pengumuman' => 'required|string',
|
||||||
|
'tanggal_pengumuman' => 'required|date',
|
||||||
|
'gambar_pengumuman' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($validator->fails()) return redirect()->back()->withErrors($validator)->withInput();
|
||||||
|
|
||||||
|
$data = $request->only('judul_pengumuman','isi_pengumuman','tanggal_pengumuman');
|
||||||
|
|
||||||
|
if ($request->hasFile('gambar_pengumuman')) {
|
||||||
|
$data['gambar_pengumuman'] = $request->file('gambar_pengumuman')->store('pengumuman', 'public');
|
||||||
|
}
|
||||||
|
|
||||||
|
Pengumuman::create($data);
|
||||||
|
return redirect()->route('admin.pengumuman.index')->with('success','Pengumuman berhasil ditambahkan.');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function edit($id_pengumuman)
|
||||||
|
{
|
||||||
|
$pengumuman = Pengumuman::findOrFail($id_pengumuman);
|
||||||
|
return view('admin.pengumuman.edit', compact('pengumuman'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update(Request $request, $id_pengumuman)
|
||||||
|
{
|
||||||
|
$pengumuman = Pengumuman::findOrFail($id_pengumuman);
|
||||||
|
|
||||||
|
$validator = Validator::make($request->all(), [
|
||||||
|
'judul_pengumuman' => 'required|string|max:255',
|
||||||
|
'isi_pengumuman' => 'required|string',
|
||||||
|
'tanggal_pengumuman' => 'required|date',
|
||||||
|
'gambar_pengumuman' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($validator->fails()) return redirect()->back()->withErrors($validator)->withInput();
|
||||||
|
|
||||||
|
$data = $request->only('judul_pengumuman','isi_pengumuman','tanggal_pengumuman');
|
||||||
|
|
||||||
|
if ($request->hasFile('gambar_pengumuman')) {
|
||||||
|
if ($pengumuman->gambar_pengumuman) Storage::disk('public')->delete($pengumuman->gambar_pengumuman);
|
||||||
|
$data['gambar_pengumuman'] = $request->file('gambar_pengumuman')->store('pengumuman','public');
|
||||||
|
}
|
||||||
|
|
||||||
|
$pengumuman->update($data);
|
||||||
|
return redirect()->route('admin.pengumuman.index')->with('success','Pengumuman berhasil diperbarui.');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function destroy($id_pengumuman)
|
||||||
|
{
|
||||||
|
$pengumuman = Pengumuman::findOrFail($id_pengumuman);
|
||||||
|
if ($pengumuman->gambar_pengumuman) Storage::disk('public')->delete($pengumuman->gambar_pengumuman);
|
||||||
|
$pengumuman->delete();
|
||||||
|
return redirect()->route('admin.pengumuman.index')->with('success','Pengumuman berhasil dihapus.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class Berita extends Model
|
||||||
|
{
|
||||||
|
// Nama tabel
|
||||||
|
protected $table = 'berita';
|
||||||
|
|
||||||
|
// Nama primary key custom
|
||||||
|
protected $primaryKey = 'id_berita';
|
||||||
|
|
||||||
|
// Mass assignable fields
|
||||||
|
protected $fillable = [
|
||||||
|
'judul_berita',
|
||||||
|
'isi_berita',
|
||||||
|
'tanggal_berita',
|
||||||
|
'gambar_berita',
|
||||||
|
];
|
||||||
|
|
||||||
|
// Primary key auto increment
|
||||||
|
public $incrementing = true;
|
||||||
|
|
||||||
|
// Tipe primary key
|
||||||
|
protected $keyType = 'int';
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class Pengumuman extends Model
|
||||||
|
{
|
||||||
|
// Nama tabel
|
||||||
|
protected $table = 'pengumuman';
|
||||||
|
|
||||||
|
// Primary key custom
|
||||||
|
protected $primaryKey = 'id_pengumuman';
|
||||||
|
|
||||||
|
// Mass assignable fields
|
||||||
|
protected $fillable = [
|
||||||
|
'judul_pengumuman',
|
||||||
|
'isi_pengumuman',
|
||||||
|
'tanggal_pengumuman',
|
||||||
|
'gambar_pengumuman',
|
||||||
|
];
|
||||||
|
|
||||||
|
// Primary key auto increment
|
||||||
|
public $incrementing = true;
|
||||||
|
|
||||||
|
// Tipe primary key
|
||||||
|
protected $keyType = 'int';
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::create('berita', function (Blueprint $table) {
|
||||||
|
$table->id('id_berita'); // ID khusus
|
||||||
|
$table->string('judul_berita'); // Judul berita
|
||||||
|
$table->text('isi_berita'); // Isi berita
|
||||||
|
$table->date('tanggal_berita'); // Tanggal berita
|
||||||
|
$table->string('gambar_berita')->nullable(); // Gambar berita opsional
|
||||||
|
$table->timestamps(); // created_at & updated_at
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('berita');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::create('pengumuman', function (Blueprint $table) {
|
||||||
|
$table->id('id_pengumuman'); // ID khusus
|
||||||
|
$table->string('judul_pengumuman'); // Judul pengumuman
|
||||||
|
$table->text('isi_pengumuman'); // Isi pengumuman
|
||||||
|
$table->date('tanggal_pengumuman'); // Tanggal pengumuman
|
||||||
|
$table->string('gambar_pengumuman')->nullable(); // Gambar opsional
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('pengumuman');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
@ -0,0 +1,89 @@
|
||||||
|
@extends('admin.template')
|
||||||
|
|
||||||
|
@section('title', 'Tambah Berita')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<div class="content-wrapper">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12 grid-margin stretch-card">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
|
||||||
|
<h4 class="card-title">Tambah Berita</h4>
|
||||||
|
<p class="card-description">Form tambah data berita</p>
|
||||||
|
|
||||||
|
<form action="{{ route('admin.berita.store') }}" method="POST" enctype="multipart/form-data">
|
||||||
|
@csrf
|
||||||
|
|
||||||
|
{{-- JUDUL BERITA --}}
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Judul Berita</label>
|
||||||
|
<input type="text"
|
||||||
|
name="judul_berita"
|
||||||
|
class="form-control @error('judul_berita') is-invalid @enderror"
|
||||||
|
placeholder="Judul Berita"
|
||||||
|
value="{{ old('judul_berita') }}">
|
||||||
|
@error('judul_berita')
|
||||||
|
<small class="text-danger">{{ $message }}</small>
|
||||||
|
@enderror
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{-- TANGGAL BERITA --}}
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Tanggal Berita</label>
|
||||||
|
<input type="date"
|
||||||
|
name="tanggal_berita"
|
||||||
|
class="form-control @error('tanggal_berita') is-invalid @enderror"
|
||||||
|
value="{{ old('tanggal_berita') }}">
|
||||||
|
@error('tanggal_berita')
|
||||||
|
<small class="text-danger">{{ $message }}</small>
|
||||||
|
@enderror
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{-- ISI BERITA --}}
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Isi Berita</label>
|
||||||
|
<textarea name="isi_berita"
|
||||||
|
class="form-control @error('isi_berita') is-invalid @enderror"
|
||||||
|
rows="6"
|
||||||
|
placeholder="Isi Berita">{{ old('isi_berita') }}</textarea>
|
||||||
|
@error('isi_berita')
|
||||||
|
<small class="text-danger">{{ $message }}</small>
|
||||||
|
@enderror
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{-- GAMBAR BERITA --}}
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Gambar Berita</label>
|
||||||
|
<input type="file"
|
||||||
|
name="gambar_berita"
|
||||||
|
id="gambar_berita"
|
||||||
|
class="file-upload-default @error('gambar_berita') is-invalid @enderror">
|
||||||
|
|
||||||
|
<div class="input-group col-xs-12">
|
||||||
|
<input type="text"
|
||||||
|
class="form-control file-upload-info"
|
||||||
|
disabled
|
||||||
|
placeholder="Upload Gambar">
|
||||||
|
<span class="input-group-append">
|
||||||
|
<button class="file-upload-browse btn btn-primary" type="button">
|
||||||
|
Upload
|
||||||
|
</button>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@error('gambar_berita')
|
||||||
|
<small class="text-danger">{{ $message }}</small>
|
||||||
|
@enderror
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button type="submit" class="btn btn-primary">Simpan</button>
|
||||||
|
<a href="{{ route('admin.berita.index') }}" class="btn btn-light">Batal</a>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endsection
|
||||||
|
|
@ -0,0 +1,103 @@
|
||||||
|
@extends('admin.template')
|
||||||
|
|
||||||
|
@section('title', 'Edit Berita')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<div class="content-wrapper">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12 grid-margin stretch-card">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
|
||||||
|
<h4 class="card-title">Edit Berita</h4>
|
||||||
|
<p class="card-description">Form edit data berita</p>
|
||||||
|
|
||||||
|
<form action="{{ route('admin.berita.update', $berita->id_berita) }}"
|
||||||
|
method="POST"
|
||||||
|
enctype="multipart/form-data">
|
||||||
|
@csrf
|
||||||
|
@method('PUT')
|
||||||
|
|
||||||
|
{{-- JUDUL BERITA --}}
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Judul Berita</label>
|
||||||
|
<input type="text"
|
||||||
|
name="judul_berita"
|
||||||
|
class="form-control @error('judul_berita') is-invalid @enderror"
|
||||||
|
value="{{ old('judul_berita', $berita->judul_berita) }}"
|
||||||
|
required>
|
||||||
|
@error('judul_berita')
|
||||||
|
<small class="text-danger">{{ $message }}</small>
|
||||||
|
@enderror
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{-- TANGGAL BERITA --}}
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Tanggal Berita</label>
|
||||||
|
<input type="date"
|
||||||
|
name="tanggal_berita"
|
||||||
|
class="form-control @error('tanggal_berita') is-invalid @enderror"
|
||||||
|
value="{{ old('tanggal_berita', $berita->tanggal_berita) }}"
|
||||||
|
required>
|
||||||
|
@error('tanggal_berita')
|
||||||
|
<small class="text-danger">{{ $message }}</small>
|
||||||
|
@enderror
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{-- ISI BERITA --}}
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Isi Berita</label>
|
||||||
|
<textarea name="isi_berita"
|
||||||
|
rows="6"
|
||||||
|
class="form-control @error('isi_berita') is-invalid @enderror"
|
||||||
|
placeholder="Isi Berita">{{ old('isi_berita', $berita->isi_berita) }}</textarea>
|
||||||
|
@error('isi_berita')
|
||||||
|
<small class="text-danger">{{ $message }}</small>
|
||||||
|
@enderror
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{-- GAMBAR BERITA --}}
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Gambar Berita</label>
|
||||||
|
<input type="file"
|
||||||
|
name="gambar_berita"
|
||||||
|
id="gambar_berita"
|
||||||
|
class="file-upload-default @error('gambar_berita') is-invalid @enderror"
|
||||||
|
accept="image/*">
|
||||||
|
|
||||||
|
<div class="input-group col-xs-12">
|
||||||
|
<input type="text"
|
||||||
|
class="form-control file-upload-info"
|
||||||
|
disabled
|
||||||
|
placeholder="Upload Gambar">
|
||||||
|
<span class="input-group-append">
|
||||||
|
<button class="file-upload-browse btn btn-primary" type="button">
|
||||||
|
Upload
|
||||||
|
</button>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@error('gambar_berita')
|
||||||
|
<small class="text-danger">{{ $message }}</small>
|
||||||
|
@enderror
|
||||||
|
|
||||||
|
{{-- PREVIEW GAMBAR LAMA --}}
|
||||||
|
@if ($berita->gambar_berita)
|
||||||
|
<div class="mt-2">
|
||||||
|
<img src="{{ asset('storage/' . $berita->gambar_berita) }}"
|
||||||
|
width="250"
|
||||||
|
class="img-thumbnail">
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button type="submit" class="btn btn-primary">Simpan</button>
|
||||||
|
<a href="{{ route('admin.berita.index') }}" class="btn btn-light">Batal</a>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endsection
|
||||||
|
|
@ -0,0 +1,128 @@
|
||||||
|
@extends('admin.template')
|
||||||
|
|
||||||
|
@section('title', 'Data Berita')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<style>
|
||||||
|
.deskripsi-truncate-div {
|
||||||
|
max-width: 300px;
|
||||||
|
white-space: normal !important;
|
||||||
|
word-wrap: break-word !important;
|
||||||
|
overflow-wrap: break-word !important;
|
||||||
|
}
|
||||||
|
.table td {
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class="content-wrapper">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-12 grid-margin stretch-card">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="mb-3 d-flex justify-content-between">
|
||||||
|
<div>
|
||||||
|
<h4 class="mb-0 card-title">Data Berita</h4>
|
||||||
|
<p class="mb-0 card-description">
|
||||||
|
Daftar semua berita yang tersedia
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<a href="{{ route('admin.berita.create') }}" class="btn btn-primary">
|
||||||
|
<i class="bi bi-plus-lg"></i> Tambah
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Judul</th>
|
||||||
|
<th>Gambar</th>
|
||||||
|
<th>Isi</th>
|
||||||
|
<th>Tanggal</th>
|
||||||
|
<th>Aksi</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach ($berita as $item)
|
||||||
|
<tr>
|
||||||
|
<td>{{ $item->judul_berita }}</td>
|
||||||
|
<td>
|
||||||
|
@if ($item->gambar_berita)
|
||||||
|
<img src="{{ asset('storage/' . $item->gambar_berita) }}"
|
||||||
|
alt="Gambar Berita"
|
||||||
|
style="width:200px; height:auto; border-radius:2px;">
|
||||||
|
@else
|
||||||
|
<span class="text-muted">-</span>
|
||||||
|
@endif
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<div class="text-justify deskripsi-truncate-div">
|
||||||
|
{{ Str::limit($item->isi_berita, 150, '...') }}
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>{{ \Carbon\Carbon::parse($item->tanggal_berita)->format('d M Y') }}</td>
|
||||||
|
<td class="text-center">
|
||||||
|
<a href="{{ route('admin.berita.edit', $item->id_berita) }}"
|
||||||
|
class="btn btn-warning btn-sm me-1" title="Edit">
|
||||||
|
<i class="bi bi-pencil-square"></i>
|
||||||
|
</a>
|
||||||
|
<form action="{{ route('admin.berita.destroy', $item->id_berita) }}"
|
||||||
|
method="POST" class="form-hapus" style="display:inline;">
|
||||||
|
@csrf
|
||||||
|
@method('DELETE')
|
||||||
|
<button type="submit" class="btn btn-danger btn-sm">
|
||||||
|
<i class="bi bi-trash"></i>
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.querySelectorAll('.form-hapus').forEach(form => {
|
||||||
|
form.addEventListener('submit', function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
Swal.fire({
|
||||||
|
title: 'Hapus Data Berita?',
|
||||||
|
text: 'Data yang sudah dihapus tidak dapat dikembalikan!',
|
||||||
|
icon: 'warning',
|
||||||
|
showCancelButton: true,
|
||||||
|
confirmButtonColor: '#d33',
|
||||||
|
cancelButtonColor: '#6c757d',
|
||||||
|
confirmButtonText: 'Ya, Hapus',
|
||||||
|
cancelButtonText: 'Batal',
|
||||||
|
didOpen: () => {
|
||||||
|
document.querySelector('.swal2-popup').style.fontFamily = 'Nunito, sans-serif';
|
||||||
|
}
|
||||||
|
}).then((result) => {
|
||||||
|
if (result.isConfirmed) {
|
||||||
|
form.submit();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
@if (session('success'))
|
||||||
|
<script>
|
||||||
|
Swal.fire({
|
||||||
|
icon: 'success',
|
||||||
|
title: 'Berhasil',
|
||||||
|
text: '{{ session('success') }}',
|
||||||
|
timer: 2000,
|
||||||
|
showConfirmButton: false
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
@endif
|
||||||
|
@endsection
|
||||||
|
|
@ -92,3 +92,4 @@ class="form-control file-upload-info"
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,89 @@
|
||||||
|
@extends('admin.template')
|
||||||
|
|
||||||
|
@section('title', 'Tambah Pengumuman')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<div class="content-wrapper">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12 grid-margin stretch-card">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
|
||||||
|
<h4 class="card-title">Tambah Pengumuman</h4>
|
||||||
|
<p class="card-description">Form tambah data pengumuman</p>
|
||||||
|
|
||||||
|
<form action="{{ route('admin.pengumuman.store') }}" method="POST" enctype="multipart/form-data">
|
||||||
|
@csrf
|
||||||
|
|
||||||
|
{{-- JUDUL PENGUMUMAN --}}
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Judul Pengumuman</label>
|
||||||
|
<input type="text"
|
||||||
|
name="judul_pengumuman"
|
||||||
|
class="form-control @error('judul_pengumuman') is-invalid @enderror"
|
||||||
|
placeholder="Judul Pengumuman"
|
||||||
|
value="{{ old('judul_pengumuman') }}">
|
||||||
|
@error('judul_pengumuman')
|
||||||
|
<small class="text-danger">{{ $message }}</small>
|
||||||
|
@enderror
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{-- TANGGAL PENGUMUMAN --}}
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Tanggal Pengumuman</label>
|
||||||
|
<input type="date"
|
||||||
|
name="tanggal_pengumuman"
|
||||||
|
class="form-control @error('tanggal_pengumuman') is-invalid @enderror"
|
||||||
|
value="{{ old('tanggal_pengumuman') }}">
|
||||||
|
@error('tanggal_pengumuman')
|
||||||
|
<small class="text-danger">{{ $message }}</small>
|
||||||
|
@enderror
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{-- ISI PENGUMUMAN --}}
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Isi Pengumuman</label>
|
||||||
|
<textarea name="isi_pengumuman"
|
||||||
|
class="form-control @error('isi_pengumuman') is-invalid @enderror"
|
||||||
|
rows="6"
|
||||||
|
placeholder="Isi Pengumuman">{{ old('isi_pengumuman') }}</textarea>
|
||||||
|
@error('isi_pengumuman')
|
||||||
|
<small class="text-danger">{{ $message }}</small>
|
||||||
|
@enderror
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{-- GAMBAR PENGUMUMAN --}}
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Gambar Pengumuman</label>
|
||||||
|
<input type="file"
|
||||||
|
name="gambar_pengumuman"
|
||||||
|
id="gambar_pengumuman"
|
||||||
|
class="file-upload-default @error('gambar_pengumuman') is-invalid @enderror">
|
||||||
|
|
||||||
|
<div class="input-group col-xs-12">
|
||||||
|
<input type="text"
|
||||||
|
class="form-control file-upload-info"
|
||||||
|
disabled
|
||||||
|
placeholder="Upload Gambar">
|
||||||
|
<span class="input-group-append">
|
||||||
|
<button class="file-upload-browse btn btn-primary" type="button">
|
||||||
|
Upload
|
||||||
|
</button>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@error('gambar_pengumuman')
|
||||||
|
<small class="text-danger">{{ $message }}</small>
|
||||||
|
@enderror
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button type="submit" class="btn btn-primary">Simpan</button>
|
||||||
|
<a href="{{ route('admin.pengumuman.index') }}" class="btn btn-light">Batal</a>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endsection
|
||||||
|
|
@ -0,0 +1,103 @@
|
||||||
|
@extends('admin.template')
|
||||||
|
|
||||||
|
@section('title', 'Edit Pengumuman')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<div class="content-wrapper">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12 grid-margin stretch-card">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
|
||||||
|
<h4 class="card-title">Edit Pengumuman</h4>
|
||||||
|
<p class="card-description">Form edit data pengumuman</p>
|
||||||
|
|
||||||
|
<form action="{{ route('admin.pengumuman.update', $pengumuman->id_pengumuman) }}"
|
||||||
|
method="POST"
|
||||||
|
enctype="multipart/form-data">
|
||||||
|
@csrf
|
||||||
|
@method('PUT')
|
||||||
|
|
||||||
|
{{-- JUDUL PENGUMUMAN --}}
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Judul Pengumuman</label>
|
||||||
|
<input type="text"
|
||||||
|
name="judul_pengumuman"
|
||||||
|
class="form-control @error('judul_pengumuman') is-invalid @enderror"
|
||||||
|
value="{{ old('judul_pengumuman', $pengumuman->judul_pengumuman) }}"
|
||||||
|
required>
|
||||||
|
@error('judul_pengumuman')
|
||||||
|
<small class="text-danger">{{ $message }}</small>
|
||||||
|
@enderror
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{-- TANGGAL PENGUMUMAN --}}
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Tanggal Pengumuman</label>
|
||||||
|
<input type="date"
|
||||||
|
name="tanggal_pengumuman"
|
||||||
|
class="form-control @error('tanggal_pengumuman') is-invalid @enderror"
|
||||||
|
value="{{ old('tanggal_pengumuman', $pengumuman->tanggal_pengumuman) }}"
|
||||||
|
required>
|
||||||
|
@error('tanggal_pengumuman')
|
||||||
|
<small class="text-danger">{{ $message }}</small>
|
||||||
|
@enderror
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{-- ISI PENGUMUMAN --}}
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Isi Pengumuman</label>
|
||||||
|
<textarea name="isi_pengumuman"
|
||||||
|
rows="6"
|
||||||
|
class="form-control @error('isi_pengumuman') is-invalid @enderror"
|
||||||
|
placeholder="Isi Pengumuman">{{ old('isi_pengumuman', $pengumuman->isi_pengumuman) }}</textarea>
|
||||||
|
@error('isi_pengumuman')
|
||||||
|
<small class="text-danger">{{ $message }}</small>
|
||||||
|
@enderror
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{-- GAMBAR PENGUMUMAN --}}
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Gambar Pengumuman</label>
|
||||||
|
<input type="file"
|
||||||
|
name="gambar_pengumuman"
|
||||||
|
id="gambar_pengumuman"
|
||||||
|
class="file-upload-default @error('gambar_pengumuman') is-invalid @enderror"
|
||||||
|
accept="image/*">
|
||||||
|
|
||||||
|
<div class="input-group col-xs-12">
|
||||||
|
<input type="text"
|
||||||
|
class="form-control file-upload-info"
|
||||||
|
disabled
|
||||||
|
placeholder="Upload Gambar">
|
||||||
|
<span class="input-group-append">
|
||||||
|
<button class="file-upload-browse btn btn-primary" type="button">
|
||||||
|
Upload
|
||||||
|
</button>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@error('gambar_pengumuman')
|
||||||
|
<small class="text-danger">{{ $message }}</small>
|
||||||
|
@enderror
|
||||||
|
|
||||||
|
{{-- PREVIEW GAMBAR LAMA --}}
|
||||||
|
@if ($pengumuman->gambar_pengumuman)
|
||||||
|
<div class="mt-2">
|
||||||
|
<img src="{{ asset('storage/' . $pengumuman->gambar_pengumuman) }}"
|
||||||
|
width="250"
|
||||||
|
class="img-thumbnail">
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button type="submit" class="btn btn-primary">Simpan</button>
|
||||||
|
<a href="{{ route('admin.pengumuman.index') }}" class="btn btn-light">Batal</a>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endsection
|
||||||
|
|
@ -0,0 +1,128 @@
|
||||||
|
@extends('admin.template')
|
||||||
|
|
||||||
|
@section('title', 'Data Pengumuman')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<style>
|
||||||
|
.deskripsi-truncate-div {
|
||||||
|
max-width: 300px;
|
||||||
|
white-space: normal !important;
|
||||||
|
word-wrap: break-word !important;
|
||||||
|
overflow-wrap: break-word !important;
|
||||||
|
}
|
||||||
|
.table td {
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class="content-wrapper">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-12 grid-margin stretch-card">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="mb-3 d-flex justify-content-between">
|
||||||
|
<div>
|
||||||
|
<h4 class="mb-0 card-title">Data Pengumuman</h4>
|
||||||
|
<p class="mb-0 card-description">
|
||||||
|
Daftar semua pengumuman yang tersedia
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<a href="{{ route('admin.pengumuman.create') }}" class="btn btn-primary">
|
||||||
|
<i class="bi bi-plus-lg"></i> Tambah
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Judul</th>
|
||||||
|
<th>Gambar</th>
|
||||||
|
<th>Isi</th>
|
||||||
|
<th>Tanggal</th>
|
||||||
|
<th>Aksi</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach ($pengumuman as $item)
|
||||||
|
<tr>
|
||||||
|
<td>{{ $item->judul_pengumuman }}</td>
|
||||||
|
<td>
|
||||||
|
@if ($item->gambar_pengumuman)
|
||||||
|
<img src="{{ asset('storage/' . $item->gambar_pengumuman) }}"
|
||||||
|
alt="Gambar Pengumuman"
|
||||||
|
style="width:200px; height:auto; border-radius:2px;">
|
||||||
|
@else
|
||||||
|
<span class="text-muted">-</span>
|
||||||
|
@endif
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<div class="text-justify deskripsi-truncate-div">
|
||||||
|
{{ Str::limit($item->isi_pengumuman, 150, '...') }}
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>{{ \Carbon\Carbon::parse($item->tanggal_pengumuman)->format('d M Y') }}</td>
|
||||||
|
<td class="text-center">
|
||||||
|
<a href="{{ route('admin.pengumuman.edit', $item->id_pengumuman) }}"
|
||||||
|
class="btn btn-warning btn-sm me-1" title="Edit">
|
||||||
|
<i class="bi bi-pencil-square"></i>
|
||||||
|
</a>
|
||||||
|
<form action="{{ route('admin.pengumuman.destroy', $item->id_pengumuman) }}"
|
||||||
|
method="POST" class="form-hapus" style="display:inline;">
|
||||||
|
@csrf
|
||||||
|
@method('DELETE')
|
||||||
|
<button type="submit" class="btn btn-danger btn-sm">
|
||||||
|
<i class="bi bi-trash"></i>
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.querySelectorAll('.form-hapus').forEach(form => {
|
||||||
|
form.addEventListener('submit', function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
Swal.fire({
|
||||||
|
title: 'Hapus Data Pengumuman?',
|
||||||
|
text: 'Data yang sudah dihapus tidak dapat dikembalikan!',
|
||||||
|
icon: 'warning',
|
||||||
|
showCancelButton: true,
|
||||||
|
confirmButtonColor: '#d33',
|
||||||
|
cancelButtonColor: '#6c757d',
|
||||||
|
confirmButtonText: 'Ya, Hapus',
|
||||||
|
cancelButtonText: 'Batal',
|
||||||
|
didOpen: () => {
|
||||||
|
document.querySelector('.swal2-popup').style.fontFamily = 'Nunito, sans-serif';
|
||||||
|
}
|
||||||
|
}).then((result) => {
|
||||||
|
if (result.isConfirmed) {
|
||||||
|
form.submit();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
@if (session('success'))
|
||||||
|
<script>
|
||||||
|
Swal.fire({
|
||||||
|
icon: 'success',
|
||||||
|
title: 'Berhasil',
|
||||||
|
text: '{{ session('success') }}',
|
||||||
|
timer: 2000,
|
||||||
|
showConfirmButton: false
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
@endif
|
||||||
|
@endsection
|
||||||
|
|
@ -119,6 +119,18 @@
|
||||||
<span class="menu-title">Kelola Aduan</span>
|
<span class="menu-title">Kelola Aduan</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="nav-item {{ request()->routeIs('admin.berita.index') ? 'active' : '' }}">
|
||||||
|
<a class="nav-link" href="{{ route('admin.berita.index') }}">
|
||||||
|
<i class="icon-mail menu-icon"></i>
|
||||||
|
<span class="menu-title">Kelola Berita</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item {{ request()->routeIs('admin.pengumuman.index') ? 'active' : '' }}">
|
||||||
|
<a class="nav-link" href="{{ route('admin.pengumuman.index') }}">
|
||||||
|
<i class="icon-mail menu-icon"></i>
|
||||||
|
<span class="menu-title">Kelola Pengumuman</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -170,7 +170,7 @@ class="img-fluid" alt="{{ $item->nama_kategori }}">
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a href="#" class="stretched-link">
|
<a href="{{ route('user.about.kategori', ['id' => $item->id_kategori_tps]) }}" class="stretched-link">
|
||||||
<h3>{{ $item->kepanjangan_kategori }}</h3>
|
<h3>{{ $item->kepanjangan_kategori }}</h3>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -69,15 +69,6 @@ class="{{ Request::is('about/' . $kategori->id_kategori_tps) ? 'active' : '' }}"
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li>
|
|
||||||
<a href="{{ route('user.sig-tps') }}"
|
|
||||||
class="{{ Request::routeIs('user.sig-tps') ? 'active' : '' }}">
|
|
||||||
Sebaran TPS
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li>
|
<li>
|
||||||
<a href="{{ route('user.aduan') }}"
|
<a href="{{ route('user.aduan') }}"
|
||||||
class="{{ Request::routeIs('user.aduan') ? 'active' : '' }}">
|
class="{{ Request::routeIs('user.aduan') ? 'active' : '' }}">
|
||||||
|
|
@ -85,6 +76,20 @@ class="{{ Request::routeIs('user.aduan') ? 'active' : '' }}">
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<a href="{{ route('user.sig-tps') }}"
|
||||||
|
class="{{ Request::routeIs('user.sig-tps') ? 'active' : '' }}">
|
||||||
|
Berita
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<a href="{{ route('user.sig-tps') }}"
|
||||||
|
class="{{ Request::routeIs('user.sig-tps') ? 'active' : '' }}">
|
||||||
|
Pengumuman
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
<li>
|
<li>
|
||||||
<a href="{{ route('user.kontak') }}"
|
<a href="{{ route('user.kontak') }}"
|
||||||
class="{{ Request::routeIs('user.kontak') ? 'active' : '' }}">
|
class="{{ Request::routeIs('user.kontak') ? 'active' : '' }}">
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,8 @@
|
||||||
use App\Http\Controllers\Admin\KategoriTpsController;
|
use App\Http\Controllers\Admin\KategoriTpsController;
|
||||||
use App\Http\Controllers\Admin\SampahController;
|
use App\Http\Controllers\Admin\SampahController;
|
||||||
use App\Http\Controllers\Admin\AduanController as AdminAduanController;
|
use App\Http\Controllers\Admin\AduanController as AdminAduanController;
|
||||||
|
use App\Http\Controllers\Admin\BeritaController;
|
||||||
|
use App\Http\Controllers\Admin\PengumumanController;
|
||||||
use App\Http\Controllers\Admin\ProfilController;
|
use App\Http\Controllers\Admin\ProfilController;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -68,6 +70,9 @@
|
||||||
Route::post('/aduan/{id}/tanggapi', [AdminAduanController::class, 'tanggapi'])->name('aduan.tanggapi');
|
Route::post('/aduan/{id}/tanggapi', [AdminAduanController::class, 'tanggapi'])->name('aduan.tanggapi');
|
||||||
Route::delete('/aduan/{id}', [AdminAduanController::class, 'destroy'])->name('aduan.destroy');
|
Route::delete('/aduan/{id}', [AdminAduanController::class, 'destroy'])->name('aduan.destroy');
|
||||||
|
|
||||||
|
Route::resource('berita', BeritaController::class)->except(['show']);
|
||||||
|
Route::resource('pengumuman', PengumumanController::class)->except(['show']);
|
||||||
|
|
||||||
// PROFIL
|
// PROFIL
|
||||||
Route::get('/profil', [ProfilController::class, 'index'])->name('profil');
|
Route::get('/profil', [ProfilController::class, 'index'])->name('profil');
|
||||||
Route::post('/profil', [ProfilController::class, 'update'])->name('profil.update');
|
Route::post('/profil', [ProfilController::class, 'update'])->name('profil.update');
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue