File: /home/bdedition/public_html/core/app/Http/Controllers/Admin/NewsController.php
<?php
namespace App\Http\Controllers\Admin;
use App\Constants\Status;
use App\Models\News;
use App\Models\User;
use App\Models\Category;
use Illuminate\Http\Request;
use App\Models\GeneralSetting;
use App\Rules\FileTypeValidate;
use App\Http\Controllers\Controller;
use Illuminate\Validation\ValidationException;
class NewsController extends Controller
{
public function index()
{
$pageTitle = "All News";
$news = $this->newsData();
$categories = Category::active()->orderBy('name')->get();
return view('admin.news.index', compact('news', 'pageTitle', 'categories'));
}
public function pending()
{
$pageTitle = "Pending News";
$news = $this->newsData('pending');
$categories = Category::active()->orderBy('name')->get();
return view('admin.news.index', compact('news', 'pageTitle', 'categories'));
}
public function approved()
{
$pageTitle = "Approved News";
$news = $this->newsData('approved');
$categories = Category::active()->orderBy('name')->get();
return view('admin.news.index', compact('news', 'pageTitle', 'categories'));
}
public function rejected()
{
$pageTitle = "Rejected News";
$news = $this->newsData('rejected');
$categories = Category::active()->orderBy('name')->get();
return view('admin.news.index', compact('news', 'pageTitle', 'categories'));
}
public function newsData($scope = null)
{
if ($scope) {
$news = News::$scope();
} else {
$news = News::query();
}
return $news->searchable(['title', 'user:username'])
->filter(['category_id'])
->dateFilter()
->with('category', 'user')
->orderByDesc('id')
->paginate(getPaginate());
}
public function create()
{
$pageTitle = "Create News";
$categories = Category::active()->orderByDesc('id')->get();
$staffs = User::active()->orderByDesc('id')->get();
return view('admin.news.form', compact('categories','staffs', 'pageTitle'));
}
public function edit($id)
{
$pageTitle = "Edit News";
$categories = Category::active()->orderByDesc('id')->get();
$news = News::where('id', $id)->firstOrFail();
$staffs = User::active()->orderByDesc('id')->get();
return view('admin.news.form', compact('news', 'pageTitle', 'categories','staffs'));
}
public function slugCheck()
{
$exist = News::where('slug', request()->slug)->exists();
return response()->json([
'exists' => $exist
]);
}
public function store(Request $request, $id = 0)
{
$request->validate([
'category_id' => 'required|integer|exists:categories,id',
'title' => 'required|string',
// 'slug' => 'required|unique:news,slug,' . $id,
'short_description' => 'required',
'description' => 'required',
'video_link' => 'required_if:have_video,==,on|url',
'tags' => 'required|max:60000|array',
'image' => [$id ? 'nullable' : 'required', 'image', new FileTypeValidate(['jpg', 'jpeg', 'png','webp','avif'])]
]);
if ($id) {
$news = News::findOrFail($id);
$message = 'News updated successfully';
} else {
$news = new News();
$message = 'News created successfully';
}
if ($request->has('image')) {
@$old = $news->image;
try {
$news->image = fileUploader($request->image, getFilePath('news'), getFileSize('news'), @$old);
} catch (\Exception $exp) {
throw ValidationException::withMessages(['error' => 'Couldn\'t upload your image']);
}
}
$purifier = new \HTMLPurifier();
$news->category_id = $request->category_id;
$news->user_id = $request->staff_id ?? 0;
$news->title = $request->title;
// $news->slug = $request->slug;
$news->short_description = $request->short_description;
$news->description = htmlspecialchars_decode($purifier->purify($request->description));
$news->tags = $request->tags;
$news->status = 1;
$news->admin_check = 1;
$news->have_video = $request->have_video == 'on' ? Status::YES : Status::NO;
$news->video_link = $request->have_video == 'on' ? $request->video_link : null;
$news->trending = $request->trending == 'on' ? Status::YES : Status::NO;
$news->must_read = $request->must_read == 'on' ? Status::YES : Status::NO;
$news->save();
$notify[] = ['success', $message];
return back()->withNotify($notify);
}
public function status($id)
{
return News::changeStatus($id);
}
public function approveOrReject(Request $request, $id)
{
$news = News::findOrFail($id);
if ($request->approve) {
$news->admin_check = Status::NEWS_APPROVED;
$message = 'News approved successfully';
} else {
$news->admin_check = Status::NEWS_REJECTED;
$message = 'News rejected successfully';
}
$news->save();
$notify[] = ['success', $message];
return back()->withNotify($notify);
}
public function live()
{
$pageTitle = "Live News";
return view('admin.news.live', compact('pageTitle'));
}
public function storeLiveNews(Request $request)
{
$request->validate([
'title' => 'required|string',
'live_news_link' => 'required|url|string',
'description' => 'required|string',
]);
$general = GeneralSetting::first();
$general->live_news_title = $request->title;
$general->live_news_link = $request->live_news_link;
$general->live_news_description = $request->description;
$general->save();
$notify[] = ['success', 'Live news updated successfully'];
return back()->withNotify($notify);
}
}