pixelfed/pixelfed

View on GitHub
app/Http/Controllers/Admin/AdminDiscoverController.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace App\Http\Controllers\Admin;

use DB, Cache;
use App\{
    DiscoverCategory, 
    DiscoverCategoryHashtag, 
    Hashtag, 
    Media, 
    Profile, 
    StatusHashtag
};
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;

trait AdminDiscoverController
{
    public function discoverHome()
    {
        $categories = DiscoverCategory::orderByDesc('id')->paginate(10);
        return view('admin.discover.home', compact('categories'));
    }

    public function discoverCreateCategory()
    {
        return view('admin.discover.create-category');
    }

    public function discoverCreateCategoryStore(Request $request)
    {
        $this->validate($request, [
            'name' => 'required|string|min:1',
            'active' => 'required|boolean',
            'media' => 'nullable|integer|min:1'
        ]);

        $name = $request->input('name');
        $slug = str_slug($name);
        $active = $request->input('active');
        $media = (int) $request->input('media');

        $media = Media::findOrFail($media);

        $category = DiscoverCategory::firstOrNew(['slug' => $slug]);
        $category->name = $name;
        $category->active = $active;
        $category->media_id = $media->id;
        $category->save();
        return $category;
    }

    public function discoverCategoryEdit(Request $request, $id)
    {
        $category = DiscoverCategory::findOrFail($id);
        return view('admin.discover.show', compact('category'));
    }

    public function discoverCategoryUpdate(Request $request, $id)
    {
        $this->validate($request, [
            'name' => 'required|string|min:1',
            'active' => 'required|boolean',
            'media' => 'nullable|integer|min:1',
            'hashtags' => 'nullable|string'
        ]);
        $name = $request->input('name');
        $slug = str_slug($name);
        $active = $request->input('active');
        $media = (int) $request->input('media');
        $media = Media::findOrFail($media);

        $category = DiscoverCategory::findOrFail($id);
        $category->name = $name;
        $category->active = $active;
        $category->media_id = $media->id;
        $category->save();

        return $category;
    }

    public function discoveryCategoryTagStore(Request $request)
    {
        $this->validate($request, [
            'category_id' => 'required|integer|min:1',
            'hashtag' => 'required|string',
            'action' => 'required|string|min:1|max:6'
        ]);
        $category_id = $request->input('category_id');
        $category = DiscoverCategory::findOrFail($category_id);
        $hashtag = Hashtag::whereName($request->input('hashtag'))->firstOrFail();

        $tag = DiscoverCategoryHashtag::firstOrCreate([
            'hashtag_id' => $hashtag->id,
            'discover_category_id' => $category->id
        ]);

        if($request->input('action') == 'delete') {
            $tag->delete();
            return [];
        }
        return $tag;
    }
}