HEX
Server: LiteSpeed
System: Linux srv1.dhviews.com 5.14.0-570.23.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Jun 24 11:27:16 EDT 2025 x86_64
User: bdedition (1723)
PHP: 7.4.33
Disabled: NONE
Upload Files
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);
    }
}