fix: Avoid undefined variable

Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
Julius Härtl
2023-12-05 16:53:54 +01:00
parent a31601d476
commit 5856c8b500
3 changed files with 32 additions and 44 deletions

View File

@@ -23,10 +23,10 @@
namespace OCA\Deck\Db; namespace OCA\Deck\Db;
use OC\Cache\CappedMemoryCache;
use OCA\Deck\Service\CirclesService; use OCA\Deck\Service\CirclesService;
use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Db\QBMapper; use OCP\AppFramework\Db\QBMapper;
use OCP\Cache\CappedMemoryCache;
use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IDBConnection; use OCP\IDBConnection;
use OCP\IGroupManager; use OCP\IGroupManager;
@@ -35,37 +35,22 @@ use Psr\Log\LoggerInterface;
/** @template-extends QBMapper<Board> */ /** @template-extends QBMapper<Board> */
class BoardMapper extends QBMapper implements IPermissionMapper { class BoardMapper extends QBMapper implements IPermissionMapper {
private $labelMapper;
private $aclMapper;
private $stackMapper;
private $userManager;
private $groupManager;
private $circlesService;
private $logger;
/** @var CappedMemoryCache<Board[]> */ /** @var CappedMemoryCache<Board[]> */
private $userBoardCache; private CappedMemoryCache $userBoardCache;
/** @var CappedMemoryCache<Board> */ /** @var CappedMemoryCache<Board> */
private $boardCache; private CappedMemoryCache $boardCache;
public function __construct( public function __construct(
IDBConnection $db, IDBConnection $db,
LabelMapper $labelMapper, private LabelMapper $labelMapper,
AclMapper $aclMapper, private AclMapper $aclMapper,
StackMapper $stackMapper, private StackMapper $stackMapper,
IUserManager $userManager, private IUserManager $userManager,
IGroupManager $groupManager, private IGroupManager $groupManager,
CirclesService $circlesService, private CirclesService $circlesService,
LoggerInterface $logger private LoggerInterface $logger
) { ) {
parent::__construct($db, 'deck_boards', Board::class); parent::__construct($db, 'deck_boards', Board::class);
$this->labelMapper = $labelMapper;
$this->aclMapper = $aclMapper;
$this->stackMapper = $stackMapper;
$this->userManager = $userManager;
$this->groupManager = $groupManager;
$this->circlesService = $circlesService;
$this->logger = $logger;
$this->userBoardCache = new CappedMemoryCache(); $this->userBoardCache = new CappedMemoryCache();
$this->boardCache = new CappedMemoryCache(); $this->boardCache = new CappedMemoryCache();
@@ -81,7 +66,8 @@ class BoardMapper extends QBMapper implements IPermissionMapper {
* @throws DoesNotExistException * @throws DoesNotExistException
*/ */
public function find(int $id, bool $withLabels = false, bool $withAcl = false, bool $allowDeleted = false): Board { public function find(int $id, bool $withLabels = false, bool $withAcl = false, bool $allowDeleted = false): Board {
if (!isset($this->boardCache[$id])) { $cacheKey = (string)$id;
if (!isset($this->boardCache[$cacheKey])) {
$qb = $this->db->getQueryBuilder(); $qb = $this->db->getQueryBuilder();
$deletedWhere = $allowDeleted ? $qb->expr()->gte('deleted_at', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)) : $qb->expr()->eq('deleted_at', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)); $deletedWhere = $allowDeleted ? $qb->expr()->gte('deleted_at', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)) : $qb->expr()->eq('deleted_at', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT));
$qb->select('*') $qb->select('*')
@@ -89,22 +75,22 @@ class BoardMapper extends QBMapper implements IPermissionMapper {
->where($qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT))) ->where($qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)))
->andWhere($deletedWhere) ->andWhere($deletedWhere)
->orderBy('id'); ->orderBy('id');
$this->boardCache[$id] = $this->findEntity($qb); $this->boardCache[(string)$id] = $this->findEntity($qb);
} }
// Add labels // Add labels
if ($withLabels && $this->boardCache[$id]->getLabels() === null) { if ($withLabels && $this->boardCache[$cacheKey]->getLabels() === null) {
$labels = $this->labelMapper->findAll($id); $labels = $this->labelMapper->findAll($id);
$this->boardCache[$id]->setLabels($labels); $this->boardCache[$cacheKey]->setLabels($labels);
} }
// Add acl // Add acl
if ($withAcl && $this->boardCache[$id]->getAcl() === null) { if ($withAcl && $this->boardCache[$cacheKey]->getAcl() === null) {
$acl = $this->aclMapper->findAll($id); $acl = $this->aclMapper->findAll($id);
$this->boardCache[$id]->setAcl($acl); $this->boardCache[$cacheKey]->setAcl($acl);
} }
return $this->boardCache[$id]; return $this->boardCache[$cacheKey];
} }
public function findBoardIds(string $userId): array { public function findBoardIds(string $userId): array {
@@ -464,8 +450,7 @@ class BoardMapper extends QBMapper implements IPermissionMapper {
} }
public function mapAcl(Acl &$acl) { public function mapAcl(Acl &$acl) {
$groupManager = $this->groupManager; $acl->resolveRelation('participant', function ($participant) use (&$acl) {
$acl->resolveRelation('participant', function ($participant) use (&$acl, &$userManager, &$groupManager) {
if ($acl->getType() === Acl::PERMISSION_TYPE_USER) { if ($acl->getType() === Acl::PERMISSION_TYPE_USER) {
if ($this->userManager->userExists($acl->getParticipant())) { if ($this->userManager->userExists($acl->getParticipant())) {
return new User($acl->getParticipant(), $this->userManager); return new User($acl->getParticipant(), $this->userManager);
@@ -474,7 +459,7 @@ class BoardMapper extends QBMapper implements IPermissionMapper {
return null; return null;
} }
if ($acl->getType() === Acl::PERMISSION_TYPE_GROUP) { if ($acl->getType() === Acl::PERMISSION_TYPE_GROUP) {
$group = $groupManager->get($participant); $group = $this->groupManager->get($participant);
if ($group !== null) { if ($group !== null) {
return new Group($group); return new Group($group);
} }

View File

@@ -55,6 +55,13 @@ class AssignmentMapperTest extends \Test\TestCase {
/** @var AssignmentService */ /** @var AssignmentService */
private $assignmentService; private $assignmentService;
/** @var Board */
private $board;
/** @var Card[] */
private $cards;
/** @var Stack[] */
private $stacks;
public static function setUpBeforeClass(): void { public static function setUpBeforeClass(): void {
parent::setUpBeforeClass(); parent::setUpBeforeClass();

View File

@@ -9,13 +9,9 @@ require_once __DIR__ . '/../../vendor/autoload.php';
class SessionContext implements Context { class SessionContext implements Context {
use RequestTrait; use RequestTrait;
/** @var ServerContext */ private ServerContext $serverContext;
private $serverContext; private BoardContext $boardContext;
private array $tokens = [];
/** @var BoardContext */
private $boardContext;
private $tokens = [];
/** @BeforeScenario */ /** @BeforeScenario */
public function gatherContexts(BeforeScenarioScope $scope) { public function gatherContexts(BeforeScenarioScope $scope) {
@@ -40,7 +36,7 @@ class SessionContext implements Context {
// store token // store token
$user = $this->serverContext->getCurrentUser(); $user = $this->serverContext->getCurrentUser();
$this->token[$user] = $res['ocs']['data']['token']; $this->tokens[$user] = $res['ocs']['data']['token'];
} }
/** /**
@@ -70,7 +66,7 @@ class SessionContext implements Context {
} }
$user = $this->serverContext->getCurrentUser(); $user = $this->serverContext->getCurrentUser();
$token = $this->token[$user]; $token = $this->tokens[$user];
Assert::assertNotEmpty($token, "no token for the user found"); Assert::assertNotEmpty($token, "no token for the user found");
$this->requestContext->sendOCSRequest('POST', '/apps/deck/api/v1.0/session/close', [ $this->requestContext->sendOCSRequest('POST', '/apps/deck/api/v1.0/session/close', [
'boardId' => $board['id'], 'boardId' => $board['id'],