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.php275
1 files changed, 141 insertions, 134 deletions
diff --git a/modules-available/roomplanner/page.inc.php b/modules-available/roomplanner/page.inc.php
index 8bfd5ed5..58082395 100644
--- a/modules-available/roomplanner/page.inc.php
+++ b/modules-available/roomplanner/page.inc.php
@@ -2,58 +2,59 @@
class Page_Roomplanner extends Page
{
- protected function doPreprocess()
- {
- User::load();
+ protected function doPreprocess()
+ {
+ User::load();
- if (!User::hasPermission('superadmin')) {
- Message::addError('main.no-permission');
- Util::redirect('?do=Main');
- }
- }
+ if (!User::hasPermission('superadmin')) {
+ Message::addError('main.no-permission');
+ Util::redirect('?do=Main');
+ }
+ }
- protected function doRender()
- {
+ protected function doRender()
+ {
- $locationid = Request::get('locationid', null, 'integer');
+ $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);
- $furniture = $this->getFurniture($locationid);
- $subnetMachines = $this->getPotentialMachines($locationid);
- $machinesOnPlan = $this->getMachinesOnPlan($locationid);
+ $action = Request::any('action', 'show', 'string');
- $action = Request::any('action', 'show', 'string');
+ $roomConfig = array_merge($furniture, $machinesOnPlan);
- $roomConfig = array_merge($furniture, $machinesOnPlan);
+ if ($action === 'show') {
+ /* do nothing */
+ Render::addTemplate('page', [
+ 'subnetMachines' => json_encode($subnetMachines),
+ 'locationid' => $locationid,
+ 'roomConfiguration' => json_encode($roomConfig)]);
+ } 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");
+ }
- if ($action === 'show') {
- /* do nothing */
- Render::addTemplate('page', [
- 'subnetMachines' => json_encode($subnetMachines),
- 'locationid' => $locationid,
- 'roomConfiguration' => json_encode($roomConfig)]);
- } 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");
- }
+ }
- }
+ protected function doAjax()
+ {
+ $action = Request::get('action', null, 'string');
- protected function doAjax()
- {
- $action = Request::get('action', null, 'string');
+ if ($action === 'getmachines') {
+ $query = Request::get('query', null, 'string');
- if ($action === 'getmachines') {
- $query = Request::get('query', null, 'string');
-
- /* the query could be anything: UUID, IP or macaddr */
+ /* the query could be anything: UUID, IP or macaddr */
// $result = Database::simpleQuery('SELECT machineuuid, macaddr, clientip, hostname '
// . ', MATCH (machineuuid, macaddr, clientip, hostname) AGAINST (:query) AS relevance '
// . 'FROM machine '
@@ -62,99 +63,105 @@ class Page_Roomplanner extends Page
// . 'LIMIT 5'
// , ['query' => $query]);
//
- $result = Database::simpleQuery('SELECT machineuuid, macaddr, clientip, hostname '
- .'FROM machine '
- .'WHERE machineuuid LIKE :query '
- .' OR macaddr LIKE :query '
- .' OR clientip LIKE :query '
- .' OR hostname LIKE :query ', ['query' => "%$query%"]);
-
- $returnObject = ['machines' => []];
-
- while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
- $returnObject['machines'][] = $row;
- }
- echo json_encode($returnObject);
- }
- }
-
- 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']]);
-
- 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]);
- 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 === false) {
- return array();
- }
- $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);
- // TODO: Check if pos is valid (has required keys)
-
- $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 '
- .'FROM machine INNER JOIN subnet ON (INET_ATON(clientip) BETWEEN startaddr AND endaddr) '
- .'WHERE subnet.locationid = :locationid', ['locationid' => $locationid]);
-
- $machines = [];
-
- while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
- $row['combined'] = implode(' ', array_values($row));
- $machines[] = $row;
- }
-
- return $machines;
- }
+ $result = Database::simpleQuery('SELECT machineuuid, macaddr, clientip, hostname '
+ . 'FROM machine '
+ . 'WHERE machineuuid LIKE :query '
+ . ' OR macaddr LIKE :query '
+ . ' OR clientip LIKE :query '
+ . ' OR hostname LIKE :query ', ['query' => "%$query%"]);
+
+ $returnObject = ['machines' => []];
+
+ while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
+ $returnObject['machines'][] = $row;
+ }
+ echo json_encode($returnObject);
+ }
+ }
+
+ 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']]);
+
+ 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]);
+ 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 === false) {
+ return array();
+ }
+ $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);
+ // TODO: Check if pos is valid (has required keys)
+
+ $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 '
+ . 'FROM machine INNER JOIN subnet ON (INET_ATON(clientip) BETWEEN startaddr AND endaddr) '
+ . 'WHERE subnet.locationid = :locationid', ['locationid' => $locationid]);
+
+ $machines = [];
+
+ while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
+ $row['combined'] = implode(' ', array_values($row));
+ $machines[] = $row;
+ }
+
+ return $machines;
+ }
}