public function generateImage(ImageRequest $request) { $width = $request->getWidth(); $height = $request->getHeight(); $format = $request->getFormat(); if (!$this->validator->validate($width, $height)) { throw new Application\BadRequestException(); } $image = NULL; foreach ($this->providers as $provider) { $image = $provider->getImage($request); if ($image) { break; } } if (!$image) { $this->httpResponse->setHeader('Content-Type', 'image/jpeg'); $this->httpResponse->setCode(Http\IResponse::S404_NOT_FOUND); exit; } $destination = $this->wwwDir . '/' . $this->httpRequest->getUrl()->getRelativeUrl(); $dirname = dirname($destination); if (!is_dir($dirname)) { $success = @mkdir($dirname, 0777, TRUE); if (!$success) { throw new Application\BadRequestException(); } } $success = $image->save($destination, 90, $format); if (!$success) { throw new Application\BadRequestException(); } $image->send(); exit; }
/** * @return Template */ public function createTemplate(UI\Control $control = NULL) { $latte = $this->latteFactory->create(); $template = new Template($latte); $presenter = $control ? $control->getPresenter(FALSE) : NULL; if ($control instanceof UI\Presenter) { $latte->setLoader(new Loader($control)); } if ($latte->onCompile instanceof \Traversable) { $latte->onCompile = iterator_to_array($latte->onCompile); } array_unshift($latte->onCompile, function ($latte) use($control, $template) { $latte->getCompiler()->addMacro('cache', new Nette\Bridges\CacheLatte\CacheMacro($latte->getCompiler())); UIMacros::install($latte->getCompiler()); if (class_exists(Nette\Bridges\FormsLatte\FormMacros::class)) { Nette\Bridges\FormsLatte\FormMacros::install($latte->getCompiler()); } if ($control) { $control->templatePrepareFilters($template); } }); $latte->addFilter('url', 'rawurlencode'); // back compatiblity foreach (['normalize', 'toAscii', 'webalize', 'padLeft', 'padRight', 'reverse'] as $name) { $latte->addFilter($name, 'Nette\\Utils\\Strings::' . $name); } $latte->addFilter('null', function () { }); $latte->addFilter('modifyDate', function ($time, $delta, $unit = NULL) { return $time == NULL ? NULL : Nette\Utils\DateTime::from($time)->modify($delta . $unit); // intentionally == }); if (!isset($latte->getFilters()['translate'])) { $latte->addFilter('translate', function (Latte\Runtime\FilterInfo $fi) { throw new Nette\InvalidStateException('Translator has not been set. Set translator using $template->setTranslator().'); }); } // default parameters $template->user = $this->user; $template->baseUri = $template->baseUrl = $this->httpRequest ? rtrim($this->httpRequest->getUrl()->getBaseUrl(), '/') : NULL; $template->basePath = preg_replace('#https?://[^/]+#A', '', $template->baseUrl); $template->flashes = []; if ($control) { $template->control = $control; $template->presenter = $presenter; $latte->addProvider('uiControl', $control); $latte->addProvider('uiPresenter', $presenter); $latte->addProvider('snippetBridge', new Nette\Bridges\ApplicationLatte\SnippetBridge($control)); } $latte->addProvider('cacheStorage', $this->cacheStorage); // back compatibility $template->_control = $control; $template->_presenter = $presenter; $template->netteCacheStorage = $this->cacheStorage; if ($presenter instanceof UI\Presenter && $presenter->hasFlashSession()) { $id = $control->getParameterId('flash'); $template->flashes = (array) $presenter->getFlashSession()->{$id}; } return $template; }
/** * Maps HTTP request to a Request object. * * @param Nette\Http\IRequest $httpRequest * @return Request|NULL */ public function match(Nette\Http\IRequest $httpRequest) { $relativeUrl = trim($httpRequest->getUrl()->relativeUrl, "/"); $path = trim($httpRequest->getUrl()->path, "/"); if ($relativeUrl == "") { $target = $this->defaultRoute; $this->currentTarget->setCurrentTarget($this->targetDao->findTarget($target->presenter, $target->action, $target->id)); } elseif ($relativeUrl == "sitemap.xml") { $target = new Target("Seo:Meta", "sitemap"); } elseif ($relativeUrl == "robots.txt") { $target = new Target("Seo:Meta", "robots"); } elseif (substr($relativeUrl, 0, 6) == "google" && $this->settingsDao->getWebmasterToolsName() == $relativeUrl) { $target = new Target("Seo:Meta", "googleWebmasterTools"); } else { $route = $this->routeDao->findRouteBySlug($relativeUrl, TRUE); if (!$route) { $route = $this->routeDao->findRouteBySlug($path, TRUE); if (!$route) { return NULL; } } $this->currentTarget->setCurrentTarget($route->getTarget()); $target = new Target($route->target->targetPresenter, $route->target->targetAction, $route->target->targetId); } $params = array(); $params["action"] = $target->action; if ($target->id) { $params["id"] = $target->id; } $params += $httpRequest->getQuery(); return new Request($target->presenter, $httpRequest->getMethod(), $params, $httpRequest->getPost(), $httpRequest->getFiles(), array(Request::SECURED => $httpRequest->isSecured())); }
/** * Renders panel. * @return string */ public function getPanel() { ob_start(); $request = $this->request; $routers = $this->routers; $source = $this->source; $url = $this->httpRequest->getUrl(); require __DIR__ . '/templates/RoutingPanel.panel.phtml'; return ob_get_clean(); }
/** * Check allowed methods * * @throws BadRequestException If method is not supported but another one can be used */ protected function checkAllowedMethods() { $availableMethods = $this->methods->getOptions($this->request->getUrl()); if (!$availableMethods || in_array($this->request->method, $availableMethods)) { return; } $allow = implode(', ', $availableMethods); $this->response->setHeader('Allow', $allow); throw BadRequestException::methodNotSupported('Method not supported. Available methods: ' . $allow); }
/** * {@inheritdoc} */ public function getResourceId() { $refUrl = $this->httpRequest->getUrl(); $url = $this->router->constructUrl($this->request, $refUrl); if ($url === NULL) { throw new \Nette\Application\UI\InvalidLinkException(); } $hostUrl = $refUrl->getHostUrl() . '/'; if (strncmp($url, $hostUrl, strlen($hostUrl)) === 0) { $url = substr($url, strlen($hostUrl) - 1); } return $url; }
/** * Renders panel. * @return string */ public function getPanel() { ob_start(); $request = $this->request; $routers = $this->routers; $source = $this->source; $hasModule = (bool) array_filter($routers, function ($rq) { return $rq['module']; }); $url = $this->httpRequest->getUrl(); require __DIR__ . '/templates/RoutingPanel.panel.phtml'; return ob_get_clean(); }
/** * @return Template */ public function createTemplate(UI\Control $control = NULL) { $latte = $this->latteFactory->create(); $template = new Template($latte); $presenter = $control ? $control->getPresenter(FALSE) : NULL; if ($control instanceof UI\Presenter) { $latte->setLoader(new Loader($control)); } if ($latte->onCompile instanceof \Traversable) { $latte->onCompile = iterator_to_array($latte->onCompile); } array_unshift($latte->onCompile, function ($latte) use($control, $template) { $latte->getParser()->shortNoEscape = TRUE; $latte->getCompiler()->addMacro('cache', new Nette\Bridges\CacheLatte\CacheMacro($latte->getCompiler())); UIMacros::install($latte->getCompiler()); if (class_exists('Nette\\Bridges\\FormsLatte\\FormMacros')) { Nette\Bridges\FormsLatte\FormMacros::install($latte->getCompiler()); } if ($control) { $control->templatePrepareFilters($template); } }); $latte->addFilter('url', 'rawurlencode'); // back compatiblity foreach (array('normalize', 'toAscii', 'webalize', 'padLeft', 'padRight', 'reverse') as $name) { $latte->addFilter($name, 'Nette\\Utils\\Strings::' . $name); } $latte->addFilter('null', function () { }); $latte->addFilter('length', function ($var) { return is_string($var) ? Nette\Utils\Strings::length($var) : count($var); }); $latte->addFilter('modifyDate', function ($time, $delta, $unit = NULL) { return $time == NULL ? NULL : Nette\Utils\DateTime::from($time)->modify($delta . $unit); // intentionally == }); // default parameters $template->control = $template->_control = $control; $template->presenter = $template->_presenter = $presenter; $template->user = $this->user; $template->netteHttpResponse = $this->httpResponse; $template->netteCacheStorage = $this->cacheStorage; $template->baseUri = $template->baseUrl = $this->httpRequest ? rtrim($this->httpRequest->getUrl()->getBaseUrl(), '/') : NULL; $template->basePath = preg_replace('#https?://[^/]+#A', '', $template->baseUrl); $template->flashes = array(); if ($presenter instanceof UI\Presenter && $presenter->hasFlashSession()) { $id = $control->getParameterId('flash'); $template->flashes = (array) $presenter->getFlashSession()->{$id}; } return $template; }
/** * Restores request from session. * @param string $key */ public function redirectToRequest($key) { $request = $this->requestStorage->loadRequest($key); if (!$request) { return; } $parameters = $request->getParameters(); $parameters[Presenter::FLASH_KEY] = $this->getParameter(Presenter::FLASH_KEY); $parameters[RequestStorage::REQUEST_KEY] = $key; $request->setParameters($parameters); $refUrl = new Url($this->httpRequest->getUrl()); $refUrl->setPath($this->httpRequest->getUrl()->getScriptPath()); $url = $this->router->constructUrl($request, $refUrl); $this->redirectUrl($url); }
public function send(HttpRequest $request, HttpResponse $response) { $width = null; $height = null; $quality = null; try { $url = $request->getUrl(); $name = Strings::after($url->getPath(), '/', -1); try { // only for case, when all images expected response from application and not from existing images $thumb = $this->repository->fetchThumbnail($name); } catch (\Imager\NotExistsException $e) { // thumbnail must be generate, because not exists $id = $url->getQueryParameter('id'); $width = $url->getQueryParameter('width'); $height = $url->getQueryParameter('height'); $quality = $url->getQueryParameter('quality'); $source = $this->repository->fetch($id); $thumb = $this->factory->create($source)->resize($width, $height, $quality); $thumb = $this->repository->save($thumb); } $response->setContentType($thumb->getMime()); $response->setHeader('Content-Length', $thumb->getSize()); echo $thumb->getContent(); } catch (\Exception $e) { $width = $width ?: 200; $height = $height ?: 200; $this->sendError($response, $e, $width, $height); } exit(0); }
/** * Maps HTTP request to a Request object. * @return Nette\Application\Request|NULL */ public function match(Nette\Http\IRequest $httpRequest) { if ($httpRequest->getUrl()->getPathInfo() !== '') { return NULL; } // combine with precedence: get, (post,) defaults $params = $httpRequest->getQuery(); $params += $this->defaults; if (!isset($params[self::PRESENTER_KEY]) || !is_string($params[self::PRESENTER_KEY])) { return NULL; } $presenter = $this->module . $params[self::PRESENTER_KEY]; unset($params[self::PRESENTER_KEY]); return new Application\Request( $presenter, $httpRequest->getMethod(), $params, $httpRequest->getPost(), $httpRequest->getFiles(), array(Application\Request::SECURED => $httpRequest->isSecured()) ); }
/** * Maps HTTP request to a Request object. * @return Nette\Application\Request|NULL */ public function match(Nette\Http\IRequest $httpRequest) { // combine with precedence: mask (params in URL-path), fixity, query, (post,) defaults // 1) URL MASK $url = $httpRequest->getUrl(); $re = $this->re; if ($this->type === self::HOST) { $path = '//' . $url->getHost() . $url->getPath(); $host = array_reverse(explode('.', $url->getHost())); $re = strtr($re, array('/%basePath%/' => preg_quote($url->getBasePath(), '#'), '%tld%' => $host[0], '%domain%' => isset($host[1]) ? "{$host['1']}\\.{$host['0']}" : $host[0])); } elseif ($this->type === self::RELATIVE) { $basePath = $url->getBasePath(); if (strncmp($url->getPath(), $basePath, strlen($basePath)) !== 0) { return NULL; } $path = (string) substr($url->getPath(), strlen($basePath)); } else { $path = $url->getPath(); } if ($path !== '') { $path = rtrim($path, '/') . '/'; } if (!($matches = Strings::match($path, $re))) { // stop, not matched return NULL; } if (!$this->manager->isAMFRequest()) { return null; } return $this->manager->createApplicationRequest(); }
private function process($url, string $directory, string $parameter, array &$dependencies = []) : string { $url = new Nette\Http\Url($url); $time = NULL; if ($url->getHost() && (!$this->request || $url->getHost() !== $this->request->getUrl()->getHost())) { $headers = @get_headers($url, TRUE); if (is_array($headers) && isset($headers['Last-Modified'])) { $time = (new DateTime($headers['Last-Modified']))->getTimestamp(); } } elseif (is_file($filename = implode(DIRECTORY_SEPARATOR, [rtrim($directory, '\\/'), ltrim($url->getPath(), '\\/')]))) { $time = filemtime($filename); unset($dependencies[Nette\Caching\Cache::EXPIRE]); $dependencies[Nette\Caching\Cache::FILES] = $filename; } $url->setQueryParameter($parameter, $time ?: ($this->time ?: ($this->time = time()))); return preg_replace($pattern = '#^(\\+|/+)#', preg_match($pattern, $url->getPath()) ? DIRECTORY_SEPARATOR : NULL, $url); }
/** * Maps HTTP request to a Request object. * * @param Nette\Http\IRequest $httpRequest * @return NULL|Request */ public function match(Nette\Http\IRequest $httpRequest) { $path = ltrim($httpRequest->getUrl()->getPath(), '/'); if (Nette\Utils\Strings::match($path, '~^' . preg_quote($this->mask, '~') . '/*($|\\?)~')) { header("Location: {$this->target}", TRUE, 301); die; } return NULL; }
/** * Get last page URL * @param Paginator $paginator * @return Link */ private function getLastPageUrl(Paginator $paginator) { $url = clone $this->request->getUrl(); parse_str($url->getQuery(), $query); $query['offset'] = $paginator->getLastPage() * $paginator->getItemsPerPage() - $paginator->getItemsPerPage(); $query['limit'] = $paginator->getItemsPerPage(); $url->appendQuery($query); return new Link($url, Link::LAST); }
/** * @param IRequest $httpRequest * @return string */ private function prepareUrlPath(IRequest $httpRequest) { $url = $httpRequest->getUrl(); $basePath = $url->getPath(); $path = mb_substr($basePath, \mb_strlen($url->getBasePath())); if ($path !== '') { $path = rtrim(rawurldecode($path), '/'); } return $path; }
/** * Maps HTTP request to a Request object. * @return array|NULL */ public function match(Nette\Http\IRequest $request) { if ($request->getUrl()->getPathInfo() !== '') { return NULL; } // combine with precedence: get, (post,) defaults $params = $request->getQuery(); $params += $this->defaults; return $params; }
/** * @param \Nette\Application\Request $request * @return \Nette\Application\IResponse * @throws \Nette\Application\BadRequestException */ public function run(Application\Request $request) { $this->request = $request; if ($this->httpRequest && $this->router && !$this->httpRequest->isAjax() && ($request->isMethod('get') || $request->isMethod('head'))) { $refUrl = clone $this->httpRequest->getUrl(); $url = $this->router->constructUrl($request, $refUrl->setPath($refUrl->getScriptPath())); if ($url !== NULL && !$this->httpRequest->getUrl()->isEqual($url)) { return new Responses\RedirectResponse($url, Http\IResponse::S301_MOVED_PERMANENTLY); } } $params = $request->getParameters(); if (!isset($params['id'])) { throw new Application\BadRequestException('Parameter id is missing.'); } if (NULL === ($item = $this->context->getService('webloader.cache')->getItem(\Nette\Utils\Strings::webalize($params['id'])))) { return new Responses\TextResponse(''); } return new \Lohini\WebLoader\WebLoaderResponse($item[WebLoader::CONTENT], $item[WebLoader::CONTENT_TYPE], $item[WebLoader::ETAG]); }
public function match(Http\IRequest $httpRequest) { $path = $httpRequest->getUrl()->getPath(); foreach ($this->assetManager->getNames() as $name) { $asset = $this->assetManager->get($name); if ('/' . $asset->getTargetPath() === $path) { $this->dumpAsset($asset); } } }
/** * @return Template */ public function createTemplate(UI\Control $control) { $latte = $this->latteFactory->create(); $template = new Template($latte); $presenter = $control->getPresenter(FALSE); if ($control instanceof UI\Presenter) { $latte->setLoader(new Loader($control)); } if ($latte->onCompile instanceof \Traversable) { $latte->onCompile = iterator_to_array($latte->onCompile); } array_unshift($latte->onCompile, function ($latte) use($control, $template) { $latte->getParser()->shortNoEscape = TRUE; $latte->getCompiler()->addMacro('cache', new Nette\Bridges\CacheLatte\CacheMacro($latte->getCompiler())); UIMacros::install($latte->getCompiler()); Nette\Bridges\FormsLatte\FormMacros::install($latte->getCompiler()); $control->templatePrepareFilters($template); }); $latte->addFilter('url', 'rawurlencode'); // back compatiblity foreach (array('normalize', 'toAscii', 'webalize', 'padLeft', 'padRight', 'reverse') as $name) { $latte->addFilter($name, 'Nette\\Utils\\Strings::' . $name); } // default parameters $template->control = $template->_control = $control; $template->presenter = $template->_presenter = $presenter; $template->user = $this->user; $template->netteHttpResponse = $this->httpResponse; $template->netteCacheStorage = $this->cacheStorage; $template->baseUri = $template->baseUrl = rtrim($this->httpRequest->getUrl()->getBaseUrl(), '/'); $template->basePath = preg_replace('#https?://[^/]+#A', '', $template->baseUrl); $template->flashes = array(); if ($presenter instanceof UI\Presenter && $presenter->hasFlashSession()) { $id = $control->getParameterId('flash'); $template->flashes = (array) $presenter->getFlashSession()->{$id}; } return $template; }
/** * Template factory. * @param string * @return Application\UI\ITemplate */ public function createTemplate($class = NULL, callable $latteFactory = NULL) { $latte = $latteFactory ? $latteFactory() : $this->getContext()->getByType(Nette\Bridges\ApplicationLatte\ILatteFactory::class)->create(); $template = $class ? new $class() : new Nette\Bridges\ApplicationLatte\Template($latte); $template->setParameters($this->request->getParameters()); $template->presenter = $this; $template->context = $this->context; if ($this->httpRequest) { $url = $this->httpRequest->getUrl(); $template->baseUrl = rtrim($url->getBaseUrl(), '/'); $template->basePath = rtrim($url->getBasePath(), '/'); } return $template; }
/** * Returns the Current URL, stripping it of known FB parameters that should * not persist. * * @internal * @return \Nette\Http\UrlScript The current URL */ public function getCurrentUrl() { $url = clone $this->httpRequest->getUrl(); if ($this->config->trustForwarded && isset($_SERVER['HTTP_X_FORWARDED_HOST'])) { $url->setHost($_SERVER['HTTP_X_FORWARDED_HOST']); } if ($this->config->trustForwarded && isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) { $url->setScheme($_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' ? 'https' : 'http'); } parse_str($url->getQuery(), $query); $query = array_diff_key($query, array_flip($this->config->dropQueryParams)); $url->setQuery($query); return $url; }
public function match(Nette\Http\IRequest $httpRequest) { $url = $httpRequest->getUrl(); $basePath = Strings::replace($url->getBasePath(), '/\\//', '\\/'); $cleanPath = Strings::replace($url->getPath(), "/^{$basePath}/", ''); $pathRegExp = '#' . preg_quote($this->prefix, '#') . '(' . implode('|', $this->availableResource) . ')/?$#'; $matches = Strings::match($cleanPath, $pathRegExp); if (!$matches) { return NULL; } $presenter = self::path2presenter($matches[1]); $params = ['action' => $this->detectAction($httpRequest), 'query' => $this->readInput()]; $request = new Request($presenter, $this->detectMethod($httpRequest), $params, $httpRequest->getPost()); return $request; }
/** * Maps HTTP request to a Request object. * * @param Nette\Http\IRequest $httpRequest * @return NULL|Request */ public function match(Nette\Http\IRequest $httpRequest) { $slug = ltrim($httpRequest->getUrl()->getPath(), '/'); $id = $this->dibi->query(' SELECT [c.id] FROM [old_links] [l] INNER JOIN [contents] [c] ON [c.youtube_id] = [l.target] WHERE [mask] = %s', $slug, ' ')->fetchSingle(); if (!$id) { return NULL; } return new Request('Video', $httpRequest->getMethod(), ['action' => 'default', 'videoId' => $id]); }
public function match(Http\IRequest $request) { $url = $request->getUrl(); if (Strings::contains($url->path, $this->basePath) === false) { return; } $imgUrl = Strings::after($url->path, $this->basePath); $imgUrl = Strings::after($imgUrl, '/', -1); $parts = Imager\Helpers::parseName($imgUrl); if (!isset($parts['id'])) { return; } $url->setQueryParameter('id', $parts['id'])->setQueryParameter('width', $parts['width'])->setQueryParameter('height', $parts['height'])->setQueryParameter('quality', $parts['quality']); $response = new ImageResponse($this->repository, $this->imageFactory); $response->send(new Http\Request($url), new Http\Response()); }
/** * Maps HTTP request to a Request object. * @param Nette\Http\IRequest * @return Nette\Application\Request|NULL */ public function match(Nette\Http\IRequest $httpRequest) { if (Strings::startsWith($httpRequest->getUrl()->getPath(), '/admin')) { $router = $this->adminRouter; } else { $router = $this->frontRouter; } foreach ($router as $route) { $appRequest = $route->match($httpRequest); if ($appRequest !== NULL) { $appRequest->setPresenterName($appRequest->getPresenterName()); return $appRequest; } } return NULL; }
/** * Sends response to output. * @param Nette\Http\IRequest $httpRequest * @param Nette\Http\IResponse $httpResponse * @return void */ public function send(Nette\Http\IRequest $httpRequest, Nette\Http\IResponse $httpResponse) { $httpResponse->setContentType($this->contentType); $httpResponse->setExpiration(FALSE); $response = array(); $actual_url = $httpRequest->getUrl()->getAbsoluteUrl(); date_default_timezone_set('UTC'); //TODO: -1min $date = date('YmdHi'); $hmac = hash_hmac('sha512', $actual_url . $date, 'PRIVATE_KEY'); //TODO: na základě public key ($api_key) if ($this->payload['api_hash'] !== $hmac) { $response['err_code'] = 10; $response['err_info'] = $this->errors[10]; } echo Nette\Utils\Json::encode($this->payload); }
/** * Maps HTTP request to a Request object. * @param \Nette\Http\IRequest $httpRequest * @return \Nette\Application\Request|NULL */ public function match(IRequest $httpRequest) { $url = $httpRequest->getUrl(); $basePath = Strings::replace($url->getBasePath(), '/\\//', '\\/'); $cleanPath = Strings::replace($url->getPath(), "/^{$basePath}/"); $path = Strings::replace($this->getPath(), '/\\//', '\\/'); $pathRexExp = empty($path) ? "/^.+\$/" : "/^{$path}\\/.*\$/"; if (!Strings::match($cleanPath, $pathRexExp)) { return NULL; } $cleanPath = Strings::replace($cleanPath, '/^' . $path . '\\//'); $params = array(); $path = $cleanPath; $params['action'] = $this->detectAction($httpRequest); $frags = explode('/', $path); // Resource ID. if (count($frags) % 2 === 0) { $params['id'] = array_pop($frags); } elseif ($params['action'] == 'read' && $this->useReadAllAction) { $params['action'] = 'readAll'; } $presenterName = Strings::firstUpper(array_pop($frags)); // Allow to use URLs like domain.tld/presenter.format. $formats = join('|', array_keys($this->formats)); if (Strings::match($presenterName, "/.+\\.({$formats})\$/")) { list($presenterName, $format) = explode('.', $presenterName); } // Associations. $assoc = array(); if (count($frags) > 0 && count($frags) % 2 === 0) { foreach ($frags as $k => $f) { if ($k % 2 !== 0) { continue; } $assoc[$f] = $frags[$k + 1]; } } $params['format'] = $this->detectFormat($httpRequest); $params['associations'] = $assoc; $params['data'] = $this->readInput(); $params['query'] = $httpRequest->getQuery(); $presenterName = empty($this->module) ? $presenterName : $this->module . ':' . $presenterName; $appRequest = new Request($presenterName, $httpRequest->getMethod(), $params); return $appRequest; }
/** * Maps HTTP request to a Request object. * * @return AppRequest|NULL */ public function match(HttpRequest $httpRequest) { $url = $httpRequest->getUrl(); $slug = rtrim(substr($url->getPath(), strrpos($url->getScriptPath(), '/') + 1), '/'); foreach ($this->tableOut as $destination2 => $slug2) { if ($slug === rtrim($slug2, '/')) { $destination = $destination2; break; } } if (!isset($destination)) { return NULL; } $params = $httpRequest->getQuery(); $pos = strrpos($destination, ':'); $presenter = substr($destination, 0, $pos); $params['action'] = substr($destination, $pos + 1); return new AppRequest($presenter, $httpRequest->getMethod(), $params, $httpRequest->getPost(), $httpRequest->getFiles(), array(AppRequest::SECURED => $httpRequest->isSecured())); }
/** * Maps HTTP request to a Request object. * * @param Http\IRequest $httpRequest * @return NULL|Request */ public function match(Http\IRequest $httpRequest) { $path = ltrim($httpRequest->getUrl()->getPath(), '/'); $match = Strings::match($path, '~^([^/]+)/(?P<slug>[^/]+)/lekce~'); if (!$match) { return NULL; } $id = $this->dibi->query(' SELECT [c.id] FROM [old_links] [l] INNER JOIN [contents] [c] ON [c.youtube_id] = [l.target] WHERE [mask] = %s', $match['slug'], ' ')->fetchSingle(); if (!$id) { return NULL; } return new Request('Video', $httpRequest->getMethod(), ['action' => 'default', 'videoId' => $id]); }