diff options
author | Simon Rettberg | 2020-05-15 17:24:05 +0200 |
---|---|---|
committer | Simon Rettberg | 2020-05-15 17:24:05 +0200 |
commit | 2faaf8383c9c8a1a557518caa9f2284158df523b (patch) | |
tree | 74daaa3fa45f0808df369657d8f6efd54d19ed40 /modules-available/remoteaccess/page.inc.php | |
parent | [rebootcontrol] Wait until tasks finish (diff) | |
download | slx-admin-2faaf8383c9c8a1a557518caa9f2284158df523b.tar.gz slx-admin-2faaf8383c9c8a1a557518caa9f2284158df523b.tar.xz slx-admin-2faaf8383c9c8a1a557518caa9f2284158df523b.zip |
[remoteaccess] New module
Diffstat (limited to 'modules-available/remoteaccess/page.inc.php')
-rw-r--r-- | modules-available/remoteaccess/page.inc.php | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/modules-available/remoteaccess/page.inc.php b/modules-available/remoteaccess/page.inc.php new file mode 100644 index 00000000..edbe0ff8 --- /dev/null +++ b/modules-available/remoteaccess/page.inc.php @@ -0,0 +1,100 @@ +<?php + +/* + * TODO TODO TODO TODO + * ### PERMISSIONS ### + * TODO TODO TODO TODO + */ + +class Page_RemoteAccess extends Page +{ + + protected function doPreprocess() + { + User::load(); + if (!User::isLoggedIn()) { + Message::addError('main.no-permission'); + Util::redirect('?do=Main'); + } + $action = Request::post('action', false, 'string'); + // Add group adds a DB row and then falls through to regular saving + if ($action === 'add-group') { + Database::exec("INSERT INTO remoteaccess_group (groupname, wolcount, passwd, active) + VALUES ('.new', 0, '', 0)"); + $action = 'save-settings'; + Message::addSuccess('group-added'); + } + if ($action === 'save-settings') { + $groups = Request::post('group', [], 'array'); + foreach ($groups as $id => $group) { + Database::exec("UPDATE remoteaccess_group SET groupname = :name, wolcount = :wol, + passwd = :passwd, active = :active WHERE groupid = :id", [ + 'id' => $id, + 'name' => isset($group['groupname']) ? $group['groupname'] : $id, + 'wol' => isset($group['wolcount']) ? $group['wolcount'] : 0, + 'passwd' => isset($group['passwd']) ? $group['passwd'] : 0, + 'active' => isset($group['active']) && $group['active'] ? 1 : 0, + ]); + } + Property::set(RemoteAccess::PROP_ALLOWED_VNC_NET, Request::post('allowed-source', '', 'string')); + Property::set(RemoteAccess::PROP_TRY_VIRT_HANDOVER, Request::post('virt-handover', false, 'int')); + Message::addSuccess('settings-saved'); + } elseif ($action === 'set-locations') { + $groupid = Request::post('groupid', Request::REQUIRED, 'int'); + $group = Database::queryFirst("SELECT groupname FROM remoteaccess_group WHERE groupid = :groupid"); + if ($group === false) { + Message::addError('group-not-found', $groupid); + Util::redirect('?do=remoteaccess'); + } + $locations = array_values(Request::post('location', [], 'array')); + if (empty($locations)) { + Database::exec("DELETE FROM remoteaccess_x_location WHERE groupid = :id", ['id' => $groupid]); + } else { + Database::exec("INSERT IGNORE INTO remoteaccess_x_location (groupid, locationid) + VALUES :values", ['values' => array_map(function($item) use ($groupid) { return [$groupid, $item]; }, $locations)]); + Database::exec("DELETE FROM remoteaccess_x_location WHERE groupid = :id AND locationid NOT IN (:locations)", + ['id' => $groupid, 'locations' => $locations]); + } + Message::addSuccess('group-updated', $group['groupname']); + } + if (Request::isPost()) { + Util::redirect('?do=remoteaccess'); + } + } + + protected function doRender() + { + $groupid = Request::get('groupid', false, 'int'); + if ($groupid === false) { + // Edit list of groups and their settings + $groups = Database::queryAll("SELECT g.groupid, g.groupname, g.wolcount, g.passwd, + Count(l.locationid) AS locs, If(g.active, 'checked', '') AS checked + FROM remoteaccess_group g LEFT JOIN remoteaccess_x_location l USING (groupid) + GROUP BY g.groupid, g.groupname + ORDER BY g.groupname ASC"); + $data = [ + 'allowed-source' => Property::get(RemoteAccess::PROP_ALLOWED_VNC_NET), + 'virt-handover_checked' => Property::get(RemoteAccess::PROP_TRY_VIRT_HANDOVER) ? 'checked' : '', + 'groups' => $groups, + ]; + Render::addTemplate('edit-settings', $data); + } else { + // Edit locations for group + $group = Database::queryFirst("SELECT groupid, groupname FROM remoteaccess_group WHERE groupid = :id", + ['id' => $groupid]); + if ($group === false) { + Message::addError('group-not-found', $groupid); + return; + } + $locationList = Location::getLocationsAssoc(); + $enabled = RemoteAccess::getEnabledLocations($groupid); + foreach ($enabled as $lid) { + if (isset($locationList[$lid])) { + $locationList[$lid]['checked'] = 'checked'; + } + } + Render::addTemplate('edit-group', $group + ['locations' => array_values($locationList)]); + } + } + +} |