entityManager = $entityManager; $this->acl = $acl; } /** * @throws Forbidden * @throws Error * @throws NotFound */ public function moveUp(string $id): void { /** @var ?GroupEmailFolder $entity */ $entity = $this->entityManager->getEntityById(GroupEmailFolder::ENTITY_TYPE, $id); if (!$entity) { throw new NotFound(); } if (!$this->acl->checkEntityEdit($entity)) { throw new Forbidden(); } $currentIndex = $entity->getOrder(); if (!is_int($currentIndex)) { throw new Error(); } $previousEntity = $this->entityManager ->getRDBRepositoryByClass(GroupEmailFolder::class) ->where([ 'order<' => $currentIndex, ]) ->order('order', true) ->findOne(); if (!$previousEntity) { return; } $entity->set('order', $previousEntity->getOrder()); $previousEntity->set('order', $currentIndex); $this->entityManager->saveEntity($entity); $this->entityManager->saveEntity($previousEntity); } /** * @throws Forbidden * @throws NotFound * @throws Error */ public function moveDown(string $id): void { /** @var ?GroupEmailFolder $entity */ $entity = $this->entityManager->getEntityById(GroupEmailFolder::ENTITY_TYPE, $id); if (!$entity) { throw new NotFound(); } if (!$this->acl->checkEntityEdit($entity)) { throw new Forbidden(); } $currentIndex = $entity->getOrder(); if (!is_int($currentIndex)) { throw new Error(); } $nextEntity = $this->entityManager ->getRDBRepositoryByClass(GroupEmailFolder::class) ->where([ 'order>' => $currentIndex, ]) ->order('order', false) ->findOne(); if (!$nextEntity) { return; } $entity->set('order', $nextEntity->getOrder()); $nextEntity->set('order', $currentIndex); $this->entityManager->saveEntity($entity); $this->entityManager->saveEntity($nextEntity); } }