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.
260 lines
7.6 KiB
PHP
260 lines
7.6 KiB
PHP
<?php
|
|
|
|
namespace app\Http\Controllers\Admin;
|
|
|
|
use App\Album;
|
|
use App\Facade\Theme;
|
|
use App\Facade\UserConfig;
|
|
use App\Helpers\MiscHelper;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Requests;
|
|
use App\Photo;
|
|
use App\Services\PhotoService;
|
|
use App\Storage;
|
|
use App\Upload;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\App;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\View;
|
|
|
|
class AlbumController extends Controller
|
|
{
|
|
public function __construct()
|
|
{
|
|
$this->middleware('auth');
|
|
View::share('is_admin', true);
|
|
}
|
|
|
|
public function analyse($id)
|
|
{
|
|
$this->authorize('admin-access');
|
|
|
|
$album = $this->loadAlbum($id);
|
|
$photos = $album->photos()
|
|
->where('is_analysed', false)
|
|
->orderBy('created_at')
|
|
->get();
|
|
|
|
return Theme::render('admin.analyse_album', ['album' => $album, 'photos' => $photos]);
|
|
}
|
|
|
|
/**
|
|
* Show the form for creating a new resource.
|
|
*
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function create(Request $request)
|
|
{
|
|
$this->authorize('admin-access');
|
|
|
|
$albumSources = [];
|
|
foreach (Storage::where('is_active', true)->orderBy('name')->get() as $storage)
|
|
{
|
|
$albumSources[$storage->id] = $storage->name;
|
|
}
|
|
|
|
if (count($albumSources) == 0)
|
|
{
|
|
$request->session()->flash('info', trans('admin.create_album_no_storage'));
|
|
return redirect(route('storage.create'));
|
|
}
|
|
|
|
$defaultSource = Storage::where('is_default', true)->limit(1)->first();
|
|
|
|
return Theme::render('admin.create_album', [
|
|
'album_sources' => $albumSources,
|
|
'default_storage_id' => (!is_null($defaultSource) ? $defaultSource->id : 0)
|
|
]);
|
|
}
|
|
|
|
public function delete($id)
|
|
{
|
|
$this->authorize('admin-access');
|
|
|
|
$album = $this->loadAlbum($id);
|
|
|
|
return Theme::render('admin.delete_album', ['album' => $album]);
|
|
}
|
|
|
|
/**
|
|
* Remove the specified resource from storage.
|
|
*
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function destroy($id)
|
|
{
|
|
$this->authorize('admin-access');
|
|
|
|
$album = $this->loadAlbum($id);
|
|
|
|
// Delete all the photo files
|
|
/** @var Photo $photo */
|
|
foreach ($album->photos as $photo)
|
|
{
|
|
$photoService = new PhotoService($photo);
|
|
$photoService->delete();
|
|
}
|
|
|
|
$album->getAlbumSource()->deleteAlbumContents();
|
|
$album->delete();
|
|
|
|
return redirect(route('albums.index'));
|
|
}
|
|
|
|
/**
|
|
* Show the form for editing the specified resource.
|
|
*
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function edit($id)
|
|
{
|
|
$this->authorize('admin-access');
|
|
|
|
$album = $this->loadAlbum($id);
|
|
|
|
return Theme::render('admin.edit_album', ['album' => $album]);
|
|
}
|
|
|
|
/**
|
|
* Display a listing of the resource.
|
|
*
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function index()
|
|
{
|
|
$this->authorize('admin-access');
|
|
|
|
$albums = Album::orderBy('name')
|
|
->withCount('photos')
|
|
->paginate(UserConfig::get('items_per_page'));
|
|
|
|
return Theme::render('admin.list_albums', [
|
|
'albums' => $albums
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Display the specified resource.
|
|
*
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function show(Request $request, $id)
|
|
{
|
|
$this->authorize('admin-access');
|
|
|
|
$album = $this->loadAlbum($id);
|
|
$photos = $album->photos()
|
|
->orderBy(DB::raw('COALESCE(taken_at, created_at)'))
|
|
->paginate(UserConfig::get('items_per_page_admin'));
|
|
|
|
// See if we can upload (need the GD extension)
|
|
$isUploadEnabled = extension_loaded('gd');
|
|
$fileUploadLimit = MiscHelper::convertToBytes(ini_get('upload_max_filesize')) / (1024*1024);
|
|
$postLimit = MiscHelper::convertToBytes(ini_get('post_max_size')) / (1024*1024);
|
|
$fileUploadOrPostLowerLimit = ($postLimit < $fileUploadLimit) ? $postLimit : $fileUploadLimit;
|
|
|
|
$allowedAlbumViews = [];
|
|
foreach (UserConfig::allowedAlbumViews() as $view)
|
|
{
|
|
$allowedAlbumViews[$view] = trans(sprintf('gallery.album_views.%s', $view));
|
|
}
|
|
|
|
return Theme::render('admin.show_album', [
|
|
'album' => $album,
|
|
'allowed_views' => $allowedAlbumViews,
|
|
'bulk_actions' => [
|
|
'rotate_left' => trans('admin.photo_actions.rotate_left'),
|
|
'rotate_right' => trans('admin.photo_actions.rotate_right'),
|
|
'-' => '-----',
|
|
'flip_horizontal' => trans('admin.photo_actions.flip_horizontal'),
|
|
'flip_vertical' => trans('admin.photo_actions.flip_vertical'),
|
|
'flip_both' => trans('admin.photo_actions.flip_both'),
|
|
'--' => '-----',
|
|
'change_album' => trans('admin.photo_actions.change_album'),
|
|
'refresh_thumbnails' => trans('admin.photo_actions.refresh_thumbnails'),
|
|
'delete' => trans('admin.photo_actions.delete')
|
|
],
|
|
'error' => $request->session()->get('error'),
|
|
'file_upload_limit' => $fileUploadLimit,
|
|
'is_upload_enabled' => $isUploadEnabled,
|
|
'max_post_limit' => $postLimit,
|
|
'max_post_limit_bulk' => $fileUploadOrPostLowerLimit,
|
|
'photos' => $photos,
|
|
'success' => $request->session()->get('success'),
|
|
'warning' => $request->session()->get('warning')
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Store a newly created resource in storage.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function store(Requests\StoreAlbumRequest $request)
|
|
{
|
|
$this->authorize('admin-access');
|
|
|
|
$album = new Album();
|
|
$album->fill($request->only(['name', 'description', 'storage_id']));
|
|
|
|
$album->default_view = UserConfig::get('default_album_view');
|
|
$album->is_private = (strtolower($request->get('is_private')) == 'on');
|
|
$album->user_id = Auth::user()->id;
|
|
|
|
$album->generateAlias();
|
|
$album->save();
|
|
|
|
return redirect(route('albums.show', ['id' => $album->id]));
|
|
}
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function update(Requests\StoreAlbumRequest $request, $id)
|
|
{
|
|
$this->authorize('admin-access');
|
|
|
|
$album = $this->loadAlbum($id);
|
|
$album->fill(['name', 'description']);
|
|
$album->is_private = (strtolower($request->get('is_private')) == 'on');
|
|
|
|
// These keys are optional and may or may not be in the request, depending on the page requesting it
|
|
foreach (['storage_id', 'default_view'] as $key)
|
|
{
|
|
if ($request->has($key))
|
|
{
|
|
$album->$key = $request->get($key);
|
|
}
|
|
}
|
|
|
|
$album->save();
|
|
$request->session()->flash('success', trans('admin.album_saved_successfully', ['name' => $album->name]));
|
|
|
|
return redirect(route('albums.show', ['id' => $id]));
|
|
}
|
|
|
|
/**
|
|
* @param $id
|
|
* @return Album
|
|
*/
|
|
private function loadAlbum($id)
|
|
{
|
|
$album = Album::where('id', intval($id))->first();
|
|
if (is_null($album))
|
|
{
|
|
App::abort(404);
|
|
return null;
|
|
}
|
|
|
|
return $album;
|
|
}
|
|
} |