$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 = :id", ['id' => $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)]); } } }