1*6f0ad9d7SMichael Klier<?php 2*6f0ad9d7SMichael Klier/** 3*6f0ad9d7SMichael Klier * Include plugin (permalink header component) 4*6f0ad9d7SMichael Klier * 5*6f0ad9d7SMichael Klier * Provides a header instruction which renders a permalink to the included page 6*6f0ad9d7SMichael Klier * 7*6f0ad9d7SMichael Klier * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 8*6f0ad9d7SMichael Klier * @author Gina Haeussge <osd@foosel.net> 9*6f0ad9d7SMichael Klier * @author Michael Klier <chi@chimeric.de> 10*6f0ad9d7SMichael Klier */ 11*6f0ad9d7SMichael Klier 12*6f0ad9d7SMichael Klierif (!defined('DOKU_INC')) 13*6f0ad9d7SMichael Klier define('DOKU_INC', realpath(dirname(__FILE__) . '/../../') . '/'); 14*6f0ad9d7SMichael Klierif (!defined('DOKU_PLUGIN')) 15*6f0ad9d7SMichael Klier define('DOKU_PLUGIN', DOKU_INC . 'lib/plugins/'); 16*6f0ad9d7SMichael Klierrequire_once (DOKU_PLUGIN . 'syntax.php'); 17*6f0ad9d7SMichael Klier 18*6f0ad9d7SMichael Klierclass syntax_plugin_include_footer extends DokuWiki_Syntax_Plugin { 19*6f0ad9d7SMichael Klier 20*6f0ad9d7SMichael Klier function getInfo() { 21*6f0ad9d7SMichael Klier return array ( 22*6f0ad9d7SMichael Klier 'author' => 'Gina Häußge, Michael Klier', 23*6f0ad9d7SMichael Klier 'email' => 'dokuwiki@chimeric.de', 24*6f0ad9d7SMichael Klier 'date' => @file_get_contents(DOKU_PLUGIN . 'blog/VERSION'), 25*6f0ad9d7SMichael Klier 'name' => 'Include Plugin (permalink header component)', 26*6f0ad9d7SMichael Klier 'desc' => 'Provides a header instruction which renders a permalink to the included page', 27*6f0ad9d7SMichael Klier 'url' => 'http://wiki.splitbrain.org/plugin:include', 28*6f0ad9d7SMichael Klier ); 29*6f0ad9d7SMichael Klier } 30*6f0ad9d7SMichael Klier 31*6f0ad9d7SMichael Klier function getType() { 32*6f0ad9d7SMichael Klier return 'formatting'; 33*6f0ad9d7SMichael Klier } 34*6f0ad9d7SMichael Klier 35*6f0ad9d7SMichael Klier function getSort() { 36*6f0ad9d7SMichael Klier return 300; 37*6f0ad9d7SMichael Klier } 38*6f0ad9d7SMichael Klier 39*6f0ad9d7SMichael Klier function handle($match, $state, $pos, &$handler) { 40*6f0ad9d7SMichael Klier // this is a syntax plugin that doesn't offer any syntax, so there's nothing to handle by the parser 41*6f0ad9d7SMichael Klier } 42*6f0ad9d7SMichael Klier 43*6f0ad9d7SMichael Klier /** 44*6f0ad9d7SMichael Klier * Renders a permalink header. 45*6f0ad9d7SMichael Klier * 46*6f0ad9d7SMichael Klier * Code heavily copied from the header renderer from inc/parser/xhtml.php, just 47*6f0ad9d7SMichael Klier * added an href parameter to the anchor tag linking to the wikilink. 48*6f0ad9d7SMichael Klier */ 49*6f0ad9d7SMichael Klier function render($mode, &$renderer, $data) { 50*6f0ad9d7SMichael Klier 51*6f0ad9d7SMichael Klier list($page, $sect, $sect_title, $flags, $redirect_id, $footer_lvl) = $data; 52*6f0ad9d7SMichael Klier 53*6f0ad9d7SMichael Klier if ($mode == 'xhtml') { 54*6f0ad9d7SMichael Klier $renderer->doc .= $this->html_editButton($page, $flags, $redirect_id); 55*6f0ad9d7SMichael Klier $renderer->doc .= $this->html_footer($page, $sect, $sect_title, $flags, $footer_lvl, $renderer); 56*6f0ad9d7SMichael Klier return true; 57*6f0ad9d7SMichael Klier } 58*6f0ad9d7SMichael Klier return false; 59*6f0ad9d7SMichael Klier } 60*6f0ad9d7SMichael Klier 61*6f0ad9d7SMichael Klier /** 62*6f0ad9d7SMichael Klier * Display an edit button for the included page 63*6f0ad9d7SMichael Klier */ 64*6f0ad9d7SMichael Klier function html_editButton($page, $flags, $redirect_id) { 65*6f0ad9d7SMichael Klier global $lang; 66*6f0ad9d7SMichael Klier 67*6f0ad9d7SMichael Klier if($flags['editbtn']) return ''; 68*6f0ad9d7SMichael Klier 69*6f0ad9d7SMichael Klier $xhtml = ''; 70*6f0ad9d7SMichael Klier if(auth_quickaclcheck($page) >= AUTH_EDIT) { 71*6f0ad9d7SMichael Klier $params = array('do' => 'edit'); 72*6f0ad9d7SMichael Klier if($flags['redirect']) $params['redirect_id'] = $redirect_id; 73*6f0ad9d7SMichael Klier $xhtml = '<div class="secedit">' . DOKU_LF 74*6f0ad9d7SMichael Klier . DOKU_TAB . html_btn('secedit', $page, '', $params, 'post') . DOKU_LF 75*6f0ad9d7SMichael Klier . '</div>' . DOKU_LF; 76*6f0ad9d7SMichael Klier return $xhtml; 77*6f0ad9d7SMichael Klier } 78*6f0ad9d7SMichael Klier } 79*6f0ad9d7SMichael Klier 80*6f0ad9d7SMichael Klier /** 81*6f0ad9d7SMichael Klier * Returns the meta line below the included page 82*6f0ad9d7SMichael Klier */ 83*6f0ad9d7SMichael Klier function html_footer($page, $sect, $sect_title, $flags, $footer_lvl, &$renderer) { 84*6f0ad9d7SMichael Klier global $conf, $ID; 85*6f0ad9d7SMichael Klier 86*6f0ad9d7SMichael Klier if(!$flags['footer']) return ''; 87*6f0ad9d7SMichael Klier 88*6f0ad9d7SMichael Klier preg_match_all('|<div class="level(\d)">|i', $renderer->doc, $matches, PREG_SET_ORDER); 89*6f0ad9d7SMichael Klier $lvl = $matches[count($matches)-1][1]; 90*6f0ad9d7SMichael Klier if($lvl <= 0) $lvl =1; 91*6f0ad9d7SMichael Klier 92*6f0ad9d7SMichael Klier $meta = p_get_metadata($page); 93*6f0ad9d7SMichael Klier $xhtml = array(); 94*6f0ad9d7SMichael Klier 95*6f0ad9d7SMichael Klier // permalink 96*6f0ad9d7SMichael Klier if ($flags['link']) { 97*6f0ad9d7SMichael Klier $class = (page_exists($page) ? 'wikilink1' : 'wikilink2'); 98*6f0ad9d7SMichael Klier if(!empty($sect)) $page = $page . '#' . $sect; 99*6f0ad9d7SMichael Klier $title = $sect_title; 100*6f0ad9d7SMichael Klier if (!$title) $title = str_replace('_', ' ', noNS($page)); 101*6f0ad9d7SMichael Klier $link = array( 102*6f0ad9d7SMichael Klier 'url' => wl($page), 103*6f0ad9d7SMichael Klier 'title' => $page, 104*6f0ad9d7SMichael Klier 'name' => hsc($title), 105*6f0ad9d7SMichael Klier 'target' => $conf['target']['wiki'], 106*6f0ad9d7SMichael Klier 'class' => $class . ' permalink', 107*6f0ad9d7SMichael Klier 'more' => 'rel="bookmark"', 108*6f0ad9d7SMichael Klier ); 109*6f0ad9d7SMichael Klier $xhtml[] = $renderer->_formatLink($link); 110*6f0ad9d7SMichael Klier } 111*6f0ad9d7SMichael Klier 112*6f0ad9d7SMichael Klier // date 113*6f0ad9d7SMichael Klier if ($flags['date']) { 114*6f0ad9d7SMichael Klier $date = $meta['date']['created']; 115*6f0ad9d7SMichael Klier if ($date) { 116*6f0ad9d7SMichael Klier $xhtml[] = '<abbr class="published" title="'.strftime('%Y-%m-%dT%H:%M:%SZ', $date).'">' 117*6f0ad9d7SMichael Klier . strftime($conf['dformat'], $date) 118*6f0ad9d7SMichael Klier . '</abbr>'; 119*6f0ad9d7SMichael Klier } 120*6f0ad9d7SMichael Klier } 121*6f0ad9d7SMichael Klier 122*6f0ad9d7SMichael Klier // author 123*6f0ad9d7SMichael Klier if ($flags['user']) { 124*6f0ad9d7SMichael Klier $author = $meta['creator']; 125*6f0ad9d7SMichael Klier if ($author) { 126*6f0ad9d7SMichael Klier $userpage = cleanID($this->getConf('usernamespace').':'.$author); 127*6f0ad9d7SMichael Klier resolve_pageid(getNS($ID), $userpage, $exists); 128*6f0ad9d7SMichael Klier $class = ($exists ? 'wikilink1' : 'wikilink2'); 129*6f0ad9d7SMichael Klier $link = array( 130*6f0ad9d7SMichael Klier 'url' => wl($userpage), 131*6f0ad9d7SMichael Klier 'title' => $userpage, 132*6f0ad9d7SMichael Klier 'name' => hsc($author), 133*6f0ad9d7SMichael Klier 'target' => $conf['target']['wiki'], 134*6f0ad9d7SMichael Klier 'class' => $class.' url fn', 135*6f0ad9d7SMichael Klier 'pre' => '<span class="vcard author">', 136*6f0ad9d7SMichael Klier 'suf' => '</span>', 137*6f0ad9d7SMichael Klier ); 138*6f0ad9d7SMichael Klier $xhtml[] = $renderer->_formatLink($link); 139*6f0ad9d7SMichael Klier } 140*6f0ad9d7SMichael Klier } 141*6f0ad9d7SMichael Klier 142*6f0ad9d7SMichael Klier // comments - let Discussion Plugin do the work for us 143*6f0ad9d7SMichael Klier if (empty($sec) && $flags['comments'] && (!plugin_isdisabled('discussion')) && ($discussion =& plugin_load('helper', 'discussion'))) { 144*6f0ad9d7SMichael Klier $disc = $discussion->td($page); 145*6f0ad9d7SMichael Klier if ($disc) $xhtml[] = '<span class="comment">' . $disc . '</span>'; 146*6f0ad9d7SMichael Klier } 147*6f0ad9d7SMichael Klier 148*6f0ad9d7SMichael Klier // linkbacks - let Linkback Plugin do the work for us 149*6f0ad9d7SMichael Klier if (empty($sect) && $flags['linkbacks'] && (!plugin_isdisabled('linkback')) && ($linkback =& plugin_load('helper', 'linkback'))) { 150*6f0ad9d7SMichael Klier $link = $linkback->td($id); 151*6f0ad9d7SMichael Klier if ($link) $xhtml[] = '<span class="linkback">' . $link . '</span>'; 152*6f0ad9d7SMichael Klier } 153*6f0ad9d7SMichael Klier 154*6f0ad9d7SMichael Klier $xhtml = implode(DOKU_LF . DOKU_TAB . '· ', $xhtml); 155*6f0ad9d7SMichael Klier 156*6f0ad9d7SMichael Klier // tags - let Tag Plugin do the work for us 157*6f0ad9d7SMichael Klier if (empty($sect) && $flags['showtags'] && (!plugin_isdisabled('tag')) && ($tag =& plugin_load('helper', 'tag'))) { 158*6f0ad9d7SMichael Klier $page['tags'] = '<div class="tags"><span>' . DOKU_LF 159*6f0ad9d7SMichael Klier . DOKU_TAB . $tag->td($id) . DOKU_LF 160*6f0ad9d7SMichael Klier . DOKU_TAB . '</span></div>' . DOKU_LF; 161*6f0ad9d7SMichael Klier $xhtml = $page['tags'] . DOKU_TAB . $xhtml; 162*6f0ad9d7SMichael Klier } 163*6f0ad9d7SMichael Klier 164*6f0ad9d7SMichael Klier if (!$xhtml) $xhtml = ' '; 165*6f0ad9d7SMichael Klier $class = 'inclmeta'; 166*6f0ad9d7SMichael Klier $class .= ' level' . $footer_lvl; 167*6f0ad9d7SMichael Klier return '<div class="' . $class . '">' . DOKU_LF . DOKU_TAB . $xhtml . DOKU_LF . '</div>' . DOKU_LF; 168*6f0ad9d7SMichael Klier } 169*6f0ad9d7SMichael Klier} 170*6f0ad9d7SMichael Klier// vim:ts=4:sw=4:et:enc=utf-8: 171