Projekt

Obecné

Profil

<?php defined('SYSPATH') or die('No direct script access.');
/**
* URL helper class.
*
* $Id: url.php 1970 2008-02-06 21:54:29Z Shadowhand $
*
* @package Core
* @author Kohana Team
* @copyright (c) 2007-2008 Kohana Team
* @license http://kohanaphp.com/license.html
*/
class url {

/**
* Returns base url
* @param <type> $index
* @param <type> $protocol
* @return <type>
*/
public static function base($index = FALSE, $protocol = FALSE)
{
$index_page = ($index && Settings::get('index_page')) ? 'index.php/' : '';

$base_url = url::protocol().'://'.url::domain().url::suffix().$index_page;
return $base_url;
}

/**
* @author Michal Kliment
* Returns domain
* @return string
*/
public static function domain()
{
// if exists settings key, return it
if (Settings::get('domain')!='')
return Settings::get('domain');
else
// else return it from url
return server::http_host();
}

/**
* @author Michal Kliment
* Returns url suffix
* @return string
*/
public static function suffix()
{
// if exists settings key, return it
if (Settings::get('suffix')!='')
return Settings::get('suffix');
else
// else return it from url
return substr(server::script_name(),0,-9);
}


/**
* @author Michal Kliment
* Returns protocol
* @return string
*/
public static function protocol()
{
// if exists settings key, return it
if (Settings::get('protocol')!='')
return Settings::get('protocol');
else
/**
* @todo Return it from url
*/
return 'http';
}

/**
* Fetches a site URL based on a URI segment.
*
* @param string site URI to convert
* @param string non-default protocol
* @return string
*/
public static function site($uri = '', $protocol = FALSE)
{
$uri = trim($uri, '/');

$qs = ''; // anchor?query=string
$id = ''; // anchor#id

if (strpos($uri, '?') !== FALSE)
{
list ($uri, $qs) = explode('?', $uri, 2);
$qs = '?'.$qs;
}

if (strpos($uri, '#') !== FALSE)
{
list ($uri, $id) = explode('#', $uri, 2);
$id = '#'.$id;
}

$index_page = Config::get('index_page', TRUE);
$url_suffix = ($uri != '') ? Config::get('url_suffix') : '';

return url::base(FALSE, $protocol).$index_page.$uri.$url_suffix.$qs.$id;
}

/**
* Fetches the current URI.
*
* @param boolean include the query string
* @return string
*/
public static function current($qs = FALSE)
{
return rtrim(Router::$current_uri.($qs === TRUE ? Router::$query_string : ''),'/');
}

/**
* @author Michal Kliment
* Returns previuos URI
* @return string
*/
public static function previous()
{
return url::uri(rtrim(server::http_referer()),'/');
}

/**
* @author Michal Kliment
* Returns URI
* @return string
*/
public static function uri($url)
{
if (substr($url, 0, strlen(url::base())) != url::base())
return "";

return rtrim(substr($url, strlen(url::base())),'/');
}

/**
* Convert a phrase to a URL-safe title.
*
* @param string phrase to convert
* @param string word separator (- or _)
* @return string
*/
public static function title($title, $separator = '-')
{
//$separator = ($separator == '-') ? '-' : '_';

// Replace all dashes, underscores and whitespace by the separator
$title = preg_replace('/[-_\s]+/', $separator, $title);

// Replace accented characters by their unaccented equivalents
$title = utf8::transliterate_to_ascii($title);

// Remove all characters that are not a-z, 0-9, or the separator
$title = preg_replace('/[^a-z0-9'.$separator.']+/', '', strtolower($title));

// Trim separators from the beginning and end
$title = trim($title, $separator);

return $title;
}

/**
* Sends a page redirect header.
*
* @param string site URI or URL to redirect to
* @param string HTTP method of redirect
* @return A HTML anchor, but sends HTTP headers. The anchor should never be seen
* by the user, unless their browser does not understand the headers sent.
*/
public static function redirect($uri = '', $method = '302')
{
if (Event::has_run('system.send_headers'))
return;

if (strpos($uri, '://') === FALSE)
{
$uri = url::site($uri);
}

if ($method == 'refresh')
{
header('Refresh: 0; url='.$uri);
}
else
{
$codes = array
(
'300' => 'Multiple Choices',
'301' => 'Moved Permanently',
'302' => 'Found',
'303' => 'See Other',
'304' => 'Not Modified',
'305' => 'Use Proxy',
'307' => 'Temporary Redirect'
);

$method = isset($codes[$method]) ? $method : '302';

header('HTTP/1.1 '.$method.' '.$codes[$method]);
header('Location: '.$uri);
}

// Last resort, exit and display the URL
exit('<a href="'.$uri.'">'.$uri.'</a>');
}

/**
* Creates URL from URI
*
* @author Michal Kliment
* @param string $uri
* @return string
*/
public static function create ($uri)
{
return (substr(strtolower($uri),0,7) != 'http://' && substr(strtolower($uri),0,8) != 'https://' && substr(strtolower($uri),0,6) != 'ftp://') ? 'http://'.$uri : $uri;
}

/**
* Returns slice from url
*
* @author Michal Kliment
* @param string $url
* @param integer $offset
* @param integer $length
* @return string
*/
public static function slice ($url, $offset = 0, $length = NULL)
{
$segments = explode ('/', $url);

return implode ('/', array_slice ($segments, $offset, $length));
}

} // End url
(30-30/32)