summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2016-09-09 19:04:40 +0200
committerSimon Rettberg2016-09-09 19:04:40 +0200
commitd1c2f87f2fa4e66f81f86ec72560b633712c613f (patch)
tree8fea027e97c48f73bc762fdd24c7bf7ec4cb28a2
parent[locations/statistics] Make machine counting more consistent (diff)
downloadslx-admin-d1c2f87f2fa4e66f81f86ec72560b633712c613f.tar.gz
slx-admin-d1c2f87f2fa4e66f81f86ec72560b633712c613f.tar.xz
slx-admin-d1c2f87f2fa4e66f81f86ec72560b633712c613f.zip
[roomplanner] Implement marking tutor on plan
-rw-r--r--modules-available/roomplanner/js/grid.js12
-rw-r--r--modules-available/roomplanner/js/init.js3
-rw-r--r--modules-available/roomplanner/page.inc.php31
-rw-r--r--modules-available/roomplanner/style.css9
4 files changed, 45 insertions, 10 deletions
diff --git a/modules-available/roomplanner/js/grid.js b/modules-available/roomplanner/js/grid.js
index 2cca26cd..4957517c 100644
--- a/modules-available/roomplanner/js/grid.js
+++ b/modules-available/roomplanner/js/grid.js
@@ -78,6 +78,17 @@ if (!roomplanner) var roomplanner = {
}
});
},
+ initTutor: function(el) {
+ if ($(el).attr('itemtype') !== 'pc') return;
+ $(el).append('<div class="tutorHandle glyphicon glyphicon-blackboard"></div>');
+ $(el).find('.tutorHandle').click(function() {
+ var wasTutor = ($(this).parent().attr('istutor') === 'true');
+ $('[itemtype="pc"]').removeAttr('istutor');
+ if (!wasTutor) {
+ $(this).parent().attr('istutor', 'true');
+ }
+ });
+ },
initTooltip: function(el) {
if ($(el).attr('itemtype') == 'pc') {
var tip = "<b>Rechnerdaten</b><br>";
@@ -339,6 +350,7 @@ if (!roomplanner) var roomplanner = {
roomplanner.initTooltip(el);
roomplanner.initRotation(el);
roomplanner.initDelete(el);
+ roomplanner.initTutor(el);
});
roomplanner.grid.scale(roomplanner.settings.scale);
diff --git a/modules-available/roomplanner/js/init.js b/modules-available/roomplanner/js/init.js
index 454146d3..ef3d15a7 100644
--- a/modules-available/roomplanner/js/init.js
+++ b/modules-available/roomplanner/js/init.js
@@ -27,13 +27,14 @@ function initRoomplanner() {
return;
}
var dediMgr = $('#dedi-mgr').prop('checked') ? 'on' : '';
+ var tutorUuid = $('[istutor="true"]').attr('muuid');
$('#saveBtn').prop('disabled', true);
$('#error-msg').hide();
$('#success-msg').hide();
$('#saving-msg').show();
var serializedCurrent = roomplanner.serialize();
$.post('?do=roomplanner&locationid=' + locationId,
- { token: TOKEN, action: 'save', serializedRoom: serializedCurrent, managerip: managerip, dedimgr: dediMgr }
+ { token: TOKEN, action: 'save', serializedRoom: serializedCurrent, managerip: managerip, dedimgr: dediMgr, tutoruuid: tutorUuid }
).done(function ( data ) {
if (data.indexOf('SUCCESS') !== -1) {
window.close();
diff --git a/modules-available/roomplanner/page.inc.php b/modules-available/roomplanner/page.inc.php
index f2f4d963..65025c5f 100644
--- a/modules-available/roomplanner/page.inc.php
+++ b/modules-available/roomplanner/page.inc.php
@@ -58,7 +58,7 @@ class Page_Roomplanner extends Page
if ($this->action === 'show') {
/* do nothing */
Dashboard::disable();
- $config = Database::queryFirst('SELECT roomplan, managerip, dedicatedmgr FROM location_roomplan WHERE locationid = :locationid', ['locationid' => $this->locationid]);
+ $config = Database::queryFirst('SELECT roomplan, managerip, dedicatedmgr, tutoruuid FROM location_roomplan WHERE locationid = :locationid', ['locationid' => $this->locationid]);
if ($config !== false) {
$managerIp = $config['managerip'];
$dediMgr = $config['dedicatedmgr'] ? 'checked' : '';
@@ -67,7 +67,7 @@ class Page_Roomplanner extends Page
}
$furniture = $this->getFurniture($config);
$subnetMachines = $this->getPotentialMachines();
- $machinesOnPlan = $this->getMachinesOnPlan();
+ $machinesOnPlan = $this->getMachinesOnPlan($config['tutoruuid']);
$roomConfig = array_merge($furniture, $machinesOnPlan);
Render::addTemplate('page', [
'location' => $this->location,
@@ -120,7 +120,7 @@ class Page_Roomplanner extends Page
private function handleSaveRequest($isAjax)
{
/* save */
- $machinesOnPlan = $this->getMachinesOnPlan();
+ $machinesOnPlan = $this->getMachinesOnPlan('invalid');
$config = Request::post('serializedRoom', null, 'string');
$config = json_decode($config, true);
if (!is_array($config) || !isset($config['furniture']) || !isset($config['computers'])) {
@@ -131,7 +131,21 @@ class Page_Roomplanner extends Page
Util::redirect("?do=roomplanner&locationid={$this->locationid}&action=show");
}
}
- $this->saveRoomConfig($config['furniture']);
+ $tutorUuid = Request::post('tutoruuid', '', 'string');
+ if (empty($tutorUuid)) {
+ $tutorUuid = null;
+ } else {
+ $ret = Database::queryFirst('SELECT machineuuid FROM machine WHERE machineuuid = :uuid', ['uuid' => $tutorUuid]);
+ if ($ret === false) {
+ if ($isAjax) {
+ die('Invalid tutor UUID');
+ } else {
+ Message::addError('invalid-tutor-uuid');
+ Util::redirect("?do=roomplanner&locationid={$this->locationid}&action=show");
+ }
+ }
+ }
+ $this->saveRoomConfig($config['furniture'], $tutorUuid);
$this->saveComputerConfig($config['computers'], $machinesOnPlan);
}
@@ -188,7 +202,7 @@ class Page_Roomplanner extends Page
}
}
- protected function saveRoomConfig($furniture)
+ protected function saveRoomConfig($furniture, $tutorUuid)
{
$obj = json_encode(['furniture' => $furniture]);
Database::exec('INSERT INTO location_roomplan (locationid, roomplan, managerip, tutoruuid, dedicatedmgr)'
@@ -199,7 +213,7 @@ class Page_Roomplanner extends Page
'roomplan' => $obj,
'managerip' => Request::post('managerip', '', 'string'),
'dedicatedmgr' => (Request::post('dedimgr') === 'on' ? 1 : 0),
- 'tutoruuid' => null // TODO
+ 'tutoruuid' => $tutorUuid
]);
}
@@ -212,7 +226,7 @@ class Page_Roomplanner extends Page
return $config;
}
- protected function getMachinesOnPlan()
+ protected function getMachinesOnPlan($tutorUuid)
{
$result = Database::simpleQuery('SELECT machineuuid, macaddr, clientip, hostname, position FROM machine WHERE locationid = :locationid',
['locationid' => $this->locationid]);
@@ -231,6 +245,9 @@ class Page_Roomplanner extends Page
$machine['itemlook'] = $pos['itemlook'];
$machine['data-width'] = 100;
$machine['data-height'] = 100;
+ if ($row['machineuuid'] === $tutorUuid) {
+ $machine['istutor'] = 'true';
+ }
$machines[] = $machine;
}
return ['computers' => $machines];
diff --git a/modules-available/roomplanner/style.css b/modules-available/roomplanner/style.css
index a6e8a859..4ec8a7b0 100644
--- a/modules-available/roomplanner/style.css
+++ b/modules-available/roomplanner/style.css
@@ -701,11 +701,13 @@ ul.toollist li {
display:none;
float: right;}
-.rotationHandle {
+.rotationHandle,
+.tutorHandle {
display:none;
float: left;}
-div.draggable:hover .rotationHandle {
+div.draggable:hover .rotationHandle,
+div.draggable:hover .tutorHandle{
display:inline;
cursor: pointer;}
@@ -722,6 +724,9 @@ div.draggable:hover .deleteHandle {
z-index: 100;
background-size: 100% 100%;
}
+[istutor="true"] {
+ background-color: rgba(0, 240, 100, .5);
+}
[itemlook="wall-horizontal"] {
background: url('images/wall/wall-horizontal.png') repeat #ffffff;