user->isAdmin() || !$entity->get('assignedUserId')) { $entity->set('assignedUserId', $this->user->getId()); } if (!$this->acl->check($entity, 'edit')) { throw new Forbidden(); } } public function moveUp(string $id) { $entity = $this->entityManager->getEntity('EmailFolder', $id); if (!$entity) { throw new NotFound(); } if (!$this->acl->check($entity, 'edit')) { throw new Forbidden(); } $currentIndex = $entity->get('order'); if (!is_int($currentIndex)) { throw new Error(); } $previousEntity = $this->getRepository() ->where([ 'order<' => $currentIndex, 'assignedUserId' => $entity->get('assignedUserId'), ]) ->order('order', true) ->findOne(); if (!$previousEntity) { return; } $entity->set('order', $previousEntity->get('order')); $previousEntity->set('order', $currentIndex); $this->entityManager->saveEntity($entity); $this->entityManager->saveEntity($previousEntity); } public function moveDown(string $id) { $entity = $this->entityManager->getEntity('EmailFolder', $id); if (!$entity) { throw new NotFound(); } if (!$this->acl->check($entity, 'edit')) { throw new Forbidden(); } $currentIndex = $entity->get('order'); if (!is_int($currentIndex)) { throw new Error(); } $nextEntity = $this->getRepository() ->where([ 'order>' => $currentIndex, 'assignedUserId' => $entity->get('assignedUserId'), ]) ->order('order', false) ->findOne(); if (!$nextEntity) { return; } $entity->set('order', $nextEntity->get('order')); $nextEntity->set('order', $currentIndex); $this->entityManager->saveEntity($entity); $this->entityManager->saveEntity($nextEntity); } public function listAll() { $limit = $this->config->get('emailFolderMaxCount', 100); $folderList = $this->getRepository() ->where([ 'assignedUserId' => $this->user->getId() ]) ->order('order') ->limit(0, $limit) ->find(); $list = new EntityCollection(); foreach ($this->systemFolderList as $name) { $folder = $this->entityManager->getEntity('EmailFolder'); $folder->set('name', $this->language->translate($name, 'presetFilters', 'Email')); $folder->set('id', $name); $list[] = $folder; } foreach ($folderList as $folder) { $list[] = $folder; } foreach ($this->systemFolderEndList as $name) { $folder = $this->entityManager->getEntity('EmailFolder'); $folder->set('name', $this->language->translate($name, 'presetFilters', 'Email')); $folder->set('id', $name); $list[] = $folder; } $finalList = []; foreach ($list as $item) { $attributes = $item->getValues(); $attributes['childCollection'] = []; $finalList[] = $attributes; } return [ 'list' => $finalList ]; } }