diff --git a/lib/WebGUI/Asset/File/Image.pm b/lib/WebGUI/Asset/File/Image.pm index 1346bd2cb..a4eeef916 100644 --- a/lib/WebGUI/Asset/File/Image.pm +++ b/lib/WebGUI/Asset/File/Image.pm @@ -189,6 +189,10 @@ override getHelpers => sub { className => 'WebGUI::AssetHelper::Image::Rotate', label => 'Rotate Image', }; + $helpers->{crop} = { + className => 'WebGUI::AssetHelper::Image::Crop', + label => 'Crop Image', + }; return $helpers; }; @@ -295,7 +299,6 @@ override setFile => sub { # if ($self->filename) { # my $ac = $self->getAdminConsole; # These are asset helpers now, not functions -# $ac->addSubmenuItem($self->getUrl('func=crop'), $i18n->get("crop image")); # $ac->addSubmenuItem($self->getUrl('func=annotate'), $i18n->get("annotate image")); # } # my $tabform = $self->getEditForm; @@ -526,126 +529,5 @@ sub annotate_js { return($crop_js, $domMe); } -#------------------------------------------------------------------- - -=head2 www_crop - -Display a form that allows the user to Crop their images. Also does the -cropping if any of the C, C, C or C form -variables are true. - -Returns the user to the cropping form. - -=cut - -sub www_crop { - 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("Width") || $session->form->process("Height") - || $session->form->process("Top") || $session->form->process("Left")) { - my $tag = WebGUI::VersionTag->getWorking( $session ); - my $newSelf = $self->addRevision({ tagId => $tag->getId, status => "pending" }); - $newSelf->setVersionLock; - delete $newSelf->{_storageLocation}; - $newSelf->getStorageLocation->crop( - $newSelf->filename, - $session->form->process("Width"), - $session->form->process("Height"), - $session->form->process("Top"), - $session->form->process("Left") - ); - $self = $newSelf; - $self->generateThumbnail; - WebGUI::VersionTag->autoCommitWorkingIfEnabled($session, { allowComments => 0 }); - } - - my $filename = $self->filename; - - ##YUI specific datatable CSS - my ($style, $url) = $session->quick(qw(style url)); - - my $crop_js = qq( - - ); - - $style->setCss($url->extras('yui/build/resize/assets/skins/sam/resize.css')); - $style->setCss($url->extras('yui/build/fonts/fonts-min.css')); - $style->setCss($url->extras('yui/build/imagecropper/assets/skins/sam/imagecropper.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/imagecropper/imagecropper-min.js')); - - 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=>"degree", - -value=>"0" - ); - $f->addField( "hidden", - -name=>"func", - -value=>"crop" - ); - my ($x, $y) = $self->getStorageLocation->getSizeInPixels($filename); - $f->addField( "integer", - -label=>$i18n->get('width'), - -hoverHelp=>$i18n->get('new width description'), - -name=>"Width", - -value=>$x, - ); - $f->addField( "integer", - -label=>$i18n->get('height'), - -hoverHelp=>$i18n->get('new height description'), - -name=>"Height", - -value=>$y, - ); - $f->addField( "integer", - -label=>$i18n->get('top'), - -hoverHelp=>$i18n->get('new width description'), - -name=>"Top", - -value=>$x, - ); - $f->addField( "integer", - -label=>$i18n->get('left'), - -hoverHelp=>$i18n->get('new height description'), - -name=>"Left", - -value=>$y, - ); - $f->addField( "submit", name => "submit" ); - - my $image = '
'.$filename.'
'.$crop_js; - - return $self->getAdminConsole->render($f->toHtml.$image,$i18n->get("crop image")); -} - __PACKAGE__->meta->make_immutable; 1; diff --git a/lib/WebGUI/AssetHelper/Image/Crop.pm b/lib/WebGUI/AssetHelper/Image/Crop.pm new file mode 100644 index 000000000..90b21f8af --- /dev/null +++ b/lib/WebGUI/AssetHelper/Image/Crop.pm @@ -0,0 +1,189 @@ +package WebGUI::AssetHelper::Image::Crop; + +use strict; +use warnings; + +use Moose; +extends 'WebGUI::AssetHelper'; + +#------------------------------------------------------------------- + +=head2 process ( ) + +Open a dialog to crop 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('crop') }; +} + +#------------------------------------------------------------------- + +=head2 www_crop + +Displays a form for the user to crop this image. + +=cut + +sub www_crop { + 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 $filename = $asset->filename; + + ##YUI specific datatable CSS + my ( $style, $url ) = $session->quick(qw(style url)); + + my $crop_js = qq( + + ); + + $style->setCss( $url->extras('yui/build/resize/assets/skins/sam/resize.css') ); + $style->setCss( $url->extras('yui/build/fonts/fonts-min.css') ); + $style->setCss( $url->extras('yui/build/imagecropper/assets/skins/sam/imagecropper.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/imagecropper/imagecropper-min.js') ); + + my $i18n = WebGUI::International->new( $session, "Asset_Image" ); + my $f = $self->getForm( 'cropSave' ); + $f->addField( + "hidden", + -name => "degree", + -value => "0" + ); + $f->addField( + "hidden", + -name => "func", + -value => "crop" + ); + my ( $x, $y ) = $asset->getStorageLocation->getSizeInPixels($filename); + $f->addField( + "integer", + -label => $i18n->get('width'), + -hoverHelp => $i18n->get('new width description'), + -name => "Width", + -value => $x, + ); + $f->addField( + "integer", + -label => $i18n->get('height'), + -hoverHelp => $i18n->get('new height description'), + -name => "Height", + -value => $y, + ); + $f->addField( + "integer", + -label => $i18n->get('top'), + -hoverHelp => $i18n->get('new width description'), + -name => "Top", + -value => $x, + ); + $f->addField( + "integer", + -label => $i18n->get('left'), + -hoverHelp => $i18n->get('new height description'), + -name => "Left", + -value => $y, + ); + $f->addField( "submit", name => "submit" ); + + my $image + = '
'
+        . $filename
+        . '
' + . $crop_js; + + my $output = '

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

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