middleware('auth'); } 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::all()->sortBy('name') 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')); } $defaultSourceId = Storage::where('is_default', true)->limit(1)->first(); return Theme::render('admin.create_album', [ 'album_sources' => $albumSources, 'default_storage_id' => (!is_null($defaultSourceId) ? $defaultSourceId->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; } }