From d1c2f87f2fa4e66f81f86ec72560b633712c613f Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 9 Sep 2016 19:04:40 +0200 Subject: [roomplanner] Implement marking tutor on plan --- modules-available/roomplanner/js/grid.js | 12 ++++++++++++ modules-available/roomplanner/js/init.js | 3 ++- modules-available/roomplanner/page.inc.php | 31 +++++++++++++++++++++++------- modules-available/roomplanner/style.css | 9 +++++++-- 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('
'); + $(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 = "Rechnerdaten
"; @@ -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; -- cgit v1.2.3-55-g7522