Add support for template variables to help pages

This commit is contained in:
Jamie Cameron 2025-03-20 20:02:47 -07:00
parent 4021b6d8bb
commit e60be7133b
3 changed files with 30 additions and 13 deletions

View File

@ -10,24 +10,41 @@ use WebminCore;
$ENV{'PATH_INFO'} !~ /[\\\&\;\`\'\"\|\*\?\~\<\>\^\(\)\[\]\{\}\$\n\r]/ || $ENV{'PATH_INFO'} !~ /[\\\&\;\`\'\"\|\*\?\~\<\>\^\(\)\[\]\{\}\$\n\r]/ ||
&error($text{'help_epath'}); &error($text{'help_epath'});
$ENV{'PATH_INFO'} =~ /^\/(\S+)\/(\S+)$/ || &error($text{'help_epath'}); $ENV{'PATH_INFO'} =~ /^\/(\S+)\/(\S+)$/ || &error($text{'help_epath'});
$module = $1; $file = $2; my $module = $1;
my $file = $2;
&ReadParse();
# if it ends with .gif assume it is a direct URL # if it ends with .gif assume it is a direct URL
if ($file =~ /\.(gif|jpg|jpeg|png)$/i) { if ($file =~ /\.(gif|jpg|jpeg|png)$/i) {
&redirect("$module/$file"); &redirect("$module/$file");
exit; return;
} }
# read the help file # read the help file
$help = &read_help_file($module, $file); my $help = &read_help_file($module, $file);
$help || &helperror(&text('help_efile3', $help || &helperror(&text('help_efile3',
&html_escape($file), &html_escape($module))); &html_escape($file), &html_escape($module)));
my %hash;
# Modify help file based on module # Modify help file based on module
if (&foreign_exists($module) && if (&foreign_exists($module) &&
&foreign_require($module) && &foreign_require($module)) {
&foreign_defined($module, 'help_pre_load')) { if (&foreign_defined($module, 'help_pre_load')) {
$help = &foreign_call($module, "help_pre_load", $help); $help = &foreign_call($module, "help_pre_load", $help);
}
if (&foreign_defined($module, 'help_template')) {
%hash = &foreign_call($module, "help_template");
}
}
# if any template variables were given as URL params, substitute them into the file
foreach my $k (keys %in) {
if ($k =~ /^tmpl_(\S+)$/i) {
$hash{$1} = $in{$k};
}
}
if (%hash) {
$help = &substitute_template($help, \%hash);
} }
# find and replace the <header> section # find and replace the <header> section

View File

@ -1721,8 +1721,6 @@ of the subtext parameter :
=item below - HTML to be displayed below the title. Typically this is used for application or server version information. =item below - HTML to be displayed below the title. Typically this is used for application or server version information.
=cut =cut
sub ui_print_header sub ui_print_header
{ {

View File

@ -4079,13 +4079,15 @@ The actual help pages are in each module's help sub-directory, in files with
=cut =cut
sub hlink sub hlink
{ {
my ($txt, $page, $mod, $width, $height, $tmpl) = @_;
$mod ||= &get_module_name();
if (defined(&theme_hlink)) { if (defined(&theme_hlink)) {
return &theme_hlink(@_); return &theme_hlink(@_);
} }
my $mod = $_[2] ? $_[2] : &get_module_name(); $width ||= $tconfig{'help_width'} || $gconfig{'help_width'} || 600;
my $width = $_[3] || $tconfig{'help_width'} || $gconfig{'help_width'} || 600; $height ||= $tconfig{'help_height'} || $gconfig{'help_height'} || 400;
my $height = $_[4] || $tconfig{'help_height'} || $gconfig{'help_height'} || 400; my $params = $tmpl ? join("&", map { "tmpl_".&urlize($_)."=".&urlize($tmpl->{$_}) } keys %$tmpl) : "";
return "<a onClick='window.open(\"@{[&get_webprefix()]}/help.cgi/$mod/$_[1]\", \"help\", \"toolbar=no,menubar=no,scrollbars=yes,width=$width,height=$height,resizable=yes\"); return false' href=\"@{[&get_webprefix()]}/help.cgi/$mod/$_[1]\">$_[0]</a>"; return "<a onClick='window.open(\"@{[&get_webprefix()]}/help.cgi/$mod/$page?$params\", \"help\", \"toolbar=no,menubar=no,scrollbars=yes,width=$width,height=$height,resizable=yes\"); return false' href=\"@{[&get_webprefix()]}/help.cgi/$mod/$page?$params\">$txt</a>";
} }
=head2 user_chooser_button(field, multiple, [form]) =head2 user_chooser_button(field, multiple, [form])