From 873d6af8bc843c6eea6049ace2f5218a371f01d4 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 27 Feb 2018 17:02:40 +0100 Subject: [roomplanner] Add permissions --- modules-available/roomplanner/js/grid.js | 85 ++++++++++++++++++-------------- 1 file changed, 47 insertions(+), 38 deletions(-) (limited to 'modules-available/roomplanner/js/grid.js') diff --git a/modules-available/roomplanner/js/grid.js b/modules-available/roomplanner/js/grid.js index 466e42aa..ced76678 100644 --- a/modules-available/roomplanner/js/grid.js +++ b/modules-available/roomplanner/js/grid.js @@ -1,5 +1,9 @@ +var $gridInner = $('#draw-element-area'); +var $gridFrame = $('#drawpanel'); +var $grid = $('#drawarea'); + if (!roomplanner) var roomplanner = { - + getScaleFactor: function() { return this.settings.scale/100; }, @@ -280,7 +284,7 @@ if (!roomplanner) var roomplanner = { "computers": [] }; - var furniture = $('#draw-element-area div[itemtype="furniture"]'); + var furniture = $gridInner.find('div[itemtype="furniture"]'); furniture.each(function(idx,el) { objects.furniture.push({ "gridRow" : $(el).attr('gridRow'), @@ -291,7 +295,7 @@ if (!roomplanner) var roomplanner = { }); }); - var computers = $('#draw-element-area div[itemtype="pc"]'); + var computers = $gridInner.find('div[itemtype="pc"]'); computers.each(function(idx,el) { var object = { @@ -326,7 +330,7 @@ if (!roomplanner) var roomplanner = { var objects = object; } - $('#draw-element-area').html(''); + $gridInner.html(''); function itemToHtml(item, itemtype, obstacle) { var html = '
maxX) return; - var width = (maxX - minX) / $('#drawpanel .panel-body').width(); - var height = (maxY - minY) / $('#drawpanel .panel-body').height(); + var width = (maxX - minX) / $gridFrame.find('.panel-body').width(); + var height = (maxY - minY) / $gridFrame.find('.panel-body').height(); var scale; if (width > height) { scale = Math.floor(100 / width); @@ -461,7 +470,7 @@ roomplanner.fitContent = function() { top: -(minY * (scale / 100)) + "px" }; - $('#drawarea').css(opts); + $grid.css(opts); }; $(document).ready(function(){ @@ -480,12 +489,12 @@ $(document).ready(function(){ change: update, slide: update, stop: function(e, ui) { - $('#drawarea').trigger('checkposition'); + $grid.trigger('checkposition'); } }); - $('#drawarea').bind('checkposition', function() { + $grid.bind('checkposition', function() { if ($(this).offset().left > 0) { $(this).css('left',0); } @@ -502,7 +511,7 @@ $(document).ready(function(){ } }); - $('#drawarea').draggable({ + $grid.draggable({ stop: function() { $(this).trigger('checkposition'); } @@ -512,7 +521,7 @@ $(document).ready(function(){ * adds droppable functionality to the draw area for the elements. * drop event is only fired for elements added to the board from the toolbar. */ - $('#draw-element-area').droppable({ + $gridInner.droppable({ accept: ".draggable", drop: function(event, ui) { @@ -528,8 +537,8 @@ $(document).ready(function(){ if (ui.helper != ui.draggable) { - var leftPos = parseInt($(el).css('left'))-parseInt($('#drawarea').css('left'))-$('#drawpanel').offset().left; - var topPos = parseInt($(el).css('top'))-parseInt($('#drawarea').css('top'))-($('#drawpanel').offset().top + $('#drawpanel .panel-heading').height()); + var leftPos = parseInt($(el).css('left'))-parseInt($grid.css('left'))-$gridFrame.offset().left; + var topPos = parseInt($(el).css('top'))-parseInt($grid.css('top'))-($gridFrame.offset().top + $gridFrame.find('.panel-heading').height()); var cp = roomplanner.getCellPositionFromPixels(leftPos,topPos); leftPos = cp[0]; topPos = cp[1]; @@ -575,8 +584,8 @@ $(document).ready(function(){ $(el).css('opacity',1); if (ui.helper != ui.draggable) { - var l = parseInt($(el).css('left'))-parseInt($('#drawarea').css('left'))-$('#drawpanel').offset().left; - var t = parseInt($(el).css('top'))-parseInt($('#drawarea').css('top'))-($('#drawpanel').offset().top + $('#drawpanel .panel-heading').height()); + var l = parseInt($(el).css('left'))-parseInt($grid.css('left'))-$gridFrame.offset().left; + var t = parseInt($(el).css('top'))-parseInt($grid.css('top'))-($gridFrame.offset().top + $gridFrame.find('.panel-heading').height()); var cp = roomplanner.getCellPositionFromPixels(l,t); $(el).css('left',cp[0]); $(el).css('top',cp[1]); @@ -596,7 +605,7 @@ $(document).ready(function(){ if ($(el).attr('itemtype') == "pc") { var uuids = []; - var computers = $('#draw-element-area div[itemtype="pc"]'); + var computers = $gridInner.find('div[itemtype="pc"]'); computers.each(function(idx,el) { if ($(el).attr('muuid')) { uuids.push($(el).attr('muuid')); -- cgit v1.2.3-55-g7522 From b8f7629f2b6425aa32021d7335a7e67e6d57b804 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 10 Apr 2018 17:12:13 +0200 Subject: [roomplanner] Add icon to PCs that opens machine details from statistics module --- modules-available/roomplanner/js/grid.js | 76 ++++++++++++++-------- modules-available/roomplanner/page.inc.php | 3 +- modules-available/roomplanner/style.css | 15 +---- .../roomplanner/templates/footer.html | 1 + 4 files changed, 54 insertions(+), 41 deletions(-) (limited to 'modules-available/roomplanner/js/grid.js') diff --git a/modules-available/roomplanner/js/grid.js b/modules-available/roomplanner/js/grid.js index ced76678..697d7c3f 100644 --- a/modules-available/roomplanner/js/grid.js +++ b/modules-available/roomplanner/js/grid.js @@ -40,9 +40,10 @@ if (!roomplanner) var roomplanner = { if (!(new RegExp(".*(east|south|west|north)$").test($(el).attr('itemlook')))) { return; } - - $(el).append('
'); - $(el).find('.rotationHandle').click(function () { + + var $e = $('
'); + $(el).append($e); + $e.click(function () { var str = $(el).attr('itemlook'); if (str.indexOf('-') > -1){ var values =str.split('-'); @@ -93,16 +94,34 @@ if (!roomplanner) var roomplanner = { } }); }, - initTutor: function(el) { + initPcButtons: 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'); - } - }); + var $e; + if (!PLANNER_READ_ONLY) { + $e = $('
'); + $(el).append($e); + $e.click(function () { + var wasTutor = ($(this).parent().attr('istutor') === 'true'); + $('[itemtype="pc"]').removeAttr('istutor'); + if (!wasTutor) { + $(this).parent().attr('istutor', 'true'); + } + }); + } + if (CAN_OPEN_STATS) { + $e = $('
'); + $(el).append($e); + $e.click(function () { + var uuid = $(this).parent().attr('muuid'); + console.log('Click: ', uuid); + var url = '?do=statistics&uuid=' + uuid; + if (roomplanner.serialize() !== plannerLoadState) { + window.open(url); + } else { + window.location.href = url; + } + }); + } }, initTooltip: function(el) { if ($(el).attr('itemtype') === 'pc') { @@ -338,9 +357,9 @@ if (!roomplanner) var roomplanner = { if (!item.hasOwnProperty(prop)) continue; html += prop+'="'+item[prop]+'" '; } - html += 'class="draggable ui-draggable'; - if (PLANNER_READ_ONLY) { - html += ' disabled'; + html += 'class="ui-draggable'; + if (!PLANNER_READ_ONLY) { + html += ' draggable'; } html += '">
'; return html; @@ -367,12 +386,12 @@ if (!roomplanner) var roomplanner = { $gridInner.find('.draggable').each(function(idx,el) { roomplanner.initDraggable(el); roomplanner.initResizable(el); - if (!PLANNER_READ_ONLY) { - roomplanner.initTooltip(el); - roomplanner.initRotation(el); - roomplanner.initDelete(el); - roomplanner.initTutor(el); - } + roomplanner.initTooltip(el); + roomplanner.initRotation(el); + roomplanner.initDelete(el); + }); + $gridInner.find('.ui-draggable').each(function(idx,el) { + roomplanner.initPcButtons(el); }); roomplanner.grid.scale(roomplanner.settings.scale); @@ -415,10 +434,11 @@ roomplanner.grid = (function() { var pos = roomplanner.getCellPositionFromGrid($item.attr('gridRow'),$item.attr('gridCol')); $item.css({width: w+"px", height: h+"px", left: pos[0]+"px", top: pos[1]+"px"}); - $item.draggable("option","grid",[(roomplanner.settings.scale / 4), (roomplanner.settings.scale / 4)]); - - if (roomplanner.isElementResizable(item)) { - $item.resizable("option","grid",[(roomplanner.settings.scale / 4), (roomplanner.settings.scale / 4)]); + if ($item.hasClass('draggable')) { + $item.draggable("option", "grid", [(roomplanner.settings.scale / 4), (roomplanner.settings.scale / 4)]); + if (roomplanner.isElementResizable(item)) { + $item.resizable("option", "grid", [(roomplanner.settings.scale / 4), (roomplanner.settings.scale / 4)]); + } } }); this.resize(); @@ -622,10 +642,10 @@ $(document).ready(function(){ roomplanner.initTooltip(el); } }); - } - roomplanner.initDelete(el); + } roomplanner.initRotation(el); - roomplanner.initTutor(el); + roomplanner.initDelete(el); + roomplanner.initPcButtons(el); } } diff --git a/modules-available/roomplanner/page.inc.php b/modules-available/roomplanner/page.inc.php index 2712560a..023cef73 100644 --- a/modules-available/roomplanner/page.inc.php +++ b/modules-available/roomplanner/page.inc.php @@ -87,7 +87,8 @@ class Page_Roomplanner extends Page 'subnetMachines' => json_encode($subnetMachines), 'locationid' => $this->locationid, 'roomConfiguration' => json_encode($roomConfig), - 'edit_disabled' => $canEdit ? '' : 'disabled' + 'edit_disabled' => $canEdit ? '' : 'disabled', + 'statistics_disabled' => Module::get('statistics') !== false && User::hasPermission('.statistics.machine.view-details') ? '' : 'disabled', ]; Render::addTemplate('header', $params); if ($canEdit) { diff --git a/modules-available/roomplanner/style.css b/modules-available/roomplanner/style.css index 9359f82b..f1dd994a 100644 --- a/modules-available/roomplanner/style.css +++ b/modules-available/roomplanner/style.css @@ -701,24 +701,15 @@ ul.toollist li { display:none; float: right;} -.rotationHandle, -.tutorHandle { +.pcHandle { display:none; float: left;} -div.draggable:hover .rotationHandle, -div.draggable:hover .tutorHandle{ +div.ui-draggable:hover > .deleteHandle, +div.ui-draggable:hover > .pcHandle { display:inline; cursor: pointer;} -div.draggable:hover .deleteHandle { - display:inline; - cursor: pointer;} - -.draggable.disabled { - pointer-events: none; -} - [itemtype="furniture"], [itemtype="furniture_drag"] { z-index: 99; background-size: 100% 100%;} diff --git a/modules-available/roomplanner/templates/footer.html b/modules-available/roomplanner/templates/footer.html index 6e4e0783..3294d5ee 100644 --- a/modules-available/roomplanner/templates/footer.html +++ b/modules-available/roomplanner/templates/footer.html @@ -21,6 +21,7 @@ var locationId = '{{locationid}}'; var subnetMachines, roomConfiguration; var plannerLoadState = 'invalid'; const PLANNER_READ_ONLY = '{{edit_disabled}}'.length !== 0; +const CAN_OPEN_STATS = '{{statistics_disabled}}'.length === 0; document.addEventListener("DOMContentLoaded", function () { subnetMachines = makeCombinedField({{{subnetMachines}}}); -- cgit v1.2.3-55-g7522