xref: /plugin/backlinks/syntax.php (revision af390d349a0cbb3348f82bfd2f197cb2bdfbc763)
1df3d88adSMichael Klier<?php
2df3d88adSMichael Klier/**
3df3d88adSMichael Klier * 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',
30cef58d31SMichael Klier            'date'   => '2006-10-31',
31df3d88adSMichael Klier            'name'   => 'Backlinks',
32df3d88adSMichael Klier            'desc'   => 'Displays backlinks to a given page.',
33df3d88adSMichael Klier            'url'    => 'http://www.chimeric.de/dokuwiki/plugins/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
59df3d88adSMichael Klier        $id = substr($match,12,-2); //strip {{backlinks> from start and }} from end
60df3d88adSMichael Klier
61df3d88adSMichael Klier        if($id == '.') $id = $ID;
62df3d88adSMichael Klier
63df3d88adSMichael Klier        resolve_pageid(getNS($ID),$id,$exits);
64df3d88adSMichael Klier
65*af390d34SMichael Klier        return (array($id));
66df3d88adSMichael Klier    }
67df3d88adSMichael Klier
68df3d88adSMichael Klier    /**
69df3d88adSMichael Klier     * Handles the actual output creation.
70df3d88adSMichael Klier     */
71*af390d34SMichael Klier    function render($mode, &$renderer, $data) {
72df3d88adSMichael Klier
73df3d88adSMichael Klier        if($mode == 'xhtml'){
74df3d88adSMichael Klier            $renderer->info['cache'] = false;
75df3d88adSMichael Klier
76*af390d34SMichael Klier            @require_once(DOKU_INC.'inc/fulltext.php');
77*af390d34SMichael Klier            $backlinks = ft_backlinks($data[0]);
78*af390d34SMichael Klier
79df3d88adSMichael Klier            if(!empty($backlinks)) {
80df3d88adSMichael Klier
81df3d88adSMichael Klier                $renderer->doc .= '<div id="plugin__backlinks">' . DW_LF;
82df3d88adSMichael Klier                $renderer->doc .= '<ul class="idx">';
83df3d88adSMichael Klier
84df3d88adSMichael Klier                foreach($backlinks as $backlink){
85cef58d31SMichael Klier                    $name = p_get_metadata($backlink,'title');
86*af390d34SMichael Klier                    if(empty($name)) $name = $backlink;
87df3d88adSMichael Klier                    $renderer->doc .= '<li><div class="li">';
88cef58d31SMichael Klier                    $renderer->doc .= html_wikilink($backlink,$name,'');
89df3d88adSMichael Klier                    $renderer->doc .= '</div></li>';
90df3d88adSMichael Klier                }
91df3d88adSMichael Klier
92df3d88adSMichael Klier                $renderer->doc .= '</ul>';
93df3d88adSMichael Klier                $renderer->doc .= '</div>' . DW_LF;
94df3d88adSMichael Klier            }
95df3d88adSMichael Klier
96df3d88adSMichael Klier            return true;
97df3d88adSMichael Klier        }
98df3d88adSMichael Klier        return false;
99df3d88adSMichael Klier    }
100df3d88adSMichael Klier}
101df3d88adSMichael Klier//Setup VIM: ex: et ts=4 enc=utf-8 :
102