user = $user; $this->dataManager = $dataManager; $this->fieldManager = $fieldManager; $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->fieldManager->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(); } $fieldManager = $this->fieldManager; $fieldManager->create($scope, $name, get_object_vars($data)); try { $this->dataManager->rebuild($scope); } catch (Error $e) { $fieldManager->delete($scope, $data->name); throw new Error($e->getMessage()); } return $fieldManager->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(); } $fieldManager = $this->fieldManager; $fieldManager->update($scope, $name, get_object_vars($data)); if ($fieldManager->isChanged()) { $this->dataManager->rebuild($scope); } else { $this->dataManager->clearCache(); } return $fieldManager->read($scope, $name); } public function deleteActionDelete(Request $request) { $scope = $request->getRouteParam('scope'); $name = $request->getRouteParam('name'); if (!$scope || !$name) { throw new BadRequest(); } $result = $this->fieldManager->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->fieldManager->resetToDefault($data->scope, $data->name); $this->dataManager->clearCache(); $this->dataManager->rebuildMetadata(); return true; } }