album: fix sharing with group (fix #329)
parent
bd319cbf1f
commit
816294b591
|
@ -49,6 +49,17 @@ class AlbumsController extends ApiBase
|
||||||
$list = array_merge($list, $this->timelineQuery->getAlbums($user->getUID(), true));
|
$list = array_merge($list, $this->timelineQuery->getAlbums($user->getUID(), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remove elements with duplicate album_id
|
||||||
|
$seenIds = [];
|
||||||
|
$list = array_filter($list, function ($item) use (&$seenIds) {
|
||||||
|
if (\in_array($item['album_id'], $seenIds, true)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$seenIds[] = $item['album_id'];
|
||||||
|
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
return new JSONResponse($list, Http::STATUS_OK);
|
return new JSONResponse($list, Http::STATUS_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,9 +39,10 @@ trait TimelineQueryAlbums
|
||||||
$query->select('pa.*', $count)->from('photos_albums', 'pa');
|
$query->select('pa.*', $count)->from('photos_albums', 'pa');
|
||||||
|
|
||||||
if ($shared) {
|
if ($shared) {
|
||||||
|
$ids = $this->getSelfCollaborators($uid);
|
||||||
$query->innerJoin('pa', $this->collaboratorsTable(), 'pc', $query->expr()->andX(
|
$query->innerJoin('pa', $this->collaboratorsTable(), 'pc', $query->expr()->andX(
|
||||||
$query->expr()->eq('pa.album_id', 'pc.album_id'),
|
$query->expr()->eq('pa.album_id', 'pc.album_id'),
|
||||||
$query->expr()->eq('pc.collaborator_id', $query->createNamedParameter($uid)),
|
$query->expr()->in('pc.collaborator_id', $query->createNamedParameter($ids, IQueryBuilder::PARAM_STR_ARRAY)),
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
$query->where(
|
$query->where(
|
||||||
|
@ -141,9 +142,10 @@ trait TimelineQueryAlbums
|
||||||
));
|
));
|
||||||
|
|
||||||
// Join to shared album
|
// Join to shared album
|
||||||
|
$ids = $this->getSelfCollaborators($uid);
|
||||||
$query->leftJoin('paf', $this->collaboratorsTable(), 'pc', $query->expr()->andX(
|
$query->leftJoin('paf', $this->collaboratorsTable(), 'pc', $query->expr()->andX(
|
||||||
$query->expr()->eq('pc.album_id', 'paf.album_id'),
|
$query->expr()->eq('pc.album_id', 'paf.album_id'),
|
||||||
$query->expr()->eq('pc.collaborator_id', $query->createNamedParameter($uid)),
|
$query->expr()->in('pc.collaborator_id', $query->createNamedParameter($ids, IQueryBuilder::PARAM_STR_ARRAY)),
|
||||||
));
|
));
|
||||||
|
|
||||||
return $query->executeQuery()->fetchOne();
|
return $query->executeQuery()->fetchOne();
|
||||||
|
@ -185,10 +187,11 @@ trait TimelineQueryAlbums
|
||||||
|
|
||||||
// Check in collaborators instead
|
// Check in collaborators instead
|
||||||
$query = $this->connection->getQueryBuilder();
|
$query = $this->connection->getQueryBuilder();
|
||||||
|
$ids = $this->getSelfCollaborators($uid);
|
||||||
$query->select('album_id')->from($this->collaboratorsTable())->where(
|
$query->select('album_id')->from($this->collaboratorsTable())->where(
|
||||||
$query->expr()->andX(
|
$query->expr()->andX(
|
||||||
$query->expr()->eq('album_id', $query->createNamedParameter($album['album_id'])),
|
$query->expr()->eq('album_id', $query->createNamedParameter($album['album_id'])),
|
||||||
$query->expr()->eq('collaborator_id', $query->createNamedParameter($uid)),
|
$query->expr()->in('collaborator_id', $query->createNamedParameter($ids, IQueryBuilder::PARAM_STR_ARRAY)),
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -217,6 +220,20 @@ trait TimelineQueryAlbums
|
||||||
return $fileIds;
|
return $fileIds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Get list of collaborator ids including user id and groups */
|
||||||
|
private function getSelfCollaborators(string $uid)
|
||||||
|
{
|
||||||
|
// Get groups for the user
|
||||||
|
$groupManager = \OC::$server->get(\OCP\IGroupManager::class);
|
||||||
|
$user = \OC::$server->get(\OCP\IUserManager::class)->get($uid);
|
||||||
|
$groups = $groupManager->getUserGroupIds($user);
|
||||||
|
|
||||||
|
// And albums shared with user
|
||||||
|
$groups[] = $uid;
|
||||||
|
|
||||||
|
return $groups;
|
||||||
|
}
|
||||||
|
|
||||||
/** Get the name of the collaborators table */
|
/** Get the name of the collaborators table */
|
||||||
private function collaboratorsTable()
|
private function collaboratorsTable()
|
||||||
{
|
{
|
||||||
|
|
|
@ -268,11 +268,7 @@ export function getAlbumFileInfos(
|
||||||
: `/photos/${uid}/sharedalbums/${albumName} (${albumUser})`;
|
: `/photos/${uid}/sharedalbums/${albumName} (${albumUser})`;
|
||||||
|
|
||||||
return photos.map((photo) => {
|
return photos.map((photo) => {
|
||||||
const basename =
|
const basename = `${photo.fileid}-${photo.basename}`;
|
||||||
albumUser === uid
|
|
||||||
? `${photo.fileid}-${photo.basename}`
|
|
||||||
: `${photo.fileid}-${albumName} (${albumUser})`;
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
fileid: photo.fileid,
|
fileid: photo.fileid,
|
||||||
filename: `${collection}/${basename}`,
|
filename: `${collection}/${basename}`,
|
||||||
|
|
Loading…
Reference in New Issue