package WebGUI::Operation::Help; #------------------------------------------------------------------- # WebGUI is Copyright 2001-2005 Plain Black Corporation. #------------------------------------------------------------------- # Please read the legal notices (docs/legal.txt) and the license # (docs/license.txt) that came with this distribution before using # this software. #------------------------------------------------------------------- # http://www.plainblack.com info@plainblack.com #------------------------------------------------------------------- use strict; use Tie::IxHash; use WebGUI::AdminConsole; use WebGUI::International; use WebGUI::Asset::Template; use WebGUI::Macro; use WebGUI::Session; use WebGUI::URL; use WebGUI::Utility; #------------------------------------------------------------------- sub _load { my $namespace = shift; $namespace =~ s/[^\w\d\s]//g; my $cmd = "WebGUI::Help::".$namespace; my $load = sprintf 'use %-s; $%-s::HELP;', $cmd, $cmd; my $hash = eval($load); unless ($@) { return $hash } else { WebGUI::ErrorHandler::error("Help failed to compile: $namespace. ".$@); return {}; } } #------------------------------------------------------------------- sub _get { my $id = shift; my $namespace = shift; my $help = _load($namespace); if (keys %{ $help } ) { return $help->{$id}; } else { return "Unable to load help for $namespace -> $id\n"; } } #------------------------------------------------------------------- sub _link { return WebGUI::URL::page('op=viewHelp;hid='.WebGUI::URL::escape($_[0]).';namespace='.$_[1]); } #------------------------------------------------------------------- sub _linkTOC { return WebGUI::URL::page('op=viewHelpChapter;namespace='.$_[0]); } #------------------------------------------------------------------- sub _getHelpName { my $file = shift; my $helpName; if ($file =~ /^Asset_/) { $helpName = WebGUI::International::get('assetName',$file); } elsif ($file =~ /^Macro_/) { $helpName = WebGUI::International::get('macroName',$file); } else { $helpName = WebGUI::International::get('topicName',$file); } return $helpName; } #------------------------------------------------------------------- sub www_viewHelp { return WebGUI::Privilege::insufficient() unless (WebGUI::Grouping::isInGroup(7)); my $ac = WebGUI::AdminConsole->new("help"); my $namespace = $session{form}{namespace} || "WebGUI"; my $i18n = WebGUI::International->new($namespace); my $help = _get($session{form}{hid},$namespace); foreach my $row (@{$help->{related}}) { my $relatedHelp = _get($row->{tag},$row->{namespace}); $ac->addSubmenuItem(_link($row->{tag},$row->{namespace}),WebGUI::International::get($relatedHelp->{title},$row->{namespace})); } my %vars; $vars{body} = $i18n->get($help->{body}); foreach my $row (@{ $help->{fields} }) { push @{ $vars{fields} }, { 'title' => WebGUI::International::get($row->{title},$row->{namespace}), 'description' => WebGUI::International::get($row->{description},$row->{namespace}), } } my $body = WebGUI::Asset::Template->new("PBtmplHelp000000000001")->process(\%vars); $ac->addSubmenuItem(WebGUI::URL::page('op=viewHelpIndex'),WebGUI::International::get(95)); $ac->addSubmenuItem(WebGUI::URL::page('op=viewHelpTOC'),WebGUI::International::get('help contents')); return $ac->render( WebGUI::Macro::process($body), WebGUI::International::get(93).': '.$i18n->get($help->{title}) ); } #------------------------------------------------------------------- sub www_viewHelpIndex { return WebGUI::Privilege::insufficient() unless (WebGUI::Grouping::isInGroup(7)); my @helpIndex; my $i; my $dir = $session{config}{webguiRoot}.$session{os}{slash}."lib".$session{os}{slash}."WebGUI".$session{os}{slash}."Help"; opendir (DIR,$dir) or WebGUI::ErrorHandler::fatal("Can't open Help directory!"); my @files = grep { /\.pm$/} readdir(DIR); closedir(DIR); foreach my $file (@files) { if ($file =~ /(.*?)\.pm$/) { my $namespace = $1; my $help = _load($namespace); foreach my $key (keys %{$help}) { push @helpIndex, [$namespace, $key, WebGUI::International::get($help->{$key}{title},$namespace)]; $i++; } } } my $output = '
| '; my $halfway = round($i/2); $i = 0; @helpIndex = sort { $a->[2] cmp $b->[2] } @helpIndex; foreach my $helpEntry (@helpIndex) { my ($namespace, $id, $title) = @{ $helpEntry }; $output .= ''; $i++; if ($i == $halfway) { $output .= ' | '; } } $output .= ' |
| '; @entries = sort { $a->[0] cmp $b->[0] } @entries; foreach my $helpEntry (@entries) { my ($helpName, $helpFile) = @{ $helpEntry }; $output .= '\n"; $i++; if ($i % $third == 0) { $output .= ' | '; } } $output .= ' |
'.WebGUI::International::get($help->{$id}{title},$namespace).'
'; } my $ac = WebGUI::AdminConsole->new("help"); $ac->addSubmenuItem(WebGUI::URL::page('op=viewHelpIndex'),WebGUI::International::get(95)); $ac->addSubmenuItem(WebGUI::URL::page('op=viewHelpTOC'),WebGUI::International::get('help contents')); return $ac->render($output, join ': ',WebGUI::International::get(93), _getHelpName($namespace)); } 1;