diff options
Diffstat (limited to 'torrus/perllib/Torrus/Renderer/Frontpage.pm')
-rw-r--r-- | torrus/perllib/Torrus/Renderer/Frontpage.pm | 295 |
1 files changed, 295 insertions, 0 deletions
diff --git a/torrus/perllib/Torrus/Renderer/Frontpage.pm b/torrus/perllib/Torrus/Renderer/Frontpage.pm new file mode 100644 index 000000000..715a01926 --- /dev/null +++ b/torrus/perllib/Torrus/Renderer/Frontpage.pm @@ -0,0 +1,295 @@ +# Copyright (C) 2002 Stanislav Sinyagin +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + +# $Id: Frontpage.pm,v 1.2 2010-12-27 08:40:19 ivan Exp $ +# Stanislav Sinyagin <ssinyagin@yahoo.com> + +package Torrus::Renderer::Frontpage; + +use strict; + +use Torrus::ConfigTree; +use Torrus::Search; +use Torrus::Log; + +use Template; +use URI::Escape; + +# All our methods are imported by Torrus::Renderer; + +sub renderUserLogin +{ + my $self = shift; + my %new_options = @_; + + if( %new_options ) + { + $self->{'options'} = \%new_options; + } + + my($t_render, $t_expires, $filename, $mime_type); + + my $cachekey = $self->cacheKey( 'LOGINSCREEN' ); + + ($t_render, $t_expires, $filename, $mime_type) = + $self->getCache( $cachekey ); + + # We don't check the expiration time for login screen + if( not defined( $filename ) ) + { + $filename = Torrus::Renderer::newCacheFileName( $cachekey ); + } + + my $outfile = $Torrus::Global::cacheDir.'/'.$filename; + + $t_expires = time(); + $mime_type = $Torrus::Renderer::LoginScreen::mimeType; + my $tmplfile = $Torrus::Renderer::LoginScreen::template; + + # Create the Template Toolkit processor once, and reuse + # it in subsequent render() calls + + if( not defined( $self->{'tt'} ) ) + { + $self->{'tt'} = + new Template(INCLUDE_PATH => $Torrus::Global::templateDirs, + TRIM => 1); + } + + my $url = $Torrus::Renderer::rendererURL; + if( length( $self->{'options'}->{'urlPassTree'} ) > 0 ) + { + $url .= '/' . $self->{'options'}->{'urlPassTree'}; + } + + my $ttvars = + { + 'url' => $url, + 'plainURL' => $Torrus::Renderer::plainURL, + 'style' => sub { return $self->style($_[0]); }, + 'companyName'=> $Torrus::Renderer::companyName, + 'companyLogo'=> $Torrus::Renderer::companyLogo, + 'companyURL' => $Torrus::Renderer::companyURL, + 'lostPasswordURL' => $Torrus::Renderer::lostPasswordURL, + 'siteInfo' => $Torrus::Renderer::siteInfo, + 'version' => $Torrus::Global::version, + 'xmlnorm' => \&Torrus::Renderer::xmlnormalize + }; + + + # Pass the options from Torrus::Renderer::render() to Template + while( my( $opt, $val ) = each( %{$self->{'options'}} ) ) + { + $ttvars->{$opt} = $val; + } + + my $result = $self->{'tt'}->process( $tmplfile, $ttvars, $outfile ); + + undef $ttvars; + + my @ret; + if( not $result ) + { + Error("Error while rendering login screen: " . + $self->{'tt'}->error()); + } + else + { + $self->setCache($cachekey, time(), $t_expires, $filename, $mime_type); + @ret = ($outfile, $mime_type, $t_expires - time()); + } + + $self->{'options'} = undef; + + return @ret; +} + + +sub renderTreeChooser +{ + my $self = shift; + my %new_options = @_; + + if( %new_options ) + { + $self->{'options'} = \%new_options; + } + + my($t_render, $t_expires, $filename, $mime_type); + + my $uid = ''; + if( $self->{'options'}->{'uid'} ) + { + $uid = $self->{'options'}->{'uid'}; + } + + my $cachekey = $self->cacheKey( $uid . ':' . 'TREECHOOSER' ); + + ($t_render, $t_expires, $filename, $mime_type) = + $self->getCache( $cachekey ); + + if( defined( $filename ) ) + { + if( $t_expires >= time() ) + { + return ($Torrus::Global::cacheDir.'/'.$filename, + $mime_type, $t_expires - time()); + } + # Else reuse the old filename + } + else + { + $filename = Torrus::Renderer::newCacheFileName( $cachekey ); + } + + my $outfile = $Torrus::Global::cacheDir.'/'.$filename; + + $t_expires = time() + $Torrus::Renderer::Chooser::expires; + $mime_type = $Torrus::Renderer::Chooser::mimeType; + + my $tmplfile; + if( defined( $self->{'options'}{'variables'}{'SEARCH'} ) and + $self->mayGlobalSearch() ) + { + $tmplfile = $Torrus::Renderer::Chooser::searchTemplate; + } + else + { + $tmplfile = $Torrus::Renderer::Chooser::template; + } + + # Create the Template Toolkit processor once, and reuse + # it in subsequent render() calls + + if( not defined( $self->{'tt'} ) ) + { + $self->{'tt'} = + new Template(INCLUDE_PATH => $Torrus::Global::templateDirs, + TRIM => 1); + } + + my $ttvars = + { + 'treeNames' => sub{ return Torrus::SiteConfig::listTreeNames() }, + 'treeDescr' => sub{ return + Torrus::SiteConfig::treeDescription($_[0]) } + , + 'url' => sub { return $Torrus::Renderer::rendererURL . '/' . $_[0] }, + 'plainURL' => $Torrus::Renderer::plainURL, + 'persistentUrl' => sub { return $Torrus::Renderer::rendererURL . '/' . + $_[0] . '?path=' . uri_escape($_[1])} + , + 'clearVar' => sub { delete $self->{'options'}{'variables'}{$_[0]}; + return undef;}, + 'style' => sub { return $self->style($_[0]); }, + 'companyName'=> $Torrus::Renderer::companyName, + 'companyLogo'=> $Torrus::Renderer::companyLogo, + 'companyURL' => $Torrus::Renderer::companyURL, + 'siteInfo' => $Torrus::Renderer::siteInfo, + 'version' => $Torrus::Global::version, + 'xmlnorm' => \&Torrus::Renderer::xmlnormalize, + 'userAuth' => $Torrus::CGI::authorizeUsers, + 'uid' => $self->{'options'}->{'uid'}, + 'userAttr' => sub { return $self->userAttribute( $_[0] ) }, + 'mayDisplayTree' => sub { return $self-> + hasPrivilege( $_[0], 'DisplayTree' ) } + , + 'mayGlobalSearch' => sub { return $self->mayGlobalSearch(); }, + 'searchResults' => sub { return $self->doGlobalSearch($_[0]); }, + + #Freeside + 'freesideHeader' => sub { return $self->freesideHeader(@_); }, + 'freesideFooter' => sub { return $self->freesideFooter(); }, + }; + + + # Pass the options from Torrus::Renderer::render() to Template + while( my( $opt, $val ) = each( %{$self->{'options'}} ) ) + { + $ttvars->{$opt} = $val; + } + + my $result = $self->{'tt'}->process( $tmplfile, $ttvars, $outfile ); + + undef $ttvars; + + my @ret; + if( not $result ) + { + Error("Error while rendering tree chooser: " . + $self->{'tt'}->error()); + } + else + { + $self->setCache($cachekey, time(), $t_expires, $filename, $mime_type); + @ret = ($outfile, $mime_type, $t_expires - time()); + } + + $self->{'options'} = undef; + + return @ret; +} + + +sub mayGlobalSearch +{ + my $self = shift; + + return ( $Torrus::Renderer::globalSearchEnabled and + ( not $Torrus::CGI::authorizeUsers or + ( $self->hasPrivilege( '*', 'GlobalSearch' ) ) ) ); +} + +sub doGlobalSearch +{ + my $self = shift; + my $string = shift; + + my $sr = new Torrus::Search; + $sr->openGlobal(); + my $result = $sr->searchPrefix( $string ); + + my $sorted = []; + push( @{$sorted}, sort {$a->[0] cmp $b->[0]} @{$result} ); + + # remove duplicating entries + my %seen; + my $ret = []; + + foreach my $element ( @{$sorted} ) + { + my $string = join( ':', $element->[0], $element->[1] ); + if( not $seen{$string} ) + { + $seen{$string} = 1; + push( @{$ret}, $element ); + } + } + + return $ret; +} + + + + +1; + + +# Local Variables: +# mode: perl +# indent-tabs-mode: nil +# perl-indent-level: 4 +# End: |