-
Notifications
You must be signed in to change notification settings - Fork 1
/
action.php
134 lines (117 loc) · 4.77 KB
/
action.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<?php
/**
* Plugin for a nicer Admin main page with some layout
*
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Håkan Sandell <hakan.sandell@home.se>
*/
// must be run within Dokuwiki
if (!defined('DOKU_INC'))
die();
if (!defined('DOKU_PLUGIN'))
define('DOKU_PLUGIN', DOKU_INC . 'lib/plugins/');
require_once (DOKU_PLUGIN . 'action.php');
class action_plugin_adminhomepage extends DokuWiki_Action_Plugin {
/**
* return some info
*/
function getInfo() {
return array (
'author' => 'Håkan Sandell',
'email' => 'hakan.sandell@home.se',
'date' => @file_get_contents(DOKU_PLUGIN.'adminhomepage/VERSION'),
'name' => 'AdminHomePage',
'desc' => 'Replacement for "Admin" page with better usability',
'url' => 'http://www.dokuwiki.org/plugin:adminhomepage'
);
}
/**
* register the eventhandlers
*/
function register(& $controller) {
$controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handle_act_preprocess');
$controller->register_hook('TPL_ACT_UNKNOWN', 'BEFORE', $this, 'handle_act_unknown');
}
/**
* Looks for admin action, if found the name is changed so TPL_ACT_UNKNOWN is raised
*/
function handle_act_preprocess(& $event, $param) {
if (($event->data == 'admin') && empty($_REQUEST['page']) && (act_permcheck($event->data) == 'admin')) {
$event->data = 'adminhomepage';
$event->stopPropagation();
$event->preventDefault();
}
}
/**
* Catches the "unknown" event "adminhomepage" and outputs the alternative admin main page
*/
function handle_act_unknown(& $event, $param) {
if ($event->data == 'adminhomepage') {
$this->_html_admin();
$event->stopPropagation();
$event->preventDefault();
}
}
function _html_admin(){
global $ID;
global $INFO;
global $lang;
global $conf;
global $auth;
// build menu of admin functions from the plugins that handle them
$pluginlist = plugin_list('admin');
$menu = array();
foreach ($pluginlist as $p) {
if($obj =& plugin_load('admin',$p) === NULL) continue;
// check permissions
if($obj->forAdminOnly() && !$INFO['isadmin']) continue;
$menu[$p] = array('plugin' => $p,
'prompt' => $obj->getMenuText($conf['lang']),
'sort' => $obj->getMenuSort()
);
}
// check if UserManager available
$usermanageravailable = true;
if (!isset($auth)) {
$usermanageravailable = false;
} else if (!$auth->canDo('getUsers')) {
$usermanageravailable = false;
}
// output main tasks
ptln('<h1>'.$this->getLang('pageheader').'</h1>');
ptln('<div id="admin__maintable">');
ptln(' <div id="admin__tasks">');
if ($INFO['isadmin']) {
if ($usermanageravailable) {
ptln(' <div id="admin__usermanager"><a href="'.wl($ID, 'do=admin&page=usermanager').'">'.$menu[usermanager]['prompt'].'</a></div>');
}
ptln(' <div id="admin__acl"><a href="'.wl($ID, 'do=admin&page=acl').'">'.$menu['acl']['prompt'].'</a></div>');
ptln(' <div id="admin__plugin"><a href="'.wl($ID, 'do=admin&page=plugin').'">'.$menu['plugin']['prompt'].'</a></div>');
ptln(' <div id="admin__config"><a href="'.wl($ID, 'do=admin&page=config').'">'.$menu['config']['prompt'].'</a></div>');
}else{
ptln(' ');
}
ptln(' </div>');
ptln(' <div id="admin__version">');
ptln(' <div><b>'.$this->getLang('wiki_version').'</b><br/>'.getVersion().'</div>');
ptln(' <div><b>'.$this->getLang('php_version').'</b><br/>'.phpversion().'</div>');
ptln(' </div>');
ptln('</div>');
// remove the four main plugins
unset($menu['acl']);
if ($usermanageravailable) unset($menu['usermanager']);
unset($menu['config']);
unset($menu['plugin']);
// output the remaining menu
usort($menu, 'p_sort_modes');
ptln('<h2>'.$this->getLang('more_adminheader').'</h2>');
ptln('<div class="level2">');
echo $this->render($this->getLang('more_admintext'));
ptln('<ul id="admin__pluginlist">');
foreach ($menu as $item) {
if (!$item['prompt']) continue;
ptln(' <li class="level1"><div class="li"><a href="'.wl($ID, 'do=admin&page='.$item['plugin']).'">'.$item['prompt'].'</a></div></li>');
}
ptln('</ul></div>');
}
}