entityManager = $entityManager; $this->user = $user; $this->config = $config; $this->configWriter = $configWriter; } /** * @return void * @throws Forbidden */ protected function processAccessCheck() { if (!$this->user->isAdmin()) { throw new Forbidden(); } } /** * @throws Forbidden * @throws NotFound */ public function read(string $id): Entity { $this->processAccessCheck(); $entity = $this->entityManager->getEntity('Integration', $id); if (!$entity) { throw new NotFound(); } return $entity; } /** * @throws Forbidden * @throws NotFound */ public function update(string $id, stdClass $data): Entity { $this->processAccessCheck(); $entity = $this->entityManager->getEntity('Integration', $id); if (!$entity) { throw new NotFound(); } $entity->set($data); $this->entityManager->saveEntity($entity); $integrationsConfigData = $this->config->get('integrations') ?? (object) []; if (!($integrationsConfigData instanceof stdClass)) { $integrationsConfigData = (object) []; } $integrationName = $id; $integrationsConfigData->$integrationName = $entity->get('enabled'); $this->configWriter->set('integrations', $integrationsConfigData); $this->configWriter->save(); return $entity; } }