1<?php
2
3/**
4 * DokuWiki Bootstrap3 Template: User Menu
5 *
6 * @link     http://dokuwiki.org/template:bootstrap3
7 * @author   Giuseppe Di Terlizzi <giuseppe.diterlizzi@gmail.com>
8 * @license  GPL 2 (http://www.gnu.org/licenses/gpl.html)
9 */
10
11
12use dokuwiki\plugin\extension\Exception as ExtensionException;
13use dokuwiki\plugin\extension\Local;
14use dokuwiki\plugin\extension\Repository;
15
16global $INFO, $lang, $TPL;
17
18$use_avatar = $TPL->getConf('useAvatar');
19
20$extensions_update = array();
21$avatar_size       = 96;
22$avatar_size_small = 32;
23
24if ($use_avatar) {
25    $avatar_img_small = $TPL->getAvatar($_SERVER['REMOTE_USER'], $INFO['userinfo']['mail'], $avatar_size_small);
26    $avatar_img       = $TPL->getAvatar($_SERVER['REMOTE_USER'], $INFO['userinfo']['mail'], $avatar_size);
27} else {
28    $avatar_img = tpl_getMediaFile(array('images/avatar.png'));
29}
30
31$label_type = 'info';
32$user_type  = 'User';
33
34if ($INFO['ismanager']) {
35    $label_type = 'warning';
36    $user_type  = 'Manager';
37}
38
39if ($INFO['isadmin']) {
40    $label_type = 'danger';
41    $user_type  = 'Admin';
42}
43
44if ($INFO['isadmin'] && $TPL->getConf('notifyExtensionsUpdate')) {
45    if (class_exists(Local::class)) {
46        // new extension manager since Librarian
47        try {
48            $extensions = (new Local())->getExtensions();
49            Repository::getInstance()->initExtensions(array_keys($extensions));
50            foreach ($extensions as $extension) {
51                if ($extension->isEnabled() && $extension->isUpdateAvailable()) {
52                    $extensions_update[] = $extension->getDisplayName();
53                }
54            }
55        } catch (ExtensionException $ignore) {
56            // Ignore the exception
57        }
58    } else {
59        // old extension manager until Kaos
60        /** @var $plugin_controller PluginController */
61        global $plugin_controller;
62        if ($extension = plugin_load('helper', 'extension_extension')) {
63
64            foreach ($plugin_controller->getList('', true) as $plugin) {
65                $extension->setExtension($plugin);
66                if ($extension->updateAvailable() && $extension->isEnabled()) {
67                    $extensions_update[] = $extension->getDisplayName();
68                }
69            }
70        }
71    }
72
73    sort($extensions_update);
74}
75
76?>
77<!-- user-menu -->
78<ul class="nav navbar-nav" id="dw__user_menu">
79    <li class="dropdown">
80
81        <a href="<?php wl($ID) ?>" class="dropdown-toggle" data-target="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
82            <?php if ($use_avatar): ?>
83            <img alt="<?php echo hsc($_SERVER['REMOTE_USER']) ?>" src="<?php echo $avatar_img_small ?>" class="img-circle profile-image" width="<?php echo $avatar_size_small ?>" height="<?php echo $avatar_size_small ?>" />
84            <?php else: ?>
85            <?php echo iconify('mdi:account'); ?>
86            <?php endif; ?> <span class="hidden-lg hidden-md hidden-sm"><?php echo hsc($_SERVER['REMOTE_USER']) ?></span> <span class="caret"></span>
87        </a>
88
89        <ul class="dropdown-menu" role="menu">
90
91            <li>
92
93                <div class="container-fluid">
94
95                    <p class="text-right">
96                        <span style="cursor:help" class="label label-<?php echo $label_type; ?>" title="<?php echo tpl_getLang('user_groups'); ?>: <?php echo join(', ', $INFO['userinfo']['grps']); ?>">
97                            <?php echo $user_type; ?>
98                        </span>
99                    </p>
100
101                    <p class="text-center">
102                        <img alt="<?php echo hsc($_SERVER['REMOTE_USER']) ?>" src="<?php echo $avatar_img ?>" class="img-circle" width="<?php echo $avatar_size ?>" height="<?php echo $avatar_size ?>" />
103                    </p>
104
105                    <div class="mb-2">
106                        <div class="mb-2">
107                            <strong><?php echo hsc($INFO['userinfo']['name']) ?></strong>
108                        </div>
109                        <div class="small">
110                            <bdi><?php echo hsc($_SERVER['REMOTE_USER']) ?></bdi>
111                        </div>
112                        <div class="small">
113                            <?php echo $INFO['userinfo']['mail'] ?>
114                        </div>
115                    </div>
116
117                </div>
118
119            </li>
120
121            <li class="divider"></li>
122
123            <?php if ($TPL->getConf('showUserHomeLink')): ?>
124            <li class="dropdown-header">Home-Page</li>
125            <?php
126                if ($userhomepage = $TPL->getPlugin('userhomepage')):
127                    echo '<li><a rel="nofollow" href="' . wl($userhomepage->getPublicID()) . '" title="'. $userhomepage->getLang('publicpage') .'">' .
128                         iconify('mdi:home') . ' ' . $userhomepage->getLang('publicpage') .'</a></li>';
129
130                    echo '<li><a rel="nofollow" href="' . wl($userhomepage->getPrivateID()) . '" title="'. $userhomepage->getLang('privatenamespace') .'">' .
131                         iconify('mdi:home-account') . ' ' . $userhomepage->getLang('privatenamespace') .'</a></li>';
132                else:
133            ?>
134
135            <li>
136                <a href="<?php echo $TPL->getUserHomePageLink() ?>" title="Home-Page" rel="nofollow">
137                    <?php echo iconify('mdi:home-account'); ?> Home-Page
138                </a>
139            </li>
140
141            <?php endif; ?>
142            <li class="divider"></li>
143            <?php endif; ?>
144
145            <li class="dropdown-header"><?php echo $lang['user_tools'] ?></li>
146
147            <?php
148
149                echo $TPL->getToolMenuItemLink('user', 'profile');
150
151                if ($INFO['isadmin']) {
152                    echo $TPL->getToolMenuItemLink('user', 'admin');
153                }
154
155            ?>
156
157            <?php if ($INFO['isadmin'] && count($extensions_update)): ?>
158            <li>
159                <a href="<?php echo wl($ID, array('do' => 'admin', 'page' => 'extension')); ?>" title=" - <?php echo implode('&#13; - ', $extensions_update) ?>">
160                    <?php echo iconify('mdi:puzzle', array('class' => 'text-success')) ?> <?php echo tpl_getLang('extensions_update'); ?> <span class="badge"><?php echo count($extensions_update) ?></span>
161                </a>
162            </li>
163            <?php endif; ?>
164
165            <li class="divider"></li>
166
167            <?php
168
169                // Add the user menu
170
171                $usermenu_pageid = null;
172                $user_homepage_id = $TPL->getUserHomePageID();
173
174                foreach (array("$user_homepage_id:usermenu", 'usermenu') as $id) {
175                    $usermenu_pageid = page_findnearest($id, $TPL->getConf('useACL'));
176                    if ($usermenu_pageid) break;
177                }
178
179                if ($usermenu_pageid) {
180
181                    $html = new simple_html_dom;
182                    $html->load($TPL->includePage($usermenu_pageid, true), true, false);
183
184                    foreach ($html->find('h1,h2,h3,h4,h5,h6') as $elm) {
185                        $elm->outertext = '<li class="dropdown-header">' . $elm->innertext . '</li>';
186                    }
187                    foreach ($html->find('hr') as $elm) {
188                        $elm->outertext = '<li class="divider"></li>';
189                    }
190                    foreach ($html->find('ul') as $elm) {
191                        $elm->outertext = '' . $elm->innertext;
192                    }
193                    foreach ($html->find('div') as $elm) {
194                        $elm->outertext = $elm->innertext;
195                    }
196
197                    $content = $html->save();
198
199                    $html->clear();
200                    unset($html);
201
202                    $content = str_replace('urlextern', '', $content);
203
204                    echo $content;
205                    echo '<li class="divider"></li>';
206
207                }
208            ?>
209
210            <?php
211                echo $TPL->getToolMenuItemLink('user', 'logout');
212            ?>
213
214        </ul>
215    </li>
216</ul>
217<!-- /user-menu -->
218