summaryrefslogtreecommitdiffstats
path: root/modules-available/roomplanner/page.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'modules-available/roomplanner/page.inc.php')
-rw-r--r--modules-available/roomplanner/page.inc.php91
1 files changed, 86 insertions, 5 deletions
diff --git a/modules-available/roomplanner/page.inc.php b/modules-available/roomplanner/page.inc.php
index 222192c1..b1869443 100644
--- a/modules-available/roomplanner/page.inc.php
+++ b/modules-available/roomplanner/page.inc.php
@@ -14,16 +14,36 @@ class Page_Roomplanner extends Page
protected function doRender()
{
+
$locationid = Request::get('locationid', null, 'integer');
- if ($locationid === null) {
- die('please specify locationid');
- }
+ if ($locationid === null) { die('please specify locationid'); }
+
+ $furniture = $this->getFurniture($locationid);
$subnetMachines = $this->getPotentialMachines($locationid);
+ $machinesOnPlan = $this->getMachinesOnPlan($locationid);
+
+ $action = Request::any('action', 'show', 'string');
+
+ $roomConfig = array_merge($furniture, $machinesOnPlan);
+
+
+ if ($action === 'show') {
+ /* do nothing */
+ Render::addTemplate('page', [
+ 'subnetMachines' => json_encode($subnetMachines),
+ 'locationid' => $locationid,
+ 'roomConfiguration' => json_encode($roomConfig, JSON_PRETTY_PRINT)]);
+ } else if ($action === 'save') {
+ /* save */
+ $config = Request::post('serializedRoom', null, 'string');
+ $config = json_decode($config, true);
+ $this->saveRoomConfig($locationid, $config['furniture']);
+ $this->saveComputerConfig($locationid, $config['computers'], $machinesOnPlan);
+ Util::redirect("?do=roomplanner&locationid=$locationid&action=show");
+ }
- Render::addTemplate('page', ['subnetMachines' => json_encode($subnetMachines),
- ]);
}
protected function doAjax()
@@ -58,6 +78,67 @@ class Page_Roomplanner extends Page
}
}
+ protected function saveComputerConfig($locationid, $computers, $oldComputers) {
+
+ $oldUuids = [];
+ /* collect all uuids from the old computers */
+ foreach($oldComputers['computers'] as $c) {
+ $oldUuids[] = $c['muuid'];
+ }
+
+ $newUuids = [];
+ foreach($computers as $computer) {
+ $newUuids[] = $computer['muuid'];
+
+ $position = json_encode(['gridRow' => $computer['gridRow'],
+ 'gridCol' => $computer['gridCol'],
+ 'itemlook' => $computer['itemlook']], JSON_PRETTY_PRINT);
+
+ Database::exec('UPDATE machine SET position = :position, locationid = :locationid WHERE machineuuid = :muuid',
+ ['locationid' => $locationid, 'muuid' => $computer['muuid'], 'position' => $position]);
+ }
+
+ $toDelete = array_diff($oldUuids, $newUuids);
+
+ foreach($toDelete as $d) {
+ Database::exec("UPDATE machine SET position = '', locationid = NULL WHERE machineuuid = :uuid", ['uuid' => $d]);
+ }
+ }
+ protected function saveRoomConfig($locationid, $furniture) {
+ $obj = json_encode(['furniture' => $furniture], JSON_PRETTY_PRINT);
+ Database::exec('INSERT INTO location_roomplan (locationid, roomplan) VALUES (:locationid, :roomplan) ON DUPLICATE KEY UPDATE roomplan=:roomplan',
+ ['locationid' => $locationid,
+ 'roomplan' => $obj]);
+ }
+
+ protected function getFurniture($locationid) {
+ $config = Database::queryFirst('SELECT roomplan FROM location_roomplan WHERE locationid = :locationid', ['locationid' => $locationid]);
+ if ($config == null) { return null; }
+ $config = json_decode($config['roomplan'], true);
+ return $config;
+ }
+ protected function getMachinesOnPlan($locationid) {
+ $result = Database::simpleQuery('SELECT machineuuid, macaddr, clientip, hostname, position FROM machine WHERE locationid = :locationid',
+ ['locationid' => $locationid]);
+ $machines = [];
+ while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
+ $machine = [];
+ $pos = json_decode($row['position'], true);
+
+ $machine['muuid'] = $row['machineuuid'];
+ $machine['ip'] = $row['clientip'];
+ $machine['mac_address'] = $row['macaddr'];
+ $machine['hostname'] = $row['hostname'];
+ $machine['gridRow'] = (int) $pos['gridRow'];
+ $machine['gridCol'] = (int) $pos['gridCol'];
+ $machine['itemlook'] = $pos['itemlook'];
+ $machine['data-width'] = 100;
+ $machine['data-height'] = 100;
+ $machines[] = $machine;
+ }
+ return ['computers' => $machines];
+ }
+
protected function getPotentialMachines($locationid)
{
$result = Database::simpleQuery('SELECT machineuuid, macaddr, clientip, hostname '