예제 #1
0
 /**
  * @return HttpResponse
  */
 public function getAjaxRevisionControlBox()
 {
     $pageModel = new PageModel($this->db);
     $cmsPage = $pageModel->getPageByID($this->route->getParam(1));
     $elementModel = new ElementModel($this->db);
     $elementTree = $elementModel->getElementTree($cmsPage);
     $elementInstance = $elementModel->findElementIDInTree($elementTree, $this->route->getParam(0));
     try {
         $res = $elementInstance->generateRevisionBox($this, $cmsPage->getID());
     } catch (PHPException $e) {
         return $this->generateResponse(500, '<p><b>PHP Error:</b> ' . $e->getMessage() . ' in ' . $e->getFile() . ' (Line: ' . $e->getLine() . ')</p><pre>' . $e->getTraceAsString() . '</pre>');
     } catch (\Exception $e) {
         return $this->generateResponse(500, '<p>' . $e->getMessage() . '</p>');
     }
     return $this->generateResponse(200, $res);
 }
예제 #2
0
 /**
  * @return HttpResponse
  * @throws CMSException if element can not be found
  * @throws \Exception
  * @throws HttpException
  */
 public function deleteModuleAjax()
 {
     list($elementType, $elementID, $pageID) = explode('-', $this->httpRequest->getVar('module'));
     $referrerPath = StringUtils::beforeFirst($this->httpRequest->getVar('referrer', 'strip_tags'), '?');
     $html = null;
     /** @var HttpRequest $httpRequestFrontend */
     $httpRequestFrontend = clone $this->httpRequest;
     $httpRequestFrontend->setPath($referrerPath);
     $httpRequestFrontend->setRequestMethod('GET');
     $matchedRoutes = RouteUtils::matchRoutesAgainstPath($this->core->getSettings()->core->routes, $httpRequestFrontend);
     $matchedRoute = current($matchedRoutes);
     $frontendController = new FrontendController($this->core, $httpRequestFrontend, $matchedRoute);
     // Check if you use the site in preview mode or real
     if ($matchedRoute->id == 'cms-site-preview') {
         preg_match($matchedRoute->pattern, $referrerPath, $res);
         $frontendController->getRoute()->setParams(array(0 => $res[1]));
         $frontendController->deliverPreviewCMSPage();
     } else {
         $frontendController->deliverCMSPage();
     }
     $cmsPage = $this->pageModel->getPageByID($pageID);
     $frontendController->setCmsPage($cmsPage);
     $elementModel = new ElementModel($this->db);
     $pageElements = $elementModel->getElementTree($cmsPage);
     $elementToDeleteInstance = $elementModel->findElementIDInTree($pageElements, $elementID);
     if ($elementToDeleteInstance === null) {
         throw new CMSException('Could not find module to delete: #' . $elementID);
     }
     $parentElement = $elementToDeleteInstance->getParentElement();
     try {
         // Delete element
         $this->db->beginTransaction($elementToDeleteInstance->getIdentifier() . '.' . $elementToDeleteInstance->getID() . '-' . $elementToDeleteInstance->getPageID() . '.' . date('YmdHis') . '.delete');
         $elementToDeleteInstance->remove($this->db);
         if ($parentElement instanceof LayoutElement) {
             $parentElement->removedChildElement($this->db, $elementToDeleteInstance, $pageID);
         }
         $this->updatePage($cmsPage);
         // Reload page elements
         $pageElements = $elementModel->getElementTree($cmsPage);
         $parentElement = $elementModel->findElementIDInTree($pageElements, $parentElement->getID());
         // Render new parent element
         $html = $parentElement->render($frontendController, $this->moduleView);
         $this->db->commit();
     } catch (\Exception $e) {
         $this->db->rollBack();
         $this->logger->error('Could not delete module', $e);
         return new HttpResponse(500, 'Could not delete module: ' . $e->getMessage(), array('Content-Type' => 'text/html; charset=utf-8', 'Content-Language' => $this->getLocaleHandler()->getLanguage()));
     }
     return new HttpResponse(200, $html, array('Content-Type' => 'text/html; charset=utf-8', 'Content-Language' => $this->getLocaleHandler()->getLanguage()));
 }