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