diff -r 199b9708f4a2 -r 854eecfada20 includes/paths.php --- a/includes/paths.php Sun Dec 02 16:00:56 2007 -0500 +++ b/includes/paths.php Fri Dec 07 16:42:22 2007 -0500 @@ -18,7 +18,7 @@ */ class pathManager { - var $pages, $custom_page, $cpage, $page, $fullpage, $page_exists, $namespace, $nslist, $admin_tree, $wiki_mode, $page_protected, $template_cache; + var $pages, $custom_page, $cpage, $page, $fullpage, $page_exists, $namespace, $nslist, $admin_tree, $wiki_mode, $page_protected, $template_cache, $anonymous_page; function __construct() { global $db, $session, $paths, $template, $plugins; // Common objects @@ -26,8 +26,6 @@ $GLOBALS['paths'] =& $this; $this->pages = Array(); - dc_here('paths: setting up namespaces, admin nodes'); - // DEFINE NAMESPACES HERE // The key names should NOT EVER be changed, or Enano will be very broken $this->nslist = Array( @@ -40,6 +38,7 @@ 'System' =>'Enano:', 'Template'=>'Template:', 'Category'=>'Category:', + 'Anonymous'=>'PhysicalRedirect:', 'Project' =>sanitize_page_id(getConfig('site_name')).':', ); @@ -110,8 +109,6 @@ { global $db, $session, $paths, $template, $plugins; // Common objects - dc_here('paths: selecting master page data'); - $code = $plugins->setHook('paths_init_before'); foreach ( $code as $cmd ) { @@ -152,115 +149,148 @@ } $db->free_result(); - dc_here('paths: determining page ID'); - if( isset($_GET['title']) ) + if ( defined('ENANO_INTERFACE_INDEX') || defined('ENANO_INTERFACE_AJAX') || defined('IN_ENANO_INSTALL') || defined('IN_ENANO_UPGRADE') ) { - if ( $_GET['title'] == '' && getConfig('main_page') != '' ) - { - $this->main_page(); - } - if(strstr($_GET['title'], ' ')) + if( isset($_GET['title']) ) { - $loc = urldecode(rawurldecode($_SERVER['REQUEST_URI'])); - $loc = str_replace(' ', '_', $loc); - $loc = str_replace('+', '_', $loc); - $loc = str_replace('%20', '_', $loc); - redirect($loc, 'Redirecting...', 'Space detected in the URL, please wait whilst you are redirected', 0); - exit; + if ( $_GET['title'] == '' && getConfig('main_page') != '' ) + { + $this->main_page(); + } + if(strstr($_GET['title'], ' ')) + { + $loc = urldecode(rawurldecode($_SERVER['REQUEST_URI'])); + $loc = str_replace(' ', '_', $loc); + $loc = str_replace('+', '_', $loc); + $loc = str_replace('%20', '_', $loc); + redirect($loc, 'Redirecting...', 'Space detected in the URL, please wait whilst you are redirected', 0); + exit; + } + $url_namespace_special = substr($_GET['title'], 0, strlen($this->nslist['Special']) ); + $url_namespace_template = substr($_GET['title'], 0, strlen($this->nslist['Template']) ); + if($url_namespace_special == $this->nslist['Special'] || $url_namespace_template == $this->nslist['Template'] ) + { + $ex = explode('/', $_GET['title']); + $this->page = $ex[0]; + } + else + { + $this->page = $_GET['title']; + } + $this->fullpage = $_GET['title']; } - $url_namespace_special = substr($_GET['title'], 0, strlen($this->nslist['Special']) ); - $url_namespace_template = substr($_GET['title'], 0, strlen($this->nslist['Template']) ); - if($url_namespace_special == $this->nslist['Special'] || $url_namespace_template == $this->nslist['Template'] ) + elseif( isset($_SERVER['PATH_INFO']) ) { - $ex = explode('/', $_GET['title']); - $this->page = $ex[0]; + $pi = explode('/', $_SERVER['PATH_INFO']); + + if( !isset($pi[1]) || (isset($pi[1]) && $pi[1] == '' && getConfig('main_page') != '') ) + { + $this->main_page(); + } + if( strstr($pi[1], ' ') ) + { + $loc = str_replace(' ', '_', urldecode(rawurldecode($_SERVER['REQUEST_URI']))); + $loc = str_replace('+', '_', $loc); + $loc = str_replace('%20', '_', $loc); + redirect($loc, 'Redirecting...', 'Please wait whilst you are redirected', 3); + exit; + } + unset($pi[0]); + if( substr($pi[1], 0, strlen($this->nslist['Special'])) == $this->nslist['Special'] || substr($pi[1], 0, strlen($this->nslist['Template'])) == $this->nslist['Template'] ) + { + $pi2 = $pi[1]; + } + else + { + $pi2 = implode('/', $pi); + } + $this->page = $pi2; + $this->fullpage = implode('/', $pi); } else { - $this->page = $_GET['title']; - } - $this->fullpage = $_GET['title']; - } - elseif( isset($_SERVER['PATH_INFO']) ) - { - $pi = explode('/', $_SERVER['PATH_INFO']); - - if( !isset($pi[1]) || (isset($pi[1]) && $pi[1] == '' && getConfig('main_page') != '') ) - { - $this->main_page(); + $k = array_keys($_GET); + foreach($k as $c) + { + if(substr($c, 0, 1) == '/') + { + $this->page = substr($c, 1, strlen($c)); + + // Bugfix for apache somehow passing dots as underscores + global $mime_types; + + $exts = array_keys($mime_types); + $exts = '(' . implode('|', $exts) . ')'; + + if ( preg_match( '#_'.$exts.'#i', $this->page ) ) + { + $this->page = preg_replace( '#_'.$exts.'#i', '.\\1', $this->page ); + } + + $this->fullpage = $this->page; + + if(substr($this->page, 0, strlen($this->nslist['Special']))==$this->nslist['Special'] || substr($this->page, 0, strlen($this->nslist['Template']))==$this->nslist['Template']) + { + $ex = explode('/', $this->page); + $this->page = $ex[0]; + } + if(strstr($this->page, ' ')) + { + $loc = str_replace(' ', '_', urldecode(rawurldecode($_SERVER['REQUEST_URI']))); + $loc = str_replace('+', '_', $loc); + $loc = str_replace('%20', '_', $loc); + redirect($loc, 'Redirecting...', 'Space in the URL detected, please wait whilst you are redirected', 0); + exit; + } + break; + } + } + if(!$this->page && !($this->page == '' && getConfig('main_page') == '')) + { + $this->main_page(); + } } - if( strstr($pi[1], ' ') ) - { - $loc = str_replace(' ', '_', urldecode(rawurldecode($_SERVER['REQUEST_URI']))); - $loc = str_replace('+', '_', $loc); - $loc = str_replace('%20', '_', $loc); - redirect($loc, 'Redirecting...', 'Please wait whilst you are redirected', 3); - exit; - } - unset($pi[0]); - if( substr($pi[1], 0, strlen($this->nslist['Special'])) == $this->nslist['Special'] || substr($pi[1], 0, strlen($this->nslist['Template'])) == $this->nslist['Template'] ) - { - $pi2 = $pi[1]; - } - else - { - $pi2 = implode('/', $pi); - } - $this->page = $pi2; - $this->fullpage = implode('/', $pi); } else { - $k = array_keys($_GET); - foreach($k as $c) + // Starting up Enano with the API from a page that wants to do its own thing. Generate + // metadata for an anonymous page and avoid redirection at all costs. + if ( isset($GLOBALS['title']) ) + { + $title =& $GLOBALS['title']; + } + else { - if(substr($c, 0, 1) == '/') - { - $this->page = substr($c, 1, strlen($c)); - - // Bugfix for apache somehow passing dots as underscores - global $mime_types; - - $exts = array_keys($mime_types); - $exts = '(' . implode('|', $exts) . ')'; - - if ( preg_match( '#_'.$exts.'#i', $this->page ) ) - { - $this->page = preg_replace( '#_'.$exts.'#i', '.\\1', $this->page ); - } - - $this->fullpage = $this->page; - - if(substr($this->page, 0, strlen($this->nslist['Special']))==$this->nslist['Special'] || substr($this->page, 0, strlen($this->nslist['Template']))==$this->nslist['Template']) - { - $ex = explode('/', $this->page); - $this->page = $ex[0]; - } - if(strstr($this->page, ' ')) - { - $loc = str_replace(' ', '_', urldecode(rawurldecode($_SERVER['REQUEST_URI']))); - $loc = str_replace('+', '_', $loc); - $loc = str_replace('%20', '_', $loc); - redirect($loc, 'Redirecting...', 'Space in the URL detected, please wait whilst you are redirected', 0); - exit; - } - break; - } + $title = basename($_SERVER['SCRIPT_NAME']); } - if(!$this->page && !($this->page == '' && getConfig('main_page') == '')) + $base_uri = str_replace( scriptPath . '/', '', $_SERVER['SCRIPT_NAME'] ); + $this->page = $this->nslist['Anonymous'] . sanitize_page_id($base_uri); + $this->fullpage = $this->nslist['Anonymous'] . sanitize_page_id($base_uri); + $this->namespace = 'Anonymous'; + $this->cpage = array( + 'name' => $title, + 'urlname' => sanitize_page_id($base_uri), + 'namespace' => 'Anonymous', + 'special' => 1, + 'visible' => 1, + 'comments_on' => 1, + 'protected' => 1, + 'delvotes' => 0, + 'delvote_ips' => '' + ); + $this->anonymous_page = true; + $code = $plugins->setHook('paths_anonymous_page'); + foreach ( $code as $cmd ) { - $this->main_page(); + eval($cmd); } } $this->page = sanitize_page_id($this->page); $this->fullpage = sanitize_page_id($this->fullpage); - dc_here('paths: setting $paths->cpage'); - if(isset($this->pages[$this->page])) { - dc_here('paths: page existence verified, our page ID is: '.$this->page); $this->page_exists = true; $this->cpage = $this->pages[$this->page]; $this->namespace = $this->cpage['namespace']; @@ -304,7 +334,6 @@ } else { - dc_here('paths: page doesn\'t exist, creating new page in memory
our page ID is: '.$this->page); $this->page_exists = false; $page_name = dirtify_page_id($this->page); $page_name = str_replace('_', ' ', $page_name); @@ -315,18 +344,21 @@ redirect($pid_cleaned, 'Sanitizer message', 'page id sanitized', 0); } - $this->cpage = Array( - 'name'=>$page_name, - 'urlname'=>$this->page, - 'namespace'=>'Article', - 'special'=>0, - 'visible'=>0, - 'comments_on'=>1, - 'protected'=>0, - 'delvotes'=>0, - 'delvote_ips'=>'', - 'wiki_mode'=>2, - ); + if ( !is_array($this->cpage) ) + { + $this->cpage = Array( + 'name'=>$page_name, + 'urlname'=>$this->page, + 'namespace'=>'Article', + 'special'=>0, + 'visible'=>0, + 'comments_on'=>1, + 'protected'=>0, + 'delvotes'=>0, + 'delvote_ips'=>'', + 'wiki_mode'=>2, + ); + } // Look for a namespace prefix in the urlname, and assign a different namespace, if necessary $k = array_keys($this->nslist); for($i=0;$inslist);$i++) @@ -348,7 +380,7 @@ { $this->cpage['protected'] = 1; } - if($this->namespace == 'Special') + if($this->namespace == 'Special' && !$this->anonymous_page) { // Can't load nonexistent pages if( is_string(getConfig('main_page')) ) @@ -384,7 +416,6 @@ function add_page($flags) { - //dc_dump($flags, 'paths: page added by plugin:'); $flags['urlname_nons'] = $flags['urlname']; $flags['urlname'] = $this->nslist[$flags['namespace']] . $flags['urlname']; // Applies the User:/File:/etc prefixes to the URL names $pages_len = sizeof($this->pages)/2; @@ -409,7 +440,6 @@ function sysmsg($n) { global $db, $session, $paths, $template, $plugins; // Common objects - dc_here('paths: system message requested: '.$n); $q = $db->sql_query('SELECT page_text, char_tag FROM '.table_prefix.'page_text WHERE page_id=\''.$db->escape($n).'\' AND namespace=\'System\''); if( !$q ) {