2020-04-26 11:36:41 +02:00
< ? php
2020-06-19 09:28:58 +02:00
2020-04-26 11:36:41 +02:00
namespace OCA\BigBlueButton\Db ;
use OCP\AppFramework\Db\DoesNotExistException ;
use OCP\AppFramework\Db\QBMapper ;
use OCP\DB\QueryBuilder\IQueryBuilder ;
use OCP\IDBConnection ;
2024-10-25 16:57:57 +02:00
/**
* @ template - extends QBMapper < Room >
*/
2020-06-19 09:28:58 +02:00
class RoomMapper extends QBMapper {
public function __construct ( IDBConnection $db ) {
2020-04-26 11:36:41 +02:00
parent :: __construct ( $db , 'bbb_rooms' , Room :: class );
}
2024-05-14 11:15:02 +02:00
private function joinShares ( IQueryBuilder $qb ) : IQueryBuilder {
$qb -> select ( 'r.*' )
-> from ( $this -> tableName , 'r' )
-> leftJoin ( 'r' , 'bbb_room_shares' , 's' , $qb -> expr () -> eq ( 'r.id' , 's.room_id' ))
-> addSelect ( $qb -> createFunction ( 'count(case when `s`.`permission` IN (' .
RoomShare :: PERMISSION_ADMIN . ',' . RoomShare :: PERMISSION_MODERATOR . ',' . RoomShare :: PERMISSION_USER
. ') then 1 else null end) as shared' ));
return $qb ;
}
2020-04-26 11:36:41 +02:00
/**
* @ throws \OCP\AppFramework\Db\MultipleObjectsReturnedException
* @ throws DoesNotExistException
*/
2020-06-19 09:28:58 +02:00
public function find ( int $id ) : Room {
2020-04-26 11:36:41 +02:00
/* @var $qb IQueryBuilder */
$qb = $this -> db -> getQueryBuilder ();
2024-05-14 11:15:02 +02:00
$this -> joinShares ( $qb )
2020-09-08 17:01:50 +02:00
-> where ( $qb -> expr () -> eq ( 'r.id' , $qb -> createNamedParameter ( $id , IQueryBuilder :: PARAM_INT )))
-> groupBy ( 'r.id' );
;
2020-06-19 10:49:40 +02:00
/** @var Room */
2020-04-26 11:36:41 +02:00
return $this -> findEntity ( $qb );
}
/**
* @ throws \OCP\AppFramework\Db\MultipleObjectsReturnedException
* @ throws DoesNotExistException
*/
2020-06-19 09:28:58 +02:00
public function findByUid ( string $uid ) : Room {
2020-04-26 11:36:41 +02:00
/* @var $qb IQueryBuilder */
$qb = $this -> db -> getQueryBuilder ();
2024-05-14 11:15:02 +02:00
$this -> joinShares ( $qb )
2020-09-08 17:01:50 +02:00
-> where ( $qb -> expr () -> eq ( 'r.uid' , $qb -> createNamedParameter ( $uid )))
-> groupBy ( 'r.id' );
;
2020-06-19 10:49:40 +02:00
/** @var Room */
2020-04-26 11:36:41 +02:00
return $this -> findEntity ( $qb );
}
2021-04-18 19:30:44 +02:00
/**
* @ return array < Room >
*/
public function findByUserId ( string $userId ) : array {
/* @var $qb IQueryBuilder */
$qb = $this -> db -> getQueryBuilder ();
$qb -> select ( '*' )
-> from ( $this -> tableName , 'r' )
-> where ( $qb -> expr () -> eq ( 'r.user_id' , $qb -> createNamedParameter ( $userId )));
/** @var array<Room> */
return $this -> findEntities ( $qb );
}
2020-04-26 11:36:41 +02:00
/**
2020-06-19 10:49:40 +02:00
* @ return array < Room >
2020-04-26 11:36:41 +02:00
*/
2020-08-29 13:20:28 +02:00
public function findAll ( string $userId , array $groupIds , array $circleIds ) : array {
2020-04-26 11:36:41 +02:00
/* @var $qb IQueryBuilder */
$qb = $this -> db -> getQueryBuilder ();
2024-05-14 11:15:02 +02:00
$this -> joinShares ( $qb )
2024-05-15 17:26:56 +02:00
-> addSelect ( $qb -> createFunction ( 'min(case when ' . $qb -> expr () -> eq ( 'r.user_id' , $qb -> createNamedParameter ( $userId )) . ' then ' . RoomShare :: PERMISSION_ADMIN . ' else `s`.`permission` end) as permission' ))
2020-06-17 10:56:28 +02:00
-> where (
$qb -> expr () -> orX (
$qb -> expr () -> eq ( 'r.user_id' , $qb -> createNamedParameter ( $userId )),
$qb -> expr () -> andX (
$qb -> expr () -> eq ( 's.share_type' , $qb -> createNamedParameter ( RoomShare :: SHARE_TYPE_USER , IQueryBuilder :: PARAM_INT )),
$qb -> expr () -> eq ( 's.share_with' , $qb -> createNamedParameter ( $userId ))
),
$qb -> expr () -> andX (
$qb -> expr () -> eq ( 's.share_type' , $qb -> createNamedParameter ( RoomShare :: SHARE_TYPE_GROUP , IQueryBuilder :: PARAM_INT )),
2020-06-18 11:11:57 +02:00
$qb -> expr () -> in ( 's.share_with' , $qb -> createNamedParameter ( $groupIds , IQueryBuilder :: PARAM_STR_ARRAY ))
2020-08-29 13:20:28 +02:00
),
$qb -> expr () -> andX (
$qb -> expr () -> eq ( 's.share_type' , $qb -> createNamedParameter ( RoomShare :: SHARE_TYPE_CIRCLE , IQueryBuilder :: PARAM_INT )),
$qb -> expr () -> in ( 's.share_with' , $qb -> createNamedParameter ( $circleIds , IQueryBuilder :: PARAM_STR_ARRAY ))
2020-06-17 10:56:28 +02:00
)
)
)
-> groupBy ( 'r.id' );
2020-06-19 10:49:40 +02:00
/** @var array<Room> */
2020-04-26 11:36:41 +02:00
return $this -> findEntities ( $qb );
}
2024-05-14 11:15:02 +02:00
2022-10-16 14:11:28 +02:00
/**
* @ return array < Room >
*/
public function search ( string $userId , string $query ) : array {
/* @var $qb IQueryBuilder */
$qb = $this -> db -> getQueryBuilder ();
$qb -> select ( '*' )
-> from ( $this -> tableName , 'r' )
-> where ( $qb -> expr () -> eq ( 'r.user_id' , $qb -> createNamedParameter ( $userId )))
-> andwhere ( $qb -> expr () -> ILike ( 'name' ,
2024-04-26 15:40:55 +02:00
$qb -> createNamedParameter ( '%' . $this -> db -> escapeLikeParameter ( $query ) . '%' , IQueryBuilder :: PARAM_STR ),
IQueryBuilder :: PARAM_STR ));
2022-10-16 14:11:28 +02:00
/** @var array<Room> */
return $this -> findEntities ( $qb );
}
2020-04-26 11:36:41 +02:00
}