xref: /plugin/backlinks/syntax.php (revision 1d513eb663756d8d690b6b3d24fc669400536d87)
1df3d88adSMichael Klier<?php
2df3d88adSMichael Klier/**
3*1d513eb6SMichael Klier * DokuWiki Syntax Plugin Backlinks
4df3d88adSMichael Klier *
5df3d88adSMichael Klier * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
6df3d88adSMichael Klier * @author  Michael Klier <chi@chimeric.de>
7df3d88adSMichael Klier */
8df3d88adSMichael Klier
9df3d88adSMichael Klierif(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
10df3d88adSMichael Klierif(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
11df3d88adSMichael Klierif(!defined('DW_LF')) define('DW_LF',"\n");
12df3d88adSMichael Klier
13df3d88adSMichael Klierrequire_once(DOKU_PLUGIN.'syntax.php');
14cef58d31SMichael Klierrequire_once(DOKU_INC.'inc/parserutils.php');
15df3d88adSMichael Klier
16df3d88adSMichael Klier/**
17df3d88adSMichael Klier * All DokuWiki plugins to extend the parser/rendering mechanism
18df3d88adSMichael Klier * need to inherit from this class
19df3d88adSMichael Klier */
20df3d88adSMichael Klierclass syntax_plugin_backlinks extends DokuWiki_Syntax_Plugin {
21df3d88adSMichael Klier
22df3d88adSMichael Klier
23df3d88adSMichael Klier    /**
24df3d88adSMichael Klier     * General Info
25df3d88adSMichael Klier     */
26df3d88adSMichael Klier    function getInfo(){
27df3d88adSMichael Klier        return array(
28df3d88adSMichael Klier            'author' => 'Michael Klier',
29df3d88adSMichael Klier            'email'  => 'chi@chimeric.de',
30b7d951daSMichael Klier            'date'   => '2006-01-03',
31df3d88adSMichael Klier            'name'   => 'Backlinks',
32df3d88adSMichael Klier            'desc'   => 'Displays backlinks to a given page.',
33b7d951daSMichael Klier            'url'    => 'http://www.chimeric.de/projects/dokuwiki/plugin/backlinks'
34df3d88adSMichael Klier        );
35df3d88adSMichael Klier    }
36df3d88adSMichael Klier
37df3d88adSMichael Klier    /**
38df3d88adSMichael Klier     * Syntax Type
39df3d88adSMichael Klier     *
40df3d88adSMichael Klier     * Needs to return one of the mode types defined in $PARSER_MODES in parser.php
41df3d88adSMichael Klier     */
42df3d88adSMichael Klier    function getType()  { return 'substition'; }
43df3d88adSMichael Klier    function getPType() { return 'block'; }
44df3d88adSMichael Klier    function getSort()  { return 304; }
45df3d88adSMichael Klier
46df3d88adSMichael Klier    /**
47df3d88adSMichael Klier     * Connect pattern to lexer
48df3d88adSMichael Klier     */
49df3d88adSMichael Klier    function connectTo($mode) {
50df3d88adSMichael Klier        $this->Lexer->addSpecialPattern('\{\{backlinks>.+?\}\}',$mode,'plugin_backlinks');
51df3d88adSMichael Klier    }
52df3d88adSMichael Klier
53df3d88adSMichael Klier    /**
54df3d88adSMichael Klier     * Handler to prepare matched data for the rendering process
55df3d88adSMichael Klier     */
56df3d88adSMichael Klier    function handle($match, $state, $pos, &$handler){
57df3d88adSMichael Klier        global $ID;
58df3d88adSMichael Klier
59b3ce3c89SMichael Klier        $match = substr($match,12,-2); //strip {{backlinks> from start and }} from end
601a05a48bSMichael Klier        $match = ($match == '.') ? $ID : $match;
61df3d88adSMichael Klier
621a05a48bSMichael Klier        if(strstr($match,".:")) {
631a05a48bSMichael Klier            resolve_pageid(getNS($ID),$match,$exists);
641a05a48bSMichael Klier        }
65df3d88adSMichael Klier
66b3ce3c89SMichael Klier        return (array($match));
67df3d88adSMichael Klier    }
68df3d88adSMichael Klier
69df3d88adSMichael Klier    /**
70df3d88adSMichael Klier     * Handles the actual output creation.
71df3d88adSMichael Klier     */
72af390d34SMichael Klier    function render($mode, &$renderer, $data) {
73df3d88adSMichael Klier
74df3d88adSMichael Klier        if($mode == 'xhtml'){
75df3d88adSMichael Klier            $renderer->info['cache'] = false;
76df3d88adSMichael Klier
77af390d34SMichael Klier            @require_once(DOKU_INC.'inc/fulltext.php');
78af390d34SMichael Klier            $backlinks = ft_backlinks($data[0]);
79af390d34SMichael Klier
80df3d88adSMichael Klier            if(!empty($backlinks)) {
81df3d88adSMichael Klier
82df3d88adSMichael Klier                $renderer->doc .= '<div id="plugin__backlinks">' . DW_LF;
83df3d88adSMichael Klier                $renderer->doc .= '<ul class="idx">';
84df3d88adSMichael Klier
85df3d88adSMichael Klier                foreach($backlinks as $backlink){
86cef58d31SMichael Klier                    $name = p_get_metadata($backlink,'title');
87af390d34SMichael Klier                    if(empty($name)) $name = $backlink;
88df3d88adSMichael Klier                    $renderer->doc .= '<li><div class="li">';
8974ec2b5cSMichael Klier                    $renderer->doc .= html_wikilink(':'.$backlink,$name,'');
90df3d88adSMichael Klier                    $renderer->doc .= '</div></li>';
91df3d88adSMichael Klier                }
92df3d88adSMichael Klier
93df3d88adSMichael Klier                $renderer->doc .= '</ul>';
94df3d88adSMichael Klier                $renderer->doc .= '</div>' . DW_LF;
95df3d88adSMichael Klier            }
96df3d88adSMichael Klier
97df3d88adSMichael Klier            return true;
98df3d88adSMichael Klier        }
99df3d88adSMichael Klier        return false;
100df3d88adSMichael Klier    }
101df3d88adSMichael Klier}
102df3d88adSMichael Klier//Setup VIM: ex: et ts=4 enc=utf-8 :
103