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/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);
    }
}