#85: Changed the way next/previous buttons work, and introduced a more consistent ordering when large numbers of photos were uploaded at the same time
This commit is contained in:
parent
566db25316
commit
efd57cde08
@ -71,14 +71,14 @@ class AlbumController extends Controller
|
||||
else if ($requestedView != 'slideshow')
|
||||
{
|
||||
$photos = $album->photos()
|
||||
->orderBy(DB::raw('COALESCE(taken_at, created_at)'))
|
||||
->orderBy(DB::raw('COALESCE(taken_at, created_at), name, id'))
|
||||
->paginate(UserConfig::get('items_per_page'));
|
||||
}
|
||||
else
|
||||
{
|
||||
// The slideshow view needs access to all photos, not paged
|
||||
$photos = $album->photos()
|
||||
->orderBy(DB::raw('COALESCE(taken_at, created_at)'))
|
||||
->orderBy(DB::raw('COALESCE(taken_at, created_at), name, id'))
|
||||
->get();
|
||||
}
|
||||
|
||||
|
@ -105,14 +105,40 @@ class PhotoController extends Controller
|
||||
// Load the Next/Previous buttons
|
||||
$thisPhotoDate = is_null($photo->taken_at) ? $photo->created_at : $photo->taken_at;
|
||||
|
||||
$previousPhoto = $album->photos()
|
||||
->where(DB::raw('COALESCE(taken_at, created_at)'), '<', $thisPhotoDate)
|
||||
->orderBy(DB::raw('COALESCE(taken_at, created_at)'), 'desc')
|
||||
->first();
|
||||
$nextPhoto = $album->photos()
|
||||
->where(DB::raw('COALESCE(taken_at, created_at)'), '>', $thisPhotoDate)
|
||||
->orderBy(DB::raw('COALESCE(taken_at, created_at)'))
|
||||
->first();
|
||||
// I don't like the idea of using a totally raw SQL query, but it's the only sure-fire way to number the rows
|
||||
// so we can get the previous/next photos accurately - and we don't have to load all data for the photo objects
|
||||
$previousPhoto = null;
|
||||
$nextPhoto = null;
|
||||
|
||||
$allAlbumPhotos = DB::select(
|
||||
DB::raw(
|
||||
'SELECT p.id, (@row_number:=@row_number + 1) AS row_number
|
||||
FROM photos p, (SELECT @row_number:=0) AS t
|
||||
WHERE p.album_id = :album_id
|
||||
ORDER BY COALESCE(p.taken_at, p.created_at), p.name, p.id;'
|
||||
),
|
||||
[
|
||||
'album_id' => $album->id
|
||||
]
|
||||
);
|
||||
|
||||
for ($i = 0; $i < count($allAlbumPhotos); $i++)
|
||||
{
|
||||
if ($allAlbumPhotos[$i]->id === $photo->id)
|
||||
{
|
||||
if ($i > 0)
|
||||
{
|
||||
$previousPhoto = Photo::where('id', $allAlbumPhotos[$i - 1]->id)->first();
|
||||
}
|
||||
|
||||
if ($i + 1 < count($allAlbumPhotos))
|
||||
{
|
||||
$nextPhoto = Photo::where('id', $allAlbumPhotos[$i + 1]->id)->first();
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Record the visit to the photo
|
||||
if (UserConfig::get('enable_visitor_hits'))
|
||||
|
Loading…
Reference in New Issue
Block a user