summaryrefslogtreecommitdiffstats
path: root/modules-available/remoteaccess/page.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'modules-available/remoteaccess/page.inc.php')
-rw-r--r--modules-available/remoteaccess/page.inc.php100
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)]);
+ }
+ }
+
+}