/
BrowserController.php
97 lines (74 loc) · 2.92 KB
/
BrowserController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
namespace Statamic\Http\Controllers\CP\Assets;
use Illuminate\Http\Request;
use Statamic\Contracts\Assets\AssetContainer as AssetContainerContract;
use Statamic\Exceptions\AuthorizationException;
use Statamic\Facades\Asset;
use Statamic\Facades\User;
use Statamic\Http\Controllers\CP\CpController;
use Statamic\Http\Resources\CP\Assets\FolderAssetsCollection;
use Statamic\Http\Resources\CP\Assets\SearchedAssetsCollection;
class BrowserController extends CpController
{
use RedirectsToFirstAssetContainer;
public function index()
{
$this->redirectToFirstContainer();
if (User::current()->can('create', AssetContainerContract::class)) {
return redirect()->cpRoute('assets.index');
}
throw new AuthorizationException;
}
public function show($container, $path = '/')
{
$this->authorize('view', $container);
return view('statamic::assets.browse', [
'container' => [
'id' => $container->id(),
'title' => $container->title(),
'edit_url' => $container->editUrl(),
'delete_url' => $container->deleteUrl(),
'blueprint_url' => cp_route('asset-containers.blueprint.edit', $container->handle()),
'can_edit' => User::current()->can('edit', $container),
'can_delete' => User::current()->can('delete', $container),
],
'folder' => $path,
]);
}
public function edit($container, $path)
{
$containerHandle = $container->handle();
$asset = Asset::find("{$containerHandle}::{$path}");
abort_unless($container && $asset, 404);
$this->authorize('view', $asset);
return view('statamic::assets.browse', [
'container' => [
'id' => $container->id(),
'title' => $container->title(),
'edit_url' => $container->editUrl(),
],
'folder' => $asset->folder(),
'editing' => $asset->id(),
]);
}
public function folder(Request $request, $container, $path = '/')
{
$this->authorize('view', $container);
$folder = $container->assetFolder($path);
$query = $folder->queryAssets();
if ($request->sort) {
$query->orderBy($request->sort, $request->order ?? 'asc');
}
$assets = $query->paginate(request('perPage'));
return (new FolderAssetsCollection($assets))->folder($folder);
}
public function search(Request $request, $container)
{
$this->authorize('view', $container);
$query = $container->hasSearchIndex()
? $container->searchIndex()->ensureExists()->search($request->search)
: $container->queryAssets()->where('path', 'like', '%'.$request->search.'%');
$assets = $query->paginate(request('perPage'));
return new SearchedAssetsCollection($assets);
}
}