pixelfed/pixelfed

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

Summary

Maintainability
A
1 hr
Test Coverage
<?php

namespace App\Http\Controllers\Admin;

use DB, Cache;
use App\{
    Media,
    MediaBlocklist,
    Profile,
    Status
};
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;

trait AdminMediaController
{
    public function media(Request $request)
    {
        $this->validate($request, [
            'layout' => [
                'nullable',
                'string',
                'min:1',
                'max:13',
                Rule::in(['grid','list', 'banned', 'addbanned'])
            ],
            'search' => 'nullable|string|min:1|max:20'
        ]);

        if($request->filled('search')) {
            $profiles = Profile::where('username', 'like', '%'.$request->input('search').'%')->pluck('id')->toArray();
            $media = Media::whereHas('status')
                ->with('status')
                ->orderby('id', 'desc')
                ->whereIn('profile_id', $profiles)
                ->orWhere('mime', $request->input('search'))
                ->paginate(12);
            return view('admin.media.home', compact('media'));
        }

        if($request->input('layout') == 'banned') {
            $media = MediaBlocklist::latest()->paginate(12);
            return view('admin.media.home', compact('media'));
        }

        $media = Media::whereNull('remote_url')->orderby('id', 'desc')->simplePaginate(12);
        return view('admin.media.home', compact('media'));
    }

    public function mediaShow(Request $request, $id)
    {
        $media = Media::findOrFail($id);
        return view('admin.media.show', compact('media'));
    }
}