xref: /plugin/include/syntax/footer.php (revision 6f0ad9d79afa4a195e1eb82c755f75097a6d5540)
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 . '&middot; ', $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 = '&nbsp;';
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