/** * Update an existing resource * * @param string $id $pageName * @param array $data $roles * * @return mixed */ public function update($id, $data) { $this->aclDataService = $this->getServiceLocator()->get('RcmUser\\Acl\\AclDataService'); $this->resourceProvider = $this->getServiceLocator()->get('Rcm\\Acl\\ResourceProvider'); /** @var \Doctrine\ORM\EntityManagerInterface $entityManager */ $entityManager = $this->getServiceLocator()->get('Doctrine\\ORM\\EntityManager'); $this->pageRepo = $entityManager->getRepository('\\Rcm\\Entity\\Page'); if (!is_array($data)) { $this->getResponse()->setStatusCode(Response::STATUS_CODE_400); return $this->getResponse(); } /** @var \Rcm\Entity\Site $currentSite */ $currentSite = $this->getServiceLocator()->get('Rcm\\Service\\CurrentSite'); if (is_numeric($data['siteId']) && $currentSite->getSiteId() == $data['siteId']) { $siteId = $data['siteId']; } else { $this->getResponse()->setStatusCode(Response::STATUS_CODE_400); return $this->getResponse(); } if (is_string($data['pageName'])) { $pageName = $data['pageName']; } else { $this->getResponse()->setStatusCode(Response::STATUS_CODE_400); return $this->getResponse(); } if (is_string($data['pageType']) && strlen($data['pageType']) == '1') { $pageType = $data['pageType']; } else { $this->getResponse()->setStatusCode(Response::STATUS_CODE_400); return $this->getResponse(); } if (is_array($data['selectedRoles'])) { $selectedRoles = $data['selectedRoles']; } else { $this->getResponse()->setStatusCode(Response::STATUS_CODE_400); return $this->getResponse(); } //CREATE RESOURCE ID $resourceId = 'sites.' . $siteId . '.pages.' . 'n' . '.' . $pageName; //ACCESS CHECK if (!$this->rcmIsAllowed($resourceId, 'edit') && !$this->isAllowed('pages', 'edit')) { $this->getResponse()->setStatusCode(Response::STATUS_CODE_401); return $this->getResponse(); } //IS PAGE VALID? $validPage = $this->pageRepo->isValid($currentSite, $pageName, $pageType); if (!$validPage) { $this->getResponse()->setStatusCode(Response::STATUS_CODE_404); return $this->getResponse(); } if (!$this->isValidResourceId($resourceId)) { $this->getResponse()->setStatusCode(Response::STATUS_CODE_400); return $this->getResponse(); } //DELETE ALL PERMISSIONS $deleteAllPermissions = $this->deletePermissions($resourceId); if (!$deleteAllPermissions) { $this->getResponse()->setStatusCode(Response::STATUS_CODE_400); return $this->getResponse(); } $newRoles = $this->addPermissions($selectedRoles, $resourceId); return new JsonModel($newRoles); }