public function testSetTemplate() { $o = new testView(); $oMap = new ClassMap(__FILE__, '\\A.*\\Z'); $oMap->setTemplatePath(VSC_FIXTURE_PATH . 'templates/'); $oMap->setTemplate('main.tpl.php'); $o->setMap($oMap); $this->assertEquals($oMap->getTemplate(), $o->getTemplate()); $this->assertEquals($oMap->getTemplatePath(), $o->getTemplatePath()); }
/** * @param string $sRegex * @param string $sPath * @throws ExceptionSitemap * @returns MappingA */ protected function addClassMap($sRegex, $sPath) { $oModuleMap = $this->getCurrentModuleMap(); $oNewMap = null; if (MappingA::isValid($oModuleMap)) { $sRegex = $oModuleMap->getRegex() . $sRegex; } if (!array_key_exists($sRegex, $this->aMaps)) { $oNewMap = new ClassMap($sPath, $sRegex); if (MappingA::isValid($oModuleMap)) { $oNewMap->merge($oModuleMap); $oNewMap->setModuleMap($oModuleMap); } $this->aMaps[$sRegex] = $oNewMap; } return $oNewMap; }
public function testGetTitleFromModel() { $o = new testView(); try { $this->assertEmpty($o->getTitle()); } catch (\Exception $e) { // catching a model exception } $oMap = new ClassMap(__FILE__, '\\A.*\\Z'); $oMap->setTemplatePath(VSC_FIXTURE_PATH . 'templates/'); $oMap->setTemplate('main.tpl.php'); $o->setMap($oMap); $f = new EmptyModel(); $o->setModel($f); $this->assertEmpty($o->getTitle()); $t = uniqid('test:'); $f->setPageTitle($t); $this->assertEquals($t, $o->getTitle()); }
public function testGetOutput() { $o = new testView(); try { $o->getOutput(); } catch (\Exception $e) { $this->assertInstanceOf(Exception::class, $e); $this->assertInstanceOf(ExceptionView::class, $e); } $t = 'main.tpl.php'; $oMap = new ClassMap(__FILE__, '\\A.*\\Z'); $oMap->setTemplatePath(VSC_FIXTURE_PATH . 'templates/'); $oMap->setTemplate($t); $o->setMap($oMap); $f = new ModelFixture(); $o->setModel($f); $output = $o->getOutput(); $this->assertEquals(file_get_contents(VSC_FIXTURE_PATH . 'templates/' . $t), $output); }
/** * * @param string $sRegex * @param string $sPath * @throws ExceptionController * @throws ExceptionSitemap * @returns ControllerMap */ public function mapController($sRegex, $sPath) { if (!$sRegex) { throw new ExceptionSitemap('An URI must be present.'); } $sKey = $sRegex; if (array_key_exists($sKey, $this->aControllerMaps)) { unset($this->aControllerMaps[$sKey]); } if (class_exists($sPath)) { // instead of a path we have a namespace $oNewMap = new ClassMap($sPath, $sKey); $oNewMap->setModuleMap($this); $oNewMap->merge($this); $this->aControllerMaps[$sKey] = $oNewMap; return $oNewMap; } else { $sPath = str_replace(array('/', '\\'), array(DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR), $sPath); if (!SiteMapA::isValidObjectPath($sPath)) { $sPath = $this->getModulePath() . $sPath; } if (SiteMapA::isValidObjectPath($sPath)) { $oNewMap = new ControllerMap($sPath, $sKey); $oNewMap->setModuleMap($this); $oNewMap->merge($this); $this->aControllerMaps[$sKey] = $oNewMap; return $oNewMap; } else { throw new ExceptionController('Controller [' . $sPath . '] is invalid.'); } } }
/** * (non-PHPdoc) * @see lib/presentation/dispatchers/vscDispatcherA#getProcessController() * @throws ExceptionSitemap * @throws ExceptionResponseError * @returns ProcessorA */ public function getProcessController() { if (!ProcessorA::isValid($this->oProcessor)) { $oProcessorMap = $this->getCurrentProcessorMap(); if (!ProcessorMap::isValid($oProcessorMap) && !ClassMap::isValid($oProcessorMap)) { // this mainly means nothing was matched to our url, or no mappings exist, so we're falling back to 404 $oProcessorMap = new ProcessorMap(NotFoundProcessor::class, '.*'); $oProcessorMap->setTemplatePath(VSC_RES_PATH . 'templates'); $oProcessorMap->setTemplate('404.php'); } $sPath = $oProcessorMap->getPath(); try { $sProcessorName = null; if ($this->getSiteMap()->isValidObjectPath($sPath) || stristr(basename($sPath), '.') === false && !is_file($sPath)) { // dirty import of the module folder and important subfolders - @FIXME $sModuleName = $oProcessorMap->getModuleName(); if (stristr(basename($sPath), '.') === false && !is_file($sPath)) { // namespaced class name $sProcessorName = $sPath; } elseif (is_file($sPath)) { try { include $sPath; } catch (\Exception $e) { \vsc\_e($e); } $sProcessorName = SiteMapA::getClassName($sPath); } try { if (class_exists($sProcessorName)) { $this->oProcessor = new $sProcessorName(); } else { $this->oProcessor = new NotFoundProcessor(); } } catch (\Exception $e) { $this->oProcessor = new ErrorProcessor($e); } } elseif ($this->getSiteMap()->isValidStaticPath($sPath)) { // static stuff $this->oProcessor = new StaticFileProcessor(); $this->oProcessor->setFilePath($sPath); } /*else { $this->oProcessor = new NotFoundProcessor(); }*/ if (ProcessorA::isValid($this->oProcessor)) { if (!(ErrorProcessor::isValid($this->oProcessor) && MappingA::isValid($this->oProcessor->getMap()))) { // @TODO: this should be a MappingA->merge() when the processor already has a map $this->oProcessor->setMap($oProcessorMap); } // setting the variables defined in the processor into the tainted variables /** @var RwHttpRequest $oRawRequest */ $oRawRequest = $this->getRequest(); if (RwHttpRequest::isValid($oRawRequest)) { $oRawRequest->setTaintedVars($this->oProcessor->getLocalVars()); // FIXME!!! } } else { // \vsc\d($sPath, $this->oProcessor); // \vsc\d($this->oProcessor); // broken URL throw new ExceptionResponseError('Broken URL', 400); } } catch (ExceptionResponseRedirect $e) { // get the response $oResponse = vsc::getEnv()->getHttpResponse(); $oResponse->setLocation($e->getLocation()); ob_end_flush(); $oResponse->outputHeaders(); } } return $this->oProcessor; }
public function testBasicMaps() { $o = new ClassMap(ProcessorFixture::class, '.*'); $p = new ProcessorFixture(); $this->assertTrue($o->maps($p)); }
/** * @param HttpRequestA $oRequest * @param ProcessorA $oProcessor * @throws ExceptionPath * @throws ExceptionResponse * @throws ExceptionView * @returns HttpResponseA */ public function getResponse(HttpRequestA $oRequest, $oProcessor = null) { $oResponse = vsc::getEnv()->getHttpResponse(); $oModel = null; /* @var ControllerMap $oMyMap */ $oMyMap = $this->getMap(); if (ProcessorA::isValid($oProcessor)) { try { $oProcessor->init(); $oModel = $oProcessor->handleRequest($oRequest); } catch (ExceptionResponseRedirect $e) { $oResponse->setStatus($e->getRedirectCode()); $oResponse->setLocation($e->getLocation()); return $oResponse; } catch (\Exception $e) { // we had error in the controller // @todo make more error processors return $this->getErrorResponse($e, $oRequest); } } if ($oResponse->getStatus() == 0) { $oResponse->setStatus(HttpResponseType::OK); } // we didn't set any special view // this means that the developer needs to provide his own views $oView = $this->getView(); $oMap = null; if (ProcessorA::isValid($oProcessor)) { /* @var ProcessorMap $oMap */ $oMap = $oProcessor->getMap(); if (MappingA::isValid($oMap)) { if (MappingA::isValid($oMyMap)) { $oMap->merge($oMyMap); } $oProcessorResponse = $oMap->getResponse(); if (HttpResponseA::isValid($oProcessorResponse)) { $oResponse = $oProcessorResponse; } } // setting the processor map $oView->setMap($oMap); } try { if ((ProcessorMap::isValid($oMap) || ClassMap::isValid($oMap)) && !$oMap->isStatic() && !$oMyMap->isStatic() && (ControllerMap::isValid($oMyMap) || ClassMap::isValid($oMyMap))) { $oView->setMainTemplate($oMyMap->getMainTemplatePath() . $oView->getViewFolder() . DIRECTORY_SEPARATOR . $oMyMap->getMainTemplate()); } } catch (ExceptionPath $e) { // fallback to html5 // @todo verify main template path and main template exist $oView->setMainTemplate($oMyMap->getMainTemplatePath() . DIRECTORY_SEPARATOR . 'html5' . DIRECTORY_SEPARATOR . $oMyMap->getMainTemplate()); } if (!ModelA::isValid($oModel)) { $oModel = new EmptyModel(); if (!ProcessorMap::isValid($oMap) || $oMap->getTitle() == '') { $oModel->setPageTitle('Warning'); } $oModel->setPageContent('Warning: the processor didn\'t return a valid model. This is probably an error'); } $oView->setModel($oModel); $oResponse->setView($oView); if (MappingA::isValid($oMap)) { $aHeaders = $oMap->getHeaders(); if (count($aHeaders) > 0) { foreach ($aHeaders as $sName => $sHeader) { $oResponse->addHeader($sName, $sHeader); } } $iProcessorSetStatus = $oMap->getResponseStatus(); if (HttpResponseType::isValidStatus($iProcessorSetStatus)) { $oResponse->setStatus($iProcessorSetStatus); } } return $oResponse; }