summaryrefslogblamecommitdiffstats
path: root/modules-available/runmode/page.inc.php
blob: f3e7d0248bacbf917fd0b6d8fbaf239761dbe42a (plain) (tree)


















































































































                                                                                                                                 
<?php

class Page_RunMode extends Page
{

	/**
	 * Called before any page rendering happens - early hook to check parameters etc.
	 */
	protected function doPreprocess()
	{
		User::load();
		if (!User::isLoggedIn()) {
			Message::addError('main.no-permission');
			Util::redirect('?do=main');
		}
		$action = Request::post('action', false, 'string');
		if ($action !== false) {
			$this->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);
		}
	}

}