From b84fd2adaf877c4874f8ade2d9a8b4a2168b0fc8 Mon Sep 17 00:00:00 2001 From: Doug Bell Date: Fri, 25 Mar 2011 21:53:31 -0500 Subject: [PATCH] change image resize to AssetHelper --- lib/WebGUI/Asset/File/Image.pm | 170 ++++++------------------ lib/WebGUI/AssetHelper/Image/Resize.pm | 171 +++++++++++++++++++++++++ 2 files changed, 212 insertions(+), 129 deletions(-) create mode 100644 lib/WebGUI/AssetHelper/Image/Resize.pm diff --git a/lib/WebGUI/Asset/File/Image.pm b/lib/WebGUI/Asset/File/Image.pm index 314f472d5..ee2ec8065 100644 --- a/lib/WebGUI/Asset/File/Image.pm +++ b/lib/WebGUI/Asset/File/Image.pm @@ -171,6 +171,26 @@ override getEditForm => sub { #------------------------------------------------------------------- +=head2 getHelpers ( ) + +Add the image helpers + +=cut + +override getHelpers => sub { + my ( $self ) = @_; + + my $helpers = super(); + $helpers->{resize} = { + className => 'WebGUI::AssetHelper::Image::Resize', + label => 'Resize Image', + }; + + return $helpers; +}; + +#------------------------------------------------------------------- + =head2 getThumbnailUrl Returns the URL to the thumbnail of the image stored in the Asset. @@ -255,31 +275,30 @@ override setFile => sub { #------------------------------------------------------------------- -=head2 www_edit +#=head2 www_edit -Override the master class to add image editing controls to the edit screen. -Also adds the Image template form variable. +#Override the master class to add image editing controls to the edit screen. +#Also adds the Image template form variable. -=cut +#=cut -sub www_edit { - my $self = shift; - my $session = $self->session; - return $session->privilege->insufficient() unless $self->canEdit; - return $session->privilege->locked() unless $self->canEditIfLocked; - my $i18n = WebGUI::International->new($session, 'Asset_Image'); - if ($self->filename) { - my $ac = $self->getAdminConsole; - # These are asset helpers now, not functions - $ac->addSubmenuItem($self->getUrl('func=resize'), $i18n->get("resize image")); - $ac->addSubmenuItem($self->getUrl('func=rotate'), $i18n->get("rotate image")); - $ac->addSubmenuItem($self->getUrl('func=crop'), $i18n->get("crop image")); - $ac->addSubmenuItem($self->getUrl('func=annotate'), $i18n->get("annotate image")); - $ac->addSubmenuItem($self->getUrl('func=undo'), $i18n->get("undo image")); - } - my $tabform = $self->getEditForm; - return $self->getAdminConsole->render($tabform->toHtml,$i18n->get("edit image")); -} +#sub www_edit { +# my $self = shift; +# my $session = $self->session; +# return $session->privilege->insufficient() unless $self->canEdit; +# return $session->privilege->locked() unless $self->canEditIfLocked; +# my $i18n = WebGUI::International->new($session, 'Asset_Image'); +# if ($self->filename) { +# my $ac = $self->getAdminConsole; +# These are asset helpers now, not functions +# $ac->addSubmenuItem($self->getUrl('func=rotate'), $i18n->get("rotate image")); +# $ac->addSubmenuItem($self->getUrl('func=crop'), $i18n->get("crop image")); +# $ac->addSubmenuItem($self->getUrl('func=annotate'), $i18n->get("annotate image")); +# $ac->addSubmenuItem($self->getUrl('func=undo'), $i18n->get("undo image")); +# } +# my $tabform = $self->getEditForm; +# return $self->getAdminConsole->render($tabform->toHtml,$i18n->get("edit image")); +#} #------------------------------------------------------------------- @@ -587,113 +606,6 @@ sub www_rotate { #------------------------------------------------------------------- -=head2 www_resize - -Displays a form for the user to resize this image. If either of the C or -C form variables are true, also does the resizing. - -Returns the user to the resize form. - -=cut - -sub www_resize { - my $self = shift; - my $session = $self->session; - return $session->privilege->insufficient() unless $self->canEdit; - return $session->privilege->locked() unless $self->canEditIfLocked; - if ($session->form->process("newWidth") || $session->form->process("newHeight")) { - my $tag = WebGUI::VersionTag->getWorking( $session ); - my $newSelf = $self->addRevision({ tagId => $tag->getId, status => "pending" }); - $newSelf->setVersionLock; - delete $newSelf->{_storageLocation}; - $newSelf->getStorageLocation->resize($newSelf->filename,$session->form->process("newWidth"),$session->form->process("newHeight")); - $newSelf->setSize($newSelf->getStorageLocation->getFileSize($newSelf->filename)); - $self = $newSelf; - $self->generateThumbnail; - WebGUI::VersionTag->autoCommitWorkingIfEnabled($session, { allowComments => 0 }); - } - - my ($x, $y) = $self->getStorageLocation->getSizeInPixels($self->filename); - - ##YUI specific datatable CSS - my ($style, $url) = $session->quick(qw(style url)); - - $style->setCss($url->extras('yui/build/fonts/fonts-min.css')); - $style->setCss($url->extras('yui/build/resize/assets/skins/sam/resize.css')); - $style->setScript($url->extras('yui/build/yahoo-dom-event/yahoo-dom-event.js')); - $style->setScript($url->extras('yui/build/element/element-min.js')); - $style->setScript($url->extras('yui/build/dragdrop/dragdrop-min.js')); - $style->setScript($url->extras('yui/build/resize/resize-min.js')); - $style->setScript($url->extras('yui/build/animation/animation-min.js')); - - my $resize_js = qq( - - ); - - my $i18n = WebGUI::International->new($session,"Asset_Image"); - $self->getAdminConsole->addSubmenuItem($self->getUrl('func=edit'),$i18n->get("edit image")); - my $f = WebGUI::FormBuilder->new($session); - $f->addField( "hidden", - -name=>"func", - -value=>"resize" - ); - $f->addField( "readOnly", - -label=>$i18n->get('image size'), - -hoverHelp=>$i18n->get('image size description'), - -value=>$x.' x '.$y, - ); - $f->addField( "integer", - -label=>$i18n->get('new width'), - -hoverHelp=>$i18n->get('new width description'), - -name=>"newWidth", - -value=>$x, - ); - $f->addField( "integer", - -label=>$i18n->get('new height'), - -hoverHelp=>$i18n->get('new height description'), - -name=>"newHeight", - -value=>$y, - ); - $f->addField( "submit", name => "submit" ); - my $image = '
'.$self->filename.'
'.$resize_js; - return $self->getAdminConsole->render($f->toHtml.$image,$i18n->get("resize image")); -} - -#------------------------------------------------------------------- - =head2 www_crop Display a form that allows the user to Crop their images. Also does the diff --git a/lib/WebGUI/AssetHelper/Image/Resize.pm b/lib/WebGUI/AssetHelper/Image/Resize.pm new file mode 100644 index 000000000..85a6bc4ce --- /dev/null +++ b/lib/WebGUI/AssetHelper/Image/Resize.pm @@ -0,0 +1,171 @@ +package WebGUI::AssetHelper::Image::Resize; + +use base 'WebGUI::AssetHelper'; + +#------------------------------------------------------------------- + +=head2 process ( ) + +Open a dialog to resize the image + +=cut + +sub process { + my ( $self ) = @_; + my $asset = $self->asset; + my $session = $self->session; + + my $i18n = WebGUI::International->new($session, 'WebGUI'); + if (! $asset->canEdit) { + return { error => $i18n->get('38'), }; + } + elsif ( ! $asset->canEditIfLocked ) { + return { error => $i18n->get('asset locked') }; + } + + return { + openDialog => $self->getUrl( 'resize' ) + }; +} + +#------------------------------------------------------------------- + +=head2 www_resize + +Displays a form for the user to resize this image. + +=cut + +sub www_resize { + my ( $self ) = @_; + my $asset = $self->asset; + my $session = $self->session; + return $session->privilege->insufficient() unless $asset->canEdit; + return $session->privilege->locked() unless $asset->canEditIfLocked; + + my ( $x, $y ) = $asset->getStorageLocation->getSizeInPixels( $asset->filename ); + + ##YUI specific datatable CSS + my ( $style, $url ) = $session->quick(qw(style url)); + + $style->setCss( $url->extras('yui/build/fonts/fonts-min.css') ); + $style->setCss( $url->extras('yui/build/resize/assets/skins/sam/resize.css') ); + $style->setScript( $url->extras('yui/build/yahoo-dom-event/yahoo-dom-event.js') ); + $style->setScript( $url->extras('yui/build/element/element-min.js') ); + $style->setScript( $url->extras('yui/build/dragdrop/dragdrop-min.js') ); + $style->setScript( $url->extras('yui/build/resize/resize-min.js') ); + $style->setScript( $url->extras('yui/build/animation/animation-min.js') ); + + my $resize_js = qq( + + ); + + my $i18n = WebGUI::International->new( $session, "Asset_Image" ); + my $f = $self->getForm( 'resizeSave' ); + $f->addField( + "readOnly", + label => $i18n->get('image size'), + hoverHelp => $i18n->get('image size description'), + value => $x . ' x ' . $y, + ); + $f->addField( + "integer", + label => $i18n->get('new width'), + hoverHelp => $i18n->get('new width description'), + name => "newWidth", + value => $x, + ); + $f->addField( + "integer", + label => $i18n->get('new height'), + hoverHelp => $i18n->get('new height description'), + name => "newHeight", + value => $y, + ); + $f->addField( "submit", name => "submit" ); + my $image + = '
'
+        . $asset->filename
+        . '
' + . $resize_js; + my $output = '

' . $i18n->get('resize image') . '

' . $f->toHtml . $image; + return $style->process( $output, "PBtmplBlankStyle000001" ); +} ## end sub www_resize + +#---------------------------------------------------------------------------- + +=head2 www_resizeSave ( ) + +Resize the image to the user's specifications and close the dialog + +=cut + +sub www_resizeSave { + my ( $self ) = @_; + my $asset = $self->asset; + my $session = $self->session; + return $session->privilege->insufficient() unless $asset->canEdit; + return $session->privilege->locked() unless $asset->canEditIfLocked; + my $tag = WebGUI::VersionTag->getWorking($session); + $asset = $asset->addRevision( { tagId => $tag->getId, status => "pending" } ); + $asset->setVersionLock; + delete $asset->{_storageLocation}; + $asset->getStorageLocation->resize( + $asset->filename, + $session->form->process("newWidth"), + $session->form->process("newHeight") + ); + $asset->setSize( $asset->getStorageLocation->getFileSize( $asset->filename ) ); + $asset->generateThumbnail; + WebGUI::VersionTag->autoCommitWorkingIfEnabled( $session, { allowComments => 0 } ); + # We're in admin mode, close the dialog + my $text = ''; + + $self->session->output->print( $text, 1); # skipMacros +} + +1;