/** * Handle HMVC request * @param Request $request * @param array $options * @param bool $subrequest * @return Response\Json|Response\Layout|Response\PageNotFound|Response\Redirect|string * @throws Exception */ public function handleRequest(Request $request, $options = array(), $subrequest = true) { \Ip\ServiceLocator::addRequest($request); $rawResponse = $this->_handleOnlyRequest($request, $options, $subrequest); if (!empty($options['returnRawResponse'])) { if ($subrequest) { \Ip\ServiceLocator::removeRequest(); } return $rawResponse; } if (empty($rawResponse) || is_string($rawResponse) || $rawResponse instanceof \Ip\View) { if ($rawResponse instanceof \Ip\View) { $rawResponse = $rawResponse->render(); } if (empty($rawResponse)) { $rawResponse = ''; } $response = \Ip\ServiceLocator::response(); $response->setContent($rawResponse); } elseif ($rawResponse instanceof \Ip\Response) { \Ip\ServiceLocator::setResponse($rawResponse); if ($subrequest) { \Ip\ServiceLocator::removeRequest(); } return $rawResponse; } elseif ($rawResponse === null) { $response = \Ip\ServiceLocator::response(); } else { \Ip\ServiceLocator::removeRequest(); throw new \Ip\Exception('Unknown response'); } if ($subrequest) { \Ip\ServiceLocator::removeRequest(); } return $response; }
$translator->addTranslationFilePattern('json', $trOverrideDir, 'Install-%s.json', 'Install'); $request = new \Plugin\Install\Request(); $request->setQuery($_GET); $request->setPost($_POST); $request->setServer($_SERVER); $request->setRequest($_REQUEST); \Ip\ServiceLocator::addRequest($request); $language = new \Ip\Language(null, $options['translationsLanguageCode'], null, null, null, 0, 'ltr'); ipContent()->_setCurrentLanguage($language); \Ip\ServiceLocator::dispatcher()->_bindInstallEvents(); if ($request->isGet()) { $controller = new \Plugin\Install\PublicController(); if (!empty($_GET['pa']) && $_GET['pa'] == 'Install.testSessions') { $response = $controller->testSessions(); } else { $response = $controller->index(); } } elseif ($request->isPost()) { $route = Ip\Internal\Core\Job::ipRouteAction_20(array('request' => $request)); if (!$route || $route['plugin'] != 'Install' || $route['controller'] != 'PublicController') { $response = new \Ip\Response\PageNotFound(); } else { $controller = new \Plugin\Install\PublicController(); $response = $controller->{$route['action']}(); } } else { exit('HTTP Method not supported.'); } \Ip\ServiceLocator::removeRequest(); \Ip\ServiceLocator::setResponse($response); $application->handleResponse($response);