diff options
Diffstat (limited to 'modules-available')
7 files changed, 211 insertions, 30 deletions
diff --git a/modules-available/locationinfo/lang/de/template-tags.json b/modules-available/locationinfo/lang/de/template-tags.json index 92281537..39678de1 100644 --- a/modules-available/locationinfo/lang/de/template-tags.json +++ b/modules-available/locationinfo/lang/de/template-tags.json @@ -9,6 +9,9 @@ "lang_checkConnection": "Verbindung pr\u00fcfen", "lang_closed": "Geschlossen", "lang_closingTime": "Schlie\u00dfungszeit", + "lang_configOverride": "Konfiguration überschreiben", + "lang_countIp": "über IP-Adressbereich", + "lang_countRoomplan": "über Raumplaner", "lang_createPanel": "Panel anlegen", "lang_credentials": "Anmeldung", "lang_day": "Tag", @@ -79,7 +82,7 @@ "lang_room": "Raum", "lang_roomId": "Raum ID", "lang_roomIdTooltip": "Die Raum ID, die der Server ben\u00f6tigt, um Kalenderdaten abzurufen (bei Exchange die Postfachadresse)", - "lang_roomplannerTooltip": "Nur PCs ber\u00fccksichtigen, die im Raumplaner gesetzt wurden", + "lang_roomplannerTooltip": "Legt fest, ob Rechner anhand der Zuordnung über IP oder über den Raumplan gezählt werden", "lang_roomupdateTooltip": "Zeit nach der die PCs aktualisiert werden (in Sekunden)", "lang_rotation": "Rotation", "lang_rotation0": "0\u00b0", @@ -127,7 +130,7 @@ "lang_urlPanel": "URL-Panel", "lang_urlTooltip": "URL die aufgerufen wird", "lang_urlWhitelist": "Whitelist", - "lang_useRoomplanner": "Raumplaner benutzen", + "lang_useRoomplanner": "Rechner zählen", "lang_vertical": "Vertikaler Modus", "lang_verticalTooltip": "Legt fest, ob Kalender und Raum \u00fcbereinander angezeigt werden sollen", "lang_when": "Wann" diff --git a/modules-available/locationinfo/lang/en/template-tags.json b/modules-available/locationinfo/lang/en/template-tags.json index d44d27ee..a9adaacc 100644 --- a/modules-available/locationinfo/lang/en/template-tags.json +++ b/modules-available/locationinfo/lang/en/template-tags.json @@ -9,6 +9,9 @@ "lang_checkConnection": "Check connection", "lang_closed": "Closed", "lang_closingTime": "Closing time", + "lang_configOverride": "Configuration override", + "lang_countIp": "by IP-Range", + "lang_countRoomplan": "by Roomplanner", "lang_createPanel": "Create panel", "lang_credentials": "Login", "lang_day": "Day", @@ -79,7 +82,7 @@ "lang_room": "Room", "lang_roomId": "Room ID", "lang_roomIdTooltip": "The ID of the room the server needs, for querying the calendar data (when using exchange the room mailbox)", - "lang_roomplannerTooltip": "Only consider PCs which were set in the roomplanner", + "lang_roomplannerTooltip": "Determine if PCs are counted on the basis of IP-range or by roomplanner", "lang_roomupdateTooltip": "Time the PCs in the room gets updated (in seconds)", "lang_rotation": "Rotation", "lang_rotation0": "0\u00b0", @@ -127,7 +130,7 @@ "lang_urlPanel": "URL panel", "lang_urlTooltip": "URL which is shown by the panel", "lang_urlWhitelist": "Whitelist", - "lang_useRoomplanner": "Use roomplans", + "lang_useRoomplanner": "Count PCs", "lang_vertical": "Vertical mode", "lang_verticalTooltip": "Defines whether the room and calendar are shown above each other", "lang_when": "When" diff --git a/modules-available/locationinfo/page.inc.php b/modules-available/locationinfo/page.inc.php index d1644ce1..5292c40e 100644 --- a/modules-available/locationinfo/page.inc.php +++ b/modules-available/locationinfo/page.inc.php @@ -386,6 +386,25 @@ class Page_LocationInfo extends Page if ($conf['calupdate'] < 30) { $conf['calupdate'] = 30; } + + $overrides = array(); + for ($i = 0; $i < sizeof($locationids); $i++) { + $overrideLoc = Request::post('override'.$locationids[$i], false, 'bool'); + if ($overrideLoc) { + $overrideArray = array( + 'mode' => Request::post('override'.$locationids[$i].'mode', 1, 'int'), + 'roomplanner' => Request::post('override'.$locationids[$i].'roomplanner', false, 'bool'), + 'vertical' => Request::post('override'.$locationids[$i].'vertical', false, 'bool'), + 'scaledaysauto' => Request::post('override'.$locationids[$i].'scaledaysauto', false, 'bool'), + 'daystoshow' => Request::post('override'.$locationids[$i].'daystoshow', 7, 'int'), + 'rotation' => Request::post('override'.$locationids[$i].'rotation', 0, 'int'), + 'scale' => Request::post('override'.$locationids[$i].'scale', 50, 'int') + ); + $overrides[$locationids[$i]] = $overrideArray; + } + } + $conf['overrides'] = $overrides; + return array('config' => $conf, 'locationids' => $locationids); } @@ -975,7 +994,7 @@ class Page_LocationInfo extends Page 'vertical_checked' => $config['vertical'] ? 'checked' : '', 'eco_checked' => $config['eco'] ? 'checked' : '', 'prettytime_checked' => $config['prettytime'] ? 'checked' : '', - 'roomplanner_checked' => $config['roomplanner'] ? 'checked' : '', + 'roomplanner' => $config['roomplanner'], 'scaledaysauto_checked' => $config['scaledaysauto'] ? 'checked' : '', 'daystoshow' => $config['daystoshow'], 'rotation' => $config['rotation'], @@ -985,6 +1004,7 @@ class Page_LocationInfo extends Page 'roomupdate' => $config['roomupdate'], 'locations' => Location::getLocations(), 'locationids' => $panel['locationids'], + 'overrides' => json_encode($config['overrides']), )); } elseif ($panel['paneltype'] === 'URL') { Render::addTemplate('page-config-panel-url', array( @@ -1004,7 +1024,7 @@ class Page_LocationInfo extends Page 'panelname' => $panel['panelname'], 'languages' => $langs, 'panelupdate' => $config['panelupdate'], - 'roomplanner_checked' => $config['roomplanner'] ? 'checked' : '', + 'roomplanner' => $config['roomplanner'], 'locations' => Location::getLocations(), 'locationids' => $panel['locationids'], 'eco_checked' => $config['eco'] ? 'checked' : '', diff --git a/modules-available/locationinfo/templates/frontend-default.html b/modules-available/locationinfo/templates/frontend-default.html index d4e8109a..7cd52094 100755 --- a/modules-available/locationinfo/templates/frontend-default.html +++ b/modules-available/locationinfo/templates/frontend-default.html @@ -592,7 +592,6 @@ optional: room.$.header = $header; $loc.append($header); $header.append('<div class="clearfix">'); - if (room.name !== null) { room.$.locationName.text(room.name); } @@ -606,6 +605,15 @@ optional: if (room.config.mode === 4) { hasMode4 = true; } + // Manually initialize mode 2, as initRoomLayout isn't called for this mode + if (room.config.mode === 2) { + var date = MyDate(); + var now = date.getTime(); + queryCalendars(); + queryRooms(); + lastCalendarUpdate = now; + lastRoomUpdate = now; + } SetOpeningTimes(room); UpdateRoomHeader(room); @@ -620,15 +628,6 @@ optional: generateProgressBar(); } - // Manually initialize mode 2, as initRoomLayout isn't called for this mode - if (room.config.mode === 2) { - var date = MyDate(); - var now = date.getTime(); - queryCalendars(); - queryRooms(); - lastCalendarUpdate = now; - lastRoomUpdate = now; - } mainUpdateLoop(); setInterval(mainUpdateLoop, 10000); setInterval(updateHeaders, globalConfig.eco ? 10000 : 1000); @@ -1150,10 +1149,11 @@ optional: * @param room Room */ function SetFreeSeats(room) { - // if room has no allowed value, set text in the box to - if (!room.numPcs) { + // If room has no PCs, empty the counter-box room.$.seatsCounter.text('\u00A0'); } else if (!room.state.free) { + // If room has ongoing event, box text is "-" room.$.seatsCounter.text('\u2013'); } else { room.$.seatsCounter.text(room.freePcs); @@ -1525,14 +1525,19 @@ optional: return; } var freePcs = 0; + var numPcs = 0; for (var i = 0; i < update.length; i++) { var $div = $("#pc_" + room.id + "_" + update[i].id); // Pc free if (room.config.roomplanner === true) { - if ((update[i].pcState === "IDLE" || update[i].pcState === "OFFLINE" || update[i].pcState === "STANDBY") && !isNaN(update[i].x) && !isNaN(update[i].y)) { - freePcs++; + if (!isNaN(update[i].x) && !isNaN(update[i].y)) { + numPcs++; + if ((update[i].pcState === "IDLE" || update[i].pcState === "OFFLINE" || update[i].pcState === "STANDBY")) { + freePcs++; + } } } else { + numPcs++; if ((update[i].pcState === "IDLE" || update[i].pcState === "OFFLINE" || update[i].pcState === "STANDBY")) { freePcs++; } @@ -1541,7 +1546,7 @@ optional: $div.removeClass('BROKEN OFFLINE IDLE OCCUPIED STANDBY'.replace(update[i].pcState, '')).addClass(update[i].pcState); } room.freePcs = freePcs; - room.numPcs = update.length; + room.numPcs = numPcs; UpdateRoomHeader(room); } diff --git a/modules-available/locationinfo/templates/page-config-panel-default.html b/modules-available/locationinfo/templates/page-config-panel-default.html index 116c2e11..9470efbb 100644 --- a/modules-available/locationinfo/templates/page-config-panel-default.html +++ b/modules-available/locationinfo/templates/page-config-panel-default.html @@ -91,7 +91,7 @@ </div> </div> </div> - + <div class="list-group-item"> <div class="row"> <div class="col-sm-3"> @@ -114,7 +114,10 @@ <label for="input-roomplanner">{{lang_useRoomplanner}}</label> </div> <div class="col-sm-7"> - <input id="input-roomplanner" type="checkbox" name="roomplanner" {{roomplanner_checked}}> + <select class="form-control" name="roomplanner" id="input-roomplanner"> + <option value="0" id="roomplanner0">{{lang_countIp}}</option> + <option value="1" id="roomplanner1">{{lang_countRoomplan}}</option> + </select> </div> <div class="col-sm-2"> <p class="btn btn-static helptext" title="{{lang_roomplannerTooltip}}"> @@ -322,12 +325,22 @@ </div> </div> </div> + </div> + + <div class="row" id="overrideRoomConfigs"> </div> + </div> + + + <div class="text-right"> <a href="?do=locationinfo&show=panels" class="btn btn-default">{{lang_cancel}}</a> - <button type="submit" class="btn btn-primary">{{lang_save}}</button> + <button type="submit" class="btn btn-primary"> + <span class="glyphicon glyphicon-floppy-disk"></span> + {{lang_save}} + </button> </div> </form> @@ -355,11 +368,14 @@ document.addEventListener("DOMContentLoaded", function () { var $locList = $('#location-list'); var $locInput = $('#locationids'); var $addLocDbBtn = $('#addLocDdBtn'); + var $owPanels = $('#overrideRoomConfigs'); + var overrides = {{{overrides}}} // Initialize fancy tooltips $('p.helptext').tooltip(); // Add listener to range sliders so their label can be updated - $('input[type="range"]').change(function () { + var $range = $('input[type="range"]'); + $range.change(function () { $(this).siblings().find('.range-display').text($(this).val()); }); // Set state of input controls that aren't statically initialized server side @@ -371,6 +387,7 @@ document.addEventListener("DOMContentLoaded", function () { } }); + var lids = $locInput.val().split(','); $selLocs.empty(); for (var i = 0; i < lids.length; ++i) { @@ -382,10 +399,11 @@ document.addEventListener("DOMContentLoaded", function () { $('#daystoshow option[value="{{daystoshow}}"]').attr("selected", "selected"); $('#rotation option[value="{{rotation}}"]').attr("selected", "selected"); $('#mode option[value="{{mode}}"]').attr("selected", "selected"); + $('#input-roomplanner option[value="{{roomplanner}}"]').attr("selected", "selected"); $('#daystoshow').prop('disabled', document.getElementById('scaledaysauto').checked); - $('input[type="range"]').change(); + $range.change(); modeChange(); // Adding/removing locations @@ -400,8 +418,9 @@ document.addEventListener("DOMContentLoaded", function () { }); $('#config-form').submit(function(ev) { - if ($locInput.val().length > 0) + if ($locInput.val().length > 0) { return; + } ev.preventDefault(); $('#no-locations-message').modal('show'); }); @@ -418,9 +437,124 @@ document.addEventListener("DOMContentLoaded", function () { $addLocBtnParent.removeClass('open'); } } + + // Add Panel for overwriting room specific config + $owPanels.find('#overrideRoom' + id).remove(); + $owPanels.append('<div class="col-md-6" id="overrideRoom' + id + '">' + + '<div class="panel panel-default">' + + '<div class="panel-heading clearfix">' + + name + ' {{lang_configOverride}}' + + '<div class="checkbox-inline pull-right">' + + '<input type="checkbox" id="override' + id + '" name="override' + id + '"/>' + + '</div></div><div class="panel-body"></div></div></div>'); + + + // Load content into panel + var overrideSelect = $('#override' + id); + overrideSelect + .bootstrapSwitch({size: 'small'}) + .on('switchChange.bootstrapSwitch', function () { + if (this.checked) { + loadOverrideContent(id); + } else { + unloadOverrideContent(id); + } + }); + + if (overrides !== null && overrides[id] !== undefined) { + overrideSelect.bootstrapSwitch('state', true); + } + } + + function loadOverrideContent(id) { + // 1. Build Content + // $content.append($('<div class="list-group-item"><div class="row"><div class="col-sm-3"></div><div class="col-sm-7"></div><div class="col-sm-2"></div></div></div>')); + var $content = $('<div class="list-group"></div>'); + $content.append($('<div class="list-group-item"><div class="row">' + + '<div class="col-sm-3"><label for="override' + id + 'mode">{{lang_mode}}</label></div>' + + '<div class="col-sm-7"><select class="form-control" id="override' + id + 'mode" name="override' + id + 'mode" onchange="modeChangeOverride(id)"><option value="1" id="override' + id + 'mode1">{{lang_mode1}}</option><option value="2" id="override' + id + 'mode2">{{lang_mode2}}</option><option value="3" id="override' + id + 'mode3">{{lang_mode3}}</option><option value="4" id="override' + id + 'mode4">{{lang_mode4}}</option></select></div>' + + '<div class="col-sm-2"><p class="btn btn-static helptext" title="{{lang_modeTooltip}}"><span class="glyphicon glyphicon-question-sign"></span></p></div>' + + '</div></div>')); + $content.append($('<div class="list-group-item"><div class="row">' + + '<div class="col-sm-3"><label for="override' + id + 'roomplanner">{{lang_useRoomplanner}}</label></div>' + + '<div class="col-sm-7"><select class="form-control" name ="override' + id + 'roomplanner" id="override' + id + 'roomplanner"><option value="0" id="override' + id + 'roomplanner0">{{lang_countIp}}</option><option value="1" id="override' + id + 'roomplanner1">{{lang_countRoomplan}}</option></select></div>' + + '<div class="col-sm-2"><p class="btn btn-static helptext" title="{{lang_roomplannerTooltip}}"><span class="glyphicon glyphicon-question-sign"></span></p></div>' + + '</div></div>')); + $content.append($('<div class="list-group-item om1-s om2-h om3-h om4-h"><div class="row">' + + '<div class="col-sm-3"><label for="override' + id + 'vertical">{{lang_vertical}}</label></div>' + + '<div class="col-sm-7"><input id="override' + id + 'vertical" name="override' + id + 'vertical" type="checkbox"></div>' + + '<div class="col-sm-2"><p class="btn btn-static helptext" title="{{lang_verticalTooltip}}"><span class="glyphicon glyphicon-question-sign"></span></p></div>' + + '</div></div>')); + $content.append($('<div class="list-group-item om1-s om2-s om3-h om4-s"><div class="row">' + + '<div class="col-sm-3"><label for="override' + id + 'scaledaysauto">{{lang_autoScale}}</label></div>' + + '<div class="col-sm-7"><input id="override' + id + 'scaledaysauto" name="override' + id + 'scaledaysauto" type="checkbox"></div>' + + '<div class="col-sm-2"><p class="btn btn-static helptext" title="{{lang_autoscaleTooltip}}"><span class="glyphicon glyphicon-question-sign"></span></p></div>' + + '</div></div>')); + $content.append($('<div class="list-group-item om1-s om2-s om3-h om4-s"><div class="row">' + + '<div class="col-sm-3"><label for="override' + id + 'daystoshow">{{lang_daysToShow}}</label></div>' + + '<div class="col-sm-7"><select class="form-control" id="override' + id + 'daystoshow" name="override' + id + 'daystoshow"><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option></select></div>' + + '<div class="col-sm-2"><p class="btn btn-static helptext" title="{{lang_daysToShowTooltip}}"><span class="glyphicon glyphicon-question-sign"></span></p></div>' + + '</div></div>')); + $content.append($('<div class="list-group-item om1-s om2-h om3-s om4-s"><div class="row">' + + '<div class="col-sm-3"><label for="override' + id + 'rotation">{{lang_rotation}}</label></div>' + + '<div class="col-sm-7"><select class="form-control" id="override' + id + 'rotation" name="override' + id + 'rotation"><option value="0">{{lang_rotation0}}</option><option value="1">{{lang_rotation1}}</option><option value="2">{{lang_rotation2}}</option><option value="3">{{lang_rotation3}}</option></select></div>' + + '<div class="col-sm-2"><p class="btn btn-static helptext" title="{{lang_rotationTooltip}}"><span class="glyphicon glyphicon-question-sign"></span></p></div>' + + '</div></div>')); + $content.append($('<div class="list-group-item om1-s om2-h om3-h om4-h"><div class="row">' + + '<div class="col-sm-3"><label for="override' + id + 'scale">{{lang_scale}}</label></div>' + + '<div class="col-sm-7"><span><span class="range-display"></span> %</span><input id="override' + id + 'scale" name="override' + id + 'scale" type="range" step="1" min="10" max="90"></div>' + + '<div class="col-sm-2"><p class="btn btn-static helptext" title="{{lang_scaleTooltip}}"><span class="glyphicon glyphicon-question-sign"></span></p></div>' + + '</div></div>')); + + // 2. Load Content into Panel + var $panelBody = $('#overrideRoom' + id).find('div.panel-body'); + $panelBody.append($content); + + $('.modify-inputs #overrideRoom' + id + ' input[type="checkbox"]') + .bootstrapSwitch({size: 'small'}) + .on('switchChange.bootstrapSwitch', function () { + if (this.id === 'override' + id + 'scaledaysauto') { + $('#override' + id + 'daystoshow').prop('disabled', this.checked); + } + }); + + // 3. Init parameters: Given parameters or global parameters if none given + var scale = $('#override' + id + 'scale'); + if (overrides !== null && overrides[id] !== undefined) { + $('#override' + id + 'mode').val(overrides[id].mode); + $('#override' + id + 'roomplanner').val(overrides[id].roomplanner); + if (overrides[id].vertical) $('#override' + id + 'vertical').bootstrapSwitch('state', true); + if (overrides[id].scaledaysauto) $('#override' + id + 'scaledaysauto').bootstrapSwitch('state', true); + $('#override' + id + 'daystoshow').val(overrides[id].daystoshow); + $('#override' + id + 'rotation').val(overrides[id].rotation); + scale.val(overrides[id].scale); + } else { + $('#override' + id + 'mode').val($('#mode').val()); + $('#override' + id + 'roomplanner').val($('#input-roomplanner').val()); + if ($('#input-vertical').bootstrapSwitch('state')) $('#override' + id + 'vertical').bootstrapSwitch('state', true); + if ($('#scaledaysauto').bootstrapSwitch('state')) $('#override' + id + 'scaledaysauto').bootstrapSwitch('state', true); + $('#override' + id + 'daystoshow').val($('#daystoshow').val()); + $('#override' + id + 'rotation').val($('#rotation').val()); + scale.val($('#input-scale').val()); + } + + scale.change(function () { + $(this).siblings().find('.range-display').text($(this).val()); + }); + + scale.change(); + modeChangeOverride('override' + id + 'mode'); + } + + function unloadOverrideContent(id) { + var $panelBody = $('#overrideRoom' + id).find('div.panel-body'); + $panelBody.find('div.list-group').remove(); + delete overrides[id] } function delParent() { + var $id = $(this).parent().attr("data-lid");; + $('#overrideRoom' + $id).remove(); $(this).parent().remove(); serializeLocs(); if ($selLocs.find('li').length < 4) { @@ -434,7 +568,6 @@ document.addEventListener("DOMContentLoaded", function () { }).get().join(','); $locInput.val(res); } - }); /** @@ -446,4 +579,12 @@ function modeChange() { $('.m' + value + '-s').show(); } +function modeChangeOverride(id) { + id = id.replace('override', ''); + id = id.replace('mode', ''); + var value = $('#override' + id + 'mode').val(); + $('#overrideRoom' + id + ' .om' + value + '-h').hide(); + $('#overrideRoom' + id + ' .om' + value + '-s').show(); +} + //--></script> diff --git a/modules-available/locationinfo/templates/page-config-panel-summary.html b/modules-available/locationinfo/templates/page-config-panel-summary.html index 5ddcc904..2dc556ce 100644 --- a/modules-available/locationinfo/templates/page-config-panel-summary.html +++ b/modules-available/locationinfo/templates/page-config-panel-summary.html @@ -77,7 +77,10 @@ <label for="input-roomplanner">{{lang_useRoomplanner}}</label> </div> <div class="col-sm-7"> - <input id="input-roomplanner" type="checkbox" name="roomplanner" {{roomplanner_checked}}> + <select class="form-control" name="roomplanner" id="input-roomplanner"> + <option value="0" id="roomplanner0">{{lang_countIp}}</option> + <option value="1" id="roomplanner1">{{lang_countRoomplan}}</option> + </select> </div> <div class="col-sm-2"> <p class="btn btn-static helptext" title="{{lang_roomplannerTooltip}}"> @@ -168,7 +171,10 @@ </div> <div class="text-right"> <a href="?do=locationinfo&show=panels" class="btn btn-default">{{lang_cancel}}</a> - <button type="submit" class="btn btn-primary">{{lang_save}}</button> + <button type="submit" class="btn btn-primary"> + <span class="glyphicon glyphicon-floppy-disk"></span> + {{lang_save}} + </button> </div> </form> diff --git a/modules-available/locationinfo/templates/page-config-panel-url.html b/modules-available/locationinfo/templates/page-config-panel-url.html index dbf50fb6..57b518ce 100644 --- a/modules-available/locationinfo/templates/page-config-panel-url.html +++ b/modules-available/locationinfo/templates/page-config-panel-url.html @@ -113,7 +113,10 @@ </div> <div class="text-right"> <a href="?do=locationinfo&show=panels" class="btn btn-default">{{lang_cancel}}</a> - <button type="submit" class="btn btn-primary">{{lang_save}}</button> + <button type="submit" class="btn btn-primary"> + <span class="glyphicon glyphicon-floppy-disk"></span> + {{lang_save}} + </button> </div> </form> |