davide-casiraghi/laravel-events-calendar

View on GitHub
src/Http/Controllers/EventCategoryController.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace DavideCasiraghi\LaravelEventsCalendar\Http\Controllers;

use DavideCasiraghi\LaravelEventsCalendar\Models\EventCategory;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
use Validator;

class EventCategoryController extends Controller
{
    /* Restrict the access to this resource just to logged in users except show view */
    public function __construct()
    {
        $this->middleware('admin', ['except' => ['show']]);
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\View\View
     */
    public function index()
    {
        $eventCategories = EventCategory::latest()->paginate(20);

        // Countries available for translations
        $countriesAvailableForTranslations = LaravelLocalization::getSupportedLocales();

        return view('laravel-events-calendar::eventCategories.index', compact('eventCategories'))
            ->with('i', (request()->input('page', 1) - 1) * 20)
            ->with('countriesAvailableForTranslations', $countriesAvailableForTranslations);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\View\View
     */
    public function create()
    {
        return view('laravel-events-calendar::eventCategories.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function store(Request $request)
    {

        // Validate form datas
        $validator = Validator::make($request->all(), [
            'name' => 'required',
        ]);
        if ($validator->fails()) {
            return back()->withErrors($validator)->withInput();
        }

        $eventCategory = new EventCategory();

        $this->saveOnDb($request, $eventCategory);

        return redirect()->route('eventCategories.index')
                        ->with('success', __('laravel-events-calendar::messages.category_added_successfully'));
    }

    /**
     * Display the specified resource.
     *
     * @param  \DavideCasiraghi\LaravelEventsCalendar\Models\EventCategory  $eventCategory
     * @return \Illuminate\View\View
     */
    public function show(EventCategory $eventCategory)
    {
        return view('laravel-events-calendar::eventCategories.show', compact('eventCategory'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \DavideCasiraghi\LaravelEventsCalendar\Models\EventCategory  $eventCategory
     * @return \Illuminate\View\View
     */
    public function edit(EventCategory $eventCategory)
    {
        return view('laravel-events-calendar::eventCategories.edit', compact('eventCategory'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \DavideCasiraghi\LaravelEventsCalendar\Models\EventCategory  $eventCategory
     * @return \Illuminate\Http\RedirectResponse
     */
    public function update(Request $request, EventCategory $eventCategory)
    {
        request()->validate([
            'name' => 'required',
        ]);

        $this->saveOnDb($request, $eventCategory);

        return redirect()->route('eventCategories.index')
                        ->with('success', __('laravel-events-calendar::messages.category_updated_successfully'));
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \DavideCasiraghi\LaravelEventsCalendar\Models\EventCategory  $eventCategory
     * @return \Illuminate\Http\RedirectResponse
     */
    public function destroy(EventCategory $eventCategory)
    {
        $eventCategory->delete();

        return redirect()->route('eventCategories.index')
                        ->with('success', __('laravel-events-calendar::messages.category_deleted_successfully'));
    }

    // **********************************************************************

    /**
     * Return the single event category datas by cat id.
     *
     * @param  int $cat_id
     * @return \DavideCasiraghi\LaravelEventsCalendar\Models\EventCategory
     */
    /*public function eventcategorydata($cat_id)
    {
        $ret = DB::table('event_categories')->where('id', $cat_id)->first();
        //dump($ret);

        return $ret;
    }*/

    // **********************************************************************

    /**
     * Save/Update the record on DB.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param \DavideCasiraghi\LaravelEventsCalendar\Models\EventCategory $eventCategory
     * @return void
     */
    public function saveOnDb(Request $request, EventCategory $eventCategory): void
    {
        $eventCategory->name = $request->get('name');
        $eventCategory->slug = Str::slug($eventCategory->name, '-');

        $eventCategory->save();
    }
}