Files
webgui/emhttp/plugins/dynamix/NotificationAgents.page
Zack Spear 54e4188e57 style: enhance NotificationAgents.page for improved layout clarity
- Removed unnecessary class "shift" from the title div to streamline the layout.
- This change aligns with ongoing efforts to refine input guidance and visual consistency across the plugin.
2025-05-20 14:54:13 -07:00

169 lines
7.5 KiB
Plaintext

Menu="Notifications:3"
Title="Notification Agents"
Tag="rss-square"
---
<?PHP
/* Copyright 2005-2023, Lime Technology
* Copyright 2012-2023, Bergware International.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
* as published by the Free Software Foundation.
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*/
?>
<script>
var scripts = new Object();
var enabledAgents = new Object();
var disabledAgents = new Object();
var openPage = true;
<?$width = [166,300]?>
<?if ($tabbed):?>
$('#tab3').bind({click:function(){initDropdown();}});
$(function(){if ($('#tab3').is(':checked')) initDropdown();});
<?else:?>
$(function(){initDropdown();});
<?endif;?>
if (!String.prototype.format) {
String.prototype.format = function() {
var args = arguments;
return this.replace(/{(\d+)}/g, function(match, number) {
return typeof args[number] != 'undefined' ? args[number] : match;
});
};
}
function addSlashes(text) {
return text.replace(/\"/g, "\\\"");
}
function prepareService(el, name) {
var script = scripts[name];
var vars = "";
var form = $(el).parents('form:first');
form.find('.variable').each(function() {
vars += $(this).attr('name')+'="'+addSlashes($(this).val())+"\"\n";
});
$('[name="'+name+'"] [id^="slot_"]').each(function() {
var include = '';
$(this).find('option').each(function() {
if ($(this).is(':selected')) {
if (include.length) include += '\\n';
include += $(this).val();
$(this).removeAttr('selected');
}
});
vars += $(this).attr('name')+'="'+include+"\"\n";
});
var cmd = (form.find('select[name="Enabled"]').val()=='yes' ? 'enable' : 'disable');
form.find('input[name="#arg\\[1\\]"]').val(cmd);
form.find('input[name="#arg\\[2\\]"]').val(name+'.sh');
form.find('input[name="text"]').val(script.format(vars,'\n'));
}
function execCmd(cmd, name) {
var form = $('#formExec');
form.find('input[name="#arg\\[1\\]"]').val(cmd);
if (name) form.find('input[name="#arg\\[2\\]"]').val(name+'.sh');
form.submit();
}
function testService(name) {
var form = $('#formExec');
form.find('input[name="#arg\\[1\\]"]').val('test');
form.find('input[name="#arg\\[2\\]"]').val(name+'.sh');
form.append('<input type="hidden" name="#env[]" value="EVENT='+name+' test.">');
form.append('<input type="hidden" name="#env[]" value="SUBJECT='+name+' test.">');
form.append('<input type="hidden" name="#env[]" value="DESCRIPTION='+name+' test.">');
form.append('<input type="hidden" name="#env[]" value="IMPORTANCE=normal">');
// host is normally added to link by the notify script. add it here since calling the agent directly.
form.append('<input type="hidden" name="#env[]" value="LINK='+window.location.origin+'/Settings/Notifications">');
form.submit();
}
function initDropdown() {
if (openPage) {$("[id^='slot_']").dropdownchecklist({width:<?=$width[1]?>,explicitClose:'..._(close)_'}); openPage = false;}
}
</script>
<form method="POST" id="formExec" action="/update.php" target="progressFrame">
<input type="hidden" name="#command" value="/webGui/scripts/agent">
<input type="hidden" name="#arg[1]" value="">
<input type="hidden" name="#arg[2]" value="">
</form>
<?
$fields = ['Event','Subject','Timestamp','Description','Importance','Content','Link'];
$xml_files = glob("/usr/local/emhttp/plugins/dynamix/agents/*.xml");
$i = 1;
foreach ($xml_files as $xml_file) {
$xml = @simplexml_load_file($xml_file);
if ( ! $xml ) continue;
if ( isset($xml->Language) ) {
$guiLanguage = ($locale == "" ) ? "en_US" : $locale;
$acceptedLanguages = explode(" ",$xml->Language);
if ( ! in_array($guiLanguage,$acceptedLanguages) )
continue;
}
$name = str_replace(' ','_',$xml->Name);
$enabledAgent = agent_fullname("$name.sh", "enabled");
$disabledAgent = agent_fullname("$name.sh", "disabled");
if (is_file($disabledAgent)) {
$file = $disabledAgent;
if (is_file($enabledAgent)) unlink($enabledAgent);
} else {
$file = $enabledAgent;
}
$values = [];
$script = "";
if (is_file($file)) {
preg_match("/[#]{6,100}([^#]*?)[#]{6,100}/si", file_get_contents($file), $match);
if (isset($match[1])) {
foreach (explode(PHP_EOL, $match[1]) as $line) {
if (strpos($line, "=")) {
[$k, $v] = my_explode("=",str_replace("\"", "", $line),2);
$values[$k] = $v;
}
}
}
}
foreach (explode(PHP_EOL,(String) $xml->Script) as $line) if (trim($line)) $script .= trim($line)."{1}";
echo '<div class="title"><span class="left"><img src="/plugins/dynamix/icons/'.strtolower(str_replace('_','',$name)).'.png" class="icon" style="height:16px;width:16px;">'.str_replace('_',' ',$name).'</span><span class="status vhshift">'.(is_file($enabledAgent) ? '<span class="green">'._("Enabled").'</span>' : '<span class="red">'._("Disabled").'</span>').'</span></div>';
echo '<form method="POST" name="'.$name.'" action="/update.php" target="progressFrame">';
echo '<input type="hidden" name="#include" value="/webGui/include/update.file.php">';
echo '<input type="hidden" name="#file" value="'.$file.'">';
echo '<input type="hidden" name="#command" value="/webGui/scripts/agent">';
echo '<input type="hidden" name="#arg[1]" value="">';
echo '<input type="hidden" name="#arg[2]" value="">';
echo '<input type="hidden" name="text" value="">';
echo '<dl><dt>'._("Agent function").':</dt><dd><select name="Enabled">';
echo mk_option(is_file($disabledAgent), 'no', _('Disabled'));
echo mk_option(is_file($enabledAgent), 'yes', _('Enabled'));
echo '</select></dd></dl>';
echo '<script>scripts["'.$name.'"]='.json_encode($script).';enabledAgents["'.$name.'"]="'.$enabledAgent.'";disabledAgents["'.$name.'"]="'.$disabledAgent.'";</script>';
foreach ($xml->Variables->children() as $v) {
$vName = preg_replace('#\[([^\]]*)\]#', '<$1>', (string) $v);
$vDesc = ucfirst(strtolower(preg_replace('#\[([^\]]*)\]#', '<$1>', $v->attributes()->Desc)));
$vDefault = preg_replace('#\[([^\]]*)\]#', '<$1>', $v->attributes()->Default);
$vHelp = preg_replace('#\[([^\]]*)\]#', '<$1>', $v->attributes()->Help);
echo "<dl><dt>$vDesc:</dt><dd>";
if (preg_match('/title|message/', $vDesc)) {
echo '<select id="slot_'.$i++.'" name="'.$vName.'" multiple style="display:none">';
$value = str_replace('\n',',',isset($values[$vName]) ? $values[$vName] : $vDefault);
foreach ($fields as $field) echo mk_option_check($value,'$'.strtoupper($field),_($field));
echo '</select>';
} else {
echo '<input type="text" name="'.$vName.'" class="variable" required value="'.( isset($values[$vName]) ? $values[$vName] : $vDefault ).'">';
}
echo '</dd></dl>';
if ($vHelp) echo '<blockquote class="inline_help">'.$vHelp.'</blockquote>';
}
echo '<dl><dt>&nbsp;</dt><dd><input type="submit" value='._("Apply").' onclick="prepareService(this, \''.$name.'\')" disabled>';
echo '<input type="button" value='._("Done").' onclick="done()">';
if (is_file($file)) {
echo '<input type="button" value='._("Delete").' onclick="execCmd(\'delete\',\''.$name.'\')">';
echo '<input type="button" value='._("Test").' onclick="testService(\''.$name.'\')"'.($file==$enabledAgent ? '>' : ' disabled>');
}
echo '</dd></dl></form><div style="min-height:50px;"></div>';
}
?>