mirror of
				https://github.com/librenms/librenms.git
				synced 2024-10-07 16:52:45 +00:00 
			
		
		
		
	webui: New tab in "manage host dependencies" to clear all children of a parent (#8085)
* Add dependency info for api * webui: new tab to clear children of a parent device * Fix travis CI errors
This commit is contained in:
		
				
					committed by
					
						
						Neil Lathwood
					
				
			
			
				
	
			
			
			
						parent
						
							86ff67c02e
						
					
				
				
					commit
					76587065cc
				
			@@ -15,13 +15,34 @@
 | 
				
			|||||||
if (is_admin() === false) {
 | 
					if (is_admin() === false) {
 | 
				
			||||||
    $status = array('status' => 1, 'message' => 'You need to be admin');
 | 
					    $status = array('status' => 1, 'message' => 'You need to be admin');
 | 
				
			||||||
} else {
 | 
					} else {
 | 
				
			||||||
 | 
					    if ($_POST['device_id']) {
 | 
				
			||||||
        if (!is_numeric($_POST['device_id'])) {
 | 
					        if (!is_numeric($_POST['device_id'])) {
 | 
				
			||||||
            $status = array('status' => 1, 'message' => 'Wrong device id!');
 | 
					            $status = array('status' => 1, 'message' => 'Wrong device id!');
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            if (dbDelete('device_relationships', '`child_device_id` = ?', array($_POST['device_id']))) {
 | 
					            if (dbDelete('device_relationships', '`child_device_id` = ?', array($_POST['device_id']))) {
 | 
				
			||||||
                $status = array('status' => 0, 'message' => 'Device dependency has been deleted.');
 | 
					                $status = array('status' => 0, 'message' => 'Device dependency has been deleted.');
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
            $status = array('status' => 1, 'message' => 'Device Dependency cannot be deleted.');
 | 
					                $status = array('status' => 1, 'message' => 'Device dependency cannot be deleted.');
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    } else if ($_POST['parent_ids']) {
 | 
				
			||||||
 | 
					        $error = false;
 | 
				
			||||||
 | 
					        foreach ($_POST['parent_ids'] as $parent) {
 | 
				
			||||||
 | 
					            if (is_numeric($parent) && $parent != 0) {
 | 
				
			||||||
 | 
					                if (!dbDelete('device_relationships', ' `parent_device_id` = ?', array($parent))) {
 | 
				
			||||||
 | 
					                    $error = true;
 | 
				
			||||||
 | 
					                    $status = array('status' => 1, 'message' => 'Device dependency cannot be deleted.');
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            } else if ($parent == 0) {
 | 
				
			||||||
 | 
					                $status = array('status' => 1, 'message' => 'No dependency to delete.');
 | 
				
			||||||
 | 
					                $error = true;
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!$error) {
 | 
				
			||||||
 | 
					            $status = array('status' => 0, 'message' => 'Device dependencies has been deleted');
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,7 +25,12 @@ if (is_admin() === false) {
 | 
				
			|||||||
                <h5 class="modal-title" id="mandeps">Device Dependency for Multiple Devices</h5>
 | 
					                <h5 class="modal-title" id="mandeps">Device Dependency for Multiple Devices</h5>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            <div class="modal-body">
 | 
					            <div class="modal-body">
 | 
				
			||||||
                <div id="mandeps-msg"></div>
 | 
					                <ul class="nav nav-tabs" role="tablist" id="manhostdepstabs">
 | 
				
			||||||
 | 
					                    <li role="presentation" class="active"><a href="#bulkadd" aria-controls="bulkadd" role="tab" data-toggle="tab">Bulk Add</a></li>
 | 
				
			||||||
 | 
					                    <li role="presentation"><a href="#clearall" aria-controls="clearall" role="tab" data-toggle="tab">Clear All</a></li>
 | 
				
			||||||
 | 
					                </ul>
 | 
				
			||||||
 | 
					                <div class="tab-content">
 | 
				
			||||||
 | 
					                    <div role="tabpanel" class="tab-pane active" id="bulkadd">
 | 
				
			||||||
                        <p>Here you can modify multiple device dependencies. Setting the parent device to "None" will clear the dependency.</p>
 | 
					                        <p>Here you can modify multiple device dependencies. Setting the parent device to "None" will clear the dependency.</p>
 | 
				
			||||||
                        <br />
 | 
					                        <br />
 | 
				
			||||||
                        <div class="form-group">
 | 
					                        <div class="form-group">
 | 
				
			||||||
@@ -40,6 +45,16 @@ if (is_admin() === false) {
 | 
				
			|||||||
                            </select>
 | 
					                            </select>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
 | 
					                    <div role="tabpanel" class="tab-pane" id="clearall">
 | 
				
			||||||
 | 
					                        <p>Select the parent device to delete its child devices</p>
 | 
				
			||||||
 | 
					                        <div class="form-group">
 | 
				
			||||||
 | 
					                            <label for="manclearchildren">Parent Host:</label>
 | 
				
			||||||
 | 
					                            <select multiple name="parent_id" class="form-control" id="manclearchildren" style='width: 100%'>
 | 
				
			||||||
 | 
					                            </select>
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
            <div class="modal-footer">
 | 
					            <div class="modal-footer">
 | 
				
			||||||
                <button type="button" class="btn btn-danger" data-dismiss="modal">Cancel</button>
 | 
					                <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>
 | 
					                <button type="submit" class="btn btn-success" id="manhostdep-save" data-target="manhostdep-save">Save</button>
 | 
				
			||||||
@@ -71,7 +86,7 @@ function changeParents(e, evttype)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Set parents to new value
 | 
					    // Set parents to new value
 | 
				
			||||||
    $('#manavailableparents').val(temp_arr).trigger('change');
 | 
					    $('#manavailableparents').val(parent_ids).trigger('change');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $.ajax({
 | 
					    $.ajax({
 | 
				
			||||||
        type: 'POST',
 | 
					        type: 'POST',
 | 
				
			||||||
@@ -104,6 +119,9 @@ $('#manage-dependencies').on('hide.bs.modal', function() {
 | 
				
			|||||||
    $('#manavailableparents').val('0');
 | 
					    $('#manavailableparents').val('0');
 | 
				
			||||||
    $('#manavailableparents').trigger('change');
 | 
					    $('#manavailableparents').trigger('change');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $('#manclearchildren').val('0');
 | 
				
			||||||
 | 
					    $('#manclearchildren').trigger('change');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $('#manalldevices').val(null);
 | 
					    $('#manalldevices').val(null);
 | 
				
			||||||
    $('#manalldevices').trigger('change');
 | 
					    $('#manalldevices').trigger('change');
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
@@ -123,8 +141,12 @@ $('#manage-dependencies').on('show.bs.modal', function() {
 | 
				
			|||||||
                });
 | 
					                });
 | 
				
			||||||
                $('#manalldevices').val(tempArr);
 | 
					                $('#manalldevices').val(tempArr);
 | 
				
			||||||
                $('#manalldevices').trigger('change');
 | 
					                $('#manalldevices').trigger('change');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                $('#manavailableparents').val(device_id);
 | 
					                $('#manavailableparents').val(device_id);
 | 
				
			||||||
                $('#manavailableparents').trigger('change');
 | 
					                $('#manavailableparents').trigger('change');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                $('#manclearchildren').val(device_id);
 | 
				
			||||||
 | 
					                $('#manclearchildren').trigger('change');
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                toastr.error(output.message);
 | 
					                toastr.error(output.message);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -141,7 +163,9 @@ $('#manhostdep-save').click('', function(event) {
 | 
				
			|||||||
    var children = [];
 | 
					    var children = [];
 | 
				
			||||||
    var parent_id = [];
 | 
					    var parent_id = [];
 | 
				
			||||||
    var parent_host = '';
 | 
					    var parent_host = '';
 | 
				
			||||||
 | 
					    var btn_text = $('#manhostdep-save').text();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (btn_text == 'Save') {
 | 
				
			||||||
        // Get selections
 | 
					        // Get selections
 | 
				
			||||||
        var parents = $('#manavailableparents').select2('data');
 | 
					        var parents = $('#manavailableparents').select2('data');
 | 
				
			||||||
        var devices = $('#manalldevices').select2('data');
 | 
					        var devices = $('#manalldevices').select2('data');
 | 
				
			||||||
@@ -175,10 +199,44 @@ $('#manhostdep-save').click('', function(event) {
 | 
				
			|||||||
                $("#manage-dependencies").modal('hide');
 | 
					                $("#manage-dependencies").modal('hide');
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					    } else if(btn_text == 'Clear') {
 | 
				
			||||||
 | 
					        var parents = $('#manclearchildren').select2('data');
 | 
				
			||||||
 | 
					        for (var i=0;i<parents.length;i++) {
 | 
				
			||||||
 | 
					            parent_id.push(parents[i].id);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        $.ajax({
 | 
				
			||||||
 | 
					            type: 'POST',
 | 
				
			||||||
 | 
					            url: 'ajax_form.php',
 | 
				
			||||||
 | 
					            data: { type: "delete-host-dependency", parent_ids: parent_id },
 | 
				
			||||||
 | 
					            dataType: "json",
 | 
				
			||||||
 | 
					            success: function(output) {
 | 
				
			||||||
 | 
					                $("#manage-dependencies").modal('hide');
 | 
				
			||||||
 | 
					                $('#hostdeps').bootgrid('reload');
 | 
				
			||||||
 | 
					                if (output.status == 0) {
 | 
				
			||||||
 | 
					                    toastr.success(output.message);
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    toastr.error(output.message);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            error: function() {
 | 
				
			||||||
 | 
					                toastr.error('The device dependency could not be deleted.');
 | 
				
			||||||
 | 
					                $("#manage-dependencies").modal('hide');
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(document).ready(function() {
 | 
					$(document).ready(function() {
 | 
				
			||||||
    $('#manavailableparents').on('select2:select', function(e) {changeParents(e, 'select')});
 | 
					    $('#manavailableparents').on('select2:select', function(e) {changeParents(e, 'select')});
 | 
				
			||||||
    $('#manavailableparents').on('select2:unselect', function(e) {changeParents(e, 'unselect')});
 | 
					    $('#manavailableparents').on('select2:unselect', function(e) {changeParents(e, 'unselect')});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
 | 
				
			||||||
 | 
					        if ($(e.target).closest('li').index() == 0) {
 | 
				
			||||||
 | 
					            $('#manhostdep-save').text('Save');
 | 
				
			||||||
 | 
					        } else if ($(e.target).closest('li').index() == 1) {
 | 
				
			||||||
 | 
					            $('#manhostdep-save').text('Clear');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -126,6 +126,12 @@ $(document).ready(function() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    var manParentDevstoClr = $('#manclearchildren').select2({
 | 
				
			||||||
 | 
					        dropdownParent: $('#manage-dependencies'),
 | 
				
			||||||
 | 
					        width: 'resolve',
 | 
				
			||||||
 | 
					        tags: true
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var manParentDevs = $('#manavailableparents').select2({
 | 
					    var manParentDevs = $('#manavailableparents').select2({
 | 
				
			||||||
        dropdownParent: $('#manage-dependencies'),
 | 
					        dropdownParent: $('#manage-dependencies'),
 | 
				
			||||||
        width: 'resolve',
 | 
					        width: 'resolve',
 | 
				
			||||||
@@ -147,10 +153,12 @@ $(document).ready(function() {
 | 
				
			|||||||
            if (output.status == 0) {
 | 
					            if (output.status == 0) {
 | 
				
			||||||
                manParentDevs.append($('<option>', { value: 0, text: 'None'}));
 | 
					                manParentDevs.append($('<option>', { value: 0, text: 'None'}));
 | 
				
			||||||
                editSelect.append($('<option>', { value: 0, text: 'None'}));
 | 
					                editSelect.append($('<option>', { value: 0, text: 'None'}));
 | 
				
			||||||
 | 
					                manParentDevstoClr.append($('<option>', { value: 0, text: 'None'}));
 | 
				
			||||||
                $.each(output.deps, function (i,elem) {
 | 
					                $.each(output.deps, function (i,elem) {
 | 
				
			||||||
                    manParentDevs.append($('<option>',{value:elem.id, text:elem.hostname}));
 | 
					                    manParentDevs.append($('<option>',{value:elem.id, text:elem.hostname}));
 | 
				
			||||||
                    editSelect.append($('<option>',{value:elem.id, text:elem.hostname}));
 | 
					                    editSelect.append($('<option>',{value:elem.id, text:elem.hostname}));
 | 
				
			||||||
                    manAllDevs.append($('<option>',{value:elem.id, text:elem.hostname}));
 | 
					                    manAllDevs.append($('<option>',{value:elem.id, text:elem.hostname}));
 | 
				
			||||||
 | 
					                    manParentDevstoClr.append($('<option>',{value:elem.id, text:elem.hostname}));
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                toastr.error('Device dependencies could not be retrieved from the database');
 | 
					                toastr.error('Device dependencies could not be retrieved from the database');
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user