#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
eedfd5abdd
commit
aa2998ac70
@ -71,14 +71,14 @@ class AlbumController extends Controller
|
|||||||
else if ($requestedView != 'slideshow')
|
else if ($requestedView != 'slideshow')
|
||||||
{
|
{
|
||||||
$photos = $album->photos()
|
$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'));
|
->paginate(UserConfig::get('items_per_page'));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// The slideshow view needs access to all photos, not paged
|
// The slideshow view needs access to all photos, not paged
|
||||||
$photos = $album->photos()
|
$photos = $album->photos()
|
||||||
->orderBy(DB::raw('COALESCE(taken_at, created_at)'))
|
->orderBy(DB::raw('COALESCE(taken_at, created_at), name, id'))
|
||||||
->get();
|
->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,14 +105,40 @@ class PhotoController extends Controller
|
|||||||
// Load the Next/Previous buttons
|
// Load the Next/Previous buttons
|
||||||
$thisPhotoDate = is_null($photo->taken_at) ? $photo->created_at : $photo->taken_at;
|
$thisPhotoDate = is_null($photo->taken_at) ? $photo->created_at : $photo->taken_at;
|
||||||
|
|
||||||
$previousPhoto = $album->photos()
|
// 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
|
||||||
->where(DB::raw('COALESCE(taken_at, created_at)'), '<', $thisPhotoDate)
|
// so we can get the previous/next photos accurately - and we don't have to load all data for the photo objects
|
||||||
->orderBy(DB::raw('COALESCE(taken_at, created_at)'), 'desc')
|
$previousPhoto = null;
|
||||||
->first();
|
$nextPhoto = null;
|
||||||
$nextPhoto = $album->photos()
|
|
||||||
->where(DB::raw('COALESCE(taken_at, created_at)'), '>', $thisPhotoDate)
|
$allAlbumPhotos = DB::select(
|
||||||
->orderBy(DB::raw('COALESCE(taken_at, created_at)'))
|
DB::raw(
|
||||||
->first();
|
'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
|
// Record the visit to the photo
|
||||||
if (UserConfig::get('enable_visitor_hits'))
|
if (UserConfig::get('enable_visitor_hits'))
|
||||||
|
Loading…
Reference in New Issue
Block a user