/**
  * 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);
 }