Fix category filter for shared folders
parent
be961b3fb4
commit
9c77a8f0c8
|
@ -6,7 +6,6 @@ namespace OCA\Memories\Db;
|
||||||
use OCA\Memories\Exif;
|
use OCA\Memories\Exif;
|
||||||
use OCP\IConfig;
|
use OCP\IConfig;
|
||||||
use OCP\IDBConnection;
|
use OCP\IDBConnection;
|
||||||
use OCP\ITags;
|
|
||||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||||
|
|
||||||
trait TimelineQueryDay {
|
trait TimelineQueryDay {
|
||||||
|
@ -24,10 +23,10 @@ trait TimelineQueryDay {
|
||||||
unset($row["isvideo"]);
|
unset($row["isvideo"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($row["category"] === ITags::TAG_FAVORITE) {
|
if ($row["categoryid"]) {
|
||||||
$row["isfavorite"] = 1;
|
$row["isfavorite"] = 1;
|
||||||
}
|
}
|
||||||
unset($row["category"]);
|
unset($row["categoryid"]);
|
||||||
}
|
}
|
||||||
return $day;
|
return $day;
|
||||||
}
|
}
|
||||||
|
@ -40,7 +39,7 @@ trait TimelineQueryDay {
|
||||||
$whereFilecache
|
$whereFilecache
|
||||||
) {
|
) {
|
||||||
// Get all entries also present in filecache
|
// Get all entries also present in filecache
|
||||||
$query->select('m.fileid', 'f.etag', 'm.isvideo', 'vc.category')
|
$query->select('m.fileid', 'f.etag', 'm.isvideo', 'vco.categoryid')
|
||||||
->from('memories', 'm')
|
->from('memories', 'm')
|
||||||
->innerJoin('m', 'filecache', 'f',
|
->innerJoin('m', 'filecache', 'f',
|
||||||
$query->expr()->andX(
|
$query->expr()->andX(
|
||||||
|
|
|
@ -8,31 +8,29 @@ use OCP\ITags;
|
||||||
|
|
||||||
trait TimelineQueryFilters {
|
trait TimelineQueryFilters {
|
||||||
public function transformFavoriteFilter(IQueryBuilder $query, string $userId) {
|
public function transformFavoriteFilter(IQueryBuilder $query, string $userId) {
|
||||||
// Inner join will filter only the favorites
|
$query->innerJoin('m', 'vcategory_to_object', 'vcoi', $query->expr()->andX(
|
||||||
$query->innerJoin('m', 'vcategory_to_object', 'fvco', $query->expr()->eq('fvco.objid', 'm.fileid'));
|
$query->expr()->eq('vcoi.objid', 'm.fileid'),
|
||||||
|
$query->expr()->in('vcoi.categoryid', $this->getFavoriteVCategoryFun($query, $userId)),
|
||||||
// Get the favorites category only
|
|
||||||
$query->innerJoin('fvco', 'vcategory', 'fvc', $query->expr()->andX(
|
|
||||||
$query->expr()->eq('fvc.id', 'fvco.categoryid'),
|
|
||||||
$query->expr()->eq('fvc.type', $query->createNamedParameter("files")),
|
|
||||||
$query->expr()->eq('fvc.uid', $query->createNamedParameter($userId)),
|
|
||||||
$query->expr()->eq('fvc.category', $query->createNamedParameter(ITags::TAG_FAVORITE)),
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function addFavoriteTag(IQueryBuilder $query, string $userId) {
|
public function addFavoriteTag(IQueryBuilder $query, string $userId) {
|
||||||
// Inner join will filter only the favorites
|
$query->leftJoin('m', 'vcategory_to_object', 'vco', $query->expr()->andX(
|
||||||
$query->leftJoin('m', 'vcategory_to_object', 'vco', $query->expr()->eq('vco.objid', 'm.fileid'));
|
$query->expr()->eq('vco.objid', 'm.fileid'),
|
||||||
|
$query->expr()->in('vco.categoryid', $this->getFavoriteVCategoryFun($query, $userId)),
|
||||||
// Get the favorites category only
|
|
||||||
$query->leftJoin('vco', 'vcategory', 'vc', $query->expr()->andX(
|
|
||||||
$query->expr()->eq('vc.id', 'vco.categoryid'),
|
|
||||||
$query->expr()->eq('vc.type', $query->createNamedParameter("files")),
|
|
||||||
$query->expr()->eq('vc.uid', $query->createNamedParameter($userId)),
|
|
||||||
$query->expr()->eq('vc.category', $query->createNamedParameter(ITags::TAG_FAVORITE)),
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getFavoriteVCategoryFun(IQueryBuilder &$query, string $userId) {
|
||||||
|
return $query->createFunction(
|
||||||
|
$query->getConnection()->getQueryBuilder()->select('id')->from('vcategory', 'vc')->where(
|
||||||
|
$query->expr()->andX(
|
||||||
|
$query->expr()->eq('type', $query->createNamedParameter("files")),
|
||||||
|
$query->expr()->eq('uid', $query->createNamedParameter($userId)),
|
||||||
|
$query->expr()->eq('category', $query->createNamedParameter(ITags::TAG_FAVORITE)),
|
||||||
|
))->getSQL());
|
||||||
|
}
|
||||||
|
|
||||||
public function videoFilter(IQueryBuilder $query, string $userId) {
|
public function videoFilter(IQueryBuilder $query, string $userId) {
|
||||||
$query->andWhere($query->expr()->eq('m.isvideo', $query->createNamedParameter('1')));
|
$query->andWhere($query->expr()->eq('m.isvideo', $query->createNamedParameter('1')));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue