Refactor out the copied code to resize images based on the max file
size from the Admin Settings and create a new method in Storage::Image. Build a test to verify that it works correctly.
This commit is contained in:
parent
41a8524daf
commit
1b3d7f0c2b
5 changed files with 74 additions and 32 deletions
|
|
@ -78,15 +78,7 @@ sub applyConstraints {
|
|||
$self->update({parameters=>$parameters.' alt="'.$self->get("title").'"'});
|
||||
}
|
||||
my $file = $self->get("filename");
|
||||
my ($w, $h) = $storage->getSizeInPixels($file);
|
||||
if($w > $maxImageSize || $h > $maxImageSize) {
|
||||
if($w > $h) {
|
||||
$storage->resize($file, $maxImageSize);
|
||||
}
|
||||
else {
|
||||
$storage->resize($file, 0, $maxImageSize);
|
||||
}
|
||||
}
|
||||
$storage->adjustMaxImageSize($file);
|
||||
$self->generateThumbnail($thumbnailSize);
|
||||
$self->setSize;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -844,17 +844,7 @@ sub postProcess {
|
|||
my $storage = $self->getStorageLocation;
|
||||
foreach my $file (@{$storage->getFiles}) {
|
||||
if ($storage->isImage($file)) {
|
||||
my ($w, $h) = $storage->getSizeInPixels($file);
|
||||
my $max_size = $self->getThread->getParent->get("maxImageSize")
|
||||
|| $self->session->setting->get("maxImageSize");
|
||||
if($w > $max_size || $h > $max_size) {
|
||||
if($w > $h) {
|
||||
$storage->resize($file, $max_size);
|
||||
}
|
||||
else {
|
||||
$storage->resize($file, 0, $max_size);
|
||||
}
|
||||
}
|
||||
$storage->adjustMaxImageSize($file);
|
||||
$storage->generateThumbnail($file, $self->getThread->getParent->get("thumbnailSize"));
|
||||
}
|
||||
$size += $storage->getFileSize($file);
|
||||
|
|
|
|||
|
|
@ -230,16 +230,7 @@ sub processPropertiesFromFormPost {
|
|||
my $storage = $self->getStorageLocation;
|
||||
foreach my $file (@{$storage->getFiles}) {
|
||||
if ($storage->isImage($file)) {
|
||||
my ($w, $h) = $storage->getSizeInPixels($file);
|
||||
my $max_size = $self->session->setting->get("maxImageSize");
|
||||
if($w > $max_size || $h > $max_size) {
|
||||
if($w > $h) {
|
||||
$storage->resize($file, $max_size);
|
||||
}
|
||||
else {
|
||||
$storage->resize($file, 0, $max_size);
|
||||
}
|
||||
}
|
||||
$storage->adjustMaxImageSize($size);
|
||||
}
|
||||
$size += $storage->getFileSize($file);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -118,6 +118,35 @@ sub addFileFromCaptcha {
|
|||
return ($filename, $challenge);
|
||||
}
|
||||
|
||||
=head2 adjustMaxImageSize ( $file )
|
||||
|
||||
Adjust the size of an image according to the C<maxImageSize> setting in the Admin
|
||||
Console.
|
||||
|
||||
=head3 $file
|
||||
|
||||
The name of the file to check for a maximum file size violation.
|
||||
|
||||
=cut
|
||||
|
||||
sub adjustMaxImageSize {
|
||||
my $self = shift;
|
||||
my $file = shift;
|
||||
my ($w, $h) = $self->getSizeInPixels($file);
|
||||
my $max_size = $self->session->setting->get("maxImageSize");
|
||||
my $resized = 0;
|
||||
if($w > $max_size || $h > $max_size) {
|
||||
if($w > $h) {
|
||||
$self->resize($file, $max_size);
|
||||
}
|
||||
else {
|
||||
$self->resize($file, 0, $max_size);
|
||||
}
|
||||
$resized = 1;
|
||||
}
|
||||
return $resized;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 copy ( [ storage ] )
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ my $extensionTests = [
|
|||
},
|
||||
];
|
||||
|
||||
plan tests => 40 + scalar @{ $extensionTests }; # increment this value for each test you create
|
||||
plan tests => 51 + scalar @{ $extensionTests }; # increment this value for each test you create
|
||||
|
||||
my $session = WebGUI::Test->session;
|
||||
|
||||
|
|
@ -198,6 +198,45 @@ is($WebGUI::Test::logger_error, q/Can't make a thumbnail for a file that is not
|
|||
|
||||
is($thumbStore->getThumbnailUrl('square.png'), $thumbStore->getUrl('thumb-square.png'), 'getThumbnailUrl returns the correct url');
|
||||
|
||||
####################################################
|
||||
#
|
||||
# adjustMaxImageSize
|
||||
#
|
||||
####################################################
|
||||
|
||||
my $origMaxImageSize = $session->setting->get('maxImageSize');
|
||||
|
||||
my $sizeTest = WebGUI::Storage::Image->create($session);
|
||||
|
||||
my @testImages = qw/tooWide.gif tooTall.gif/;
|
||||
|
||||
foreach my $testImage (@testImages) {
|
||||
$sizeTest->addFileFromFilesystem(
|
||||
File::Spec->catfile(WebGUI::Test->getTestCollateralPath, $testImage),
|
||||
);
|
||||
}
|
||||
|
||||
cmp_bag($sizeTest->getFiles(), ['tooWide.gif', 'tooTall.gif'], 'both files added to storage object for testing');
|
||||
|
||||
|
||||
$session->setting->set('maxImageSize', 200 );
|
||||
foreach my $testImage (@testImages) {
|
||||
my $originalSize = [ $sizeTest->getSizeInPixels($testImage) ];
|
||||
is($sizeTest->adjustMaxImageSize($testImage), 0, "$testImage does not need to be resized");
|
||||
cmp_bag([$sizeTest->getSizeInPixels($testImage)], $originalSize, "$testImage was not resized");
|
||||
}
|
||||
|
||||
$session->setting->set('maxImageSize', 75 );
|
||||
foreach my $testImage (@testImages) {
|
||||
my @originalSize = $sizeTest->getSizeInPixels($testImage);
|
||||
is($sizeTest->adjustMaxImageSize($testImage), 1, "$testImage needs to be resized");
|
||||
my @newSize = $sizeTest->getSizeInPixels($testImage);
|
||||
ok ($originalSize[0] != $newSize[0], "$testImage width changed");
|
||||
ok ($originalSize[1] != $newSize[1], "$testImage height changed");
|
||||
}
|
||||
|
||||
$session->setting->set('maxImageSize', $origMaxImageSize );
|
||||
|
||||
TODO: {
|
||||
local $TODO = "Methods that need to be tested";
|
||||
ok(0, 'resize');
|
||||
|
|
@ -205,8 +244,9 @@ TODO: {
|
|||
|
||||
END {
|
||||
foreach my $stor (
|
||||
$imageStore, $thumbStore, $imageCopy,
|
||||
$imageStore, $thumbStore, $imageCopy, $sizeTest,
|
||||
) {
|
||||
ref $stor eq "WebGUI::Storage::Image" and $stor->delete;
|
||||
}
|
||||
$session->setting->set('maxImageSize', $origMaxImageSize );
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue