%PDF- %PDF-
Direktori : /www/varak.net/nextcloud.varak.net/apps_old/apps/cospend/lib/Service/ |
Current File : //www/varak.net/nextcloud.varak.net/apps_old/apps/cospend/lib/Service/UserService.php |
<?php /** * Nextcloud - cospend * * This file is licensed under the Affero General Public License version 3 or * later. See the COPYING file. * * @author Julien Veyssier * @copyright Julien Veyssier 2019 */ namespace OCA\Cospend\Service; use OCA\Cospend\AppInfo\Application; use OCA\Cospend\Db\ProjectMapper; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IDBConnection; use OCP\IGroupManager; class UserService { public function __construct( private ProjectMapper $projectMapper, private IGroupManager $groupManager, private IDBConnection $dbconnection ) { } public function findUsers($projectid): array { $userIds = []; // get owner with mapper $proj = $this->projectMapper->find($projectid); array_push($userIds, $proj->getUserid()); // get user shares from project id $qb = $this->dbconnection->getQueryBuilder(); $qb->select('userid') ->from('cospend_shares', 's') ->where( $qb->expr()->eq('type', $qb->createNamedParameter(Application::SHARE_TYPE_USER, IQueryBuilder::PARAM_STR)) ) ->andWhere( $qb->expr()->eq('projectid', $qb->createNamedParameter($projectid, IQueryBuilder::PARAM_STR)) ); $req = $qb->executeQuery(); while ($row = $req->fetch()) { if (!in_array($row['userid'], $userIds)) { array_push($userIds, $row['userid']); } } $req->closeCursor(); $qb = $qb->resetQueryParts(); // get group shares from project id $qb->select('userid') ->from('cospend_shares', 's') ->where( $qb->expr()->eq('type', $qb->createNamedParameter(Application::SHARE_TYPE_GROUP, IQueryBuilder::PARAM_STR)) ) ->andWhere( $qb->expr()->eq('projectid', $qb->createNamedParameter($projectid, IQueryBuilder::PARAM_STR)) ); $req = $qb->executeQuery(); /** @var string[] $groupIds */ $groupIds = []; while ($row = $req->fetch()) { $groupIds[] = (string) $row['userid']; } $req->closeCursor(); $qb->resetQueryParts(); // get users of groups foreach ($groupIds as $gid) { $group = $this->groupManager->get($gid); if ($group !== null) { $groupUsers = $group->getUsers(); foreach ($groupUsers as $user) { $uid = $user->getUID(); if (!in_array($uid, $userIds)) { array_push($userIds, $uid); } } } } return $userIds; } }