File: /home/bdedition/public_html/core/app/Http/Controllers/User/NewsController.php
<?php
namespace App\Http\Controllers\User;
use App\Models\News;
use App\Models\Category;
use App\Constants\Status;
use Illuminate\Http\Request;
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('staff.news.index', compact('news', 'pageTitle', 'categories'));
}
public function pending()
{
$pageTitle = "Pending News";
$news = $this->newsData('pending');
$categories = Category::active()->orderBy('name')->get();
return view('staff.news.index', compact('news', 'pageTitle', 'categories'));
}
public function approved()
{
$pageTitle = "Approved News";
$news = $this->newsData('approved');
$categories = Category::active()->orderBy('name')->get();
return view('staff.news.index', compact('news', 'pageTitle', 'categories'));
}
public function rejected()
{
$pageTitle = "Rejected News";
$news = $this->newsData('rejected');
$categories = Category::active()->orderBy('name')->get();
return view('staff.news.index', compact('news', 'pageTitle', 'categories'));
}
public function newsData($scope = null)
{
if ($scope) {
$news = News::$scope();
} else {
$news = News::query();
}
return $news->where('user_id', auth()->id())
->searchable(['title'])
->filter(['category_id'])
->dateFilter()
->with('category', 'user')
->orderByDesc('id')
->paginate(getPaginate());
}
public function create()
{
$pageTitle = "Create News";
$categories = Category::active()->orderBy('name')->get();
return view('staff.news.form', compact('categories', 'pageTitle'));
}
public function edit($id)
{
$pageTitle = "Edit News";
$news = News::where('user_id', auth()->id())->findOrFail($id);
$categories = Category::active()->orderBy('name')->get();
return view('staff.news.form', compact('categories', 'pageTitle', 'news'));
}
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'])]
]);
$user = auth()->user();
if ($id) {
$news = News::where('user_id', $user->id)->findOrFail($id);
$message = 'News updated successfully';
} else {
$news = new News();
$message = 'News created successfully';
}
if ($request->has('image')) {
$old = $news->image ?? null;
try {
$news->image = fileUploader($request->image, getFilePath('news'), getFileSize('news'), $old);
} catch (\Exception $exp) {
throw ValidationException::withMessages(['error' => 'Couldn\'t upload your image']);
}
}
$config = \HTMLPurifier_Config::createDefault();
$purifier = new \HTMLPurifier($config);
$news->user_id = $user->id;
$news->status = $user->auto_approval == 1 ? 1 : 0;
$news->admin_check = $user->auto_approval == 1 ? 1 : 0;
$news->category_id = $request->category_id;
$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->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);
}
}