use strict;
use Pos::web;
use Pos::Webtop::Web::OEMLoader;
use HTML::Entities ();
package Pos::Webtop::Web::Page;
sub new
{
my $this = shift;
my $class = ref($this) || $this;
my ($self,$title,$client) = @{{@_}}{qw/self title client/};
if ( not defined $self )
{
$self = {};
bless($self,$class);
}
$title = "Webtop" unless defined $title;
$self->{'title'} = $title;
if ( not defined $client )
{
warn ref($self) . "::new(): client was not defined\n";
return undef;
}
$self->{'client'} = $client;
$self->{'navBar'} = [];
return $self;
}
sub getHeaderHtml
{
my $self = shift;
my ($title) = @{{@_}}{qw/title/};
$title = $self->{'title'} unless defined $title;
my $tb = Pos::Webtop::Toolbox->new;
my $db = $tb->getWebtopDbReader;
my $client = $self->{'client'};
my $moduleHelpAnchors =
{
"Intranet" => "intramod",
"Applications" => "appmod",
"Mail" => "emailmod",
"FileShares" => "filesharemod",
"RemoteDesktop" => "rdamod",
"UserPrefs" => ""
};
my $navBar = join(" > ", @{ $self->{'navBar'} } );
my $ret = "";
my @um = ();
my $cmi = $client->getUserContentModules();
my $isMobile = $client->isMobileWebtop();
my $activeXConnected = $client->isWebtopVpnConnectionEstablished(db=>$db);
my $currentModule = $client->getPersistedValue( name=> "module" );
#
# sort the keys by link order so they print out in the same order as
# the modules load up
#
my @sortedKeys = sort { $cmi->{$a}->{'linkOrder'} cmp $cmi->{$b}->{'linkOrder'} } keys %{ $cmi };
my $foundModule = 0;
foreach ( @sortedKeys )
{
my $class = $_;
my $name = $cmi->{$_}->{'moduleName'};
my $showMobile = $cmi->{$_}->{'shownMobile'};
my $requiresActiveX = $cmi->{$_}->{'requiresActiveX'};
my $noPreview = $cmi->{$_}->{'noPreview'};
((!$showMobile && $isMobile) || (!$activeXConnected && $requiresActiveX) || $noPreview) and next;
my $linkClass = "HEADERMENULINK";
next unless $cmi->{$_}->{'shown'};
if ( defined $currentModule && $cmi->{$currentModule}->{'shown'})
{
$currentModule eq $class and $linkClass = "HEADERMENUSELECTED";
$foundModule = 1;
}
if ($name eq 'Remote Desktop' && !$activeXConnected)
{
push @um, $client->getFormGetCode(
persist=> 0,
values=> [
{
name=> "module",
value=> $class
},
{
name=> "action",
value=> "newDesktop"
}
],
text=> " $name ",
tagAttributes=> [
{
name=> "class",
value=> $linkClass
}
],
href=> "main.pl"
);
}
else
{
push @um, $client->getFormGetCode(
persist=> 0,
values=> [
{
name=> "module",
value=> $class
}
],
text=> " $name ",
tagAttributes=> [
{
name=> "class",
value=> $linkClass
}
],
href=> "main.pl"
);
}
}
my $wmenu = $client->getFormGetCode(
persist=> 0,
values=> [],
text=> " WebTop ",
tagAttributes=> [
{
name=> "class",
value=> ( $foundModule ? "HEADERMENULINK" : "HEADERMENUSELECTED" )
}
],
href=> "main.pl"
);
my $menu = join("|", @um );
$menu .= "\n";
my @sm = ();
push @sm, $client->getFormGetCode(
values=>
[
{
name=>"logout", value=>1
}
],
text=> " Sign Off ",
tagAttributes=>
[
{
name=> "class", value=> "HEADERMENULINK2"},
{name=>"target",value=>"_top"
}
],
href=> "login.pl"
);
#added so preferences will highlight
#when its the active page
my $class = "UserPrefs";
my $linkClass = "HEADERMENULINK";
if ( defined $currentModule )
{
$currentModule eq $class and $linkClass = "HEADERMENUSELECTED";
}
if (!$isMobile)
{
push @sm, $client->getFormGetCode(
persist=> 0,
values=>
[
{
name=> "module",
value=> "UserPrefs"
}
],
text=> " Preferences ",
tagAttributes=> [
{
name=> "class",
value=> $linkClass
}
],
href=> "main.pl"
);
}
my $cgi = $tb->getCgi();
my $oem = $tb->getOem();
my $oemId = $oem->getSetting(setting => 'id');
my $tutorialLink = $oem->getSetting(setting => 'webtopTutorialUrl');
my $helpLink = $oem->getSetting(setting => 'helpUrl');
my $contactLink = $oem->getSetting(setting => 'webtopContactUrl');
my $vpnConnection = $client->isWebtopVpnConnectionEstablished(db=> $db);
#contact link
if (defined($contactLink) && !$isMobile)
{
push @sm, "";
}
#supportTool link
if ($vpnConnection && !$isMobile)
{
push @sm, "";
}
#tutorial link
if (defined($tutorialLink) && !$isMobile)
{
push @sm, "";
}
#help link
if ((defined($helpLink) and length($helpLink)) && !$isMobile)
{
my $helpAnchor = '';
if (defined($currentModule))
{
$helpAnchor = '#' . $moduleHelpAnchors->{$currentModule};;
}
push @sm, "";
}
my $smenu = join("|", @sm);
my $companyLogoSettings = $tb->getCompanyLogoSettings();
$ret = $oem->getMainHtmlHeader(title => $title, oemId => $oem->getSetting(setting => 'id'), menu => $menu, smenu => $smenu, navBar => $navBar, wmenu=> $wmenu, companyText=> $companyLogoSettings->{'companyText'}, companyImage=> $companyLogoSettings->{'companyImage'}, removeSupportImages => $companyLogoSettings->{'removeSupportImages'}, isMobile=> $isMobile);
# Update the session root to be relative to our session so header nav
# items can browse to us.
$ret .= "
";
return $ret;
}
sub getFooterHtml
{
my $ret = "";
my $tb = Pos::Webtop::Toolbox->new;
my $db = $tb->getWebtopDbReader;
my $oem = $tb->getOem();
$ret .= $oem->getMainHtmlFooter(oemId => $oem->getSetting(setting => 'id'));
return $ret;
}
sub addNavBarElement
{
my $self = shift;
my ($description,$values) = @{{@_}}{qw/description values/};
my $client = $self->{'client'};
push @{ $self->{'navBar'} },
$client->getFormGetCode(
text=> $description,
tagAttributes=> [
{
name=> "class",
value=> "HEADERNAVBAR"
}
],
values=> $values
);
}
1;