package WebGUI::Session::Style; =head1 LEGAL ------------------------------------------------------------------- WebGUI is Copyright 2001-2006 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 ------------------------------------------------------------------- =cut use strict; use Tie::CPHash; use WebGUI::International; use WebGUI::Macro; use WebGUI::Asset::Template; =head1 NAME Package WebGUI::Session::Style =head1 DESCRIPTION This package contains utility methods for WebGUI's style system. =head1 SYNOPSIS use WebGUI::Session::Style; $style = WebGUI::Session::Style->new($session); $html = $style->generateAdditionalHeadTags(); $html = $style->process($content); $session = $style->session; $style->makePrintable(1); $style->setLink($url,\%params); $style->setMeta(\%params); $style->setRawHeadTags($html); $style->setScript($url, \%params); $style->useEmptyStyle(1); =head1 METHODS These methods are available from this class: =cut #------------------------------------------------------------------- =head DESTROY ( ) Deconstructor. =cut sub DESTROY { my $self = shift; undef $self; } #------------------------------------------------------------------- =head2 generateAdditionalHeadTags ( ) Creates tags that were set using setLink, setMeta, setScript, extraHeadTags, and setRawHeadTags. =cut sub generateAdditionalHeadTags { my $self = shift; # generate additional raw tags my $tags = $self->{_raw}; # generate additional link tags foreach my $url (keys %{$self->{_link}}) { $tags .= '{_link}{$url}}) { $tags .= ' '.$name.'="'.$self->{_link}{$url}{$name}.'"'; } $tags .= ' />'."\n"; } # generate additional javascript tags foreach my $tag (@{$self->{_javascript}}) { $tags .= '{_meta}}) { $tags .= 'session->asset->getExtraHeadTags."\n" if ($self->session->asset); delete $self->{_meta}; delete $self->{_raw}; delete $self->{_javascript}; delete $self->{_link}; return $tags; } #------------------------------------------------------------------- =head2 makePrintable ( boolean ) Tells the system to use the make printable style instead of the normal style. =head3 boolean If set to 1 then the printable style will be used, otherwise the regular style will be used. =cut sub makePrintable { my $self = shift; $self->{_makePrintable} = shift; } #------------------------------------------------------------------- =head2 new ( session ) Constructor. =head3 session A reference to the current session. =cut sub new { my $class = shift; my $session = shift; bless {_session=>$session}, $class; } #------------------------------------------------------------------- =head2 process ( content, templateId ) Returns a parsed style with content based upon the current WebGUI session information. =head3 content The content to be parsed into the style. Usually generated by WebGUI::Page::generate(). =head3 templateId The unique identifier for the template to retrieve. =cut sub process { my $self = shift; my %var; $var{'body.content'} = shift; my $templateId = shift; if ($self->{_makePrintable} && $self->session->asset) { $templateId = $self->session->asset->get("printableStyleTemplateId"); my $currAsset = $self->session->asset; until ($templateId) { # some assets don't have this property. But at least one ancestor should.... $currAsset = $currAsset->getParent; $templateId = $currAsset->get("printableStyleTemplateId"); } } elsif ($self->session->scratch->get("personalStyleId") ne "") { $templateId = $self->session->scratch->get("personalStyleId"); } elsif ($self->{_useEmptyStyle}) { $templateId = 6; } $var{'head.tags'} = ' '; if ($self->session->user->isInGroup(2)) { # This "triple incantation" panders to the delicate tastes of various browsers for reliable cache suppression. $var{'head.tags'} .= ' '; } my $style = WebGUI::Asset::Template->new($self->session,$templateId); my $output; if (defined $style) { $output = $style->process(\%var); } else { $output = "WebGUI was unable to instantiate your style template.".$var{'body.content'}; } WebGUI::Macro::process($self->session,\$output); my $macroHeadTags = $self->generateAdditionalHeadTags(); $output =~ s/\<\!--morehead--\>/$macroHeadTags/; # if ($self->session->errorHandler->canShowDebug()) { # $output .= $self->session->errorHandler->showDebug(); # } return $output; } #------------------------------------------------------------------- =head2 session ( ) Returns a reference to the current session. =cut sub session { my $self = shift; return $self->{_session}; } #------------------------------------------------------------------- =head2 setLink ( url, params ) Sets a tag into the of this rendered page for this page view. This is typically used for dynamically adding references to CSS and RSS documents. =head3 url The URL to the document you are linking. =head3 params A hash reference containing the other parameters to be included in the link tag, such as "rel" and "type". =cut sub setLink { my $self = shift; my $url = shift; my $params = shift; $self->{_link}{$url} = $params; } #------------------------------------------------------------------- =head2 setMeta ( params ) Sets a tag into the of this rendered page for this page view. =head3 params A hash reference containing the parameters of the meta tag. =cut sub setMeta { my $self = shift; my $params = shift; push(@{$self->{_meta}},$params); } #------------------------------------------------------------------- =head2 setRawHeadTags ( tags ) Sets data to be output into the of the current rendered page for this page view. =head3 tags A raw string containing tags. This is just a raw string so you must actually pass in the full tag to use this call. =cut sub setRawHeadTags { my $self = shift; my $tags = shift; $self->{_raw} .= $tags; } #------------------------------------------------------------------- =head2 setScript ( url, params ) Sets a