user = $user; $this->dataManager = $dataManager; $this->fieldManagerTool = $fieldManagerTool; $this->checkControllerAccess(); } protected function checkControllerAccess() { if (!$this->user->isAdmin()) { throw new Forbidden(); } } public function getActionRead(Request $request) { $scope = $request->getRouteParam('scope'); $name = $request->getRouteParam('name'); if (!$scope || !$name) { throw new BadRequest(); } $data = $this->fieldManagerTool->read($scope, $name); if (!isset($data)) { throw new BadRequest(); } return $data; } public function postActionCreate(Request $request) { $data = $request->getParsedBody(); $scope = $request->getRouteParam('scope'); $name = $data->name ?? null; if (!$scope || !$name) { throw new BadRequest(); } $fieldManagerTool = $this->fieldManagerTool; $fieldManagerTool->create($scope, $name, get_object_vars($data)); try { $this->dataManager->rebuild($scope); } catch (Error $e) { $fieldManagerTool->delete($scope, $data->name); throw new Error($e->getMessage()); } return $fieldManagerTool->read($scope, $data->name); } public function patchActionUpdate(Request $request) { return $this->putActionUpdate($request); } public function putActionUpdate(Request $request) { $data = $request->getParsedBody(); $scope = $request->getRouteParam('scope'); $name = $request->getRouteParam('name'); if (!$scope || !$name) { throw new BadRequest(); } $fieldManagerTool = $this->fieldManagerTool; $fieldManagerTool->update($scope, $name, get_object_vars($data)); if ($fieldManagerTool->isChanged()) { $this->dataManager->rebuild($scope); } else { $this->dataManager->clearCache(); } return $fieldManagerTool->read($scope, $name); } public function deleteActionDelete(Request $request) { $scope = $request->getRouteParam('scope'); $name = $request->getRouteParam('name'); if (!$scope || !$name) { throw new BadRequest(); } $result = $this->fieldManagerTool->delete($scope, $name); $this->dataManager->rebuildMetadata(); return $result; } public function postActionResetToDefault(Request $request) { $data = $request->getParsedBody(); if (empty($data->scope) || empty($data->name)) { throw new BadRequest(); } $this->fieldManagerTool->resetToDefault($data->scope, $data->name); $this->dataManager->clearCache(); $this->dataManager->rebuildMetadata(); return true; } }