From: Date: Mon, 11 Aug 2008 19:12:00 +0000 (-0400) Subject: got functionality up and working X-Git-Url: https://projects.mako.cc/source/editimage_extension/commitdiff_plain/a551c8fbc9b821de4d8d397ac2fc96a3d64d9ff8 got functionality up and working --- diff --git a/EditImage.i18n.php b/EditImage.i18n.php index 91f3da8..f19659c 100644 --- a/EditImage.i18n.php +++ b/EditImage.i18n.php @@ -1,6 +1,7 @@ 'Edit Image' + 'editimage' => 'Edit Image', + 'cropimage' => 'Crop Image' ); ?> diff --git a/EditImage.php b/EditImage.php index e945b7f..af64e8d 100644 --- a/EditImage.php +++ b/EditImage.php @@ -15,6 +15,8 @@ $wgAutoloadClasses['EditImage'] = $dir . 'EditImage_body.php'; $wgExtensionMessagesFiles['EditImage'] = $dir . 'EditImage.i18n.php'; $wgSpecialPages['EditImage'] = 'EditImage'; # $wgHooks['LanguageGetSpecialPageAliases'][] = 'EditImageLocalizedPageName'; +$wgHooks['SkinTemplateContentActions'][] = 'wfAddactionContentHook'; +#$wgHooks['UnknownAction'][] = 'wfAddactActionHook'; function myExtensionLocalizedPageName(&$specialPageArray, $code) { # The localized title of the special page is among the messages of the extension: @@ -38,4 +40,23 @@ $wgExtensionCredits['specialpage'][] = array( +function wfAddActionContentHook( &$content_actions ) { + global $wgRequest, $wgRequest, $wgTitle; + + $action = $wgRequest->getText( 'action' ); + if ( $wgTitle->getNamespace() == NS_IMAGE ) { + + $editimage_page = SpecialPage::getTitleFor( 'EditImage');; + + $content_actions['editimage'] = array( + 'class' => $action == 'editimage' ? 'selected' : false, + 'text' => "Crop Image", // the wfMsg was not working... + 'href' => $editimage_page->getLocalURL("image={$wgTitle->getPrefixedURL()}") + ); + } + + return true; +} + + ?> diff --git a/EditImage_body.php b/EditImage_body.php index 58b4794..e08de0b 100644 --- a/EditImage_body.php +++ b/EditImage_body.php @@ -3,7 +3,51 @@ function efRunEditImage( $par ) { EditImage::run( $par ); } -function resizeImage ( $x1, $y1, $x2, $y2 ) { +function resizeImage ( $srcpath, $x1, $y1, $x2, $y2) { + global $wgUseImageMagick, $wgImageMagickConvertCommand; + global $wgCustomConvertCommand; + global $wgTmpDirectory; + + # generate width and height + $w = abs($x2 - $x1); + $h = abs($y2 - $y1); + + # create temporary destination file location + $dstpath = tempnam($wgTmpDirectory, "EditImage"); + + # specify white background color, will be used for transparent images + # in internet explorer/windows instead of default black. + $cmd = wfescapeshellarg($wgImageMagickConvertCommand) . + " -background white ". + wfescapeshellarg($srcpath) . + // coalesce is needed to scale animated gifs properly (bug 1017). + ' -coalesce ' . + " -crop {$w}x{$h}+$x1+$y1! " . + wfescapeshellarg($dstpath) . " 2>&1"; + global $wgOut; + $wgOut->addHTML($cmd); + wfDebug( __METHOD__.": running ImageMagick: $cmd\n"); + wfProfileIn( 'convert' ); + $err = wfShellExec( $cmd, $retval ); + wfProfileOut( 'convert' ); + return($dstpath); +} + +function uploadNewFile ($old_file, $new_filename) { + global $wgRequest; + $form = new UploadForm($wgRequest); + + $form->mTempPath = $new_filename; + $form->mSrcName = $old_file->getName(); + $form->mFileSize = filesize($new_filename); + $form->mSessionKey = false; + $form->mStashed = false; + $form->mUploadClicked = true; + //$form->mReUpload = true; + + // PHP won't auto-cleanup the file + $form->mRemoveTempFile = file_exists( $local_file); + $form->execute(); } class EditImage extends SpecialPage { @@ -15,6 +59,8 @@ class EditImage extends SpecialPage { function run( $par ) { global $wgRequest, $wgOut; + global $wgContLang; + global $wgUser; # add the javascript global $wgJsMimeType, $wgScriptPath ; $wgOut->addScript( "\n"); @@ -25,6 +71,7 @@ class EditImage extends SpecialPage { # try to find the image that the user entered $image = $wgRequest->getText('image'); $title = Title::newFromText( $image, NS_IMAGE ); + $file = wfFindFile( $title ); if ( ! $title instanceof Title || $title->getNamespace() != NS_IMAGE ) { $wgOut->addWikiText("Sorry, can't find that image!"); @@ -33,22 +80,32 @@ class EditImage extends SpecialPage { if ($wgRequest->wasPosted()) { $x1 = $wgRequest->getInt(x1); $x2 = $wgRequest->getInt(x2); - $y1 = $wgRequest->getInt(x1); + $y1 = $wgRequest->getInt(y1); $y2 = $wgRequest->getInt(y2); - resizeImage($x1, $y1, $x2, $y2); - $wgOut->addHTML("x1: $x1
x2: $x2
"); + $resized_fn = resizeImage($file->getFullPath(), $x1, $y1, $x2, $y2); + uploadNewFile($file, $resized_fn); } else { - $file = wfFindFile( $title ); if ( $file && $file->exists() ) { $wgOut->addHTML("

Use your mouse to select the new area on the image below. When you are done, press crop.

\n"); # add image - $wgOut->addHTML("
getUrl()}\" alt=\"source image\" id=\"sourceImage\" width=\"500\" height=\"333\" />
\n"); + $wgOut->addHTML("
getUrl()}\" alt=\"source image\" id=\"sourceImage\" />
\n"); # add bottom of the template + $encComment = htmlspecialchars($wgRequest->getText('wpUploadDescription')); + $align1 = $wgContLang->isRTL() ? 'left' : 'right'; + $align2 = $wgContLang->isRTL() ? 'right' : 'left'; + $cols = intval($wgUser->getOption('cols')); + if( $wgUser->getOption( 'editwidth' ) ) { + $width = " style=\"width:100%\""; + } else { + $width = ''; + } + $summary = wfMsgExt( 'fileuploadsummary', 'parseinline' ); + $wgOut->addHTML("
@@ -57,7 +114,14 @@ class EditImage extends SpecialPage { -

+ + + +
+ +
+ +

"); } else {