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