mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
Consolidate configuration settings and implement dynamic webui settings (#9809)
* initial db/defaults dump * numeric values * Remove $config['time'] * Use config_definitions.json * try setting definition as a complete array * a little more * fix format * WIP converting dynamic setting pages * rewriting the webui * remove legacy and add translations * finish email section * improve navigation update js a bit * Import the remaining existing settings * Update backend still some wip migration * fix config loading (db not overriding defaults) * some cleanup * more array collapsing * update settings * Settings search * add purge settings to ui, order groups and sections * collapse more arrays * Auth definitions WIP * remove needless slash escapes * add warning to json * moving settings from defaults.inc * remove slow_statistics * Move rrdtool settings to the poller section * Use translations more consistently * removing more settings from defaults.inc.php * show setting name in tooltip * allow help text to be shown on mobile * disable settings that are set in config.php * Implement undo and reset to default. * Vue.js functional * Vue.js WIP * Implement tabs component * accordion WIP * lodash ver update * two items * Accordion somewhat working * hash navigation * Refine Accordion * Fix up tab styling a bit * Cleaner tab selected property Hide html while loading * spinner? * Icon support property for accordion to active * WIP * Tabs/Sections from ajax * Setting Component skeletons * Dynamic Component resolution * Basic functionality * toggle class * Refactor components * translate tabs and accordions * simple array attempt * improve readonly tooltip * array styling * array value editing * organize snmp info * Handle initial tab/section in url * Use Laravel to parse tab/section, dump old * Draggable array entries * v-tooltip, for clickable (and touch) help tooltips disable draggable * Navigation WIP * Navigation WIP * groups computed * filter settings * fix event reference * vue.js i18n initial * missing description = just setting name * en fallback * tidy up the language support and js generation * persist value to db * fix issue with 0 * Delete settings from DB instead of setting them to default * ldap-groups fixup style * Default dashboard selection * fix array of options instead of object * allow custom validation for settings * translate options in SettingSelect * SNMP v3 WIP * fix setting arrays * Split persist out of set * Hook up events for SNMP v3 Auth correct Config::persist behaviour with arrays * dependent settings (primitive for now) actually update the settings values in the LibrenmsSettings component * more complex "when" behaviour * remove un-needed seeder * add poller_modules.cisco-qfp * remove en.json (disable warning) * don't set default for log_dir or log_file, otherwise it won't be processed correctly * Fix module order add some missing settings * more config corrections * correct graphs correct loading values set to null (although it should have no difference) remove project_name_version * Add nfsen settings. Docs are very confusing, so might have flubbed something remove option for array definition of select option as numeric indexes messes it up * Correct more upstream config differences * Config cleanup after a bunch of merges. * Fixes * add version tags to js/css files remove old js * Print out full settings list read-only * Add http_proxy setting fix indents in config_definitions.json * repeaters default is 0 (aka 20) * cleanups * rewrite the dynamic config docs * add language docs * Don't show snmp v3 auth add/remove if disabled by config.php
This commit is contained in:
@@ -914,18 +914,6 @@ function clean_bootgrid($string)
|
||||
return $output;
|
||||
}//end clean_bootgrid()
|
||||
|
||||
|
||||
function get_config_by_group($group)
|
||||
{
|
||||
return \App\Models\Config::query()->where('config_group', $group)->get()->map(function ($config_item) {
|
||||
if ($config_item['config_value'] === true) {
|
||||
$config_item['config_checked'] = 'checked';
|
||||
}
|
||||
|
||||
return $config_item;
|
||||
})->keyBy('config_name')->toArray();
|
||||
}//end get_config_by_group()
|
||||
|
||||
function get_url()
|
||||
{
|
||||
// http://stackoverflow.com/questions/2820723/how-to-get-base-url-with-php
|
||||
@@ -1038,95 +1026,6 @@ function dynamic_override_config($type, $name, $device)
|
||||
}
|
||||
}//end dynamic_override_config()
|
||||
|
||||
function generate_dynamic_config_panel($title, $config_groups, $items = array(), $transport = '', $end_panel = true)
|
||||
{
|
||||
$anchor = md5($title);
|
||||
$output = '
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title">
|
||||
<a data-toggle="collapse" data-parent="#accordion" href="#' . $anchor . '"><i class="fa fa-caret-down"></i> ' . $title . '</a>
|
||||
';
|
||||
if (!empty($transport)) {
|
||||
$output .= '<button name="test-alert" id="test-alert" type="button" data-transport="' . $transport . '" class="btn btn-primary btn-xs pull-right">Test transport</button>';
|
||||
}
|
||||
$output .= '
|
||||
</h4>
|
||||
</div>
|
||||
<div id="' . $anchor . '" class="panel-collapse collapse">
|
||||
<div class="panel-body">
|
||||
';
|
||||
|
||||
if (!empty($items)) {
|
||||
foreach ($items as $item) {
|
||||
$output .= '
|
||||
<div class="form-group has-feedback ' . (isset($item['class']) ? $item['class'] : '') . '">
|
||||
<label for="' . $item['name'] . '"" class="col-sm-4 control-label">' . $item['descr'] . ' </label>
|
||||
<div data-toggle="tooltip" title="' . $config_groups[$item['name']]['config_descr'] . '" class="toolTip fa fa-fw fa-lg fa-question-circle"></div>
|
||||
<div class="col-sm-4">
|
||||
';
|
||||
if ($item['type'] == 'checkbox') {
|
||||
$output .= '<input id="' . $item['name'] . '" type="checkbox" name="global-config-check" ' . $config_groups[$item['name']]['config_checked'] . ' data-on-text="Yes" data-off-text="No" data-size="small" data-config_id="' . $config_groups[$item['name']]['config_id'] . '">';
|
||||
} elseif ($item['type'] == 'text') {
|
||||
$pattern = isset($item['pattern']) ? ' pattern="' . $item['pattern'] . '"' : "";
|
||||
$pattern .= isset($item['required']) && $item['required'] ? " required" : "";
|
||||
$output .= '
|
||||
<input id="' . $item['name'] . '" class="form-control validation" type="text" name="global-config-input" value="' . $config_groups[$item['name']]['config_value'] . '" data-config_id="' . $config_groups[$item['name']]['config_id'] . '"' . $pattern . '>
|
||||
<span class="form-control-feedback"><i class="fa" aria-hidden="true"></i></span>
|
||||
';
|
||||
} elseif ($item['type'] == 'password') {
|
||||
$output .= '
|
||||
<input id="' . $item['name'] . '" class="form-control" type="password" name="global-config-input" value="' . $config_groups[$item['name']]['config_value'] . '" data-config_id="' . $config_groups[$item['name']]['config_id'] . '">
|
||||
<span class="form-control-feedback"><i class="fa" aria-hidden="true"></i></span>
|
||||
';
|
||||
} elseif ($item['type'] == 'numeric') {
|
||||
$output .= '
|
||||
<input id="' . $item['name'] . '" class="form-control" onkeypress="return (event.charCode == 8 || event.charCode == 0) ? null : event.charCode >= 48 && event.charCode <= 57" type="text" name="global-config-input" value="' . $config_groups[$item['name']]['config_value'] . '" data-config_id="' . $config_groups[$item['name']]['config_id'] . '">
|
||||
<span class="glyphicon form-control-feedback" aria-hidden="true"></span>
|
||||
';
|
||||
} elseif ($item['type'] == 'select') {
|
||||
$output .= '
|
||||
<select id="' . ($config_groups[$item['name']]['name'] ?: $item['name']) . '" class="form-control" name="global-config-select" data-config_id="' . $config_groups[$item['name']]['config_id'] . '">
|
||||
';
|
||||
if (!empty($item['options'])) {
|
||||
foreach ($item['options'] as $option) {
|
||||
if (gettype($option) == 'string') {
|
||||
/* for backwards-compatibility */
|
||||
$tmp_opt = $option;
|
||||
$option = array(
|
||||
'value' => $tmp_opt,
|
||||
'description' => $tmp_opt,
|
||||
);
|
||||
}
|
||||
$output .= '<option value="' . $option['value'] . '"';
|
||||
if ($option['value'] == $config_groups[$item['name']]['config_value']) {
|
||||
$output .= ' selected';
|
||||
}
|
||||
$output .= '>' . $option['description'] . '</option>';
|
||||
}
|
||||
}
|
||||
$output .= '
|
||||
</select>
|
||||
<span class="form-control-feedback"><i class="fa" aria-hidden="true"></i></span>
|
||||
';
|
||||
}
|
||||
$output .= '
|
||||
</div>
|
||||
</div>
|
||||
';
|
||||
}
|
||||
}
|
||||
|
||||
if ($end_panel === true) {
|
||||
$output .= '
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
';
|
||||
}
|
||||
return $output;
|
||||
}//end generate_dynamic_config_panel()
|
||||
|
||||
/**
|
||||
* Return the rows from 'ports' for all ports of a certain type as parsed by port_descr_parser.
|
||||
* One or an array of strings can be provided as an argument; if an array is passed, all ports matching
|
||||
|
||||
Reference in New Issue
Block a user