e7fbdaaa66
BLUE-3: Validation is now performed on the file path selected. Tweaks to the storage locations form to display validation errors against the correct fields.
235 lines
6.3 KiB
PHP
235 lines
6.3 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Facade\Theme;
|
|
use App\Facade\UserConfig;
|
|
use App\Storage;
|
|
use Illuminate\Http\Request;
|
|
|
|
use App\Http\Requests;
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Support\Facades\App;
|
|
use Illuminate\Support\Facades\View;
|
|
|
|
class StorageController extends Controller
|
|
{
|
|
public function __construct()
|
|
{
|
|
$this->middleware('auth');
|
|
View::share('is_admin', true);
|
|
}
|
|
|
|
/**
|
|
* Display a listing of the resource.
|
|
*
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function index(Request $request)
|
|
{
|
|
$this->authorize('admin-access');
|
|
|
|
$storageLocations = Storage::orderBy('name')
|
|
->paginate(UserConfig::get('items_per_page'));
|
|
|
|
return Theme::render('admin.list_storage', [
|
|
'error' => $request->session()->get('error'),
|
|
'storageLocations' => $storageLocations,
|
|
'warning' => $request->session()->get('warning'),
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Show the form for creating a new resource.
|
|
*
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function create(Request $request)
|
|
{
|
|
$this->authorize('admin-access');
|
|
|
|
$filesystemDefaultLocation = sprintf('%s/storage/app/albums', dirname(dirname(dirname(dirname(__DIR__)))));
|
|
|
|
return Theme::render('admin.create_storage', [
|
|
'album_sources' => UserConfig::albumSources(),
|
|
'filesystem_default_location' => $filesystemDefaultLocation,
|
|
'info' => $request->session()->get('info')
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Store a newly created resource in storage.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function store(Requests\StoreStorageRequest $request)
|
|
{
|
|
$this->authorize('admin-access');
|
|
|
|
$storage = new Storage();
|
|
$storage->fill($request->only(['name', 'source', 'location']));
|
|
$storage->is_active = true;
|
|
$storage->is_default = (strtolower($request->get('is_default')) == 'on');
|
|
$storage->is_internal = false;
|
|
$storage->save();
|
|
|
|
if ($storage->is_default)
|
|
{
|
|
$this->unsetIsDefaultFromOthers($storage);
|
|
}
|
|
|
|
return redirect(route('storage.index'));
|
|
}
|
|
|
|
/**
|
|
* Display the specified resource.
|
|
*
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
//public function show($id)
|
|
//{
|
|
//
|
|
//}
|
|
|
|
/**
|
|
* Show the form for deleting the specified resource.
|
|
*
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function delete(Request $request, $id)
|
|
{
|
|
$this->authorize('admin-access');
|
|
|
|
$storage = Storage::where('id', intval($id))->first();
|
|
if (is_null($storage))
|
|
{
|
|
App::abort(404);
|
|
}
|
|
|
|
if ($storage->is_internal)
|
|
{
|
|
// Can't delete the default storage location
|
|
$request->session()->flash('warning', trans('admin.delete_storage_internal'));
|
|
return redirect(route('storage.index'));
|
|
}
|
|
|
|
if ($storage->albums()->count() > 0)
|
|
{
|
|
// Can't delete storage location while albums exist
|
|
$request->session()->flash('error', trans('admin.delete_storage_existing_albums'));
|
|
return redirect(route('storage.index'));
|
|
}
|
|
|
|
return Theme::render('admin.delete_storage', ['storage' => $storage]);
|
|
}
|
|
|
|
/**
|
|
* Show the form for editing the specified resource.
|
|
*
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function edit($id)
|
|
{
|
|
$this->authorize('admin-access');
|
|
|
|
$storage = Storage::where('id', intval($id))->first();
|
|
if (is_null($storage))
|
|
{
|
|
App::abort(404);
|
|
}
|
|
|
|
return Theme::render('admin.edit_storage', ['storage' => $storage]);
|
|
}
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function update(Requests\StoreStorageRequest $request, $id)
|
|
{
|
|
$this->authorize('admin-access');
|
|
|
|
$storage = Storage::where('id', intval($id))->first();
|
|
if (is_null($storage))
|
|
{
|
|
App::abort(404);
|
|
}
|
|
|
|
$storage->fill($request->only(['name']));
|
|
$storage->is_active = (strtolower($request->get('is_active')) == 'on');
|
|
$storage->is_default = (strtolower($request->get('is_default')) == 'on');
|
|
|
|
if ($storage->is_default && !$storage->is_active)
|
|
{
|
|
$storage->is_default = false;
|
|
}
|
|
|
|
$storage->save();
|
|
|
|
if ($storage->is_default)
|
|
{
|
|
$this->unsetIsDefaultFromOthers($storage);
|
|
}
|
|
|
|
return redirect(route('storage.index'));
|
|
}
|
|
|
|
/**
|
|
* Remove the specified resource from storage.
|
|
*
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function destroy(Request $request, $id)
|
|
{
|
|
$this->authorize('admin-access');
|
|
|
|
$storage = Storage::where('id', intval($id))->first();
|
|
if (is_null($storage))
|
|
{
|
|
App::abort(404);
|
|
}
|
|
|
|
if ($storage->is_internal)
|
|
{
|
|
// Can't delete the default storage location
|
|
$request->session()->flash('warning', trans('admin.delete_storage_internal'));
|
|
return redirect(route('storage.index'));
|
|
}
|
|
|
|
if ($storage->albums()->count() > 0)
|
|
{
|
|
// Can't delete storage location while albums exist
|
|
$request->session()->flash('error', trans('admin.delete_storage_existing_albums'));
|
|
return redirect(route('storage.index'));
|
|
}
|
|
|
|
$storage->delete();
|
|
|
|
return redirect(route('storage.index'));
|
|
}
|
|
|
|
private function unsetIsDefaultFromOthers(Storage $storage)
|
|
{
|
|
// If this storage is flagged as default, remove all others
|
|
foreach (Storage::all() as $otherStorage)
|
|
{
|
|
if ($otherStorage->id == $storage->id)
|
|
{
|
|
// Ignore the one just created
|
|
continue;
|
|
}
|
|
|
|
$otherStorage->is_default = false;
|
|
$otherStorage->save();
|
|
}
|
|
}
|
|
}
|