/** * @return HttpResponse * @throws CMSException */ public function getAjaxSettingsBox() { $pageModel = new PageModel($this->db); $cmsPage = $pageModel->getPageByID($this->route->getParam(1)); $moduleModel = new ModuleModel($this->db); $elementInstance = $moduleModel->getElementInstanceByID($this->route->getParam(0), $cmsPage, false, false); if ($elementInstance instanceof CmsElementSettingsLoadable === false) { return $this->generateResponse(404, 'No configurable module'); } try { /** @var CmsElementSettingsLoadable $elementInstance */ $res = $elementInstance->generateConfigBox($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 * @throws HttpException * @throws \Exception */ public function restoreElementAjax() { list($elementType, $elementID, $elementPageID) = explode('-', $this->httpRequest->getVar('module', 'strip_tags')); $revisionFile = $this->httpRequest->getVar('revision', 'strip_tags'); $cmsPage = $this->pageModel->getPageByID($elementPageID); $moduleModel = new ModuleModel($this->db); $modInstance = $moduleModel->getElementInstanceByID($elementID, $cmsPage); try { $this->db->setListenersMute(true); $this->db->beginTransaction(); $revisionControl = new RevisionControl($this->db); $revisionControl->restoreFromFile($revisionFile); $fileNameParts = explode('.', StringUtils::afterLast($revisionFile, '/')); $this->updateElementRevision($modInstance, $fileNameParts[2]); $this->db->commit(); $this->db->setListenersMute(false); } catch (\Exception $e) { $this->db->setListenersMute(false); $this->db->rollBack(); $this->logger->error('Could not restore element ' . $e->getMessage()); return new HttpResponse(500, 'Could not restore element: ' . $e->getMessage()); } // RENDER ELEMENT AGAIN, SEND BACK if ($modInstance instanceof CmsElementSettingsLoadable) { /** @var CmsElement $modInstance */ $moduleModel->reloadSettings($modInstance, $cmsPage); } $referrerPath = StringUtils::beforeFirst($this->httpRequest->getVar('referrer', 'strip_tags'), '?'); $httpRequestFrontend = clone $this->httpRequest; $httpRequestFrontend->setPath($referrerPath); $httpRequestFrontend->setRequestMethod('GET'); $frontendController = new FrontendController($this->core, $httpRequestFrontend, $this->route); $frontendController->deliverCMSPage(); // @TODO render and replace parent module of this one $newModuleHtml = $modInstance->render($frontendController, $this->moduleView); return new HttpResponse(200, $newModuleHtml); }