autostart plugin

autostart plugin by Jesús A. Álvarez
Handles non-existant pages by redirecting to the namespace's start page if available.

Last updated on 2008-04-28. Provides Syntax.
Compatible with DokuWiki >= 2006-11-06.

Similar to autosearch.

Tagged with index, redirect, start.

Download dokuwiki-plugin-autostart.tgz

Description

If a non-existant page is requested, but a namespace with that name exists, and it has a start page, you will be redirected to it. I think the autosearch plugin does this, but I haven't been able to obtain it.

Source Code

Create a directory autostart in /wiki/lib/plugins and save the code in a action.php file there.

<?php
/**
 * Autostart Plugin: Redirects to the namespace's start page if available
 *
 * @author Jesús A. Álvarez <zydeco@namedfork.net>
 */
 
if (!defined('DOKU_INC')) die();
if (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN', DOKU_INC . 'lib/plugins/');
require_once (DOKU_PLUGIN . 'action.php');
 
class action_plugin_autostart extends DokuWiki_Action_Plugin
{
    function getInfo() {
        return array (
            'author' => 'Jesús A. Álvarez',
            'email' => 'zydeco@namedfork.net',
            'date' => '2008-04-28',
            'name' => 'Autostart Plugin',
            'desc' => "Redirect from the namespace's name to its start page",
            'url' => 'http://wiki.splitbrain.org/plugin:autostart',
        );
    }
 
    function page_exists($id) {
        if (function_exists('page_exists'))
            return page_exists($id);
        else
            return @file_exists(wikiFN($id));
    }
 
    function register(&$controller) {
        $controller->register_hook('ACTION_ACT_PREPROCESS', 'AFTER', $this, 'preprocess', array ());
    }
 
    function preprocess(& $event, $param) {
        global $conf;
        global $ID;
        if (!$this->page_exists($ID) && $event->data == 'show')
        {
            if($this->page_exists($ID.':'.$conf['start']))
                // start page inside namespace
                $id = $ID.':'.$conf['start'];
            elseif($this->page_exists($ID.':'.noNS(cleanID($ID))))
                // page named like the NS inside the NS
                $id = $ID.':'.noNS(cleanID($ID));
            if ($id) header('Location: ' . wl($id,'',true));
        }
    }
 
}

Discussion

Nice work! Thanks! - Jason Xun Xu jasonxu [dot] dev [at] gmail [dot] com

 
plugin/autostart.txt · Last modified: 2008/05/01 12:43 by zydeco
 
Imprint Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki
WikiForumIRCBugsTranslate