From 3ed309ec010b937f335ec0a468aca1de52b56cfa Mon Sep 17 00:00:00 2001 From: Andy Heathershaw Date: Fri, 9 Sep 2016 16:59:13 +0100 Subject: [PATCH] Added a new option for albums - private albums. These are only visible (and accessible) to owners. --- app/Album.php | 2 +- app/Helpers/DbHelper.php | 33 +++++++++++++++++++ .../Controllers/Admin/AlbumController.php | 5 +++ .../Controllers/Gallery/AlbumController.php | 18 +++++----- .../Controllers/Gallery/DefaultController.php | 6 ++-- app/Providers/AuthServiceProvider.php | 5 +++ resources/lang/en/admin.php | 1 - resources/lang/en/forms.php | 1 + .../themes/base/admin/create_album.blade.php | 9 ++++- .../themes/base/admin/list_albums.blade.php | 14 +++----- .../views/themes/base/gallery/album.blade.php | 4 +-- .../views/themes/base/gallery/index.blade.php | 2 +- 12 files changed, 73 insertions(+), 27 deletions(-) create mode 100644 app/Helpers/DbHelper.php diff --git a/app/Album.php b/app/Album.php index dd5c1e6..aa99a1f 100644 --- a/app/Album.php +++ b/app/Album.php @@ -19,7 +19,7 @@ class Album extends Model * @var array */ protected $fillable = [ - 'name', 'description', 'url_alias' + 'name', 'description', 'url_alias', 'is_private', 'user_id' ]; /** diff --git a/app/Helpers/DbHelper.php b/app/Helpers/DbHelper.php new file mode 100644 index 0000000..9ed5e71 --- /dev/null +++ b/app/Helpers/DbHelper.php @@ -0,0 +1,33 @@ +id; + + $albums = Album::where('is_private', false) + ->orWhere(function ($query) use ($userId) + { + $query->where('is_private', true) + ->where('user_id', $userId); + }) + ->orderBy('name') + ->withCount('photos') + ->paginate(UserConfig::get('items_per_page')); + + return $albums; + } + + public static function loadAlbumByUrlAlias($urlAlias) + { + return Album::where('url_alias', $urlAlias)->first(); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Admin/AlbumController.php b/app/Http/Controllers/Admin/AlbumController.php index e6d72cb..d7caac4 100644 --- a/app/Http/Controllers/Admin/AlbumController.php +++ b/app/Http/Controllers/Admin/AlbumController.php @@ -12,6 +12,7 @@ use App\Services\PhotoService; use App\Upload; use Illuminate\Http\Request; use Illuminate\Support\Facades\App; +use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; class AlbumController extends Controller @@ -143,6 +144,10 @@ class AlbumController extends Controller $album = new Album(); $album->fill($request->only(['name', 'description'])); + + $album->is_private = (strtolower($request->get('is_private')) == 'on'); + $album->user_id = Auth::user()->id; + $album->generateAlias(); $album->save(); diff --git a/app/Http/Controllers/Gallery/AlbumController.php b/app/Http/Controllers/Gallery/AlbumController.php index 3f3fc48..423cc6e 100644 --- a/app/Http/Controllers/Gallery/AlbumController.php +++ b/app/Http/Controllers/Gallery/AlbumController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Gallery; use App\Album; use App\Facade\Theme; use App\Facade\UserConfig; +use App\Helpers\DbHelper; use App\Http\Controllers\Controller; use App\Http\Requests; use Illuminate\Http\Request; @@ -14,7 +15,15 @@ class AlbumController extends Controller { public function index($albumUrlAlias) { - $album = AlbumController::loadAlbum($albumUrlAlias); + $album = DbHelper::loadAlbumByUrlAlias($albumUrlAlias); + if (is_null($album)) + { + App::abort(404); + return null; + } + + $this->authorize('album.view', $album); + $photos = $album->photos() ->orderBy(DB::raw('COALESCE(taken_at, created_at)')) ->paginate(UserConfig::get('items_per_page_admin')); @@ -31,13 +40,6 @@ class AlbumController extends Controller */ private static function loadAlbum($urlAlias) { - $album = Album::where('url_alias', $urlAlias)->first(); - if (is_null($album)) - { - App::abort(404); - return null; - } - return $album; } } diff --git a/app/Http/Controllers/Gallery/DefaultController.php b/app/Http/Controllers/Gallery/DefaultController.php index 66acc32..22057b2 100644 --- a/app/Http/Controllers/Gallery/DefaultController.php +++ b/app/Http/Controllers/Gallery/DefaultController.php @@ -5,16 +5,16 @@ namespace App\Http\Controllers\Gallery; use App\Album; use App\Facade\Theme; use App\Facade\UserConfig; +use App\Helpers\DbHelper; use App\Http\Controllers\Controller; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; class DefaultController extends Controller { public function index(Request $request) { - $albums = Album::orderBy('name') - ->withCount('photos') - ->paginate(UserConfig::get('items_per_page')); + $albums = DbHelper::getAlbumsForCurrentUser(); return Theme::render('gallery.index', [ 'albums' => $albums, diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index ce5399c..1767505 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -2,6 +2,7 @@ namespace App\Providers; +use App\Album; use Illuminate\Support\Facades\Gate; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; @@ -25,6 +26,10 @@ class AuthServiceProvider extends ServiceProvider { $this->registerPolicies(); + Gate::define('album.view', function ($user, Album $album) + { + return (!$album->is_private || $album->user_id == $user->id); + }); Gate::define('admin-access', function ($user) { return $user->is_admin; }); diff --git a/resources/lang/en/admin.php b/resources/lang/en/admin.php index ed01d62..18efe05 100644 --- a/resources/lang/en/admin.php +++ b/resources/lang/en/admin.php @@ -19,7 +19,6 @@ return [ 'edit_album' => 'Edit photo album: :album_name', 'edit_album_intro' => 'Photo albums contain individual photographs together in the same way as a physical photo album or memory book.', 'edit_album_intro2' => 'Complete the form below to edit the properties of the album: :album_name.', - 'list_albums_name_column' => 'Album name', 'manage_widget' => [ 'panel_header' => 'Manage' ], diff --git a/resources/lang/en/forms.php b/resources/lang/en/forms.php index ce83e4e..a87f6d9 100644 --- a/resources/lang/en/forms.php +++ b/resources/lang/en/forms.php @@ -10,6 +10,7 @@ return [ 'name_label' => 'Name:', 'password_label' => 'Password:', 'password_confirm_label' => 'Confirm password:', + 'private_album_label' => 'Private album (only visible to me)', 'realname_label' => 'Your name:', 'register_action' => 'Create account', 'remember_me_label' => 'Remember me', diff --git a/resources/views/themes/base/admin/create_album.blade.php b/resources/views/themes/base/admin/create_album.blade.php index 5f5e2bb..62d9617 100644 --- a/resources/views/themes/base/admin/create_album.blade.php +++ b/resources/views/themes/base/admin/create_album.blade.php @@ -44,8 +44,15 @@ {!! Form::textarea('description', old('description'), ['class' => 'form-control']) !!} +
+ +
+
- @lang('forms.cancel_action') + @lang('forms.cancel_action') {!! Form::submit(trans('forms.create_action'), ['class' => 'btn btn-success']) !!}
{!! Form::close() !!} diff --git a/resources/views/themes/base/admin/list_albums.blade.php b/resources/views/themes/base/admin/list_albums.blade.php index 85beb92..1a9e821 100644 --- a/resources/views/themes/base/admin/list_albums.blade.php +++ b/resources/views/themes/base/admin/list_albums.blade.php @@ -27,19 +27,13 @@ @else - - - - - - @foreach ($albums as $album)
@lang('admin.list_albums_name_column')
- {{ $album->name }}
+ {{ $album->name }}@if ($album->is_private) @endif

{{ $album->description }}

-

{{ $album->photos_count }} {{ trans_choice('admin.stats_photos', $album->photos_count) }}

+

{{ $album->photos_count }} {{ trans_choice('admin.stats_widget.photos', $album->photos_count) }}

@lang('forms.edit_action') @@ -54,8 +48,8 @@ {{ $albums->links() }} - diff --git a/resources/views/themes/base/gallery/album.blade.php b/resources/views/themes/base/gallery/album.blade.php index 68bb289..3f46ce2 100644 --- a/resources/views/themes/base/gallery/album.blade.php +++ b/resources/views/themes/base/gallery/album.blade.php @@ -26,8 +26,8 @@ @foreach ($photos as $photo)
- diff --git a/resources/views/themes/base/gallery/index.blade.php b/resources/views/themes/base/gallery/index.blade.php index a71d63d..6176ffd 100644 --- a/resources/views/themes/base/gallery/index.blade.php +++ b/resources/views/themes/base/gallery/index.blade.php @@ -12,7 +12,7 @@

@php($albumUrl = $album->thumbnailUrl('preview')) @if (strlen($albumUrl) > 0) - + @endif

{{ $album->description }}