From ff6e86e8e5db2728d3b34c10f561cfdb533afa87 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 6 Jul 2017 13:11:54 +0200 Subject: [runmode] New module for managing special boot modes of clients --- modules-available/runmode/page.inc.php | 115 +++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 modules-available/runmode/page.inc.php (limited to 'modules-available/runmode/page.inc.php') diff --git a/modules-available/runmode/page.inc.php b/modules-available/runmode/page.inc.php new file mode 100644 index 00000000..f3e7d024 --- /dev/null +++ b/modules-available/runmode/page.inc.php @@ -0,0 +1,115 @@ +handleAction($action); + Util::redirect('?do=runmode'); + } + } + + private function handleAction($action) + { + if ($action === 'save-mode') { + $machines = array_filter(Request::post('machines', [], 'array'), 'is_string'); + $module = Request::post('module', false, 'string'); + $modeId = Request::post('modeid', false, 'string'); + // TODO Validate + foreach ($machines as $machine) { + Database::exec("INSERT IGNORE INTO runmode (machineuuid, module, modeid) + VALUES (:machine, :module, :modeId)", compact('machine', 'module', 'modeId')); + } + Database::exec('DELETE FROM runmode + WHERE module = :module AND modeid = :modeId AND machineuuid NOT IN (:machines)', + compact('module', 'modeId', 'machines')); + Util::redirect('?do=runmode&module=' . $module . '&modeid=' . $modeId); + } + } + + protected function doRender() + { + $moduleId = Request::get('module', false, 'string'); + if ($moduleId !== false) { + $this->renderModule($moduleId); + return; + } + // TODO + Message::addInfo('OMGhai2U'); + } + + private function renderModule($moduleId) + { + $module = Module::get($moduleId); + if ($module === false) { + Message::addError('main.no-such-module', $moduleId); + Util::redirect('?do=runmode'); + } + $modeId = Request::get('modeid', false, 'string'); + if ($modeId !== false) { + $this->renderModuleMode($module, $modeId); + return; + } + // TODO + Message::addError('main.parameter-missing', 'modeid'); + Util::redirect('?do=runmode'); + } + + /** + * @param \Module $module + * @param string $modeId + */ + private function renderModuleMode($module, $modeId) + { + $moduleId = $module->getIdentifier(); + $modeName = RunMode::getModeName($moduleId, $modeId); + if ($modeName === false) { + Message::addError('invalid-modeid', $modeId); + Util::redirect('?do=runmode'); + } + Render::addTemplate('machine-selector', [ + 'module' => $moduleId, + 'modeid' => $modeId, + 'moduleName' => $module->getDisplayName(), + 'modeName' => $modeName, + 'machines' => json_encode(RunMode::getForMode($module, $modeId, true)) + ]); + } + + protected function doAjax() + { + $action = Request::any('action', false, 'string'); + + if ($action === 'getmachines') { + $query = Request::get('query', false, 'string'); + + $result = Database::simpleQuery('SELECT m.machineuuid, m.macaddr, m.clientip, m.hostname, m.locationid, ' + . 'r.module, r.modeid ' + . 'FROM machine m ' + . 'LEFT JOIN runmode r USING (machineuuid) ' + . 'WHERE machineuuid LIKE :query ' + . ' OR macaddr LIKE :query ' + . ' OR clientip LIKE :query ' + . ' OR hostname LIKE :query ' + . ' LIMIT 100', ['query' => "%$query%"]); + + $returnObject = [ + 'machines' => $result->fetchAll(PDO::FETCH_ASSOC) + ]; + + echo json_encode($returnObject); + } + } + +} \ No newline at end of file -- cgit v1.2.3-55-g7522