Files
librenms-librenms/html/includes/modal/manage_host_dependencies.inc.php
Aldemir Akpinar 56561aa4dc feature: Added support for Host dependencies (#7332)
* First draft of the modals and the config interfaces

* GUI part done

* Backend code and db schema addition

* Documentation added, fixed alerting bug

* Fix typos

* Do not try to push an older db_schame.yaml

* Small db fix

* More db fixes

* Travis CI fixes

* missed a line in the travis error

* Fixed dependency clearing bug, Manage Host dependencies button now shows current selections

* Removed unnecessary index

* Correct faulty query

* Fixed sql query as requested, and renamed sql file

* Added requested changes

* Removed debug code

* Renamed sql file

* More fixes as requested

* Trying to fix db_schema.yaml

* adding laf's diff

* Corrected a small bug

* Try to resolve scrutinizer issue

* Main page bootgrid ajax modifications

* Also corrected travis ci errors

* Added select2 for pull downs, removed a redundant debug output. Changed parent_id to text

* Add missing class in the device settings page

* Fix bug where a link wasn't added after save

* Better parent down detection

* Add missing comma

* Behold the multi-parent code

* Added lookup table

* Ready for testing

* Trying to fix documentation conflicts

* Fix copy paste errors, and possible sql injection

* indentation problems

* Modified db_schema.yaml as well

* Typos, typos

* This should correct alerts

* Try to fix travis ci error

* Fix the typo in index.php

* Changed to Tony's query

* function explanation text changed

* Updated db_schema.yaml

* Trying to make automated tests happy

* Changes as requested

* Added acknowledgment for select2

* Added laf's patch

* dbBulkInsert when adding parents
2017-12-20 14:17:52 +00:00

185 lines
6.5 KiB
PHP

<?php
/*
* LibreNMS
*
* Copyright (c) 2017 Aldemir Akpinar <https://github.com/aldemira>
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version. Please see LICENSE.txt at the top level of
* the source code distribution for details.
*/
if (is_admin() === false) {
die('ERROR: You need to be admin');
}
?>
<div class="modal fade" id="manage-dependencies" role="dialog" aria-labelledby="mandeps" aria-hidden="true">
<div class="modal-dialog modal-md">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h5 class="modal-title" id="mandeps">Device Dependency for Multiple Devices</h5>
</div>
<div class="modal-body">
<div id="mandeps-msg"></div>
<p>Here you can modify multiple device dependencies. Setting the parent device to "None" will clear the dependency.</p>
<br />
<div class="form-group">
<label for="manavailableparents">Parent Host:</label>
<select multiple name="parent_id" class="form-control" id="manavailableparents" style='width: 100%'>
</select>
</div>
<div class="form-group">
<label for="manalldevices">Child Hosts:</label>
<select multiple name="device_ids" class="form-control" id="manalldevices" style='width: 100%'>
</select>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Cancel</button>
<button type="submit" class="btn btn-success" id="manhostdep-save" data-target="manhostdep-save">Save</button>
</div>
</div>
</div>
</div>
<script>
function changeParents(e, evttype)
{
e.preventDefault();
if (evttype == 'select' && e.params.data.id == 0) {
$('#manavailableparents').val(0);
$('#manavailableparents').trigger('change');
}
var cur_option = $('#manavailableparents').select2('data');
// So that we'll see all devices.
var device_id = 0;
var parent_ids = [];
// This is needed to remove the None option if it is with another parent id
for (var i=0;i<cur_option.length;i++) {
if (cur_option.length > 1 && cur_option[i].id == 0) {
continue;
}
parent_ids.push(cur_option[i].id);
}
// Set parents to new value
$('#manavailableparents').val(temp_arr).trigger('change');
$.ajax({
type: 'POST',
url: 'ajax_form.php',
data: { type: "get-host-dependencies", "parent_ids": parent_ids, "viewtype": "fromparent" },
dataType: "json",
success: function(output) {
if (output.status == 0) {
if (output.deps != null && output.deps != '') {
var temp_arr2 = [];
$.each(output.deps, function (i, elem) {
temp_arr2.push(elem.device_id);
});
$('#manalldevices').val(temp_arr2);
} else {
$('#manalldevices').val(null);
}
$('#manalldevices').trigger('change');
} else {
toastr.error(output.message);
}
},
error: function() {
toastr.error('Device dependencies could not be retrieved from the database');
}
});
}
$('#manage-dependencies').on('hide.bs.modal', function() {
$('#manavailableparents').val('0');
$('#manavailableparents').trigger('change');
$('#manalldevices').val(null);
$('#manalldevices').trigger('change');
});
$('#manage-dependencies').on('show.bs.modal', function() {
var device_id = 0;
$.ajax({
type: 'POST',
url: 'ajax_form.php',
data: { type: "get-host-dependencies", "viewtype": 'fromparent', "parent_ids": 0},
dataType: "json",
success: function(output) {
if (output.status == 0) {
var tempArr = [];
$.each(output.deps, function (i, elem) {
tempArr.push(elem.device_id);
});
$('#manalldevices').val(tempArr);
$('#manalldevices').trigger('change');
$('#manavailableparents').val(device_id);
$('#manavailableparents').trigger('change');
} else {
toastr.error(output.message);
}
},
error: function() {
toastr.error('Device dependencies could not be retrieved from the database');
}
})
});
$('#manhostdep-save').click('', function(event) {
event.preventDefault();
var device_ids = [];
var children = [];
var parent_id = [];
var parent_host = '';
// Get selections
var parents = $('#manavailableparents').select2('data');
var devices = $('#manalldevices').select2('data');
for (var i=0;i<parents.length;i++) {
parent_id.push(parents[i].id);
parent_host = parent_host + '<a href="device/device='+ parents[i].id +'/">' + parents[i].text + '</a>, ';
}
for (var i=0;i<devices.length;i++) {
device_ids.push(devices[i].id);
children.push(devices[i].text);
}
parent_host = parent_host.slice(0, -2);
$.ajax({
type: 'POST',
url: 'ajax_form.php',
data: { type: "save-host-dependency", device_ids: device_ids, parent_ids: parent_id },
dataType: "json",
success: function(output) {
$("#manage-dependencies").modal('hide');
$('#hostdeps').bootgrid('reload');
if (output.status == 0) {
toastr.success('Device dependencies saved successfully');
} else {
toastr.error('The device dependency could not be saved.');
}
},
error: function() {
toastr.error('The device dependency could not be saved.');
$("#manage-dependencies").modal('hide');
}
});
});
$(document).ready(function() {
$('#manavailableparents').on('select2:select', function(e) {changeParents(e, 'select')});
$('#manavailableparents').on('select2:unselect', function(e) {changeParents(e, 'unselect')});
});
</script>