. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Core\Controllers; use Espo\Core\Exceptions\Forbidden; use Espo\Core\Exceptions\BadRequest; use Espo\Core\Exceptions\Error; use Espo\Core\Exceptions\NotFound; use Espo\Core\ORM\Entity; use Espo\Services\RecordTree as Service; use Espo\Core\Api\Request; use stdClass; class RecordTree extends Record { /** * @var string */ public static $defaultAction = 'list'; /** * Get a category tree. * * @throws BadRequest * @throws Error * @throws Forbidden * @throws NotFound * @noinspection PhpUnused */ public function getActionListTree(Request $request): stdClass { if (method_exists($this, 'actionListTree')) { // For backward compatibility. return (object) $this->actionListTree($request->getRouteParams(), $request->getParsedBody(), $request); } $where = $request->getQueryParams()['where'] ?? null; $parentId = $request->getQueryParam('parentId'); $maxDepth = $request->getQueryParam('maxDepth'); $onlyNotEmpty = (bool) $request->getQueryParam('onlyNotEmpty'); if ($where !== null && !is_array($where)) { throw new BadRequest(); } if ($maxDepth !== null) { $maxDepth = (int) $maxDepth; } $collection = $this->getRecordTreeService()->getTree( $parentId, [ 'where' => $where, 'onlyNotEmpty' => $onlyNotEmpty, ], $maxDepth ); if (!$collection) { throw new Error(); } return (object) [ 'list' => $collection->getValueMapList(), 'path' => $this->getRecordTreeService()->getTreeItemPath($parentId), 'data' => $this->getRecordTreeService()->getCategoryData($parentId), ]; } /** * @return string[] * @throws Forbidden * @throws BadRequest * @noinspection PhpUnused */ public function getActionLastChildrenIdList(Request $request): array { if (!$this->acl->check($this->name, 'read')) { throw new Forbidden(); } $parentId = $request->getQueryParam('parentId'); return $this->getRecordTreeService()->getLastChildrenIdList($parentId); } /** * @return Service */ protected function getRecordTreeService(): Service { $service = $this->getRecordService(); assert($service instanceof Service); return $service; } }