public static function doJob($method, $uri, array $params) { if (XenForo_Application::isRegistered('_bdApi_disableBatch') && XenForo_Application::get('_bdApi_disableBatch')) { return array('_job_result' => 'error', '_job_error' => 'Batch running has been disabled.'); } $fc = self::getFc(); $request = new bdApi_Zend_Controller_Request_Http(bdApi_Data_Helper_Core::safeConvertApiUriToAbsoluteUri($uri, true)); $request->setMethod($method); foreach ($params as $key => $value) { $request->setParam($key, $value); } $fc->setRequest($request); // routing $routeMatch = $fc->getDependencies()->route($request); if (!$routeMatch or !$routeMatch->getControllerName()) { list($controllerName, $action) = $fc->getDependencies()->getNotFoundErrorRoute(); $routeMatch->setControllerName($controllerName); $routeMatch->setAction($action); } $response = $fc->dispatch($routeMatch); if ($response instanceof XenForo_ControllerResponse_Error) { return array('_job_result' => 'error', '_job_error' => $response->errorText); } elseif ($response instanceof XenForo_ControllerResponse_Exception) { return array('_job_result' => 'error', '_job_error' => $response->getMessage()); } elseif ($response instanceof XenForo_ControllerResponse_Message) { return array('_job_result' => 'message', '_job_message' => $response->message); } elseif ($response instanceof XenForo_ControllerResponse_View) { return array('_job_result' => 'ok', '_job_response' => $response); } throw new XenForo_Exception('Unexpected $response occurred.'); }
public function actionGetParseLink() { $link = $this->_input->filterSingle('link', XenForo_Input::STRING); $link = XenForo_Link::convertUriToAbsoluteUri($link, true); $fc = XenForo_Application::get('_bdApi_fc'); /* @var $dependencies bdApi_Dependencies */ $dependencies = $fc->getDependencies(); $request = new bdApi_Zend_Controller_Request_Http($link); $request->setBaseUrl(parse_url(XenForo_Application::getOptions()->get('boardUrl'), PHP_URL_PATH)); $routeMatch = $dependencies->routePublic($request); if (!$routeMatch or !$routeMatch->getControllerName()) { // link cannot be route return $this->_actionGetParseLink_getControllerResponseNop($link, false); } $controllerResponse = $this->_actionGetParseLink_getControllerResponse($link, $request, $routeMatch); if (!empty($controllerResponse)) { return $controllerResponse; } // controller / action not recognized... return $this->_actionGetParseLink_getControllerResponseNop($link, true); }