From aa9f0e8396a524e6cfe6ea253eb97aecd548fef6 Mon Sep 17 00:00:00 2001 From: JT Smith Date: Sun, 29 Jun 2008 02:01:40 +0000 Subject: [PATCH] Replaced CLI gallery import system with a better one. --- docs/changelog/7.x.x.txt | 1 + docs/upgrades/upgrade_7.5.14-7.5.15.pl | 20 +- lib/WebGUI/Asset/Wobject/Gallery.pm | 2 - lib/WebGUI/Asset/Wobject/GalleryAlbum.pm | 2 - lib/WebGUI/Utility/Gallery.pm | 289 ----------- sbin/galleryImport.pl | 452 ++++++++++++++++++ sbin/migrateCollabToGallery.pl | 159 ------ sbin/migrateFolderToGallery.pl | 153 ------ t/Utility/Gallery/addAlbumFromCollaboration.t | 275 ----------- t/Utility/Gallery/addAlbumFromFolder.t | 184 ------- 10 files changed, 464 insertions(+), 1073 deletions(-) delete mode 100644 lib/WebGUI/Utility/Gallery.pm create mode 100644 sbin/galleryImport.pl delete mode 100644 sbin/migrateCollabToGallery.pl delete mode 100644 sbin/migrateFolderToGallery.pl delete mode 100644 t/Utility/Gallery/addAlbumFromCollaboration.t delete mode 100644 t/Utility/Gallery/addAlbumFromFolder.t diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 70bfcb343..d9605c909 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -2,6 +2,7 @@ - fixed: Colorpicker window would not open (Martin Kamerbeek / Oqapi) - fixed: Reverted change to RichEdit that caused IE6 to stop working - fixed: Subscription: Price not displaying + - Replaced CLI gallery import system with a better one. - fixed: Flat Discount Coupon: Add to Cart button seems broken - fixed: Deleting unProtected user profile fields diff --git a/docs/upgrades/upgrade_7.5.14-7.5.15.pl b/docs/upgrades/upgrade_7.5.14-7.5.15.pl index 06275bbb0..a8793bf31 100644 --- a/docs/upgrades/upgrade_7.5.14-7.5.15.pl +++ b/docs/upgrades/upgrade_7.5.14-7.5.15.pl @@ -20,7 +20,7 @@ use Getopt::Long; use WebGUI::Session; use WebGUI::Storage; use WebGUI::Asset; - +use File::Path; my $toVersion = '7.5.15'; my $quiet; # this line required @@ -28,19 +28,21 @@ my $quiet; # this line required my $session = start(); # this line required -# upgrade functions go here +removeOldGalleryImport($session); finish($session); # this line required #---------------------------------------------------------------------------- -# Describe what our function does -#sub exampleFunction { -# my $session = shift; -# print "\tWe're doing some stuff here that you should know about... " unless $quiet; -# # and here's our code -# print "DONE!\n" unless $quiet; -#} +sub removeOldGalleryImport { + my $session = shift; + print "\tRemoving old gallery import mechanism... " unless $quiet; + unlink "../../sbin/migrateCollabToGallery.pl"; + unlink "../../sbin/migrateFolderToGallery.pl"; + rmtree "../../lib/WebGUI/Utility"; + rmtree "../../t/Utility/Gallery"; + print "DONE!\n" unless $quiet; +} # -------------- DO NOT EDIT BELOW THIS LINE -------------------------------- diff --git a/lib/WebGUI/Asset/Wobject/Gallery.pm b/lib/WebGUI/Asset/Wobject/Gallery.pm index 288eb23ed..09fe68928 100644 --- a/lib/WebGUI/Asset/Wobject/Gallery.pm +++ b/lib/WebGUI/Asset/Wobject/Gallery.pm @@ -1,7 +1,5 @@ package WebGUI::Asset::Wobject::Gallery; -$VERSION = "1.0.0"; - #------------------------------------------------------------------- # WebGUI is Copyright 2001-2008 Plain Black Corporation. #------------------------------------------------------------------- diff --git a/lib/WebGUI/Asset/Wobject/GalleryAlbum.pm b/lib/WebGUI/Asset/Wobject/GalleryAlbum.pm index abc1a8976..d8d029113 100644 --- a/lib/WebGUI/Asset/Wobject/GalleryAlbum.pm +++ b/lib/WebGUI/Asset/Wobject/GalleryAlbum.pm @@ -1,7 +1,5 @@ package WebGUI::Asset::Wobject::GalleryAlbum; -$VERSION = "1.0.0"; - #------------------------------------------------------------------- # WebGUI is Copyright 2001-2008 Plain Black Corporation. #------------------------------------------------------------------- diff --git a/lib/WebGUI/Utility/Gallery.pm b/lib/WebGUI/Utility/Gallery.pm deleted file mode 100644 index 0b0fb72f4..000000000 --- a/lib/WebGUI/Utility/Gallery.pm +++ /dev/null @@ -1,289 +0,0 @@ -package WebGUI::Utility::Gallery; - -=head1 LEGAL - - ------------------------------------------------------------------- - WebGUI is Copyright 2001-2008 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 Carp qw( carp croak ); -use File::Find; -use Scalar::Util qw( blessed ); -use WebGUI::Asset::Wobject::Collaboration; -use WebGUI::Asset::Wobject::Gallery; -use WebGUI::Asset::Post::Thread; -use WebGUI::Storage::Image; - - -=head1 NAME - -WebGUI::Utility::Gallery -- Utility functions for working -with Gallery assets. - -=head1 DESCRIPTION - -This module provides utility functions to work with Gallery assets from -utility scripts. - -This module is B to be used by the Gallery asset itself! - -=head1 SYNOPSIS - - use WebGUI::Utility::Gallery; - my $utility = "WebGUI::Utility::Gallery" # <- not as cumbersome - - # Add albums from a collaboration system's threads - my $gallery = WebGUI::Asset::Wobject::Gallery->new( ... ); - my $collab = WebGUI::Asset::Wobject::Collaboration->new( ... ); - $utility->addAlbumFromCollaboration( $gallery, $collab ); - - # Add a single album from a collaboration system thread - my $thread = WebGUI::Asset::Post::Thread->new( ... ); - $utility->addAlbumFromThread( $gallery, $thread ); - - # Add a single album from a Folder asset - my $folder = WebGUI::Asset::Wobject::Folder->new( ... ); - $utility->addAlbumFromFolder( $gallery, $folder ); - - # Add a single album from a filesystem branch - $utility->addAlbumFromFilesystem( $gallery, "/Users/Doug/Photos" ); - - # Add a single album for every folder in a filesystem branch - $utility->addAlbumFromFilesystem( - $gallery, "/Users/Doug/Photos", - { - multiple => 1, - } - ); - -=head1 METHODS - -These methods are available from this class: - -=cut - -#---------------------------------------------------------------------------- - -=head2 addAlbumFromCollaboration ( gallery, collab ) - -Add an album or albums to the gallery from the given Collaboration System. -C is an instanciated Gallery asset. C is an instanciated -Collaboration System asset. - -Will add one album for every thread in the Collaboration System. Will call -C to do its dirty work. - -=cut - -sub addAlbumFromCollaboration { - my $class = shift; - my $gallery = shift; - my $collab = shift; - - croak "First argument must be Gallery asset" - unless blessed $gallery && $gallery->isa('WebGUI::Asset::Wobject::Gallery'); - croak "Second argument must be Collaboration System asset" - unless blessed $collab && $collab->isa('WebGUI::Asset::Wobject::Collaboration'); - - my $threads - = $collab->getLineage(['descendants'], { - returnObjects => 1, - includeOnlyClasses => ['WebGUI::Asset::Post::Thread'], - statesToInclude => ['published'], - statusToInclude => ['approved', 'archived', 'pending'], - }); - - for my $thread ( @$threads ) { - $class->addAlbumFromThread( $gallery, $thread ); - } - - return undef; -} - -#---------------------------------------------------------------------------- - -=head2 addAlbumFromFilesystem ( gallery, root [, options] ) - -Add an album to the gallery from the file system. C is an -instanciated Gallery asset. C is a location on the file system. - -C is a hash reference of options with the following keys: - - multiple - Create multiple albums, one for each folder. - -=cut - -sub addAlbumFromFilesystem { - my $class = shift; - my $gallery = shift; - my $root = shift; - my $options = shift; - - # TODO!!! - - return undef; -} - -#---------------------------------------------------------------------------- - -=head2 addAlbumFromFolder ( gallery, folder ) - -Add an album from a Folder asset filled with File assets. C is an -instance of a Gallery asset. C is an instance of a Folder asset. - -=cut - -sub addAlbumFromFolder { - my $class = shift; - my $gallery = shift; - my $folder = shift; - - croak "First argument must be Gallery asset" - unless blessed $gallery && $gallery->isa('WebGUI::Asset::Wobject::Gallery'); - croak "Second argument must be Folder asset" - unless blessed $folder && $folder->isa('WebGUI::Asset::Wobject::Folder'); - - my $session = $gallery->session; - my $addOptions = { skipAutoCommitWorkflows => 1 }; - - # Create the new album - my $album = $gallery->addChild({ - className => 'WebGUI::Asset::Wobject::GalleryAlbum', - description => $folder->get('description'), - menuTitle => $folder->get('menuTitle'), - createdBy => $folder->get('createdBy'), - creationDate => $folder->get('creationDate'), - ownerUserId => $folder->get('ownerUserId'), - synopsis => $folder->get('synopsis'), - title => $folder->get('title'), - url => $session->url->urlize( $gallery->get('url') . "/" . $folder->get('title') ), - }, undef, $folder->get('revisionDate'), $addOptions ); - - my $fileIds - = $folder->getLineage( ['children'], { - joinClass => 'WebGUI::Asset::File', - } ); - - for my $fileId ( @{ $fileIds } ) { - my $oldFile = WebGUI::Asset->newByDynamicClass( $session, $fileId ); - my $oldStorage = $oldFile->getStorageLocation; - my $className = $gallery->getAssetClassForFile( $oldStorage->getPath( $oldFile->get('filename') ) ); - if ( !$className ) { - warn "Skipping " . $oldFile->get('filename') . " Gallery doesn't handle this file type"; - next; - } - - my $newFile = $album->addChild({ - className => $className, - createdBy => $oldFile->get('createdBy'), - creationDate => $oldFile->get('creationDate'), - menuTitle => $oldFile->get('menuTitle'), - ownerUserId => $oldFile->get('ownerUserId'), - synopsis => $oldFile->get('synopsis'), - title => $oldFile->get('title'), - url => $session->url->urlize( $album->get('url') . "/" . $oldFile->get('menuTitle') ), - }, undef, $oldFile->get('revisionDate'), $addOptions ); - - $newFile->setFile( $oldStorage->getPath( $oldFile->get('filename') ) ); - } - - return undef; -} - -#---------------------------------------------------------------------------- - -=head2 addAlbumFromThread ( gallery, thread ) - -Add an album to the gallery from the given Collaboration System thread. -C is an instanciated Gallery asset. C is an instanciated -Thread asset. - -=cut - -sub addAlbumFromThread { - my $class = shift; - my $gallery = shift; - my $thread = shift; - - croak "First argument must be Gallery asset" - unless blessed $gallery && $gallery->isa('WebGUI::Asset::Wobject::Gallery'); - croak "Second argument must be Thread asset" - unless blessed $thread && $thread->isa('WebGUI::Asset::Post::Thread'); - - my $session = $gallery->session; - my $addOptions = { skipAutoCommitWorkflows => 1 }; - - # Create the new album - my $album = $gallery->addChild({ - className => 'WebGUI::Asset::Wobject::GalleryAlbum', - description => $thread->get('content'), - menuTitle => $thread->get('menuTitle'), - createdBy => $thread->get('createdBy'), - creationDate => $thread->get('creationDate'), - ownerUserId => $thread->get('ownerUserId'), - synopsis => $thread->get('synopsis'), - title => $thread->get('title'), - url => $session->url->urlize( $gallery->get('url') . "/" . $thread->get('title') ), - userDefined1 => $thread->get('userDefined1'), - userDefined2 => $thread->get('userDefined2'), - userDefined3 => $thread->get('userDefined3'), - userDefined4 => $thread->get('userDefined4'), - userDefined5 => $thread->get('userDefined5'), - }, undef, $thread->get('revisionDate'), $addOptions ); - - for my $post ( @{ $thread->getPosts } ) { - if ( my $storageId = $post->get('storageId') ) { - # Use WebGUI::Storage::Image to avoid thumbnails if there - my $storage = WebGUI::Storage::Image->get( $session, $storageId ); - - for my $filename ( @{$storage->getFiles} ) { - my $className = $gallery->getAssetClassForFile( $filename ); - if ( !$className ) { - warn "Skipping $filename because Gallery doesn't handle this file type"; - next; - } - - # Get rid of that file extention - my ($title) = $filename =~ m{(.*)\.[^.]*$}; - - # Don't repeat the thread - my $synopsis - = $post->get('content') ne $thread->get('content') - ? $post->get('content') - : undef - ; - - my $file = $album->addChild({ - className => $className, - createdBy => $post->get('createdBy'), - creationDate => $post->get('creationDate'), - menuTitle => $title, - ownerUserId => $post->get('ownerUserId'), - synopsis => $synopsis, - title => $title, - url => $session->url->urlize( $album->get('url') . "/" . $title ), - userDefined1 => $post->get('userDefined1'), - userDefined2 => $post->get('userDefined2'), - userDefined3 => $post->get('userDefined3'), - userDefined4 => $post->get('userDefined4'), - userDefined5 => $post->get('userDefined5'), - }, undef, $post->get('revisionDate'), $addOptions ); - - $file->setFile( $storage->getPath( $filename ) ); - } - } - } - - return undef; -} - -1; diff --git a/sbin/galleryImport.pl b/sbin/galleryImport.pl new file mode 100644 index 000000000..f5119396a --- /dev/null +++ b/sbin/galleryImport.pl @@ -0,0 +1,452 @@ +# ------------------------------------------------------------------- +# WebGUI is Copyright 2001-2008 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 +# ------------------------------------------------------------------- + +$|=1; +use lib '../lib'; +use strict; +use Carp qw( carp croak ); +use File::Find; +use Getopt::Long; +use Pod::Usage; +use Scalar::Util qw( blessed ); +use WebGUI::Asset::Wobject::Collaboration; +use WebGUI::Asset::Wobject::GalleryAlbum; +use WebGUI::Asset::Wobject::Gallery; +use WebGUI::Asset::Wobject::Folder; +use WebGUI::Asset::Post::Thread; +use WebGUI::Storage::Image; + + +# custom flags +my ($fromAssetId, $fromPath, $fromAssetUrl, $toId, $toUrl) = undef; + +# init +my $session = start(); + +# load gallery +my $gallery = undef; +if (defined $toId) { + $gallery = WebGUI::Asset::Wobject::Gallery->new($session, $toId); +} +else { + $gallery = WebGUI::Asset::Wobject::Gallery->newByUrl($session, $toUrl); +} +if ( $gallery && $gallery->isa('WebGUI::Asset::Wobject::Gallery') ) { + # import from + if (defined $fromPath) { + if (-d $fromPath) { + addAlbumFromFilesystem($gallery,$fromPath); + } + else { + pod2usage("$0: You must specify a valid directory to import from."); + } + } + else { + my $fromAsset = undef; + if (defined $fromAssetId) { + $fromAsset = WebGUI::Asset->newByDynamicClass($session, $fromAssetId); + } + else { + $fromAsset = WebGUI::Asset->newByUrl($session, $fromAssetUrl); + } + if ($fromAsset && $fromAsset->isa("WebGUI::Asset::Wobject::Folder")) { + addAlbumFromFolder($gallery, $fromAsset); + } + elsif ($fromAsset && $fromAsset->isa("WebGUI::Asset::Wobject::Collaboration")) { + addAlbumFromCollaboration($gallery, $fromAsset); + } + elsif ($fromAsset && $fromAsset->isa("WebGUI::Asset::Post::Thread")) { + addAlbumFromThread($gallery, $fromAsset); + } + else { + pod2usage("$0: You must specify a valid asset to import from."); + } + } +} +else { + pod2usage("$0: You must specify a gallery asset to import into."); +} + +# cleanup +finish($session); + +#---------------------------------------------------------------------------- +# addAlbumFromCollaboration ( gallery, collab ) +# +# Add an album or albums to the gallery from the given Collaboration System. +# gallery is an instanciated Gallery asset. collab is an instanciated +# Collaboration System asset. +# +# Will add one album for every thread in the Collaboration System. Will call +# addAlbumFromThread to do its dirty work. + +sub addAlbumFromCollaboration { + my $gallery = shift; + my $collab = shift; + + croak "First argument must be Gallery asset" + unless blessed $gallery && $gallery->isa('WebGUI::Asset::Wobject::Gallery'); + croak "Second argument must be Collaboration System asset" + unless blessed $collab && $collab->isa('WebGUI::Asset::Wobject::Collaboration'); + + my $threads + = $collab->getLineage(['descendants'], { + returnObjects => 1, + includeOnlyClasses => ['WebGUI::Asset::Post::Thread'], + statesToInclude => ['published'], + statusToInclude => ['approved', 'archived', 'pending'], + }); + + for my $thread ( @$threads ) { + addAlbumFromThread( $gallery, $thread ); + } + + return undef; +} + +#---------------------------------------------------------------------------- +# addAlbumFromFilesystem ( gallery, root ) +# +# Add an album to the gallery from the file system. gallery is an +# instanciated Gallery asset. root is a location on the file system. + +sub addAlbumFromFilesystem { + my $gallery = shift; + my $root = shift; + + croak "First argument must be Gallery asset" + unless blessed $gallery && $gallery->isa('WebGUI::Asset::Wobject::Gallery'); + croak "Second argument must be a path to a folder on the filesystem" + unless -d $root; + + # define the import process + my $recurseFilesystem = sub { + if (-d $File::Find::name) { + # find photos + print "Searching ".$File::Find::name." for photos.\n"; + my @photos = (); + if (opendir my $folder, $File::Find::name) { + my @files = readdir $folder; + closedir $folder; + foreach my $file (@files) { + unless (-d $File::Find::name."/".$file) { + if ($file =~ m/\.(jpg|gif|png|jpeg)$/i) { + push(@photos, $file); + } + } + } + } + + # import if we found anything + if (scalar(@photos)) { + # get album name + my $albumName = $File::Find::name; + $albumName =~ s{.*\/([A-Za-z0-9\.-_\s]+)$}{$1}; + + # create album + print "Creating album $albumName\n"; + my $addOptions = { skipAutoCommitWorkflows => 1 }; + my $album = $gallery->addChild({ + className => 'WebGUI::Asset::Wobject::GalleryAlbum', + menuTitle => $albumName, + title => $albumName, + url => $gallery->get('url') . "/" . $albumName, + }, undef, undef, $addOptions ); + + # do the import + print "\tImporting ".scalar(@photos)." files from ".$File::Find::name." into album called ".$albumName.".\n"; + foreach my $filename (@photos) { + print "\t\t".$filename."\n"; + my $className = $gallery->getAssetClassForFile( $filename ); + if ( !$className ) { + warn "Skipping $filename because Gallery doesn't handle this file type"; + next; + } + my ($title) = $filename =~ m{(.*)\.[^.]*$}; + my $asset = $album->addChild({ + className => $className, + menuTitle => $title, + title => $title, + url => $album->get('url') . "/" . $title, + }, undef, undef, $addOptions ); + $asset->setFile( $File::Find::name."/".$filename ); + } + } + } + }; + + # run the search and import process + File::Find::find({wanted=>$recurseFilesystem,no_chdir=>1} , $root); + + return undef; +} + +#---------------------------------------------------------------------------- +# addAlbumFromFolder ( gallery, folder ) +# +# Add an album from a Folder asset filled with File assets. gallery is an +# instance of a Gallery asset. folder is an instance of a Folder asset. + +sub addAlbumFromFolder { + my $gallery = shift; + my $folder = shift; + + croak "First argument must be Gallery asset" + unless blessed $gallery && $gallery->isa('WebGUI::Asset::Wobject::Gallery'); + croak "Second argument must be Folder asset" + unless blessed $folder && $folder->isa('WebGUI::Asset::Wobject::Folder'); + + my $session = $gallery->session; + my $addOptions = { skipAutoCommitWorkflows => 1 }; + + # Create the new album + my $album = $gallery->addChild({ + className => 'WebGUI::Asset::Wobject::GalleryAlbum', + description => $folder->get('description'), + menuTitle => $folder->get('menuTitle'), + createdBy => $folder->get('createdBy'), + creationDate => $folder->get('creationDate'), + ownerUserId => $folder->get('ownerUserId'), + synopsis => $folder->get('synopsis'), + title => $folder->get('title'), + url => $gallery->get('url') . "/" . $folder->get('title'), + }, undef, $folder->get('revisionDate'), $addOptions ); + + my $fileIds + = $folder->getLineage( ['children'], { + joinClass => 'WebGUI::Asset::File', + } ); + + for my $fileId ( @{ $fileIds } ) { + my $oldFile = WebGUI::Asset->newByDynamicClass( $session, $fileId ); + my $oldStorage = $oldFile->getStorageLocation; + my $className = $gallery->getAssetClassForFile( $oldStorage->getPath( $oldFile->get('filename') ) ); + if ( !$className ) { + warn "Skipping " . $oldFile->get('filename') . " Gallery doesn't handle this file type"; + next; + } + + my $newFile = $album->addChild({ + className => $className, + createdBy => $oldFile->get('createdBy'), + creationDate => $oldFile->get('creationDate'), + menuTitle => $oldFile->get('menuTitle'), + ownerUserId => $oldFile->get('ownerUserId'), + synopsis => $oldFile->get('synopsis'), + title => $oldFile->get('title'), + url => $album->get('url') . "/" . $oldFile->get('menuTitle'), + }, undef, $oldFile->get('revisionDate'), $addOptions ); + + $newFile->setFile( $oldStorage->getPath( $oldFile->get('filename') ) ); + } + + return undef; +} + +#---------------------------------------------------------------------------- +# addAlbumFromThread ( gallery, thread ) +# +# Add an album to the gallery from the given Collaboration System thread. +# gallery is an instanciated Gallery asset. thread is an instanciated +# Thread asset. + +sub addAlbumFromThread { + my $gallery = shift; + my $thread = shift; + + croak "First argument must be Gallery asset" + unless blessed $gallery && $gallery->isa('WebGUI::Asset::Wobject::Gallery'); + croak "Second argument must be Thread asset" + unless blessed $thread && $thread->isa('WebGUI::Asset::Post::Thread'); + + my $session = $gallery->session; + my $addOptions = { skipAutoCommitWorkflows => 1 }; + + # Create the new album + my $album = $gallery->addChild({ + className => 'WebGUI::Asset::Wobject::GalleryAlbum', + description => $thread->get('content'), + menuTitle => $thread->get('menuTitle'), + createdBy => $thread->get('createdBy'), + creationDate => $thread->get('creationDate'), + ownerUserId => $thread->get('ownerUserId'), + synopsis => $thread->get('synopsis'), + title => $thread->get('title'), + url => $gallery->get('url') . "/" . $thread->get('title'), + userDefined1 => $thread->get('userDefined1'), + userDefined2 => $thread->get('userDefined2'), + userDefined3 => $thread->get('userDefined3'), + userDefined4 => $thread->get('userDefined4'), + userDefined5 => $thread->get('userDefined5'), + }, undef, $thread->get('revisionDate'), $addOptions ); + + for my $post ( @{ $thread->getPosts } ) { + if ( my $storageId = $post->get('storageId') ) { + # Use WebGUI::Storage::Image to avoid thumbnails if there + my $storage = WebGUI::Storage::Image->get( $session, $storageId ); + + for my $filename ( @{$storage->getFiles} ) { + my $className = $gallery->getAssetClassForFile( $filename ); + if ( !$className ) { + warn "Skipping $filename because Gallery doesn't handle this file type"; + next; + } + + # Get rid of that file extention + my ($title) = $filename =~ m{(.*)\.[^.]*$}; + + # Don't repeat the thread + my $synopsis + = $post->get('content') ne $thread->get('content') + ? $post->get('content') + : undef + ; + + my $file = $album->addChild({ + className => $className, + createdBy => $post->get('createdBy'), + creationDate => $post->get('creationDate'), + menuTitle => $title, + ownerUserId => $post->get('ownerUserId'), + synopsis => $synopsis, + title => $title, + url => $album->get('url') . "/" . $title, + userDefined1 => $post->get('userDefined1'), + userDefined2 => $post->get('userDefined2'), + userDefined3 => $post->get('userDefined3'), + userDefined4 => $post->get('userDefined4'), + userDefined5 => $post->get('userDefined5'), + }, undef, $post->get('revisionDate'), $addOptions ); + + $file->setFile( $storage->getPath( $filename ) ); + } + } + } + + return undef; +} + +#---------------------------------------------------------------------------- +sub finish { + my $session = shift; + + my $versionTag = WebGUI::VersionTag->getWorking($session); + $versionTag->commit; + + $session->var->end; + $session->close; +} + + +#---------------------------------------------------------------------------- +sub start { + $| = 1; #disable output buffering + my ($configFile, $help); + GetOptions( + 'configFile=s' => \$configFile, + 'help' => \$help, + 'toUrl=s' => \$toUrl, + 'fromAssetUrl=s' => \$fromAssetUrl, + 'toId=s' => \$toId, + 'fromAssetId=s' => \$fromAssetId, + 'fromPath=s' => \$fromPath, + ); + + # Show usage + if ($help) { + pod2usage( verbose => 2); + } + + unless ($configFile) { + pod2usage("$0: Must specify a --configFile"); + } + + my $session = WebGUI::Session->open("..",$configFile); + $session->user({userId=>3}); + + my $versionTag = WebGUI::VersionTag->getWorking($session); + $versionTag->set({name => 'Import Albums into Gallery'}); + + return $session; +} + +__END__ + +=head1 NAME + +galleryImport.pl - Import media into a Gallery asset from various sources. + +=head1 SYNOPSIS + + perl galleryImport.pl --configFile=www.example.com.conf --fromAssetId=XXXXXXXXXXXXXXXXXXXXXX --toId=XXXXXXXXXXXXXXXXXXXXXX + + perl galleryImport.pl --help + +=head1 DESCRIPTION + +This WebGUI utility script imports files from the filesystem, and other assets +into a Gallery asset. It automatically generates thumbnails and metadata just +as if the files were uploaded through the user interface. + +Files with JPG, JPEG, GIF, and PNG extensions are supported. + +The thumbnails are created using L for image transformations. + +Exactly one --from* and exactly one --to* parameter are required. + +=over + +=item B<--configFile filename> + +Specify the config file name of the site you wish to perform this import on. + +=item B<--fromAssetId assetId> + +Specify the asset id of an asset to import the files from. The asset type is +automatically discerned. + +The supported asset types are Collaboration System, Thread, and Folder. + +=item B<--fromAssetUrl url> + +Specify the URL of an asset to import the files from. The asset type is +automatically discerned. The B is the Asset URL parameter, not a fully +qualified URL. + +The supported asset types are Collaboration System, Thread, and Folder. + +=item B<--fromPath path> + +Specify the absolute B to a folder containing folders images and other +folders with images. The folder name is used to create an album name, and the +files contained in the folder are added as photos in the folder. + +=item B<--help> + +Shows this documentation, then exits. + +=item B<--toId assetId> + +Specify the B of the Gallery to create albums in. + +=item B<--toUrl url> + +Specify the B of the Gallery to create albums in. The URL is the asset +URL parameter of the Gallery, and not the fully qualified URL. + +=back + +=head1 AUTHOR + +Copyright 2001-2008 Plain Black Corporation. + +=cut + + diff --git a/sbin/migrateCollabToGallery.pl b/sbin/migrateCollabToGallery.pl deleted file mode 100644 index f447f1cd3..000000000 --- a/sbin/migrateCollabToGallery.pl +++ /dev/null @@ -1,159 +0,0 @@ -#------------------------------------------------------------------- -# WebGUI is Copyright 2001-2008 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 -#------------------------------------------------------------------- - -our ($webguiRoot); - -BEGIN { - $webguiRoot = ".."; - unshift (@INC, $webguiRoot."/lib"); -} - -use strict; -use Getopt::Long; -use Pod::Usage; -use WebGUI::Utility::Gallery; -use WebGUI::Session; - -my $session = start(); - -my $collab = getCollaborationFromArgs(); -my $gallery = getGalleryFromArgs(); - -WebGUI::Utility::Gallery->addAlbumFromCollaboration( $gallery, $collab ); - -finish($session); - -#---------------------------------------------------------------------------- -# getCollaborationFromArgs -# Gets the collaboration system from the arguments. The argument can be -# either an assetId or an absolute URL -sub getCollaborationFromArgs { - my $asset; - my $arg = $ARGV[0]; - if ( $arg =~ m{^/} ) { - $asset = WebGUI::Asset->newByUrl( $session, $arg ); - } - else { - $asset = WebGUI::Asset->newByDynamicClass( $session, $arg ); - } - - unless ( $asset && $asset->isa('WebGUI::Asset::Wobject::Collaboration') ) { - pod2usage("$0: First argument must be a Collaboration asset"); - } - - return $asset; -} - -#---------------------------------------------------------------------------- -# getGalleryFromArgs -# Gets the Gallery from the arguments. The argument can be either an assetId -# or an absolute URL -sub getGalleryFromArgs { - my $asset; - my $arg = $ARGV[1]; - if ( $arg =~ m{^/} ) { - $asset = WebGUI::Asset->newByUrl( $session, $arg ); - } - else { - $asset = WebGUI::Asset->newByDynamicClass( $session, $arg ); - } - - unless ( $asset && $asset->isa('WebGUI::Asset::Wobject::Gallery') ) { - pod2usage("$0: Second argument must be a Gallery asset"); - } - - return $asset; -} - -#---------------------------------------------------------------------------- -sub start { - $| = 1; #disable output buffering - my ($configFile, $help); - GetOptions( - 'configFile=s' => \$configFile, - 'help' => \$help, - ); - - # Show usage - if ($help) { - pod2usage( verbose => 2); - } - - unless ($configFile) { - pod2usage("$0: Must specify a --configFile"); - } - - my $session = WebGUI::Session->open($webguiRoot,$configFile); - $session->user({userId=>3}); - - my $versionTag = WebGUI::VersionTag->getWorking($session); - $versionTag->set({name => 'Migrate Collaboration to Gallery'}); - - return $session; -} - -#---------------------------------------------------------------------------- -sub finish { - my $session = shift; - - my $versionTag = WebGUI::VersionTag->getWorking($session); - $versionTag->commit; - - $session->var->end; - $session->close; -} - -__END__ - -=head1 NAME - -migrateCollabToGallery -- Migrate a collaboration system into a Gallery - -=head1 SYNOPSIS - -migrateCollabToGallery --configFile config.conf collab gallery - -migrateCollabToGallery --help - -=head1 DESCRIPTION - -This WebGUI utility script migrates a collaboration system's threads -into gallery albums. It uses B for its major -features. - -=over - -=item B<--configFile config.conf> - -The WebGUI config file to use. Only the file name needs to be specified, -since it will be looked up inside WebGUI's configuration directory. -This parameter is required. - -=item B - -A WebGUI's Collaboration System URL or Asset ID. If an URL is given, -it must be an absolute URL beginning with a slash. - -=item B - -A WebGUI's Gallery URL or Asset ID. If an URL is given, it must be -an absolute URL beginning with a slash. - -=item B<--help> - -Shows this documentation, then exits. - -=back - -=head1 AUTHOR - -Copyright 2001-2008 Plain Black Corporation. - -=cut diff --git a/sbin/migrateFolderToGallery.pl b/sbin/migrateFolderToGallery.pl deleted file mode 100644 index 782c40d0b..000000000 --- a/sbin/migrateFolderToGallery.pl +++ /dev/null @@ -1,153 +0,0 @@ -#------------------------------------------------------------------- -# WebGUI is Copyright 2001-2008 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 -#------------------------------------------------------------------- - -our ($webguiRoot); - -BEGIN { - $webguiRoot = ".."; - unshift (@INC, $webguiRoot."/lib"); -} - -use strict; -use Getopt::Long; -use Pod::Usage; -use WebGUI::Utility::Gallery; -use WebGUI::Session; - -my $session = start(); - -my $folder = getFolderFromArgs(); -my $gallery = getGalleryFromArgs(); - -WebGUI::Utility::Gallery->addAlbumFromFolder( $gallery, $folder ); - -finish($session); - -#---------------------------------------------------------------------------- -# getFolderFromArgs -# Gets the folder from the arguments. The argument can be -# either an assetId or an absolute URL -sub getFolderFromArgs { - my $asset; - my $arg = $ARGV[0]; - if ( $arg =~ m{^/} ) { - $asset = WebGUI::Asset->newByUrl( $session, $arg ); - } - else { - $asset = WebGUI::Asset->newByDynamicClass( $session, $arg ); - } - - unless ( $asset && $asset->isa('WebGUI::Asset::Wobject::Folder') ) { - pod2usage("$0: First argument must be a Folder asset"); - } - - return $asset; -} - -#---------------------------------------------------------------------------- -# getGalleryFromArgs -# Gets the Gallery from the arguments. The argument can be either an assetId -# or an absolute URL -sub getGalleryFromArgs { - my $asset; - my $arg = $ARGV[1]; - if ( $arg =~ m{^/} ) { - $asset = WebGUI::Asset->newByUrl( $session, $arg ); - } - else { - $asset = WebGUI::Asset->newByDynamicClass( $session, $arg ); - } - - unless ( $asset && $asset->isa('WebGUI::Asset::Wobject::Gallery') ) { - pod2usage("$0: Second argument must be a Gallery asset"); - } - - return $asset; -} - -#---------------------------------------------------------------------------- -sub start { - $| = 1; #disable output buffering - my ($configFile, $help); - GetOptions( - 'configFile=s' => \$configFile, - 'help' => \$help, - ); - - # Show usage - if ($help) { - pod2usage(1); - } - - unless ($configFile) { - pod2usage("$0: Must specify a --configFile"); - } - - my $session = WebGUI::Session->open($webguiRoot,$configFile); - $session->user({userId=>3}); - - my $versionTag = WebGUI::VersionTag->getWorking($session); - $versionTag->set({name => 'Migrate Folder to Gallery'}); - - return $session; -} - -#---------------------------------------------------------------------------- -sub finish { - my $session = shift; - - my $versionTag = WebGUI::VersionTag->getWorking($session); - $versionTag->commit; - - $session->var->end; - $session->close; -} - - -=head1 NAME - -migrateFolderToGallery.pl -- Migrate a Folder into a Gallery - -=head1 SYNOPSIS - -migrateFolderToGallery.pl --configFile= - -=head1 ARGUMENTS - -=over - -=item folder - -A Folder URL or asset ID. The URL must be an absolute URL, and -so must begin with a "/". - -=item gallery - -A Gallery URL or asset ID. The URL must be an absolute URL, and so much begin -with a "/". - -=back - -=head1 OPTIONS - -=over - -=item configFile - -The WebGUI config file to use. - -=back - -=head1 DESCRIPTION - -This script migrates a Folder into a gallery album. It -uses B for its major features. - - diff --git a/t/Utility/Gallery/addAlbumFromCollaboration.t b/t/Utility/Gallery/addAlbumFromCollaboration.t deleted file mode 100644 index 248a80ace..000000000 --- a/t/Utility/Gallery/addAlbumFromCollaboration.t +++ /dev/null @@ -1,275 +0,0 @@ -# $vim:syntax=perl -#------------------------------------------------------------------- -# WebGUI is Copyright 2001-2008 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 -#------------------------------------------------------------------ - -# Test the addAlbum* methods from the Gallery::Utility class -# -# - -use strict; -use FindBin; -use lib "$FindBin::Bin/../../lib"; -use Test::More; -use Test::Deep; -use WebGUI::Test; -use WebGUI::Asset; -use WebGUI::Session; - -#---------------------------------------------------------------------------- -# Init -my $session = WebGUI::Test->session; -my $node = WebGUI::Asset->getImportNode( $session ); - -# Add arguments to avoid autocommit workflows -my @addArgs = ( undef, undef, { skipAutoCommitWorkflows => 1 } ); - -my @versionTags; -push @versionTags, WebGUI::VersionTag->getWorking( $session ); - -# Generate a Gallery to import into -my $gallery; -my $album; - -# Generate a collaboration system to import -my $collab - = $node->addChild({ - className => 'WebGUI::Asset::Wobject::Collaboration', - }); - -my @threads; -for (0..2) { - push @threads, $collab->addChild({ - className => 'WebGUI::Asset::Post::Thread', - content => "content$_", - menuTitle => "menuTitle$_", - ownerUserId => "3$_", - synopsis => "synopsis$_", - title => "title$_", - userDefined1 => "$_", # This is important. Used to detect which File is from which Thread - userDefined2 => "userDefined2$_", - userDefined3 => "userDefined3$_", - userDefined4 => "userDefined4$_", - userDefined5 => "userDefined5$_", - }, @addArgs); - $threads[-1]->getStorageLocation->addFileFromFilesystem( - WebGUI::Test->getTestCollateralPath('lamp.jpg') - ); -} - -# Add a post to one of the threads, with an image -my @posts; -push @{$posts[0]}, $threads[0]->addChild({ - className => 'WebGUI::Asset::Post', - content => "content00", - menuTitle => "menuTitle00", - synopsis => "synopsis00", - title => "title00", - userDefined1 => "00", # This is important. Used to detect which File is from which Post - userDefined2 => "userDefined200", - userDefined3 => "userDefined300", - userDefined4 => "userDefined400", - userDefined5 => "userDefined500", -}, @addArgs); -$posts[0][0]->getStorageLocation->addFileFromFilesystem( - WebGUI::Test->getTestCollateralPath('lamp.jpg') -); - -$versionTags[-1]->commit; - -# Thread fields mapped to album fields that should be migrated -my %threadFields = ( - content => "description", - createdBy => 'createdBy', - creationDate => 'creationDate', - menuTitle => "menuTitle", - ownerUserId => "ownerUserId", - synopsis => "synopsis", - title => "title", - userDefined1 => "userDefined1", - userDefined2 => "userDefined2", - userDefined3 => "userDefined3", - userDefined4 => "userDefined4", - userDefined5 => "userDefined5", -); - -# Post fields mapped to photo fields that should be migrated -my %postFields = ( - createdBy => 'createdBy', - creationDate => 'creationDate', - ownerUserId => "ownerUserId", - userDefined1 => "userDefined1", - userDefined2 => "userDefined2", - userDefined3 => "userDefined3", - userDefined4 => "userDefined4", - userDefined5 => "userDefined5", -); - -#---------------------------------------------------------------------------- -# Tests - -# addAlbumFromThread adds 7 tests for $thread[0] and @{$posts[0]} -my $threadPostTests = 7 * ( 1 + scalar @{ $posts[0] } ); - -# addAlbumFromThread adds 1 test for each field in %threadFields -my $threadFieldTests = 1 * scalar keys %threadFields; - -# addAlbumFromThread adds 1 test for each field in %postFields -my $postFieldTests = 1 * ( scalar keys %postFields ) - * ( 1 + scalar @{ $posts[0] } ); - -plan tests => 10 - + $threadPostTests - + $threadFieldTests - + $postFieldTests - ; - -#---------------------------------------------------------------------------- -# Test use -my $utility = 'WebGUI::Utility::Gallery'; -use_ok($utility); - -#---------------------------------------------------------------------------- -# Test addAlbumFromThread -$gallery = $node->addChild({ className => 'WebGUI::Asset::Wobject::Gallery' }); - -ok( - !eval{ $utility->addAlbumFromThread( "", $threads[0] ); 1}, - "addAlbumFromThread croaks if first argument is not a Gallery asset", -); - -ok( - !eval{ $utility->addAlbumFromThread( $gallery, "" ); 1}, - "addAlbumFromThread croaks if second argument is not a Thread asset", -); - -push @versionTags, WebGUI::VersionTag->getWorking( $session ); -$utility->addAlbumFromThread( $gallery, $threads[0] ); -$versionTags[-1]->commit; - -is( - scalar @{ $gallery->getAlbumIds }, 1, - "addAlbumFromThread creates a new album", -); - -$album = WebGUI::Asset->newByDynamicClass( $session, $gallery->getAlbumIds->[0] ); -use Data::Dumper; -diag( Dumper $gallery->getAlbumIds ); - -is( - $album->get('revisionDate'), $threads[0]->get('revisionDate'), - "addAlbumFromThread creates album with same revisionDate as thread", -); - -my $galleryUrl = $gallery->get('url'); -like( - $album->get('url'), qr/^$galleryUrl/, - "addAlbumFromThread creates album with url that begins with gallery's url", -); - -# 1 test for each field in %threadFields -for my $oldField ( sort keys %threadFields ) { - is( $album->get( $threadFields{ $oldField } ), $threads[0]->get( $oldField ), - "addAlbumFromThread migrates Thread $oldField to GalleryAlbum $threadFields{$oldField}", - ); -} - -is( - scalar @{ $album->getFileIds }, 2, - "addAlbumFromThread adds one file for each attachment to the thread or posts of the thread", -); - -# 7 tests for each post/file + postFields tests -my $albumUrl = $album->get('url'); -for my $fileId ( @{$album->getFileIds} ) { - my $file = WebGUI::Asset->newByDynamicClass( $session, $fileId ); - - # Find which Thread or Post this file corresponds to - my ( $post, $isThread ); - if ( length $file->get('userDefined1') == 1 ) { - # Is a thread, get it - $post = $threads[ $file->get('userDefined1') ]; - $isThread = 1; - } - else { - my @index = split //, $file->get('userDefined1'); - $post = $posts[ $index[0] ][ $index[1] ]; - $isThread = 0; - } - - for my $oldField ( sort keys %postFields ) { - is ( $file->get( $postFields{ $oldField } ), $post->get( $oldField ), - "addAlbumFromThread migrates Post $oldField to File $postFields{$oldField}", - ); - } - - # File synopsis should be Post content If and only if Post content is not the same - # as the Thread content - if ( $isThread ) { - is ( $file->get('synopsis'), undef, - "Files do not get the Thread's content" - ); - } - else { - is ( $file->get('synopsis'), $post->get('content'), - "Files get content when they're from posts other than the Thread", - ); - } - - like( - $file->get('url'), qr/^$albumUrl/, - "addAlbumFromThread add files with urls that begin with GalleryAlbum url", - ); - isa_ok( $file->getStorageLocation, 'WebGUI::Storage', 'Storage location exists' ); - ok( $file->get('filename'), '"filename" property was set' ); - cmp_deeply( - $file->getStorageLocation->getFiles, superbagof($file->get('filename')), - "Storage location contains the filename" - ); - # Test that title and menuTitle do not contain file extention - my ($title) = $file->get('filename') =~ m{(.*)\.[^.]*$}; - is( $file->get('title'), $title, - "Title doesn't contain the file extention" - ); - is( $file->get('menuTitle'), $title, - "Menu title doesn't contain the file extention" - ); -} - - -#---------------------------------------------------------------------------- -# Test addAlbumFromCollaboration -$gallery = $node->addChild({ className => 'WebGUI::Asset::Wobject::Gallery' }); - -ok( - !eval{ $utility->addAlbumFromCollaboration( "", $collab ); 1}, - "addAlbumFromCollaboration croaks if first argument is not a Gallery asset", -); - -ok( - !eval{ $utility->addAlbumFromCollaboration( $gallery, "" ); 1}, - "addAlbumFromCollaboration croaks if second argument is not a Collaboration asset", -); - -push @versionTags, WebGUI::VersionTag->getWorking( $session ); -$utility->addAlbumFromCollaboration( $gallery, $collab ); -$versionTags[-1]->commit; - -is( - scalar @{ $gallery->getAlbumIds }, scalar @threads, - "addAlbumFromCollaboration creates one album per thread", -); - -#---------------------------------------------------------------------------- -# Cleanup -END { - for my $tag ( @versionTags ) { - $tag->rollback; - } -} diff --git a/t/Utility/Gallery/addAlbumFromFolder.t b/t/Utility/Gallery/addAlbumFromFolder.t deleted file mode 100644 index deba560c1..000000000 --- a/t/Utility/Gallery/addAlbumFromFolder.t +++ /dev/null @@ -1,184 +0,0 @@ -# $vim:syntax=perl -#------------------------------------------------------------------- -# WebGUI is Copyright 2001-2008 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 -#------------------------------------------------------------------ - -# Test the addAlbum* methods from the Gallery::Utility class -# -# - -use strict; -use FindBin; -use lib "$FindBin::Bin/../../lib"; -use Test::More; -use Test::Deep; -use WebGUI::Test; -use WebGUI::Asset; -use WebGUI::Session; - -#---------------------------------------------------------------------------- -# Init -my $session = WebGUI::Test->session; -my $node = WebGUI::Asset->getImportNode( $session ); - -# Add arguments to avoid autocommit workflows -my @addArgs = ( undef, undef, { skipAutoCommitWorkflows => 1 } ); - -my @versionTags; -push @versionTags, WebGUI::VersionTag->getWorking( $session ); - -# Generate a Gallery to import into -my $gallery; -my $album; - -# Generate a folder to import -my $folder - = $node->addChild({ - className => 'WebGUI::Asset::Wobject::Folder', - }); - -my @files; -for (0..2) { - push @files, $folder->addChild({ - className => 'WebGUI::Asset::File::Image', - menuTitle => "menuTitle$_", - ownerUserId => "3$_", - synopsis => "synopsis$_", - title => "title$_", # This is important. Used to detect which GalleryFile is from which File - filename => 'lamp.jpg', - }, @addArgs); - $files[-1]->getStorageLocation->addFileFromFilesystem( - WebGUI::Test->getTestCollateralPath('lamp.jpg') - ); -} - -$versionTags[-1]->commit; - -# File to GalleryFile field mappings. Should be mostly the same -my %fileField = ( - title => "title", - menuTitle => "menuTitle", - synopsis => "synopsis", - ownerUserId => "ownerUserId", - filename => "filename", -); - -# Folder to GalleryAlbum field mappings. -my %folderField = ( - title => "title", - menuTitle => "menuTitle", - description => "description", - createdBy => 'createdBy', - creationDate => 'creationDate', - ownerUserId => 'ownerUserId', - synopsis => 'synopsis', -); - -#---------------------------------------------------------------------------- -# Tests - -# 1 test for each file + file field tests -my $fileTests = scalar @files * ( 3 + scalar keys %fileField ); - -# 1 test for each item in folderField -my $folderTests = scalar keys %folderField; - -plan tests => 10 - + $fileTests - + $folderTests - ; - -#---------------------------------------------------------------------------- -# Test use -my $utility = 'WebGUI::Utility::Gallery'; -use_ok($utility); - -#---------------------------------------------------------------------------- -# Test addAlbumFromFolder -$gallery = $node->addChild({ className => 'WebGUI::Asset::Wobject::Gallery' }); - -ok( - !eval{ $utility->addAlbumFromFolder( "", $folder ); 1}, - "addAlbumFromFolder croaks if first argument is not a Gallery asset", -); - -ok( - !eval{ $utility->addAlbumFromFolder( $gallery, "" ); 1}, - "addAlbumFromFolder croaks if second argument is not a Folder asset", -); - -push @versionTags, WebGUI::VersionTag->getWorking( $session ); -$utility->addAlbumFromFolder( $gallery, $folder ); -$versionTags[-1]->commit; - -is( - scalar @{ $gallery->getAlbumIds }, 1, - "addAlbumFromFolder creates a new album", -); - -$album = WebGUI::Asset->newByDynamicClass( $session, $gallery->getAlbumIds->[0] ); - -is( - $album->get('revisionDate'), $folder->get('revisionDate'), - "addAlbumFromFolder creates album with same revisionDate as folder", -); - -my $galleryUrl = $gallery->get('url'); -like( - $album->get('url'), qr/^$galleryUrl/, - "addAlbumFromFolder creates album with url that begins with gallery's url", -); - -# 1 test for each field in %folderField -for my $oldField ( sort keys %folderField ) { - is( $album->get( $folderField{ $oldField } ), $folder->get( $oldField ), - "addAlbumFromFolder migrates Folder $oldField to GalleryAlbum $folderField{$oldField}", - ); -} - -is( - scalar @{ $album->getFileIds }, $folder->getChildCount, - "addAlbumFromFolder adds one file for each File in the Folder", -); - -# 4 tests for each file + fileField tests -my $albumUrl = $album->get('url'); -for my $fileId ( @{$album->getFileIds} ) { - my $newFile = WebGUI::Asset->newByDynamicClass( $session, $fileId ); - - # Find which File this was in the original Folder - ( my $index ) = $newFile->get('title') =~ /title(\d+)/; - my $oldFile = $files[ $index ]; - - for my $oldField ( sort keys %fileField ) { - is ( $newFile->get( $fileField{ $oldField } ), $oldFile->get( $oldField ), - "addAlbumFromFolder migrates File $oldField to GalleryFile $fileField{$oldField}", - ); - } - - like( - $newFile->get('url'), qr/^$albumUrl/, - "addAlbumFromFolder add files with urls that begin with GalleryAlbum url", - ); - isa_ok( $newFile->getStorageLocation, 'WebGUI::Storage', 'Storage location exists' ); - ok( $newFile->get('filename'), '"filename" property was set' ); - cmp_deeply( - $newFile->getStorageLocation->getFiles, superbagof($newFile->get('filename')), - "Storage location contains the filename" - ); -} - - -#---------------------------------------------------------------------------- -# Cleanup -END { - for my $tag ( @versionTags ) { - $tag->rollback; - } -}