register_hook('ACTION_ACT_PREPROCESS','BEFORE',$this,'handle_action',array()); $contr->register_hook('TPL_CONTENT_DISPLAY', 'AFTER', $this, 'handle_content', array()); } function handle_action(&$e, $param){ if($e->data != 'show') return; global $ID; if($_GET['whennotfounded']){ msg("You are automatically redirected here from the non-existent page [".hsc($_GET['whennotfounded'])."].".(auth_quickaclcheck($_GET['whennotfounded'])>=AUTH_CREATE ? " If you did not want to be redirected, you may also create and edit [".hsc($_GET['whennotfounded'])."]":'')); return; } if(is_file(wikiFN($ID))) return; global $INFO; global $conf; $excludes=$this->getConf('excludepatterns'); if(is_string($excludes)) $excludes=explode(',',$excludes); foreach($excludes as $exclude){ if(strpos($ID,$exclude)!==false) return; } $actions=$this->getConf('actions'); if(is_string($actions)) $actions=explode(',',$actions); foreach($actions as $action){ $func="do_$action"; if(is_callable([$this,$func])){ if($this->$func($e)) break; } else dbg("Undefined whennotfound thing to do [".hsc($action)."]"); } } function handle_content(&$e, $param){ global $action_plugin_whennotfound_pagelist; if($action_plugin_whennotfound_pagelist) echo $action_plugin_whennotfound_pagelist; } function do_send404(&$e){ header('HTTP/1.0 404 Not Found'); die(); } function do_send404_onlynoneditor(&$e){ global $ID; if(auth_quickaclcheck($ID)>=AUTH_EDIT) return; $this->do_send404($e); } function do_startpage(&$e){ global $ID; $startpages = explode(',',$this->getConf('startpages')); foreach($startpages as $index){ if($index == '@subpage_with_same_name') $index = noNS($ID); if(is_file(wikiFN("$ID:$index"))){ #Redirect. Add whennotfounded param if user has CREATE permission, so on the resulting page they can be prompted if they intended to create this $ID page instead of being redirected there. $get=$_GET; unset($get['id']); if(auth_quickaclcheck($ID)>=AUTH_CREATE) $get['whennotfounded']=$ID; header("Location: ".wl("$ID:$index", $get,null,'&')); die(); } } } function do_translation(&$e){ global $ID; global $conf; if(!($h =& plugin_load('helper', 'translation'))) return; if($id=$h->getavailableid($ID)){ $get=$_GET; $get['lang']=$conf['lang']; if(auth_quickaclcheck($ID)>=AUTH_CREATE) $get['whennotfounded']=$ID; header("Location: ".wl($id, $get,null,'&')); die(); } } function do_pagelist(&$e){ global $ID; if(!is_dir(dirname(wikiFN("$ID:dummy"))) || !($h =& plugin_load('syntax', 'indexmenu_indexmenu'))) return; if(!($renderer = p_get_renderer('xhtml'))) return; $handler = new Doku_Handler(); $handled = $h->handle("{{indexmenu>:$ID#2|js#default}}",$renderer,null,$handler); $h->render('xhtml',$renderer, $handled); global $action_plugin_whennotfound_pagelist; $action_plugin_whennotfound_pagelist=$renderer->doc; #this'll be printed later in handle_content msg("The page you requested [".hsc($ID)."] is a namespace and does not exist as a separate page. A search action is triggered for that page name below." .( auth_quickaclcheck($ID)>=AUTH_CREATE ? " You may also create and edit [".hsc($ID)."]." : "") ); return true; } function do_search(&$e){ global $ID; if(!actionOK('search')) return; msg("The page you requested [".hsc($ID)."] is a namespace and does not exist as a separate page. A search action is triggered for that page name below." .( auth_quickaclcheck($ID)>=AUTH_CREATE ? " You may also create and edit [".hsc($ID)."]." : "") ); $e->data = 'search'; return true; } }