16f0ad9d7SMichael Klier<?php 26f0ad9d7SMichael Klier/** 36f0ad9d7SMichael Klier * Include plugin (permalink header component) 46f0ad9d7SMichael Klier * 56f0ad9d7SMichael Klier * Provides a header instruction which renders a permalink to the included page 66f0ad9d7SMichael Klier * 76f0ad9d7SMichael Klier * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 86f0ad9d7SMichael Klier * @author Gina Haeussge <osd@foosel.net> 96f0ad9d7SMichael Klier * @author Michael Klier <chi@chimeric.de> 106f0ad9d7SMichael Klier */ 116f0ad9d7SMichael Klier 126f0ad9d7SMichael Klierif (!defined('DOKU_INC')) 136f0ad9d7SMichael Klier define('DOKU_INC', realpath(dirname(__FILE__) . '/../../') . '/'); 146f0ad9d7SMichael Klierif (!defined('DOKU_PLUGIN')) 156f0ad9d7SMichael Klier define('DOKU_PLUGIN', DOKU_INC . 'lib/plugins/'); 166f0ad9d7SMichael Klierrequire_once (DOKU_PLUGIN . 'syntax.php'); 176f0ad9d7SMichael Klier 186f0ad9d7SMichael Klierclass syntax_plugin_include_footer extends DokuWiki_Syntax_Plugin { 196f0ad9d7SMichael Klier 206f0ad9d7SMichael Klier function getInfo() { 216f0ad9d7SMichael Klier return array ( 226f0ad9d7SMichael Klier 'author' => 'Gina Häußge, Michael Klier', 236f0ad9d7SMichael Klier 'email' => 'dokuwiki@chimeric.de', 246f0ad9d7SMichael Klier 'date' => @file_get_contents(DOKU_PLUGIN . 'blog/VERSION'), 256f0ad9d7SMichael Klier 'name' => 'Include Plugin (permalink header component)', 266f0ad9d7SMichael Klier 'desc' => 'Provides a header instruction which renders a permalink to the included page', 276f0ad9d7SMichael Klier 'url' => 'http://wiki.splitbrain.org/plugin:include', 286f0ad9d7SMichael Klier ); 296f0ad9d7SMichael Klier } 306f0ad9d7SMichael Klier 316f0ad9d7SMichael Klier function getType() { 326f0ad9d7SMichael Klier return 'formatting'; 336f0ad9d7SMichael Klier } 346f0ad9d7SMichael Klier 356f0ad9d7SMichael Klier function getSort() { 366f0ad9d7SMichael Klier return 300; 376f0ad9d7SMichael Klier } 386f0ad9d7SMichael Klier 396f0ad9d7SMichael Klier function handle($match, $state, $pos, &$handler) { 406f0ad9d7SMichael Klier // this is a syntax plugin that doesn't offer any syntax, so there's nothing to handle by the parser 416f0ad9d7SMichael Klier } 426f0ad9d7SMichael Klier 436f0ad9d7SMichael Klier /** 446f0ad9d7SMichael Klier * Renders a permalink header. 456f0ad9d7SMichael Klier * 466f0ad9d7SMichael Klier * Code heavily copied from the header renderer from inc/parser/xhtml.php, just 476f0ad9d7SMichael Klier * added an href parameter to the anchor tag linking to the wikilink. 486f0ad9d7SMichael Klier */ 496f0ad9d7SMichael Klier function render($mode, &$renderer, $data) { 506f0ad9d7SMichael Klier 516f0ad9d7SMichael Klier list($page, $sect, $sect_title, $flags, $redirect_id, $footer_lvl) = $data; 526f0ad9d7SMichael Klier 536f0ad9d7SMichael Klier if ($mode == 'xhtml') { 546f0ad9d7SMichael Klier $renderer->doc .= $this->html_editButton($page, $flags, $redirect_id); 556f0ad9d7SMichael Klier $renderer->doc .= $this->html_footer($page, $sect, $sect_title, $flags, $footer_lvl, $renderer); 566f0ad9d7SMichael Klier return true; 576f0ad9d7SMichael Klier } 586f0ad9d7SMichael Klier return false; 596f0ad9d7SMichael Klier } 606f0ad9d7SMichael Klier 616f0ad9d7SMichael Klier /** 626f0ad9d7SMichael Klier * Display an edit button for the included page 636f0ad9d7SMichael Klier */ 646f0ad9d7SMichael Klier function html_editButton($page, $flags, $redirect_id) { 656f0ad9d7SMichael Klier global $lang; 666f0ad9d7SMichael Klier 676f0ad9d7SMichael Klier if($flags['editbtn']) return ''; 686f0ad9d7SMichael Klier 696f0ad9d7SMichael Klier $xhtml = ''; 706f0ad9d7SMichael Klier if(auth_quickaclcheck($page) >= AUTH_EDIT) { 716f0ad9d7SMichael Klier $params = array('do' => 'edit'); 726f0ad9d7SMichael Klier if($flags['redirect']) $params['redirect_id'] = $redirect_id; 736f0ad9d7SMichael Klier $xhtml = '<div class="secedit">' . DOKU_LF 746f0ad9d7SMichael Klier . DOKU_TAB . html_btn('secedit', $page, '', $params, 'post') . DOKU_LF 756f0ad9d7SMichael Klier . '</div>' . DOKU_LF; 766f0ad9d7SMichael Klier return $xhtml; 776f0ad9d7SMichael Klier } 786f0ad9d7SMichael Klier } 796f0ad9d7SMichael Klier 806f0ad9d7SMichael Klier /** 816f0ad9d7SMichael Klier * Returns the meta line below the included page 826f0ad9d7SMichael Klier */ 836f0ad9d7SMichael Klier function html_footer($page, $sect, $sect_title, $flags, $footer_lvl, &$renderer) { 846f0ad9d7SMichael Klier global $conf, $ID; 856f0ad9d7SMichael Klier 866f0ad9d7SMichael Klier if(!$flags['footer']) return ''; 876f0ad9d7SMichael Klier 886f0ad9d7SMichael Klier $meta = p_get_metadata($page); 896f0ad9d7SMichael Klier $xhtml = array(); 906f0ad9d7SMichael Klier 916f0ad9d7SMichael Klier // permalink 926f0ad9d7SMichael Klier if ($flags['link']) { 936f0ad9d7SMichael Klier $class = (page_exists($page) ? 'wikilink1' : 'wikilink2'); 94*d53221c4SMichael Klier $url = ($sect) ? wl($page) . '#' . $sect : wl($page); 95*d53221c4SMichael Klier $name = ($sect) ? $sect_title : $page; 96*d53221c4SMichael Klier $title = ($sect) ? $page . '#' . $sect : $page; 976f0ad9d7SMichael Klier if (!$title) $title = str_replace('_', ' ', noNS($page)); 986f0ad9d7SMichael Klier $link = array( 99*d53221c4SMichael Klier 'url' => $url, 100*d53221c4SMichael Klier 'title' => $title, 101*d53221c4SMichael Klier 'name' => $name, 1026f0ad9d7SMichael Klier 'target' => $conf['target']['wiki'], 1036f0ad9d7SMichael Klier 'class' => $class . ' permalink', 1046f0ad9d7SMichael Klier 'more' => 'rel="bookmark"', 1056f0ad9d7SMichael Klier ); 1066f0ad9d7SMichael Klier $xhtml[] = $renderer->_formatLink($link); 1076f0ad9d7SMichael Klier } 1086f0ad9d7SMichael Klier 1096f0ad9d7SMichael Klier // date 1106f0ad9d7SMichael Klier if ($flags['date']) { 1116f0ad9d7SMichael Klier $date = $meta['date']['created']; 1126f0ad9d7SMichael Klier if ($date) { 1136f0ad9d7SMichael Klier $xhtml[] = '<abbr class="published" title="'.strftime('%Y-%m-%dT%H:%M:%SZ', $date).'">' 1146f0ad9d7SMichael Klier . strftime($conf['dformat'], $date) 1156f0ad9d7SMichael Klier . '</abbr>'; 1166f0ad9d7SMichael Klier } 1176f0ad9d7SMichael Klier } 1186f0ad9d7SMichael Klier 1196f0ad9d7SMichael Klier // author 1206f0ad9d7SMichael Klier if ($flags['user']) { 1216f0ad9d7SMichael Klier $author = $meta['creator']; 1226f0ad9d7SMichael Klier if ($author) { 1236f0ad9d7SMichael Klier $userpage = cleanID($this->getConf('usernamespace').':'.$author); 1246f0ad9d7SMichael Klier resolve_pageid(getNS($ID), $userpage, $exists); 1256f0ad9d7SMichael Klier $class = ($exists ? 'wikilink1' : 'wikilink2'); 1266f0ad9d7SMichael Klier $link = array( 1276f0ad9d7SMichael Klier 'url' => wl($userpage), 1286f0ad9d7SMichael Klier 'title' => $userpage, 1296f0ad9d7SMichael Klier 'name' => hsc($author), 1306f0ad9d7SMichael Klier 'target' => $conf['target']['wiki'], 1316f0ad9d7SMichael Klier 'class' => $class.' url fn', 1326f0ad9d7SMichael Klier 'pre' => '<span class="vcard author">', 1336f0ad9d7SMichael Klier 'suf' => '</span>', 1346f0ad9d7SMichael Klier ); 1356f0ad9d7SMichael Klier $xhtml[] = $renderer->_formatLink($link); 1366f0ad9d7SMichael Klier } 1376f0ad9d7SMichael Klier } 1386f0ad9d7SMichael Klier 1396f0ad9d7SMichael Klier // comments - let Discussion Plugin do the work for us 1406f0ad9d7SMichael Klier if (empty($sec) && $flags['comments'] && (!plugin_isdisabled('discussion')) && ($discussion =& plugin_load('helper', 'discussion'))) { 1416f0ad9d7SMichael Klier $disc = $discussion->td($page); 1426f0ad9d7SMichael Klier if ($disc) $xhtml[] = '<span class="comment">' . $disc . '</span>'; 1436f0ad9d7SMichael Klier } 1446f0ad9d7SMichael Klier 1456f0ad9d7SMichael Klier // linkbacks - let Linkback Plugin do the work for us 1466f0ad9d7SMichael Klier if (empty($sect) && $flags['linkbacks'] && (!plugin_isdisabled('linkback')) && ($linkback =& plugin_load('helper', 'linkback'))) { 1476f0ad9d7SMichael Klier $link = $linkback->td($id); 1486f0ad9d7SMichael Klier if ($link) $xhtml[] = '<span class="linkback">' . $link . '</span>'; 1496f0ad9d7SMichael Klier } 1506f0ad9d7SMichael Klier 1516f0ad9d7SMichael Klier $xhtml = implode(DOKU_LF . DOKU_TAB . '· ', $xhtml); 1526f0ad9d7SMichael Klier 1536f0ad9d7SMichael Klier // tags - let Tag Plugin do the work for us 1546f0ad9d7SMichael Klier if (empty($sect) && $flags['showtags'] && (!plugin_isdisabled('tag')) && ($tag =& plugin_load('helper', 'tag'))) { 1556f0ad9d7SMichael Klier $page['tags'] = '<div class="tags"><span>' . DOKU_LF 1566f0ad9d7SMichael Klier . DOKU_TAB . $tag->td($id) . DOKU_LF 1576f0ad9d7SMichael Klier . DOKU_TAB . '</span></div>' . DOKU_LF; 1586f0ad9d7SMichael Klier $xhtml = $page['tags'] . DOKU_TAB . $xhtml; 1596f0ad9d7SMichael Klier } 1606f0ad9d7SMichael Klier 1616f0ad9d7SMichael Klier if (!$xhtml) $xhtml = ' '; 1626f0ad9d7SMichael Klier $class = 'inclmeta'; 1636f0ad9d7SMichael Klier $class .= ' level' . $footer_lvl; 1646f0ad9d7SMichael Klier return '<div class="' . $class . '">' . DOKU_LF . DOKU_TAB . $xhtml . DOKU_LF . '</div>' . DOKU_LF; 1656f0ad9d7SMichael Klier } 1666f0ad9d7SMichael Klier} 1676f0ad9d7SMichael Klier// vim:ts=4:sw=4:et:enc=utf-8: 168