Update Photo for Moose.

This commit is contained in:
Colin Kuskie 2010-02-15 15:28:12 -08:00
parent 02a257e1d1
commit ba56fe41c7

View file

@ -15,13 +15,26 @@ package WebGUI::Asset::File::GalleryFile::Photo;
=cut =cut
use strict; use strict;
use base 'WebGUI::Asset::File::GalleryFile'; use WebGUI::Definition::Asset;
extends 'WebGUI::Asset::File::GalleryFile';
aspect assetName => ['assetName', 'Asset_Photo'];
aspect icon => 'photo.gif';
aspect tableName => 'Photo';
property exifData => (
fieldType => 'text',
noFormPost => 1,
default => undef,
);
property location => (
fieldType => 'text',
label => ['editForm location','Asset_Photo'],
default => undef,
);
use Carp qw( carp croak ); use Carp qw( carp croak );
use Image::ExifTool qw( :Public ); use Image::ExifTool qw( :Public );
use JSON qw/ to_json from_json /; use JSON qw/ to_json from_json /;
use URI::Escape; use URI::Escape;
use Tie::IxHash;
use WebGUI::DateTime; use WebGUI::DateTime;
use WebGUI::Friends; use WebGUI::Friends;
@ -58,41 +71,6 @@ These methods are available from this class:
=cut =cut
#-------------------------------------------------------------------
=head2 definition ( session, definition )
Define the properties of the Photo asset.
=cut
sub definition {
my $class = shift;
my $session = shift;
my $definition = shift;
my $i18n = WebGUI::International->new($session, 'Asset_Photo');
tie my %properties, 'Tie::IxHash', (
exifData => {
defaultValue => undef,
},
location => {
defaultValue => undef,
},
);
push @{$definition}, {
assetName => $i18n->get('assetName'),
autoGenerateForms => 0,
icon => 'photo.gif',
tableName => 'Photo',
className => 'WebGUI::Asset::File::GalleryFile::Photo',
properties => \%properties,
};
return $class->SUPER::definition($session, $definition);
}
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
=head2 applyConstraints ( options ) =head2 applyConstraints ( options )
@ -113,18 +91,18 @@ sub applyConstraints {
my $gallery = $self->getGallery; my $gallery = $self->getGallery;
# Update the asset's size and make a thumbnail # Update the asset's size and make a thumbnail
my $maxImageSize = $gallery->get("imageViewSize") my $maxImageSize = $gallery->imageViewSize
|| $self->session->setting->get("maxImageSize"); || $self->session->setting->get("maxImageSize");
my $parameters = $self->get("parameters"); my $parameters = $self->parameters;
my $storage = $self->getStorageLocation; my $storage = $self->getStorageLocation;
my $file = $self->get("filename"); my $file = $self->filename;
# Make resolutions before fixing image, so that we can get higher quality # Make resolutions before fixing image, so that we can get higher quality
# resolutions # resolutions
$self->makeResolutions; $self->makeResolutions;
# adjust density before size, so that the dimensions won't change # adjust density before size, so that the dimensions won't change
$storage->resize( $file, undef, undef, $gallery->get( 'imageDensity' ) ); $storage->resize( $file, undef, undef, $gallery->imageDensity );
$storage->adjustMaxImageSize($file, $maxImageSize); $storage->adjustMaxImageSize($file, $maxImageSize);
$self->generateThumbnail; $self->generateThumbnail;
@ -144,8 +122,8 @@ Generates a thumbnail for this image.
sub generateThumbnail { sub generateThumbnail {
my $self = shift; my $self = shift;
$self->getStorageLocation->generateThumbnail( $self->getStorageLocation->generateThumbnail(
$self->get("filename"), $self->filename,
$self->getGallery->get("imageThumbnailSize"), $self->getGallery->imageThumbnailSize,
); );
return; return;
} }
@ -187,9 +165,9 @@ sub getEditFormUploadControl {
my $i18n = WebGUI::International->new($session, 'Asset_File'); my $i18n = WebGUI::International->new($session, 'Asset_File');
my $html = ''; my $html = '';
if ($self->get("filename") ne "") { if ($self->filename ne "") {
$html .= WebGUI::Form::readOnly( $session, { $html .= WebGUI::Form::readOnly( $session, {
value => '<p style="display:inline;vertical-align:middle;"><a href="'.$self->getFileUrl.'"><img src="'.$self->getThumbnailUrl.'" alt="'.$self->get("filename").'" style="border-style:none;vertical-align:middle;" /> '.$self->get("filename").'</a></p>' value => '<p style="display:inline;vertical-align:middle;"><a href="'.$self->getFileUrl.'"><img src="'.$self->getThumbnailUrl.'" alt="'.$self->filename.'" style="border-style:none;vertical-align:middle;" /> '.$self->filename.'</a></p>'
}); });
} }
@ -215,14 +193,14 @@ Gets a hash reference of Exif data about this Photo.
sub getExifData { sub getExifData {
my $self = shift; my $self = shift;
return unless $self->get('exifData'); return unless $self->exifData;
# Our processing and eliminating of bad / unparsable keys # Our processing and eliminating of bad / unparsable keys
# isn't perfect, so handle errors gracefully # isn't perfect, so handle errors gracefully
my $exif = eval { from_json( $self->get('exifData') ) }; my $exif = eval { from_json( $self->exifData ) };
if ( $@ ) { if ( $@ ) {
$self->session->errorHandler->warn( $self->session->errorHandler->warn(
"Could not parse JSON data for EXIF in Photo '" . $self->get('title') "Could not parse JSON data for EXIF in Photo '" . $self->title
. "' (" . $self->getId . "): " . $@ . "' (" . $self->getId . "): " . $@
); );
return; return;
@ -245,7 +223,7 @@ sub getResolutions {
my $storage = $self->getStorageLocation; my $storage = $self->getStorageLocation;
# Return a list not including the web view image. # Return a list not including the web view image.
return [ sort { $a <=> $b } grep { $_ ne $self->get("filename") } @{ $storage->getFiles } ]; return [ sort { $a <=> $b } grep { $_ ne $self->filename } @{ $storage->getFiles } ];
} }
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
@ -310,7 +288,7 @@ Get the URL to the thumbnail for this Photo.
sub getThumbnailUrl { sub getThumbnailUrl {
my $self = shift; my $self = shift;
return $self->getStorageLocation->getThumbnailUrl( return $self->getStorageLocation->getThumbnailUrl(
$self->get("filename") $self->filename
); );
} }
@ -336,7 +314,7 @@ sub makeResolutions {
$resolutions ||= $self->getGallery->getImageResolutions; $resolutions ||= $self->getGallery->getImageResolutions;
my $storage = $self->getStorageLocation; my $storage = $self->getStorageLocation;
$self->session->errorHandler->info(" Making resolutions for '" . $self->get("filename") . q{'}); $self->session->errorHandler->info(" Making resolutions for '" . $self->filename . q{'});
for my $res ( @$resolutions ) { for my $res ( @$resolutions ) {
# carp if resolution is bad # carp if resolution is bad
@ -345,8 +323,8 @@ sub makeResolutions {
next; next;
} }
my $newFilename = $res . ".jpg"; my $newFilename = $res . ".jpg";
$storage->copyFile( $self->get("filename"), $newFilename ); $storage->copyFile( $self->filename, $newFilename );
$storage->resize( $newFilename, $res, undef, $self->getGallery->get( 'imageDensity' ) ); $storage->resize( $newFilename, $res, undef, $self->getGallery->imageDensity );
} }
} }
@ -371,7 +349,7 @@ sub processPropertiesFromFormPost {
### Passes all checks ### Passes all checks
# If no title was given, make it the file name # If no title was given, make it the file name
if ( !$form->get('title') ) { if ( !$form->get('title') ) {
my $title = $self->get('filename'); my $title = $self->filename;
$title =~ s/\.[^.]*$//; $title =~ s/\.[^.]*$//;
$title =~ tr/-/ /; # De-mangle the spaces at the expense of the dashes $title =~ tr/-/ /; # De-mangle the spaces at the expense of the dashes
$self->update( { $self->update( {
@ -382,7 +360,7 @@ sub processPropertiesFromFormPost {
# If this is a new Photo, change some other things too # If this is a new Photo, change some other things too
if ( $form->get('assetId') eq "new" ) { if ( $form->get('assetId') eq "new" ) {
$self->update( { $self->update( {
url => $self->session->url->urlize( join "/", $self->getParent->get('url'), $title ), url => $self->session->url->urlize( join "/", $self->getParent->url, $title ),
} ); } );
} }
} }
@ -418,7 +396,7 @@ sub updateExifDataFromFile {
my $exifTool = Image::ExifTool->new; my $exifTool = Image::ExifTool->new;
$exifTool->Options( PrintConv => 1 ); $exifTool->Options( PrintConv => 1 );
my $info = $exifTool->ImageInfo( $storage->getPath( $self->get('filename') ) ); my $info = $exifTool->ImageInfo( $storage->getPath( $self->filename ) );
# Sanitize Exif data by removing keys with references as values # Sanitize Exif data by removing keys with references as values
for my $key ( keys %$info ) { for my $key ( keys %$info ) {
@ -461,7 +439,7 @@ sub www_download {
return $storage->getFileContentsAsScalar( $resolution . ".jpg" ); return $storage->getFileContentsAsScalar( $resolution . ".jpg" );
} }
else { else {
return $storage->getFileContentsAsScalar( $self->get("filename") ); return $storage->getFileContentsAsScalar( $self->filename );
} }
} }
@ -524,7 +502,7 @@ sub www_edit {
}) })
. WebGUI::Form::hidden( $session, { . WebGUI::Form::hidden( $session, {
name => 'ownerUserId', name => 'ownerUserId',
value => $self->get('ownerUserId'), value => $self->ownerUserId,
}) })
; ;
} }
@ -545,7 +523,7 @@ sub www_edit {
$var->{ form_title } $var->{ form_title }
= WebGUI::Form::Text( $session, { = WebGUI::Form::Text( $session, {
name => "title", name => "title",
value => ( $form->get("title") || $self->get("title") ), value => ( $form->get("title") || $self->title ),
}); });
$self->getGallery; $self->getGallery;
@ -553,8 +531,8 @@ sub www_edit {
$var->{ form_synopsis } $var->{ form_synopsis }
= WebGUI::Form::HTMLArea( $session, { = WebGUI::Form::HTMLArea( $session, {
name => "synopsis", name => "synopsis",
value => ( $form->get("synopsis") || $self->get("synopsis") ), value => ( $form->get("synopsis") || $self->synopsis ),
richEditId => $self->getGallery->get("richEditIdFile"), richEditId => $self->getGallery->richEditIdFile,
}); });
$var->{ form_photo } = $self->getEditFormUploadControl; $var->{ form_photo } = $self->getEditFormUploadControl;
@ -562,19 +540,19 @@ sub www_edit {
$var->{ form_keywords } $var->{ form_keywords }
= WebGUI::Form::Text( $session, { = WebGUI::Form::Text( $session, {
name => "keywords", name => "keywords",
value => ( $form->get("keywords") || $self->get("keywords") ), value => ( $form->get("keywords") || $self->keywords ),
}); });
$var->{ form_location } $var->{ form_location }
= WebGUI::Form::Text( $session, { = WebGUI::Form::Text( $session, {
name => "location", name => "location",
value => ( $form->get("location") || $self->get("location") ), value => ( $form->get("location") || $self->location ),
}); });
$var->{ form_friendsOnly } $var->{ form_friendsOnly }
= WebGUI::Form::yesNo( $session, { = WebGUI::Form::yesNo( $session, {
name => "friendsOnly", name => "friendsOnly",
value => ( $form->get("friendsOnly") || $self->get("friendsOnly") ), value => ( $form->get("friendsOnly") || $self->friendsOnly ),
defaultValue => undef, defaultValue => undef,
}); });