/** * Generate a url * * @param array $params request parameters * @param boolean $full true to get full url (include protocol and hostname) */ public function GetUrl($params = array(), $full = false) { if ($full) { $baseurl = $this->fullurl; } else { $baseurl = $this->baseurl; } if ($this->cleanurl) { if (substr_compare($baseurl, 'index.php', -9) === 0) { $baseurl = dirname($baseurl); } $baseurl = GitPHP_Util::AddSlash($baseurl, false); } else { if (substr_compare($baseurl, 'index.php', -9) !== 0) { $baseurl = GitPHP_Util::AddSlash($baseurl, false); } } if (count($params) < 1) { return $baseurl; } $abbreviate = $this->abbreviate; if ($abbreviate && !empty($params['project']) && $params['project'] instanceof GitPHP_Project) { if ($params['project']->GetCompat()) { $abbreviate = false; } } foreach ($params as $paramname => $paramval) { switch ($paramname) { case 'hash': case 'hashbase': case 'hashparent': case 'mark': $params[$paramname] = GitPHP_Router::GetHash($paramval, $abbreviate); break; case 'tag': $params[$paramname] = GitPHP_Router::GetTag($paramval); break; case 'project': $params[$paramname] = GitPHP_Router::GetProject($paramval); break; } } if ($this->cleanurl) { if (!empty($params['action'])) { switch ($params['action']) { case 'blob': case 'commit': case 'tree': case 'graph': case 'tag': // these actions are plural in clean urls $params['action'] = $params['action'] . 's'; break; } } list($queryurl, $exclude) = $this->BuildRoute($params); $baseurl .= $queryurl; foreach ($exclude as $excludeparam) { unset($params[$excludeparam]); } } $querystr = GitPHP_Router::GetQueryString($params); if (empty($querystr)) { return $baseurl; } return $baseurl . '?' . $querystr; }