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
|
<?php
class SubPage
{
public static function doPreprocess()
{
}
public static function doRender()
{
$show = Request::get('what', 'tasklist', 'string');
if ($show === 'tasklist') {
self::showTaskList();
} elseif ($show === 'task') {
self::showTask();
}
}
private static function showTask()
{
$taskid = Request::get("taskid", Request::REQUIRED, 'string');
$task = Taskmanager::status($taskid);
if (!Taskmanager::isTask($task) || !isset($task['data'])) {
Message::addError('no-such-task', $taskid);
return;
}
$td =& $task['data'];
$type = Request::get('type', false, 'string');
if ($type === false) {
// Try to guess
if (isset($td['locationId']) || isset($td['clients'])) {
$type = 'reboot';
} elseif (isset($td['result'])) {
$type = 'exec';
}
}
if ($type === 'reboot') {
$data = [
'taskId' => $task['id'],
'locationId' => $td['locationId'],
'locationName' => Location::getName($td['locationId']),
];
$uuids = array_map(function ($entry) {
return $entry['machineuuid'];
}, $td['clients']);
$data['clients'] = RebootQueries::getMachinesByUuid($uuids);
Render::addTemplate('status-reboot', $data);
} elseif ($type === 'exec') {
$data = [
'taskId' => $task['id'],
];
Render::addTemplate('status-exec', $data);
} elseif ($type === 'checkhost') {
$ip = array_key_first($td['result']);
$data = [
'taskId' => $task['id'],
'host' => $ip,
];
Render::addTemplate('status-checkconnection', $data);
} else {
Message::addError('unknown-task-type');
}
}
private static function showTaskList()
{
// Append list of active reboot/shutdown tasks
$allowedLocs = User::getAllowedLocations("*");
$active = RebootControl::getActiveTasks($allowedLocs);
if (empty($active)) {
Message::addInfo('no-current-tasks');
} else {
foreach ($active as &$entry) {
$entry['locationName'] = Location::getName($entry['locationId']);
}
unset($entry);
Render::addTemplate('task-list', ['list' => $active]);
}
}
public static function doAjax()
{
}
}
// Remove when we require >= 7.3.0
if (!function_exists('array_key_first')) {
function array_key_first(array $arr) {
foreach($arr as $key => $unused) {
return $key;
}
return NULL;
}
}
|