From a4be42a7ce5ab1fdac1e1082fb973854bc3d3a60 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Tue, 23 Jun 2009 00:07:16 +0000 Subject: [PATCH] Fix bugs with resizing photos on upload. --- docs/changelog/7.x.x.txt | 1 + lib/WebGUI/Asset/Story.pm | 16 +++++++++++++--- t/Asset/Story.t | 7 ++++++- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 10b9cc584..2fd96f9bd 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -2,6 +2,7 @@ - Updated auth to allow sending back of non-text/html mime types. - fixed #10564: edit branch progress bar goes kablooey - fixed #10565: Survey: add question doing double-create + - fixed Photo resizing bugs with the Story asset. 7.7.11 - Fixed a bug where empty version tags were not deleted. (Martin Kamerbeek / Oqapi) diff --git a/lib/WebGUI/Asset/Story.pm b/lib/WebGUI/Asset/Story.pm index 57e985e87..60f93a895 100644 --- a/lib/WebGUI/Asset/Story.pm +++ b/lib/WebGUI/Asset/Story.pm @@ -606,6 +606,9 @@ sub processPropertiesFromFormPost { my $self = shift; my $session = $self->session; $self->next::method; + my $archive = delete $self->{_parent}; ##Force a new lookup. + $session->log->warn($self->getParent->get('className')); + $session->log->warn($self->getParent->getParent->get('className')); my $form = $session->form; ##Handle old data first, to avoid iterating across a newly added photo. my $photoData = $self->getPhotoData; @@ -620,14 +623,17 @@ sub processPropertiesFromFormPost { splice @{ $photoData }, $photoIndex-1, 1; next PHOTO; } - ##Process new uploads + ##Process uploads that replace existing photos if (my $uploadId = $form->process('newPhoto'.$photoIndex,'File')) { my $upload = WebGUI::Storage->get($session, $uploadId); my $storage = WebGUI::Storage->get($session, $storageId); $storage->clear; my $filename = $upload->getFiles->[0]; $storage->addFileFromFilesystem($upload->getPath($filename)); - $storage->generateThumbnail($filename); + my ($width, $height) = $storage->getSizeInPixels($filename); + if ($width > $self->getArchive->get('photoWidth')) { + $storage->resize($filename, $self->getArchive->get('photoWidth')); + } $upload->delete; } my $newPhoto = { @@ -658,6 +664,7 @@ sub processPropertiesFromFormPost { }; } $self->setPhotoData($photoData); + $self->{_parent} = $archive; ##Restore archive, for URL and other calculations } @@ -833,7 +840,10 @@ This is a class method. sub validParent { my $class = shift; my $session = shift; - return $session->asset && $session->asset->isa('WebGUI::Asset::Wobject::StoryArchive'); + return $session->asset + && ( $session->asset->isa('WebGUI::Asset::Wobject::StoryArchive') + || ($session->asset->isa('WebGUI::Asset::Wobject::Folder') && $session->asset->getParent->isa('WebGUI::Asset::Wobject::StoryArchive') ) + ); } #------------------------------------------------------------------- diff --git a/t/Asset/Story.t b/t/Asset/Story.t index b2e350cd7..d3f13fdf7 100644 --- a/t/Asset/Story.t +++ b/t/Asset/Story.t @@ -81,7 +81,7 @@ WebGUI::Test->storagesToDelete($storage1, $storage2); # ############################################################ -my $tests = 42; +my $tests = 44; plan tests => 1 + $tests + $canEditMaker->plan @@ -103,8 +103,13 @@ skip "Unable to load module $class", $tests unless $loaded; ok(! WebGUI::Asset::Story->validParent($session), 'validParent: no session asset'); $session->asset($defaultNode); ok(! WebGUI::Asset::Story->validParent($session), 'validParent: wrong type of asset'); +$session->asset(WebGUI::Asset->getRoot($session)); +ok(! WebGUI::Asset::Story->validParent($session), 'validParent: Any old folder is not valid'); $session->asset($archive); ok( WebGUI::Asset::Story->validParent($session), 'validParent: StoryArchive is valid'); +my $todayFolder = $archive->getFolder(); +$session->asset($todayFolder); +ok( WebGUI::Asset::Story->validParent($session), 'validParent: Folder below story archive is valid'); ############################################################ #