xref: /template/ancient/tpl_functions.php (revision 5046b4362243e89db3bfe0433ec1d5d5a76270b9)
1*5046b436Sluqi114<?php
2*5046b436Sluqi114/**
3*5046b436Sluqi114 * Template Functions
4*5046b436Sluqi114 *
5*5046b436Sluqi114 * This file provides template specific custom functions that are
6*5046b436Sluqi114 * not provided by the DokuWiki core.
7*5046b436Sluqi114 * It is common practice to start each function with an underscore
8*5046b436Sluqi114 * to make sure it won't interfere with future core functions.
9*5046b436Sluqi114 */
10*5046b436Sluqi114
11*5046b436Sluqi114// must be run from within DokuWiki
12*5046b436Sluqi114if (!defined('DOKU_INC')) die();
13*5046b436Sluqi114
14*5046b436Sluqi114/**
15*5046b436Sluqi114 * Create link/button to discussion page and back
16*5046b436Sluqi114 *
17*5046b436Sluqi114 * @author Anika Henke <anika@selfthinker.org>
18*5046b436Sluqi114 */
19*5046b436Sluqi114function _tpl_discussion($discussionPage, $title, $backTitle, $link=0, $wrapper=0, $return=0) {
20*5046b436Sluqi114    global $ID;
21*5046b436Sluqi114    $output = '';
22*5046b436Sluqi114
23*5046b436Sluqi114    $discussPage    = str_replace('@ID@', $ID, $discussionPage);
24*5046b436Sluqi114    $discussPageRaw = str_replace('@ID@', '', $discussionPage);
25*5046b436Sluqi114    $isDiscussPage  = strpos($ID, $discussPageRaw) !== false;
26*5046b436Sluqi114    $backID         = ':'.str_replace($discussPageRaw, '', $ID);
27*5046b436Sluqi114
28*5046b436Sluqi114    if ($wrapper) $output .= "<$wrapper>";
29*5046b436Sluqi114
30*5046b436Sluqi114    if ($isDiscussPage) {
31*5046b436Sluqi114        if ($link) {
32*5046b436Sluqi114            ob_start();
33*5046b436Sluqi114            tpl_pagelink($backID, $backTitle);
34*5046b436Sluqi114            $output .= ob_get_contents();
35*5046b436Sluqi114            ob_end_clean();
36*5046b436Sluqi114        } else {
37*5046b436Sluqi114            $output .= html_btn('back2article', $backID, '', array(), 'get', 0, $backTitle);
38*5046b436Sluqi114        }
39*5046b436Sluqi114    } else {
40*5046b436Sluqi114        if ($link) {
41*5046b436Sluqi114            ob_start();
42*5046b436Sluqi114            tpl_pagelink($discussPage, $title);
43*5046b436Sluqi114            $output .= ob_get_contents();
44*5046b436Sluqi114            ob_end_clean();
45*5046b436Sluqi114        } else {
46*5046b436Sluqi114            $output .= html_btn('discussion', $discussPage, '', array(), 'get', 0, $title);
47*5046b436Sluqi114        }
48*5046b436Sluqi114    }
49*5046b436Sluqi114
50*5046b436Sluqi114    if ($wrapper) $output .= "</$wrapper>";
51*5046b436Sluqi114    if ($return) return $output;
52*5046b436Sluqi114    echo $output;
53*5046b436Sluqi114}
54*5046b436Sluqi114
55*5046b436Sluqi114/**
56*5046b436Sluqi114 * Create link/button to user page
57*5046b436Sluqi114 *
58*5046b436Sluqi114 * @author Anika Henke <anika@selfthinker.org>
59*5046b436Sluqi114 */
60*5046b436Sluqi114function _tpl_userpage($userPage, $title, $link=0, $wrapper=0, $return=0) {
61*5046b436Sluqi114    if (empty($_SERVER['REMOTE_USER'])) return;
62*5046b436Sluqi114
63*5046b436Sluqi114    global $conf;
64*5046b436Sluqi114    $output = '';
65*5046b436Sluqi114    $userPage = str_replace('@USER@', $_SERVER['REMOTE_USER'], $userPage);
66*5046b436Sluqi114
67*5046b436Sluqi114    if ($wrapper) $output .= "<$wrapper>";
68*5046b436Sluqi114
69*5046b436Sluqi114    if ($link) {
70*5046b436Sluqi114        ob_start();
71*5046b436Sluqi114        tpl_pagelink($userPage, $title);
72*5046b436Sluqi114        $output .= ob_get_contents();
73*5046b436Sluqi114        ob_end_clean();
74*5046b436Sluqi114    } else {
75*5046b436Sluqi114        $output .= html_btn('userpage', $userPage, '', array(), 'get', 0, $title);
76*5046b436Sluqi114    }
77*5046b436Sluqi114
78*5046b436Sluqi114    if ($wrapper) $output .= "</$wrapper>";
79*5046b436Sluqi114    if ($return) return $output;
80*5046b436Sluqi114    echo $output;
81*5046b436Sluqi114}
82*5046b436Sluqi114
83*5046b436Sluqi114/**
84*5046b436Sluqi114 * Wrapper around custom template actions
85*5046b436Sluqi114 *
86*5046b436Sluqi114 * @author Anika Henke <anika@selfthinker.org>
87*5046b436Sluqi114 */
88*5046b436Sluqi114function _tpl_action($type, $link=0, $wrapper=0, $return=0) {
89*5046b436Sluqi114    switch ($type) {
90*5046b436Sluqi114        case 'discussion':
91*5046b436Sluqi114            if (tpl_getConf('discussionPage')) {
92*5046b436Sluqi114                $output = _tpl_discussion(tpl_getConf('discussionPage'), tpl_getLang('discussion'), tpl_getLang('back_to_article'), $link, $wrapper, 1);
93*5046b436Sluqi114                if ($return) return $output;
94*5046b436Sluqi114                echo $output;
95*5046b436Sluqi114            }
96*5046b436Sluqi114            break;
97*5046b436Sluqi114        case 'userpage':
98*5046b436Sluqi114            if (tpl_getConf('userPage')) {
99*5046b436Sluqi114                $output = _tpl_userpage(tpl_getConf('userPage'), tpl_getLang('userpage'), $link, $wrapper, 1);
100*5046b436Sluqi114                if ($return) return $output;
101*5046b436Sluqi114                echo $output;
102*5046b436Sluqi114            }
103*5046b436Sluqi114            break;
104*5046b436Sluqi114    }
105*5046b436Sluqi114}
106*5046b436Sluqi114
107*5046b436Sluqi114/**
108*5046b436Sluqi114 * copied to core (available since Detritus)
109*5046b436Sluqi114 */
110*5046b436Sluqi114if (!function_exists('tpl_toolsevent')) {
111*5046b436Sluqi114    function tpl_toolsevent($toolsname, $items, $view='main') {
112*5046b436Sluqi114        $data = array(
113*5046b436Sluqi114            'view'  => $view,
114*5046b436Sluqi114            'items' => $items
115*5046b436Sluqi114        );
116*5046b436Sluqi114
117*5046b436Sluqi114        $hook = 'TEMPLATE_'.strtoupper($toolsname).'_DISPLAY';
118*5046b436Sluqi114        $evt = new Doku_Event($hook, $data);
119*5046b436Sluqi114        if($evt->advise_before()){
120*5046b436Sluqi114            foreach($evt->data['items'] as $k => $html) echo $html;
121*5046b436Sluqi114        }
122*5046b436Sluqi114        $evt->advise_after();
123*5046b436Sluqi114    }
124*5046b436Sluqi114}
125*5046b436Sluqi114
126*5046b436Sluqi114/**
127*5046b436Sluqi114 * copied from core (available since Binky)
128*5046b436Sluqi114 */
129*5046b436Sluqi114if (!function_exists('tpl_classes')) {
130*5046b436Sluqi114    function tpl_classes() {
131*5046b436Sluqi114        global $ACT, $conf, $ID, $INFO;
132*5046b436Sluqi114        $classes = array(
133*5046b436Sluqi114            'dokuwiki',
134*5046b436Sluqi114            'mode_'.$ACT,
135*5046b436Sluqi114            'tpl_'.$conf['template'],
136*5046b436Sluqi114            !empty($_SERVER['REMOTE_USER']) ? 'loggedIn' : '',
137*5046b436Sluqi114            $INFO['exists'] ? '' : 'notFound',
138*5046b436Sluqi114            ($ID == $conf['start']) ? 'home' : '',
139*5046b436Sluqi114        );
140*5046b436Sluqi114        return join(' ', $classes);
141*5046b436Sluqi114    }
142*5046b436Sluqi114}
143