From e8d600aa2953febad60133481d01db6e5287ab4d Mon Sep 17 00:00:00 2001 From: Doug Bell Date: Fri, 25 Mar 2011 22:23:13 -0500 Subject: [PATCH] migrate image rotate to AssetHelper --- lib/WebGUI/Asset/File/Image.pm | 66 +------------- lib/WebGUI/AssetHelper/Image/Rotate.pm | 120 +++++++++++++++++++++++++ 2 files changed, 124 insertions(+), 62 deletions(-) create mode 100644 lib/WebGUI/AssetHelper/Image/Rotate.pm diff --git a/lib/WebGUI/Asset/File/Image.pm b/lib/WebGUI/Asset/File/Image.pm index ee2ec8065..c972c4e1d 100644 --- a/lib/WebGUI/Asset/File/Image.pm +++ b/lib/WebGUI/Asset/File/Image.pm @@ -185,6 +185,10 @@ override getHelpers => sub { className => 'WebGUI::AssetHelper::Image::Resize', label => 'Resize Image', }; + $helpers->{rotate} = { + className => 'WebGUI::AssetHelper::Image::Rotate', + label => 'Rotate Image', + }; return $helpers; }; @@ -291,7 +295,6 @@ override setFile => sub { # 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")); @@ -545,67 +548,6 @@ sub annotate_js { #------------------------------------------------------------------- -=head2 www_rotate - -Displays a form to the user to rotate their image. If the C form variable -is true, does the rotation as well. - -Returns the user to the roate form. - -=cut - -sub www_rotate { - my $self = shift; - my $session = $self->session; - return $session->privilege->insufficient() unless $self->canEdit; - return $session->privilege->locked() unless $self->canEditIfLocked; - if (defined $session->form->process("Rotate")) { - my $tag = WebGUI::VersionTag->getWorking( $session ); - my $newSelf = $self->addRevision({ tagId => $tag->getId, status => "pending" }); - $newSelf->setVersionLock; - delete $newSelf->{_storageLocation}; - $newSelf->getStorageLocation->rotate($newSelf->filename,$session->form->process("Rotate")); - $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)); - - my $img_name = $self->getStorageLocation->getUrl($self->filename); - my $img_file = $self->filename; - my $image = '
'.$self->filename.'
'; - - 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=>"rotate" - ); - $f->addField( "button", - -value=>"Left", - -extras=>qq(onclick="var deg = document.getElementById('Rotate_formId').value; deg = parseInt(deg) + 90; document.getElementById('Rotate_formId').value = deg;"), - ); - $f->addField( "button", - -value=>"Right", - -extras=>qq(onclick="var deg = document.getElementById('Rotate_formId').value; deg = parseInt(deg) - 90; document.getElementById('Rotate_formId').value = deg;"), - ); - $f->addField( "integer", - -label=>$i18n->get('degree'), - -name=>"Rotate", - -value=>0, - ); - $f->addField( "submit", name => "submit" ); - return $self->getAdminConsole->render($f->toHtml.$image,$i18n->get("rotate 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/Rotate.pm b/lib/WebGUI/AssetHelper/Image/Rotate.pm new file mode 100644 index 000000000..177fb9837 --- /dev/null +++ b/lib/WebGUI/AssetHelper/Image/Rotate.pm @@ -0,0 +1,120 @@ +package WebGUI::AssetHelper::Image::Rotate; + +use strict; +use warnings; + +use Moose; +extends 'WebGUI::AssetHelper'; + +#------------------------------------------------------------------- + +=head2 process ( ) + +Open a dialog to rotate 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( 'rotate' ) + }; +} + +#------------------------------------------------------------------- + +=head2 www_rotate + +Displays a form for the user to rotate this image. + +=cut + +sub www_rotate { + my ( $self ) = @_; + my $asset = $self->asset; + my $session = $self->session; + return $session->privilege->insufficient() unless $asset->canEdit; + return $session->privilege->locked() unless $asset->canEditIfLocked; + + ##YUI specific datatable CSS + my ($style, $url) = $session->quick(qw(style url)); + + my $img_file = $asset->filename; + my $img_name = $asset->getStorageLocation->getUrl($img_file); + my $image = '
'.$img_name.'
'; + + my $i18n = WebGUI::International->new($session,"Asset_Image"); + my $f = $self->getForm( 'rotateSave' ); + $f->addField( "button", + value=>"Left", + extras=>qq{onclick="var deg = document.getElementById('Rotate_formId').value; deg = parseInt(deg) + 90; document.getElementById('Rotate_formId').value = deg;"}, + ); + $f->addField( "button", + value=>"Right", + extras=>qq{onclick="var deg = document.getElementById('Rotate_formId').value; deg = parseInt(deg) - 90; document.getElementById('Rotate_formId').value = deg;"}, + ); + $f->addField( "integer", + label=>$i18n->get('degree'), + name=>"Rotate", + value=>0, + ); + $f->addField( "submit", name => "submit" ); + + my $output = '

' . $i18n->get("rotate image") . '

' . $f->toHtml . $image; + return $style->process( $output, "PBtmplBlankStyle000001" ); +} ## end sub www_rotate + +#---------------------------------------------------------------------------- + +=head2 www_rotateSave ( ) + +Rotate the image to the user's specifications and close the dialog + +=cut + +sub www_rotateSave { + 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->rotate($asset->filename,$session->form->process("Rotate")); + $asset->setSize($asset->getStorageLocation->getFileSize($asset->filename)); + $asset->generateThumbnail; + WebGUI::VersionTag->autoCommitWorkingIfEnabled($session, { allowComments => 0 }); + + # We're in admin mode, close the dialog + my $helper = { + message => 'Image Rotated', + }; + my $text = ''; + + $self->session->output->print( $text, 1); # skipMacros +} + +1;