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, " Contact Us "; } #supportTool link if ($vpnConnection && !$isMobile) { push @sm, " Support Tool "; } #tutorial link if (defined($tutorialLink) && !$isMobile) { push @sm, " Tutorial "; } #help link if ((defined($helpLink) and length($helpLink)) && !$isMobile) { my $helpAnchor = ''; if (defined($currentModule)) { $helpAnchor = '#' . $moduleHelpAnchors->{$currentModule};; } push @sm, " Help "; } 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;