/** * 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())); }
/** * Maps HTTP request to a Request object. * * @param Nette\Http\IRequest * * @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])) { throw new Nette\InvalidStateException('Missing presenter.'); } $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) { 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(), [Application\Request::SECURED => $httpRequest->isSecured()]); }
/** * 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. * @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) { $host = $url->getHost(); $path = '//' . $host . $url->getPath(); $host = ip2long($host) ? array($host) : array_reverse(explode('.', $host)); $re = strtr($re, array('/%basePath%/' => preg_quote($url->getBasePath(), '#'), '%tld%' => preg_quote($host[0], '#'), '%domain%' => preg_quote(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; } // deletes numeric keys, restore '-' chars $params = array(); foreach ($matches as $k => $v) { if (is_string($k) && $v !== '') { $params[str_replace('___', '-', $k)] = $v; // trick } } // 2) CONSTANT FIXITY foreach ($this->metadata as $name => $meta) { if (isset($params[$name])) { //$params[$name] = $this->flags & self::CASE_SENSITIVE === 0 ? strtolower($params[$name]) : */$params[$name]; // strtolower damages UTF-8 } elseif (isset($meta['fixity']) && $meta['fixity'] !== self::OPTIONAL) { $params[$name] = NULL; // cannot be overwriten in 3) and detected by isset() in 4) } } // 3) QUERY if ($this->xlat) { $params += self::renameKeys($httpRequest->getQuery(), array_flip($this->xlat)); } else { $params += $httpRequest->getQuery(); } // 4) APPLY FILTERS & FIXITY foreach ($this->metadata as $name => $meta) { if (isset($params[$name])) { if (!is_scalar($params[$name])) { } elseif (isset($meta[self::FILTER_TABLE][$params[$name]])) { // applies filterTable only to scalar parameters $params[$name] = $meta[self::FILTER_TABLE][$params[$name]]; } elseif (isset($meta[self::FILTER_TABLE]) && !empty($meta[self::FILTER_STRICT])) { return NULL; // rejected by filterTable } elseif (isset($meta[self::FILTER_IN])) { // applies filterIn only to scalar parameters $params[$name] = call_user_func($meta[self::FILTER_IN], (string) $params[$name]); if ($params[$name] === NULL && !isset($meta['fixity'])) { return NULL; // rejected by filter } } } elseif (isset($meta['fixity'])) { $params[$name] = $meta[self::VALUE]; } } if (isset($this->metadata[NULL][self::FILTER_IN])) { $params = call_user_func($this->metadata[NULL][self::FILTER_IN], $params); if ($params === NULL) { return NULL; } } // 5) BUILD Request if (!isset($params[self::PRESENTER_KEY])) { throw new Nette\InvalidStateException('Missing presenter in route definition.'); } elseif (!is_string($params[self::PRESENTER_KEY])) { return NULL; } if (isset($this->metadata[self::MODULE_KEY])) { if (!isset($params[self::MODULE_KEY])) { throw new Nette\InvalidStateException('Missing module in route definition.'); } $presenter = $params[self::MODULE_KEY] . ':' . $params[self::PRESENTER_KEY]; unset($params[self::MODULE_KEY], $params[self::PRESENTER_KEY]); } else { $presenter = $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. * * @param \Nette\Http\IRequest $httpRequest * @throws \Nette\Application\BadRequestException * @return App\Request|NULL */ public function match(Http\IRequest $httpRequest) { // 1) PARSE URL $url = $httpRequest->getUrl(); $path = trim($url->path, $url->scriptPath); $params = array(); $lang = array(); if ($path !== '') { $parts = explode($url->scriptPath, $path, 4); // echo print_r($parts); if (in_array($parts[0], $this->slugManager->getLocale())) { $params['locale'] = $parts[0]; $lang = $parts[0]; unset($parts[0]); $parts = array_values($parts); if (count($parts) == 2) { $slugName = $parts[1]; $params['prefix'] = $parts[0]; } else { $slugName = $parts[0]; } } else { if (count($parts) == 2) { $slugName = $parts[1]; $params['prefix'] = $parts[0]; } else { $slugName = $parts[0]; } } //get row by slug $row = $this->slugManager->getRowBySlug($slugName, $lang, $params['prefix']); } else { $parts = array('Homepage', 'default'); $row = $this->slugManager->getDefault(); } if (!$row) { //throw new Nette\Application\BadRequestException('Page does not exist'); return null; } //id if (isset($parts[2])) { $id = $parts[2]; } $params['page_id'] = $row->id; if (isset($id)) { $params['id'] = $id; } //$url->query into params if ($url->getQuery() !== '') { $query = explode('&', $url->getQuery()); foreach ($query as $singlequery) { $result = explode('=', $singlequery); $params[$result[0]] = $result[1]; } } // Presenter preset if ($row->pages_types_id == 0) { $presenterArr = implode(":", array_slice(explode(':', $row->presenter), 0, -1)); $presenter = $presenterArr; } else { if (!empty($row->presenter)) { $presenter = $row->presenter; } else { $presenter = $row->pages_types->presenter; } } // Action if ($row->pages_templates_id != null) { $params['action'] = $row->pages_templates->template; } else { if ($row->pages_types_id == 0) { $params['action'] = substr($row->presenter, strrpos($row->presenter, ":") + 1); } else { $params['action'] = $row->pages_types->action; } } return new App\Request($presenter, $httpRequest->getMethod(), $params, $httpRequest->getPost(), $httpRequest->getFiles(), array(App\Request::SECURED => $httpRequest->isSecured())); }
Nette\InvalidArgumentException("Argument must be array or string in format Presenter:action, '$defaults' given.");}$defaults=array(self::PRESENTER_KEY=>substr($defaults,0,$a),'action'=>$a===strlen($defaults)-1?Application\UI\Presenter::DEFAULT_ACTION:substr($defaults,$a+1));}if(isset($defaults[self::MODULE_KEY])){$this->module=$defaults[self::MODULE_KEY].':';unset($defaults[self::MODULE_KEY]);}$this->defaults=$defaults;$this->flags=$flags;}function match(Nette\Http\IRequest$httpRequest){if($httpRequest->getUrl()->getPathInfo()!==''){return NULL;}$params=$httpRequest->getQuery();$params+=$this->defaults;if(!isset($params[self::PRESENTER_KEY])){throw new Nette\InvalidStateException('Missing presenter.');}$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()));}function
/** * @inheritdoc */ public function isSecured() { return $this->current->isSecured(); }