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); } } }