diff --git a/lib/WebGUI/Asset/File/Image/Photo.pm b/lib/WebGUI/Asset/File/Image/Photo.pm index 568282979..c27350ffc 100644 --- a/lib/WebGUI/Asset/File/Image/Photo.pm +++ b/lib/WebGUI/Asset/File/Image/Photo.pm @@ -159,6 +159,19 @@ sub applyConstraints { #---------------------------------------------------------------------------- +=head2 canAdd ( ) + +Override canAdd to ignore its permissions check. Permissions are handled +by the parent Gallery and other permissions methods. + +=cut + +sub canAdd { + return 1; +} + +#---------------------------------------------------------------------------- + =head2 canComment ( [userId] ) Returns true if the user can comment on this asset. C is a WebGUI @@ -556,12 +569,21 @@ sub prepareView { sub processPropertiesFromFormPost { my $self = shift; + my $form = $self->session->form; my $errors = $self->SUPER::processPropertiesFromFormPost || []; # Return if errors return $errors if @$errors; - # Passes all checks + ### Passes all checks + # Fix if adding a new photo + if ( $form->get("assetId") eq "new" ) { + $self->update({ + ownerUserId => $self->session->user->userId, + }); + } + + $self->requestAutoCommit; } diff --git a/lib/WebGUI/Asset/Wobject/Gallery.pm b/lib/WebGUI/Asset/Wobject/Gallery.pm index 3bbbdb3cc..57fa46401 100644 --- a/lib/WebGUI/Asset/Wobject/Gallery.pm +++ b/lib/WebGUI/Asset/Wobject/Gallery.pm @@ -447,18 +447,31 @@ check. If no userId is passed, will check the current user. Users can edit this gallery if they are part of the C group. +Also checks if a user is adding a GalleryAlbum and allows them to 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 - ; + my $form = $self->session->form; - return $user->isInGroup( $self->get("groupIdEdit") ); + if ( $form->get('func') eq "add" ) { + return $self->canAddFile( $userId ); + } + elsif ( $form->get('func') eq "editSave" && $form->get('assetId') eq "new" ) { + return $self->canAddFile( $userId ); + } + else { + my $user = $userId + ? WebGUI::User->new( $self->session, $userId ) + : $self->session->user + ; + + return $user->isInGroup( $self->get("groupIdEdit") ); + } } #---------------------------------------------------------------------------- diff --git a/lib/WebGUI/Asset/Wobject/GalleryAlbum.pm b/lib/WebGUI/Asset/Wobject/GalleryAlbum.pm index 33ba9019f..a404f5b7c 100644 --- a/lib/WebGUI/Asset/Wobject/GalleryAlbum.pm +++ b/lib/WebGUI/Asset/Wobject/GalleryAlbum.pm @@ -165,6 +165,19 @@ sub appendTemplateVarsFileLoop { #---------------------------------------------------------------------------- +=head2 canAdd ( ) + +Override canAdd to ignore its permissions check. Permissions are handled +by the parent Gallery and other permissions methods. + +=cut + +sub canAdd { + return 1; +} + +#---------------------------------------------------------------------------- + =head2 canAddFile ( [userId] ) Returns true if the user can add a file to this album. C is a WebGUI @@ -467,12 +480,20 @@ approval workflow. sub processPropertiesFromFormPost { my $self = shift; + my $form = $self->session->form; my $errors = $self->SUPER::processPropertiesFromFormPost || []; # Return if error return $errors if @$errors; - # Passes all checks + ### Passes all checks + # Fix if adding a new GalleryAlbum + if ( $form->get('assetId') eq "new" ) { + $self->update({ + ownerUserId => $self->session->user->userId, + }); + } + $self->requestAutoCommit; } diff --git a/lib/WebGUI/Help/Asset_GalleryAlbum.pm b/lib/WebGUI/Help/Asset_GalleryAlbum.pm index b3417d814..60448b31b 100644 --- a/lib/WebGUI/Help/Asset_GalleryAlbum.pm +++ b/lib/WebGUI/Help/Asset_GalleryAlbum.pm @@ -119,6 +119,7 @@ our $HELP = { namespace => 'Asset_GalleryAlbum', }, ], + variables => [ ], }, 'help slideshow' => { @@ -134,6 +135,7 @@ our $HELP = { namespace => 'Asset_GalleryAlbum', }, ], + variables => [ ], }, 'help thumbnails' => { diff --git a/t/Asset/File/Image.t b/t/Asset/File/Image.t index 7cf531cc2..1d73b41d9 100644 --- a/t/Asset/File/Image.t +++ b/t/Asset/File/Image.t @@ -25,10 +25,11 @@ use WebGUI::Session; use WebGUI::Image; use WebGUI::Storage::Image; use WebGUI::Asset::File::Image; +use WebGUI::Form::File; use Test::More; # increment this value for each test you create use Test::Deep; -plan tests => 8; +plan tests => 7; my $session = WebGUI::Test->session; @@ -75,15 +76,8 @@ is($storage->getId, $asset->getStorageLocation->getId, 'Cached Asset storage loc $versionTag->commit; -my $imageStorage = WebGUI::Storage::Image->create($session); -$mocker->set_always('getValueFromPost', $imageStorage->getId); -my $imageFormStorage = $asset->getStorageFromPost(); -isa_ok($imageFormStorage, 'WebGUI::Storage::Image', 'Asset::Image::getStorageFromPost'); - END { if (defined $versionTag and ref $versionTag eq 'WebGUI::VersionTag') { $versionTag->rollback; } - ##Storage is cleaned up by rolling back the version tag - $imageStorage->delete; } diff --git a/t/Asset/Shortcut/010-linked-asset.t b/t/Asset/Shortcut/010-linked-asset.t index a6563706f..20d5b0164 100644 --- a/t/Asset/Shortcut/010-linked-asset.t +++ b/t/Asset/Shortcut/010-linked-asset.t @@ -50,11 +50,10 @@ END { #---------------------------------------------------------------------------- # Tests -plan tests => 10; +plan tests => 9; #---------------------------------------------------------------------------- # Test shortcut's link to original asset -# plan => 3 my $original = $shortcut->getShortcut; ok( @@ -74,7 +73,6 @@ is( #---------------------------------------------------------------------------- # Test trashing snippet trashes shortcut also -# plan tests => 3 $snippet->trash; $shortcut = WebGUI::Asset->newByDynamicClass($session, $shortcut->getId); @@ -95,7 +93,6 @@ ok( #---------------------------------------------------------------------------- # Test restoring snippet restores shortcut also -# plan tests => 3 $snippet->publish; $shortcut = WebGUI::Asset->newByDynamicClass($session, $shortcut->getId); @@ -111,7 +108,6 @@ ok( #---------------------------------------------------------------------------- # Test purging snippet purges shortcut also -# plan tests => 2 $snippet->purge; $shortcut = WebGUI::Asset->newByDynamicClass($session, $shortcut->getId); @@ -120,7 +116,3 @@ ok( "Purge Linked Asset: Shortcut is not defined", ); -ok( - !grep({ $_->getId eq $shortcut->getId } @{ $snippet->getAssetsInTrash }), - "Purge Linked Asset: Shortcut is not in trash", -); diff --git a/t/Storage.t b/t/Storage.t index fd6f6129d..ad63626d1 100644 --- a/t/Storage.t +++ b/t/Storage.t @@ -26,7 +26,7 @@ my $session = WebGUI::Test->session; my ($extensionTests, $fileIconTests) = setupDataDrivenTests($session); -my $numTests = 77; # increment this value for each test you create +my $numTests = 80; # increment this value for each test you create plan tests => $numTests + scalar @{ $extensionTests } + scalar @{ $fileIconTests }; my $uploadDir = $session->config->get('uploadsPath'); @@ -262,8 +262,9 @@ cmp_bag($s3copy->getFiles(), [ @filesToCopy ], 'copy: passing explicit variable # #################################################### -is(scalar @{ $storage1->getFiles}, 3, 'storage1 has 2 files'); +is(scalar @{ $storage1->getFiles }, 4, 'storage1 has 4 files'); is($storage1->deleteFile("testfile-hash-renamed.file"), 1, 'deleteFile: deleted 1 file'); +is($storage1->deleteFile("testfile-hash-copied.file"), 1, 'deleteFile: deleted 1 file'); is($storage1->deleteFile("WebGUI.pm"), 1, 'deleteFile: deleted another file'); cmp_bag($storage1->getFiles, [$filename], 'deleteFile: storage1 has only 1 file'); diff --git a/t/Storage/Image.t b/t/Storage/Image.t index 8b670d6a9..e2f4dcd9b 100644 --- a/t/Storage/Image.t +++ b/t/Storage/Image.t @@ -202,7 +202,7 @@ is($thumbStore->getThumbnailUrl(), '', 'getThumbnailUrl returns undef if no file is($WebGUI::Test::logger_error, q/Can't make a thumbnail url without a filename./, 'getThumbnailUrl logs an error message for not sending a filename'); is($thumbStore->getThumbnailUrl('round.png'), '', 'getThumbnailUrl returns undef if the requested file is not in the storage location'); -is($WebGUI::Test::logger_error, q/Can't make a thumbnail for a file that is not in my storage location./, 'getThumbnailUrl logs an error message for not sending a filename'); +is($WebGUI::Test::logger_error, q/Can't make a thumbnail for a file named 'round.png' that is not in my storage location./, 'getThumbnailUrl logs an error message for not sending a filename'); is($thumbStore->getThumbnailUrl('square.png'), $thumbStore->getUrl('thumb-square.png'), 'getThumbnailUrl returns the correct url');