From 55135c8147663765a19677a3d8cc2bf3f4a606e5 Mon Sep 17 00:00:00 2001 From: Doug Bell Date: Tue, 6 Nov 2007 04:13:43 +0000 Subject: [PATCH] more work. completed GalleryAlbum. started Gallery. --- docs/upgrades/upgrade_7.4.10-7.5.0.pl | 2 +- lib/WebGUI/Asset/File/Image/Photo.pm | 82 +++- lib/WebGUI/Asset/Wobject/Gallery.pm | 311 ++++++++++++++- lib/WebGUI/Asset/Wobject/GalleryAlbum.pm | 461 ++++++++++++++++++++++- sbin/testEnvironment.pl | 1 + 5 files changed, 825 insertions(+), 32 deletions(-) diff --git a/docs/upgrades/upgrade_7.4.10-7.5.0.pl b/docs/upgrades/upgrade_7.4.10-7.5.0.pl index daa0c5bad..11518cb43 100644 --- a/docs/upgrades/upgrade_7.4.10-7.5.0.pl +++ b/docs/upgrades/upgrade_7.4.10-7.5.0.pl @@ -138,7 +138,7 @@ CREATE TABLE IF NOT EXISTS Gallery ( imageViewSize INT, imageThumbnailSize INT, maxSpacePerUser VARCHAR(20), - richEditIdFileComment VARCHAR(22) BINARY, + richEditIdComment VARCHAR(22) BINARY, templateIdAddArchive VARCHAR(22) BINARY, templateIdDeleteAlbum VARCHAR(22) BINARY, templateIdDeleteFile VARCHAR(22) BINARY, diff --git a/lib/WebGUI/Asset/File/Image/Photo.pm b/lib/WebGUI/Asset/File/Image/Photo.pm index c5f075f48..ccbf0dd44 100644 --- a/lib/WebGUI/Asset/File/Image/Photo.pm +++ b/lib/WebGUI/Asset/File/Image/Photo.pm @@ -22,6 +22,19 @@ use Image::ExifTool qw( :Public ); use JSON; use Tie::IxHash; +our $magick; +BEGIN { + if (eval { require Graphics::Magick; 1 }) { + $magick = 'Graphics::Magick'; + } + elsif (eval { require Image::Magick; 1 }) { + $magick = 'Image::Magick'; + } + else { + croak "You must have either Graphics::Magick or Image::Magick installed to run WebGUI.\n"; + } +} + use WebGUI::Friends; use WebGUI::Utility; @@ -50,12 +63,6 @@ These methods are available from this class: Define the properties of the Photo asset. -=head3 session - -=head3 definition - -A hash reference passed in from a subclass definition. - =cut sub definition { @@ -91,6 +98,7 @@ sub definition { i18n => 'Asset_Photo', properties => \%properties, }; + return $class->SUPER::definition($session, $definition); } @@ -107,7 +115,12 @@ sub appendTemplateVarsForCommentForm { my $self = shift; my $var = shift; - # ... + $var->{commentForm_start} + = WebGUI::Form::formHeader( $session ); + . WebGUI::Form::hidden( $session, { name => "func", value => "addCommentSave" } ) + ; + $var->{commentForm_end} + = WebGUI::Form::formFooter( $session ); return $var; } @@ -142,6 +155,28 @@ sub applyConstraints { #---------------------------------------------------------------------------- +=head2 canComment ( [userId] ) + +Returns true if the user can comment on this asset. C is a WebGUI +user ID. If no userId is passed, check the current user. + +Users can comment on this Photo if they are allowed to view and the album +allows comments. + +=cut + +sub canComment { + my $self = shift; + my $userId = shift || $self->session->user->userId; + my $album = $self->getParent; + + return 0 if !$self->canView($userId); + + return $album->canComment($userId); +} + +#---------------------------------------------------------------------------- + =head2 canEdit ( [userId] ) Returns true if the user can edit this asset. C is a WebGUI user ID. @@ -399,10 +434,16 @@ sub makeResolutions { # Get default if necessary $resolutions ||= $self->getGallery->getImageResolutions; + + my $storage = $self->getStorageLocation; + my $photo = $magick->new; + $photo->Read( $storage->get( $self->get("filename") ) ); for my $res ( @$resolutions ) { # carp if resolution is bad - # ... + my $newPhoto = $photo->Clone; + $newPhoto->Resize( geometry => $res ); + $newPhoto->Write( $storage->getFilePath( "$res.jpg" ) ); } } @@ -546,7 +587,14 @@ sub view { $var->{ controls } = $self->getToolbar; $var->{ fileUrl } = $self->getFileUrl; $var->{ fileIcon } = $self->getFileIconUrl; + + $self->appendTemplateVarsForCommentForm( $var ); + my $p = $self->getCommentPaginator; + $var->{ commentLoop } = $p->getPageData; + $var->{ commentLoop_urlNext } = [$p->getNextPageLink]->[0]; + $var->{ commentLoop_urlPrev } = [$p->getPrevPageLink]->[0]; + $var->{ commentLoop_pageBar } = $p->getBarAdvanced; return $self->processTemplate($var, undef, $self->{_viewTemplate}); } @@ -561,9 +609,22 @@ Save a new comment to the Photo. sub www_addCommentSave { my $self = shift; + + return $self->session->privilege->insufficient unless $self->canComment; + my $form = $self->session; - # ... + my $properties = { + assetId => $self->getId, + creationDate => time, + userId => $session->user->userId, + visitorIp => ( $session->user->userId eq "1" ? $session->env("REMOTE_ADDR") : undef ), + bodyText => $form->get("bodyText"), + }; + + $self->setComment( "new", $properties ); + + return $self->www_view; } #---------------------------------------------------------------------------- @@ -582,7 +643,6 @@ sub www_delete { my $var = $self->getTemplateVar; $var->{ url_yes } = $self->getUrl("func=deleteConfirm"); - $var->{ url_no } = $self->getUrl(); return $self->processStyle( $self->processTemplate( $var, $self->getGallery->get("templateIdDeletePhoto") ) @@ -705,7 +765,7 @@ sub www_edit { return $self->processStyle( - $self->processTemplate($var, $self->getGallery->get("templateIdEditFile")) + $self->processTemplate( $var, $self->getGallery->getTemplateIdEditFile ) ); } diff --git a/lib/WebGUI/Asset/Wobject/Gallery.pm b/lib/WebGUI/Asset/Wobject/Gallery.pm index f4ffb1010..1133f0c6a 100644 --- a/lib/WebGUI/Asset/Wobject/Gallery.pm +++ b/lib/WebGUI/Asset/Wobject/Gallery.pm @@ -18,6 +18,14 @@ use WebGUI::International; use WebGUI::Utility; use base 'WebGUI::Asset::Wobject'; +=head1 NAME + +=head1 DESCRIPTION + +=head1 SYNOPSIS + +=head1 METHODS + #------------------------------------------------------------------- =head2 definition ( ) @@ -69,7 +77,7 @@ sub definition { imageResolutions => { tab => "properties", fieldType => "checkList", - defaultValue => ['800','1024','1200','1600'], + defaultValue => ['800', '1024', '1200', '1600', '2880'], options => \%imageResolutionOptions, label => $i18n->get("imageResolutions label"), hoverHelp => $i18n->get("imageResolutions description"), @@ -95,7 +103,7 @@ sub definition { label => $i18n->get("maxSpacePerUser label"), hoverHelp => $i18n->get("maxSpacePerUser description"), }, - richEditIdFileComment => { + richEditIdComment => { tab => "properties", fieldType => "selectRichEditor", defaultValue => undef, # Rich Editor for Posts @@ -246,10 +254,197 @@ sub definition { #---------------------------------------------------------------------------- -=head2 getTemplateEditFile ( ) +=head2 canAddFile ( [userId] ) -Returns an instance of a WebGUI::Asset::Template for the template to edit -files in this gallery +Returns true if the user can add files to this Gallery. C is the +userId to check. If no userId is passed, will check the current user. + +Users can add files to this gallery if they are part of the C + +=cut + +sub canAddFile { + my $self = shift; + my $userId = shift; + + my $user = $userId + ? WebGUI::User->new( $self->session, $userId ) + : $self->session->user + ; + + return $user->isInGroup( $self->get("groupIdAddFile") ); +} + +#---------------------------------------------------------------------------- + +=head2 canComment ( [userId] ) + +Returns true if the user can comment on this Gallery. C is the userId +to check. If no userId is passed, will check the current user. + +Users can comment on this gallery if they are part of the +C group. + +=cut + +sub canComment { + my $self = shift; + my $userId = shift; + + my $user = $userId + ? WebGUI::User->new( $self->session, $userId ) + : $self->session->user + ; + + return $user->isInGroup( $self->get("groupIdAddComment") ); +} + +#---------------------------------------------------------------------------- + +=head2 canEdit ( [userId] ) + +Returns true if the user can edit this Gallery. C is the userId to +check. If no userId is passed, will check the current user. + +Users can edit this gallery if they are part of the C group. + +=cut + +sub canEdit { + my $self = shift; + my $userId = shift; + + my $user = $userId + ? WebGUI::User->new( $self->session, $userId ) + : $self->session->user + ; + + return $user->isInGroup( $self->get("groupIdEdit") ); +} + +#---------------------------------------------------------------------------- + +=head2 canView ( [userId] ) + +Returns true if the user can view this Gallery. C is the userId to +check. If no userId is passed, will check the current user. + +Users can view this gallery if they are part of the C group. + +=cut + +sub canView { + my $self = shift; + my $userId = shift; + + my $user = $userId + ? WebGUI::User->new( $self->session, $userId ) + : $self->session->user + ; + + return $user->isInGroup( $self->get("groupIdView") ); +} + +#---------------------------------------------------------------------------- + +=head2 getAlbumIds ( ) + +Gets an array reference of all the album IDs under this Gallery. + +=cut + +sub getAlbumIds { + my $self = shift; + + return $self->getLineage(['descendants'], { + includeOnlyClasses => ['WebGUI::Asset::Wobject::GalleryAlbum'], + }); +} + +#---------------------------------------------------------------------------- + +=head2 getAlbumPaginator ( ) + +Gets a WebGUI::Paginator for all the albums in this Gallery. + +=cut + +sub getAlbumPaginator { + my $self = shift; + + my $p = WebGUI::Paginator->new( $self->session, $self->getUrl ); + $p->setDataByArrayRef( $self->getAlbumIds ); + + return $p; +} + +#---------------------------------------------------------------------------- + +=head2 getAssetClassForFile ( filepath ) + +Gets the WebGUI Asset class for the file at the given C. Returns +undef if the file cannot be saved under this Gallery. + +=cut + +sub getAssetClassForFile { + my $self = shift; + my $filepath = shift; + + # Checks for Photo assets + if ( $filepath =~ /\.(jpe?g|gif|png)/i ) { + return "WebGUI::Asset::File::Image::Photo"; + } + + # No class found + return undef; +} + +#---------------------------------------------------------------------------- + +=head2 getImageResolutions ( ) + +Gets an array reference of the image resolutions to create for image-type +assets in this gallery. + +=cut + +sub getImageResolutions { + my $self = shift; + return [ split /\n/, $self->get("imageResolutions") ]; +} + +#---------------------------------------------------------------------------- + +=head2 getSearchPaginator ( options ) + +Gets a WebGUI::Paginator for a search. C is a hash reference of +options with the following keys: + + keywords => Keywords to search on + +Other keys are valid, see C for details. + +=cut + +sub getSearchPaginator { + my $self = shift; + my $rules = shift; + + $rules->{ lineage } = $self->get("lineage"); + + my $search = WebGUI::Search->new( $self->session ); + $search->search( $rules ); + my $paginator = $search->getPaginatorResultSet( $self->getUrl('func=search') ); + + return $paginator; +} + +#---------------------------------------------------------------------------- + +=head2 getTemplateIdEditFile ( ) + +Returns the ID for the template to edit a file. NOTE: This may need to change in the future to take into account different classes of files inside of a Gallery. @@ -258,7 +453,72 @@ classes of files inside of a Gallery. sub getTemplateEditFile { my $self = shift; - return WebGUI::Asset::Template->new($self->session, $self->get("templateIdEditFile")); + return $self->get("templateIdEditFile"); +} + +#---------------------------------------------------------------------------- + +=head2 getTemplateVars ( ) + +Gets a hash reference of vars common to all templates. + +=cut + +sub getTemplateVars { + my $self = shift; + my $var = $self->get; + + return $var; +} + +#---------------------------------------------------------------------------- + +=head2 getUserFileIds ( [userId] ) + +Gets an array reference of assetIds for the files in this Gallery owned by +the specified C. If userId is not defined, will use the current user. + +=cut + +sub getUserFileIds { + my $self = shift; + my $userId = shift || $self->session->user->userId; + + my $db = $self->session->db; + + # Note: We use excludeClasses to avoid getting GalleryAlbum assets + my $assetIds + = $self->getLineage( ['descendants'], { + excludeClasses => [ 'WebGUI::Asset::Wobject::GalleryAlbum' ], + whereClause => "ownerUserId = " . $db->quote($userId), + }); + + return $assetIds; +} + +#---------------------------------------------------------------------------- + +=head2 getUserAlbumIds ( [userId] ) + +Gets an array reference of assetIds for the GalleryAlbums in this Gallery +owned by the specified C. If userId is not defined, will use the +current user. + +=cut + +sub getUserAlbumIds { + my $self = shift; + my $userId = shift || $self->session->user->userId; + + my $db = $self->session->db; + + my $assetIds + = $self->getLineage( ['descendants'], { + includeOnlyClasses => [ 'WebGUI::Asset::Wobject::GalleryAlbum' ], + whereClause => "ownerUserId = " . $db->quote($userId), + }); + + return $assetIds; } #---------------------------------------------------------------------------- @@ -277,7 +537,7 @@ sub prepareView { $self->{_viewTemplate} = $template; } -#------------------------------------------------------------------- +#---------------------------------------------------------------------------- =head2 view ( ) @@ -294,4 +554,41 @@ sub view { return $self->processTemplate($var, undef, $self->{_viewTemplate}); } +#---------------------------------------------------------------------------- + +=head2 www_listAlbums ( ) + +Show a paginated list of the albums in this gallery. + +=cut + +sub www_listAlbums { + my $self = shift; + +} + +#---------------------------------------------------------------------------- + +=head2 www_listAlbumsRss ( ) + +=cut + +#---------------------------------------------------------------------------- + +=head2 www_search ( ) + +=cut + +#---------------------------------------------------------------------------- + +=head2 www_userGallery ( ) + +=cut + +#---------------------------------------------------------------------------- + +=head2 www_userGalleryRss ( ) + +=cut + 1; diff --git a/lib/WebGUI/Asset/Wobject/GalleryAlbum.pm b/lib/WebGUI/Asset/Wobject/GalleryAlbum.pm index 85f1d2426..94ab45b36 100644 --- a/lib/WebGUI/Asset/Wobject/GalleryAlbum.pm +++ b/lib/WebGUI/Asset/Wobject/GalleryAlbum.pm @@ -13,18 +13,28 @@ $VERSION = "1.0.0"; #------------------------------------------------------------------- use strict; +use base 'WebGUI::Asset::Wobject'; use Tie::IxHash; use WebGUI::International; use WebGUI::Utility; -use base 'WebGUI::Asset::Wobject'; + +use Archive::Any; + +=head1 NAME + +=head1 DESCRIPTION + +=head1 SYNOPSIS + +=head1 DIAGNOSTICS + +=head1 METHODS #------------------------------------------------------------------- =head2 definition ( ) -defines wobject properties for New Wobject instances. You absolutely need -this method in your new Wobjects. If you choose to "autoGenerateForms", the -getEditForm method is unnecessary/redundant/useless. +Define wobject properties for new GalleryAlbum wobjects. =cut @@ -32,7 +42,7 @@ sub definition { my $class = shift; my $session = shift; my $definition = shift; - my $i18n = WebGUI::International->new($session, 'Asset_GalleryAlbum'); + my $i18n = __PACKAGE__->i18n($session); tie my %properties, 'Tie::IxHash', ( allowComments => { @@ -63,6 +73,131 @@ sub definition { #---------------------------------------------------------------------------- +=head2 addArchive ( filename, properties ) + +Add an archive of Files to this Album. C is the full path of the +archive. C is a hash reference of properties to assign to the +photos in the archive. + +Will croak if cannot read the archive or if the archive will extract itself to +a directory outside of the storage location. + +Will only handle file types handled by the parent Gallery. + +=cut + +sub addArchive { + my $self = shift; + my $filename = shift; + my $properties = shift; + + my $archive = Archive::Any->new( $filename ); + + croak "Archive will extract to directory outside of storage location!" + if $archive->is_naughty; + + use File::Temp qw{ tempdir }; + my $tempdirName = tempdir( "WebGUI-Gallery-XXXXXXXX", TMPDIR => 1, CLEANUP => 1); + $archive->extract( $tempdir ); + + opendir my $dh, $tempdirName or die "Could not open temp dir $tempdirName: $!"; + for my $file (readdir $dh) { + my $class = $gallery->getAssetClassForFile( $file ); + next unless $class; # class is undef for those files the Gallery can't handle + + $self->addChild({ + className => $class, + title => $properties->{title}, + menuTitle => $properties->{menuTitle} || $properties->{title}, + synopsis => $properties->{synopsis}, + }); + } + closedir $dh; +} + +#---------------------------------------------------------------------------- + +=head2 appendTemplateVarsFileLoop ( vars, options ) + +Append template vars for a file loop with the specified options. C is +a hash reference to add the file loop to. C is a hash reference of +options with the following keys: + + perpage => number | "all" + If "all", no pagination will be done. + url => url + The URL to the current page + +Returns the hash reference for convenience. + +=cut + +sub appendTemplateVarsFileLoop { + my $self = shift; + my $var = shift; + my $options = shift; + + my @assetIds; + if ($options->{perpage} eq "all") { + @assetIds = @{ $self->getFileIds }; + } + else { + @assetIds = @{ $self->getFilePaginator($options->{url})->getPageData }; + } + + for my $assetId (@assetIds) { + push @{$var->{file_loop}}, + WebGUI::Asset->newByDynamicClass($session, $assetId)->getTemplateVars; + } + + return $var; +} + +#---------------------------------------------------------------------------- + +=head2 canAddFile ( [userId] ) + +Returns true if the user can add a file to this album. C is a WebGUI +user ID. If no userId is passed, will check the current user. + +Users can add files to this album if they are the owner, or if +C is true and the Gallery allows them to add files. + +=cut + +sub canAddFile { + my $self = shift; + my $userId = shift || $self->session->user->userId; + + return 1 if $userId eq $self->get("ownerUserId"); + return 1 if $self->get("othersCanAdd") && $gallery->canAddFile( $userId ); +} + +#---------------------------------------------------------------------------- + +=head2 canComment ( [userId] ) + +Returns true if the user is allowed to comment on files in this Album. +C is a WebGUI user ID. If no userId is passed, will check the current +user. + +Users can comment on files if C is true and the parent Gallery +allows comments. + +=cut + +sub canComment { + my $self = shift; + my $userId = shift || $self->session->user->userId; + my $gallery = $self->getParent; + + return 0 if !$self->get("allowComments"); + + return $gallery->canComment( $userId ); +} + +#---------------------------------------------------------------------------- + =head2 canEdit ( [userId] ) Returns true if the user can edit this asset. C is a WebGUI user ID. @@ -71,6 +206,8 @@ If no userId is passed, check the current user. Users can edit this GalleryAlbum if they are the owner, or if they can edit the Gallery parent. +Also handles adding of child assets by calling C. + =cut sub canEdit { @@ -78,11 +215,116 @@ sub canEdit { my $userId = shift || $self->session->user->userId; my $gallery = $self->getParent; - return 1 if $userId eq $self->get("ownerUserId"); - return $gallery->canEdit($userId); + # Handle adding a photo + if ( $form->get("func") eq "add" ) { + return $self->canAddFile; + } + else { + return 1 if $userId eq $self->get("ownerUserId"); + + return $gallery->canEdit($userId); + } } -#------------------------------------------------------------------- +#---------------------------------------------------------------------------- + +=head2 canView ( [userId] ) + +Returns true if the user can view this asset. C is a WebGUI user ID. +If no userId is given, checks the current user. + +=cut + +# Inherited from superclass + +#---------------------------------------------------------------------------- + +=head2 i18n ( [ session ] ) + +Get a WebGUI::International object for this class. + +Can be called as a class method, in which case a WebGUI::Session object +must be passed in. + +NOTE: This method can NOT be inherited, due to a current limitation +in the i18n system. You must ALWAYS call this with C<__PACKAGE__> + +=cut + +sub i18n { + my $self = shift; + my $session = shift; + + return WebGUI::International->new($session, "Asset_GalleryAlbum"); +} + +#---------------------------------------------------------------------------- + +=head2 getFileIds ( ) + +Gets an array reference of asset IDs for all the files in this album. + +=cut + +sub getFileIds { + my $self = shift; + my $gallery = $self->getParent; + + return $self->assetLineage( ['descendants'], { + includeOnlyClasses => $gallery->getAllAssetClassesForFile, + }); +} + +#---------------------------------------------------------------------------- + +=head2 getFilePaginator ( paginatorUrl ) + +Gets a WebGUI::Paginator for the files in this album. C is the +url to the current page that will be given to the paginator. + +=cut + +sub getFilePaginator { + my $self = shift; + my $url = shift; + + my $p = WebGUI::Paginator->new( $self->session, $url ); + $p->setDataByArrayRef( $self->getFileIds ); + + return $p; +} + +#---------------------------------------------------------------------------- + +=head2 getTemplateVars ( ) + +Gets template vars common to all views. + +=cut + +sub getTemplateVars { + my $self = shift; + my $var = $self->get; + + $var->{ url } = $self->getUrl; + + return $var; +} + +#---------------------------------------------------------------------------- + +=head2 othersCanAdd ( ) + +Returns true if people other than the owner can add files to this album. + +=cut + +sub othersCanAdd { + my $self = shift; + return $self->get("othersCanAdd"); +} + +#---------------------------------------------------------------------------- =head2 prepareView ( ) @@ -93,12 +335,30 @@ See WebGUI::Asset::prepareView() for details. sub prepareView { my $self = shift; $self->SUPER::prepareView(); - my $template = WebGUI::Asset::Template->new($self->session, $self->get("templateId")); + + my $templateId = $self->getParent->get("templateIdViewAlbum"); + + my $template + = WebGUI::Asset::Template->new($self->session, $templateId); $template->prepare; + $self->{_viewTemplate} = $template; } -#------------------------------------------------------------------- +#---------------------------------------------------------------------------- + +=head2 processStyle ( ) + +Gets the parent Gallery's style template + +=cut + +sub processStyle { + my $self = shift; + return $self->getParent->processStyle(@_); +} + +#---------------------------------------------------------------------------- =head2 view ( ) @@ -108,11 +368,186 @@ to be displayed within the page style. =cut sub view { - my $self = shift; - my $session = $self->session; - my $var = $self->get; + my $self = shift; + my $session = $self->session; + my $var = $self->getTemplateVars; + + $self->appendTemplateVarsFileLoop( $var ); return $self->processTemplate($var, undef, $self->{_viewTemplate}); } +#---------------------------------------------------------------------------- + +=head2 view_slideshow ( ) + +method called by the www_slideshow method. Returns a processed template to be +displayed within the page style. + +=cut + +sub view_slideshow { + my $self = shift; + my $session = $self->session; + my $var = $self->getTemplateVars; + + $self->appendTemplateVarsFileLoop( $var, { perpage => "all" } ); + + return $self->processTemplate($var, $self->getParent->get("templateIdSlideshow")); +} + +#---------------------------------------------------------------------------- + +=head2 view_thumbnails ( ) + +method called by the www_thumbnails method. Returns a processed template to be +displayed within the page style. + +=cut + +sub view_thumbnails { + my $self = shift; + my $session = $self->session; + my $var = $self->getTemplateVars; + + $self->appendTemplateVarsFileLoop( $var, { perpage => "all" } ); + + return $self->processTemplate($var, $self->getParent->get("templateIdThumbnails")); +} + +#---------------------------------------------------------------------------- + +=head2 www_addArchive ( ) + +Show the form to add an archive of files to this gallery. + +=cut + +sub www_addArchive { + my $self = shift; + + return $self->session->privilege->insufficient unless $self->canAddFile; + + my $var = $self->getTemplateVars; + + return $self->processStyle( + $self->processTemplate($var, $self->getParent->get("templateIdAddArchive")) + ); +} + +#----------------------------------------------------------------------------- + +=head2 www_addArchiveSave ( ) + +Process the form for adding an archive. + +=cut + +sub www_addArchiveSave { + my $self = shift; + + return $self->session->privilege->insufficient unless $self->canAddfile; + + my $form = $self->session->form; + my $properties = { + keywords => $form->get("keywords"), + friendsOnly => $form->get("friendsOnly"), + }; + + my $storage = $form->get("archive", "File"); + my $filename = $storage->getFilePath( $storage->getFiles->[0] ); + + $self->addArchive( $filename, $properties ); + + return $self->www_view; +} + +#----------------------------------------------------------------------------- + +=head2 www_delete ( ) + +Show the form to confirm deleting this album and all files inside of it. + +=cut + +sub www_delete { + my $self = shift; + + return $self->session->privilege->insufficient unless $self->canEdit; + + my $var = $self->getTemplateVars; + $var->{ url_yes } = $self->getUrl("?func=deleteConfirm"); + + return $self->processStyle( + $self->processTemplate( $var, $self->getParent->get("templateIdDeleteAlbum") ) + ); +} + +#----------------------------------------------------------------------------- + +=head2 www_deleteConfirm ( ) + +Confirm deleting this album and all files inside of it. + +=cut + +sub www_deleteConfirm { + my $self = shift; + + return $self->session->privilege->insufficient unless $self->canEdit; + + $self->purge; + + return $self->getParent->www_view; +} + +#----------------------------------------------------------------------------- + +=head2 www_slideshow ( ) + +Show a slideshow-type view of this album. The slideshow itself is powered by +a javascript application in the template. + +=cut + +sub www_slideshow { + my $self = shift; + + return $self->session->privilege->insufficient unless $self->canView; + + return $self->processStyle( $self->view_slideshow ); +} + +#---------------------------------------------------------------------------- + +=head2 www_thumbnails ( ) + +Show the thumbnails for the album. + +=cut + +sub www_thumbnails { + my $self = shift; + + return $self->session->privilege->insufficient unless $self->canView; + + return $self->processStyle( $self->view_thumbnails ); +} + +#---------------------------------------------------------------------------- + +=head2 www_viewRss ( ) + +Display an RSS feed for this album. + +=cut + +sub www_viewRss { + my $self = shift; + + return $self->session->privilege->insufficient unless $self->canView; + + +} + 1; diff --git a/sbin/testEnvironment.pl b/sbin/testEnvironment.pl index 0f571f660..d6006238d 100644 --- a/sbin/testEnvironment.pl +++ b/sbin/testEnvironment.pl @@ -123,6 +123,7 @@ checkModule("Weather::Com::Finder","0.5.1"); checkModule("Class::InsideOut","1.06"); checkModule("HTML::TagCloud","0.34"); checkModule("Image::ExifTool","7.00"); +checkModule("Archive::Any","0.093"); ###################################