148 lines
4.3 KiB
PHP
Executable File
148 lines
4.3 KiB
PHP
Executable File
<?php
|
|
class Url{
|
|
const SHORT_CLASS_TAG = 'c';
|
|
const SHORT_METHOD_TAG = 'm';
|
|
const URLBASE = '/';
|
|
public static $enter = array();
|
|
public static $params = array();
|
|
public static $custom = array();
|
|
public static $url = false;
|
|
|
|
public static function setUrl( $url ){
|
|
self::$enter = self::$params = array();
|
|
self::$url = $url;
|
|
self::initParams();
|
|
}
|
|
public static function getUrl(){
|
|
self::initParams();
|
|
return self::$url;
|
|
}
|
|
public static function get( $str ){
|
|
self::initParams();
|
|
return isset( self::$params[$str] )?self::$params[$str]:false ;
|
|
}
|
|
public static function getClass(){
|
|
self::initParams();
|
|
return self::$enter['class'];
|
|
}
|
|
public static function getMethod(){
|
|
self::initParams();
|
|
return self::$enter['method'];
|
|
}
|
|
public static function make( $custom = array() , $old = array() ){
|
|
self::initParams();
|
|
|
|
$base = array();
|
|
|
|
self::formatUrlParams( $base , $custom , $old );
|
|
|
|
//$base[self::SHORT_CLASS_TAG] = $base[self::SHORT_CLASS_TAG]?:self::getClass();
|
|
//$base[self::SHORT_METHOD_TAG] = $base[self::SHORT_METHOD_TAG]?:c('default_method');
|
|
|
|
if( !$base[self::SHORT_CLASS_TAG] ){
|
|
$base[self::SHORT_CLASS_TAG] = self::getClass();
|
|
if( !$base[self::SHORT_METHOD_TAG] ){
|
|
$base[self::SHORT_METHOD_TAG] = self::getMethod();
|
|
}
|
|
}
|
|
if( !$base[self::SHORT_METHOD_TAG] ){
|
|
$base[self::SHORT_METHOD_TAG] = c('default_method');
|
|
}
|
|
|
|
if( $base[self::SHORT_METHOD_TAG]== c('default_method') ){
|
|
unset( $base[self::SHORT_METHOD_TAG] );
|
|
if( !$custom && !$old && $base[self::SHORT_CLASS_TAG]== c('default_class') ){
|
|
unset( $base[self::SHORT_CLASS_TAG] );
|
|
}
|
|
}
|
|
//start to make url
|
|
$url = c('url_base')?c('url_base'):self::URLBASE;
|
|
if( c('static_url') ){
|
|
if( $base )
|
|
$url .= join('/',$base).'/';
|
|
|
|
if( $custom ){
|
|
foreach( $custom as $k => $v ){
|
|
if( $v ){
|
|
$url .= $k.'/'.$v.'/';
|
|
}
|
|
}
|
|
}
|
|
}else{
|
|
if( $base )
|
|
$custom += $base;
|
|
|
|
if( $custom )
|
|
$url .= '?'.http_build_query($custom);
|
|
}
|
|
|
|
return $url;
|
|
}
|
|
public static function initParams(){
|
|
if( !self::$enter ){
|
|
$custom = array();
|
|
if( !self::$url ){
|
|
if( c('static_url') ){
|
|
self::$url = isset($_SERVER['REDIRECT_URL'])&&$_SERVER['REDIRECT_URL']?$_SERVER['REDIRECT_URL']:$_SERVER['PATH_INFO'];
|
|
}else{
|
|
self::$url = $_GET;
|
|
}
|
|
}
|
|
if( c('static_url') ){
|
|
$tempArray = explode( '/' , trim(self::$url , '/' ) );
|
|
if( $tempArray ){
|
|
if( count( $tempArray )%2 == 0 ){
|
|
$custom['class'] = safeUrlString(array_shift( $tempArray ));
|
|
$custom['method'] = safeUrlString(array_shift( $tempArray ));
|
|
}else{
|
|
$custom['class'] = safeUrlString(array_shift( $tempArray ));
|
|
$custom['method'] = c('default_method');
|
|
}
|
|
}
|
|
if( $tempArray ){
|
|
foreach( array_chunk($tempArray, 2) as $v ){
|
|
list( $key , $value ) = $v;
|
|
$custom[$key] = $value;
|
|
}
|
|
}
|
|
$custom = array_filter(array_merge( (array)$custom , (array)$_GET ));
|
|
}else{
|
|
$custom = self::$url;
|
|
}
|
|
$base = array();
|
|
self::formatUrlParams( $base , $custom );
|
|
self::$enter['class'] = $base[self::SHORT_CLASS_TAG]?:c('default_class');
|
|
self::$enter['method'] = $base[self::SHORT_METHOD_TAG]?:c('default_method');
|
|
self::$params = $custom;
|
|
if( c('static_url') ){
|
|
$_REQUEST += $base + $custom;
|
|
$_GET += $base + $custom;
|
|
}
|
|
}
|
|
}
|
|
private static function formatUrlParams( &$base , &$custom , $old = array() ){
|
|
// init url params
|
|
if( !is_array( $custom ) ){
|
|
parse_str( ltrim( $custom , '?' ) , $custom);
|
|
}
|
|
$custom += self::$custom;
|
|
if( $old ){
|
|
foreach( $old as $v ){
|
|
if( $v && self::$params[$v] ){
|
|
$custom[$v] = self::$params[$v];
|
|
}
|
|
}
|
|
}
|
|
//init custom params
|
|
$needFix = array( 'class' , 'method' , self::SHORT_CLASS_TAG , self::SHORT_CLASS_TAG );
|
|
foreach( $needFix as $v ){
|
|
$custom[$v] = $custom[$v]?:NULL;
|
|
}
|
|
|
|
$class = $custom[self::SHORT_CLASS_TAG]?:$custom['class'];
|
|
$method = $custom[self::SHORT_METHOD_TAG]?:$custom['method'];
|
|
unset( $custom['class'], $custom[self::SHORT_CLASS_TAG] , $custom['method'] ,$custom[self::SHORT_METHOD_TAG] );
|
|
$base[self::SHORT_CLASS_TAG] = $class;
|
|
$base[self::SHORT_METHOD_TAG] = $method;
|
|
}
|
|
} |