This file is part of the EditImage Mediawiki Extension.
EditImage is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation, either version 3 of the License, or (at
your option) any later version.
Foobar is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with Foobar. If not, see . */
function efRunEditImage( $par ) {
EditImage::run( $par );
}
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";
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->execute();
}
class EditImage extends SpecialPage {
function EditImage() {
SpecialPage::SpecialPage("EditImage", '', true, 'efRunEditImage');
wfLoadExtensionMessages('EditImage');
}
function run( $par ) {
global $wgRequest, $wgOut;
global $wgContLang;
global $wgUser;
# globals for javascript
global $wgJsMimeType, $wgScriptPath;
# 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!");
} else {
# see if we're passed editing information
if ($wgRequest->wasPosted()) {
$x1 = $wgRequest->getInt(x1);
$x2 = $wgRequest->getInt(x2);
$y1 = $wgRequest->getInt(y1);
$y2 = $wgRequest->getInt(y2);
$resized_fn = resizeImage($file->getFullPath(), $x1, $y1, $x2, $y2);
uploadNewFile($file, $resized_fn);
# delete the file if it still exists
if (file_exists($resized_fn)) { unlink($resized_fn); }
} else {
if ( $file && $file->exists() ) {
# add the javascript
$wgOut->addScript( "\n");
$wgOut->addScript( "\n");
$wgOut->addScript( "\n");
$wgOut->addScript( "\n");
$instructions = wfMsg('editimage-instructions');
$crop_text = wfMsg('cropimage');
$wgOut->addHTML("
{$instructions}
\n");
# add image
$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("");
} else {
$wgOut->setStatusCode( 404 );
}
}
}
}
}
?>