@@ -581,27 +581,42 @@ public function getNumberOfCommentsForObject($objectType, $objectId, \DateTime $
581581 * @param int $folderId
582582 * @param IUser $user
583583 * @return array [$fileId => $unreadCount]
584+ *
585+ * @suppress SqlInjectionChecker
584586 */
585587 public function getNumberOfUnreadCommentsForFolder ($ folderId , IUser $ user ) {
586588 $ qb = $ this ->dbConn ->getQueryBuilder ();
589+
587590 $ query = $ qb ->select ('f.fileid ' )
588591 ->addSelect ($ qb ->func ()->count ('c.id ' , 'num_ids ' ))
589- ->from ('comments ' , 'c ' )
590- ->innerJoin ('c ' , 'filecache ' , 'f ' , $ qb ->expr ()->andX (
591- $ qb ->expr ()->eq ('c.object_type ' , $ qb ->createNamedParameter ('files ' )),
592- $ qb ->expr ()->eq ('f.fileid ' , $ qb ->expr ()->castColumn ('c.object_id ' , IQueryBuilder::PARAM_INT ))
592+ ->from ('filecache ' , 'f ' )
593+ ->leftJoin ('f ' , 'comments ' , 'c ' , $ qb ->expr ()->eq (
594+ 'f.fileid ' , $ qb ->expr ()->castColumn ('c.object_id ' , IQueryBuilder::PARAM_INT )
593595 ))
594- ->leftJoin ('c ' , 'comments_read_markers ' , 'm ' , $ qb ->expr ()->andX (
595- $ qb ->expr ()->eq ('m.object_type ' , $ qb ->createNamedParameter ('files ' )),
596- $ qb ->expr ()->eq ('m.object_id ' , 'c.object_id ' ),
597- $ qb ->expr ()->eq ('m.user_id ' , $ qb ->createNamedParameter ($ user ->getUID ()))
596+ ->leftJoin ('c ' , 'comments_read_markers ' , 'm ' , $ qb ->expr ()->eq (
597+ 'c.object_id ' , 'm.object_id '
598598 ))
599- ->andWhere ($ qb ->expr ()->eq ('f.parent ' , $ qb ->createNamedParameter ($ folderId )))
600- ->andWhere ($ qb ->expr ()->orX (
601- $ qb ->expr ()->gt ('c.creation_timestamp ' , 'marker_datetime ' ),
602- $ qb ->expr ()->isNull ('marker_datetime ' )
603- ))
604- ->groupBy ('f.fileid ' );
599+ ->where (
600+ $ qb ->expr ()->andX (
601+ $ qb ->expr ()->eq ('f.parent ' , $ qb ->createNamedParameter ($ folderId )),
602+ $ qb ->expr ()->orX (
603+ $ qb ->expr ()->eq ('c.object_type ' , $ qb ->createNamedParameter ('files ' )),
604+ $ qb ->expr ()->isNull ('c.object_type ' )
605+ ),
606+ $ qb ->expr ()->orX (
607+ $ qb ->expr ()->eq ('m.object_type ' , $ qb ->createNamedParameter ('files ' )),
608+ $ qb ->expr ()->isNull ('m.object_type ' )
609+ ),
610+ $ qb ->expr ()->orX (
611+ $ qb ->expr ()->eq ('m.user_id ' , $ qb ->createNamedParameter ($ user ->getUID ())),
612+ $ qb ->expr ()->isNull ('m.user_id ' )
613+ ),
614+ $ qb ->expr ()->orX (
615+ $ qb ->expr ()->gt ('c.creation_timestamp ' , 'm.marker_datetime ' ),
616+ $ qb ->expr ()->isNull ('m.marker_datetime ' )
617+ )
618+ )
619+ )->groupBy ('f.fileid ' );
605620
606621 $ resultStatement = $ query ->execute ();
607622
0 commit comments