/** * Adds the url field to the form */ private function AddUrlField() { $name = 'Url'; $this->AddField(Input::Text($name, $this->page->GetUrl())); $this->SetRequired($name); $this->AddValidator($name, DatabaseCount::UniqueFieldAnd($this->page, $name, $this->SiteCondition())); }
protected function Init() { $this->prefix = Request::GetData('prefix'); $this->page = Page::Schema()->ByID(Request::GetData('page')); if (!$this->page) { throw new \Exception('Required parameter page invalid or missing'); } $this->serializer = new ArrayLinesSerializer(); $this->oblParams = FrontendRouter::GatherParams($this->page->GetUrl()); $this->params = $this->serializer->LinesToArray(Request::GetData('params')); $this->AddObligatoryFields(); $this->AddOptionalParamsField(); $this->AddFragmentField(); $this->AddSubmit(); return parent::Init(); }
/** * Returns the url of a page with parameters and fragment * @param Page $page The page * @param array $params All parameters * @return string Return the page url */ static function PageUrl(Page $page, array $params = array(), $fragment = '') { $siteUrl = $page->GetSite()->GetUrl(); $pageUrl = $page->GetUrl(); if ($pageUrl == 'index.html') { $url = $siteUrl; } else { $url = Path::Combine($siteUrl, $pageUrl); } $oblParams = self::GatherParams($url); $urlObl = self::AttachObligatoryParams($url, $oblParams, $params); $urlAllParams = self::AttachMoreParams($urlObl, $oblParams, $params); return $fragment ? $urlAllParams . '#' . $fragment : $urlAllParams; }
/** * Returns the page rule * @param Page $page * @param array $params * @return RewriteRule */ private function PageRule(Page $page, array $params) { $lhs = '/' . $page->GetUrl(); foreach ($params as $param) { $lhs = str_replace('{' . $param . '}', self::PARAM_PATTERN, $lhs); } $rhs = new Variable(ServerVariable::RequestUri()); $idx = 1; foreach ($params as $param) { $rhs .= $idx > 1 ? '&' : '?'; $rhs .= $param . '=$' . $idx; ++$idx; } $rhs .= '&' . self::PAGE_URL_PARAM . '=' . $page->GetUrl(); $rule = new RewriteRule($lhs, $rhs); $rule->AddFlag(new CommandFlag(FlagType::Qsa())); return $rule; }