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