/** * This functions handle the third step of the WMU, image insertion * * @return bool|String */ function insertImage() { global $wgRequest, $wgUser, $wgContLang; $type = $wgRequest->getVal('type'); $name = $wgRequest->getVal('name'); $mwname = $wgRequest->getVal('mwname'); $tempid = $wgRequest->getVal('tempid'); $gallery = $wgRequest->getVal('gallery', ''); $title_main = urldecode($wgRequest->getVal('article', '')); $ns = $wgRequest->getVal('ns', ''); $link = urldecode($wgRequest->getVal('link', '')); // Are we in the ck editor? $ck = $wgRequest->getVal('ck'); $extraId = $wgRequest->getVal('extraId'); $newFile = true; $file = null; if ($name !== NULL) { $name = urldecode($name); if ($name == '') { header('X-screen-type: error'); return WfMsg('wmu-warn3'); } else { $name = preg_replace("/[^" . Title::legalChars() . "]|:/", '-', $name); // did they give no extension at all when they changed the name? $ext = explode('.', $name); array_shift($ext); if (count($ext)) { $finalExt = $ext[count($ext) - 1]; } else { $finalExt = ''; } if ('' == $finalExt) { header('X-screen-type: error'); return wfMsg('wmu-filetype-missing'); } $title = Title::makeTitleSafe(NS_IMAGE, $name); if (is_null($title)) { header('X-screen-type: error'); return wfMsg('wmu-filetype-incorrect'); } if ($title->exists()) { if ($type == 'overwrite') { $title = Title::newFromText($name, 6); // is the target protected? $permErrors = $title->getUserPermissionsErrors('edit', $wgUser); $permErrorsUpload = $title->getUserPermissionsErrors('upload', $wgUser); $permErrorsCreate = $title->exists() ? array() : $title->getUserPermissionsErrors('create', $wgUser); if ($permErrors || $permErrorsUpload || $permErrorsCreate) { header('X-screen-type: error'); return wfMsg('wmu-file-protected'); } $file_name = new LocalFile($title, RepoGroup::singleton()->getLocalRepo()); $file_mwname = new FakeLocalFile(Title::newFromText($mwname, 6), RepoGroup::singleton()->getLocalRepo()); if (!empty($extraId)) { $flickrResult = $this->getFlickrPhotoInfo($extraId); $nsid = $flickrResult['owner']['nsid']; // e.g. 49127042@N00 $username = $flickrResult['owner']['username']; // e.g. bossa67 $license = $flickrResult['license']; $caption = '{{MediaWiki:Flickr' . intval($license) . '|1=' . wfEscapeWikiText($extraId) . '|2=' . wfEscapeWikiText($nsid) . '|3=' . wfEscapeWikiText($username) . '}}'; } else { $caption = ''; } $file_name->upload($file_mwname->getPath(), '', $caption); $file_mwname->delete(''); $this->tempFileClearInfo($tempid); $newFile = false; } else { if ($type == 'existing') { $file = wfFindFile(Title::newFromText($name, 6)); if (!empty($file)) { header('X-screen-type: existing'); $props = array(); $props['file'] = $file; $props['mwname'] = $name; $props['default_caption'] = Wikia::getProps($file->getTitle()->getArticleID(), 'default_caption'); return $this->detailsPage($props); } else { header('X-screen-type: error'); return wfMsg('wmu-file-error'); } } else { header('X-screen-type: conflict'); $tmpl = new EasyTemplate(dirname(__FILE__) . '/templates/'); // extensions check list($partname, $ext) = UploadBase::splitExtensions($name); if (count($ext)) { $finalExt = $ext[count($ext) - 1]; } else { $finalExt = ''; } // for more than one "extension" if (count($ext) > 1) { for ($i = 0; $i < count($ext) - 1; $i++) { $partname .= '.' . $ext[$i]; } } $tmpl->set_vars(array('partname' => $partname, 'extension' => strtolower($finalExt), 'mwname' => $mwname, 'extraId' => $extraId)); return $tmpl->render('conflict'); } } } else { // is the target protected? $permErrors = $title->getUserPermissionsErrors('edit', $wgUser); $permErrorsUpload = $title->getUserPermissionsErrors('upload', $wgUser); $permErrorsCreate = $title->exists() ? array() : $title->getUserPermissionsErrors('create', $wgUser); if ($permErrors || $permErrorsUpload || $permErrorsCreate) { header('X-screen-type: error'); return wfMsg('wmu-file-protected'); } $temp_file = new FakeLocalFile(Title::newFromText($mwname, 6), RepoGroup::singleton()->getLocalRepo()); $file = new LocalFile($title, RepoGroup::singleton()->getLocalRepo()); if (!empty($extraId)) { $flickrResult = $this->getFlickrPhotoInfo($extraId); $nsid = $flickrResult['owner']['nsid']; // e.g. 49127042@N00 $username = $flickrResult['owner']['username']; // e.g. bossa67 $license = $flickrResult['license']; $caption = '{{MediaWiki:Flickr' . intval($license) . '|1=' . wfEscapeWikiText($extraId) . '|2=' . wfEscapeWikiText($nsid) . '|3=' . wfEscapeWikiText($username) . '}}'; } else { // get the supplied license value $license = $wgRequest->getVal('ImageUploadLicense'); if ($license != '') { $caption = '== ' . wfMsgForContent('license') . " ==\n" . '{{' . $license . '}}' . "\n"; } else { $caption = ""; } } $file->upload($temp_file->getPath(), '', $caption); $temp_file->delete(''); $this->tempFileClearInfo($tempid); } if ($wgUser->getGLobalPreference('watchdefault') || $newFile && $wgUser->getGlobalPreference('watchcreations')) { $wgUser->addWatch($title); } $db =& wfGetDB(DB_MASTER); $db->commit(); } } else { $title = Title::newFromText($mwname, 6); } if (is_null($file)) { $file = wfFindFile($title); } if (!is_object($file)) { header('X-screen-type: error'); return wfMessage('wmu-file-not-found')->plain(); } // Test if this violates the size requirements we've been given if ($msg = $this->invalidSize($file)) { header('X-screen-type: error'); return $msg; } $ns_img = $wgContLang->getFormattedNsText(NS_IMAGE); if (-2 == $gallery && !$ck) { // this went in from the single placeholder... $name = $title->getText(); $size = $wgRequest->getVal('size'); $width = $wgRequest->getVal('width'); $layout = $wgRequest->getVal('layout'); // clear the old caption for upload $caption = $wgRequest->getVal('caption'); $slider = $wgRequest->getVal('slider'); $title_obj = Title::newFromText($title_main, $ns); $article_obj = new Article($title_obj); $text = $article_obj->getContent(); wfRunHooks('WikiaMiniUpload::fetchTextForImagePlaceholder', array(&$title_obj, &$text)); $box = $wgRequest->getVal('box', ''); $placeholder = MediaPlaceholderMatch($text, $box); $success = false; if ($placeholder) { $our_gallery = $placeholder[0]; $gallery_split = explode(':', $our_gallery); $thumb = false; $tag = $gallery_split[0] . ":" . $name; if ($size != 'full') { $tag .= '|thumb'; $thumb = true; } if (isset($width)) { $tag .= '|' . $width; } $tag .= '|' . $layout; if ($link != '') { $tag .= '|link=' . $link; } if ($caption != '') { $tag .= '|' . $caption; } $tag .= "]]"; $text = substr_replace($text, $tag, $placeholder[1], strlen($our_gallery)); // return the proper embed code with all fancies around it $embed_code = $this->generateImage($file, $name, $title_obj, $thumb, (int) str_replace('px', '', $width), $layout, $caption); $message = wfMsg('wmu-success'); Wikia::setVar('EditFromViewMode', true); $summary = wfMsg('wmu-added-from-plc'); $success = $article_obj->doEdit($text, $summary); } if ($success) { header('X-screen-type: summary'); } else { // failure signal opens js alert (BugId:4935) header('X-screen-type: error'); return; } } else { header('X-screen-type: summary'); $size = $wgRequest->getVal('size'); $width = $wgRequest->getVal('width'); $layout = $wgRequest->getVal('layout'); $caption = $wgRequest->getVal('caption'); $slider = $wgRequest->getVal('slider'); $tag = '[[' . $ns_img . ':' . $title->getDBkey(); if ($size != 'full' && ($file->getMediaType() == 'BITMAP' || $file->getMediaType() == 'DRAWING')) { $tag .= '|thumb'; if ($layout != 'right') { $tag .= '|' . $layout; } if ($slider == 'true') { $tag .= '|' . $width; } } if ($link != '' && $size == 'full') { $tag .= '|link=' . $link; } if ($caption != '') { if ($size == 'full') { $tag .= '|frame'; if ($layout != 'right') { $tag .= '|' . $layout; } } $tag .= '|' . $caption . ']]'; } else { if ($size == 'full') { $tag .= '|' . $layout; } $tag .= ']]'; } } $message = wfMsg('wmu-success'); if ($wgRequest->getVal('update_caption') == 'on') { Wikia::setProps($title->getArticleID(), array('default_caption' => $caption)); } $tmpl = new EasyTemplate(dirname(__FILE__) . '/templates/'); $tmpl->set_vars(array('tag' => $tag, 'filename' => $ns_img . ':' . $title->getDBkey(), 'message' => $message, 'code' => isset($embed_code) ? $embed_code : '')); return $tmpl->render('summary'); }
function insertFinalVideo() { global $wgRequest, $wgContLang; $id = $wgRequest->getVal('id'); $provider = $wgRequest->getVal('provider'); $name = urldecode($wgRequest->getVal('name')); $embed_code = ''; if ($provider == 'FILE') { // no need to upload, local reference $title = $oTitle = Title::newFromText($name, NS_FILE); if (empty($oTitle)) { header('X-screen-type: error'); return wfMessage('vet-name-incorrect')->plain(); } wfRunHooks('AddPremiumVideo', array($title)); } else { // needs to upload // sanitize name and init title objects $name = VideoFileUploader::sanitizeTitle($name); if ($name == '') { header('X-screen-type: error'); return wfMessage('vet-warn3')->plain(); } $nameFile = VideoFileUploader::sanitizeTitle($name); $titleFile = VideoFileUploader::getUniqueTitle($nameFile); if (empty($titleFile)) { header('X-screen-type: error'); return wfMessage('vet-name-incorrect')->plain(); } // by definition, WikiaFileHelper::useVideoHandlersExtForEmbed() == true $nameSanitized = $titleFile->getBaseText(); $title = $titleFile; $extra = 0; $metadata = array(); while ('' != $wgRequest->getVal('metadata' . $extra)) { $metadata[] = $wgRequest->getVal('metadata' . $extra); $extra++; } $parts = explode('/', $provider); $provider = $parts[1]; $oTitle = null; $status = $this->uploadVideoAsFile($provider, $id, $nameSanitized, $oTitle); if (!$status->ok) { header('X-screen-type: error'); return wfMessage('wva-thumbnail-upload-failed')->plain(); } } $description = trim(urldecode($wgRequest->getVal('description'))); // Set the video descriptions $vHelper = new VideoHandlerHelper(); $vHelper->setVideoDescription($oTitle, $description); $message = wfMessage('vet-single-success')->plain(); $ns_file = $wgContLang->getFormattedNsText($title->getNamespace()); $caption = $wgRequest->getVal('caption'); $width = $wgRequest->getVal('width'); $width = empty($width) ? 335 : $width; $layout = $wgRequest->getVal('layout'); header('X-screen-type: summary'); $tag = $ns_file . ":" . $oTitle->getText(); // all videos added via VET will be shown as thumbnails / "framed" $tag .= "|thumb"; if (!empty($layout)) { $tag .= "|{$layout}"; } if ($width != '') { $tag .= "|{$width} px"; } if ($caption != '') { $tag .= "|" . $caption; } $tag = "[[{$tag}]]"; $button_message = wfMessage('vet-return')->plain(); // Adding a video from article view page $editFromViewMode = $wgRequest->getVal('placeholder'); if ($editFromViewMode) { Wikia::setVar('EditFromViewMode', true); $article_title = $wgRequest->getVal('article'); $ns = $wgRequest->getVal('ns'); $box = $wgRequest->getVal('box'); $article_title_obj = Title::newFromText($article_title, $ns); $article_obj = new Article($article_title_obj); $text = $article_obj->getContent(); // match [[File:Placeholder|video]] $placeholder = MediaPlaceholderMatch($text, $box, true); $success = false; if ($placeholder) { $placeholder_tag = $placeholder[0]; $file = wfFindFile($title); $embed_code = $file->transform(array('width' => $width))->toHtml(); $params = array('alt' => $title->getText(), 'title' => $title->getText(), 'img-class' => 'thumbimage', 'align' => $layout, 'outerWidth' => $width, 'file' => $file, 'url' => $file->getUrl(), 'html' => $embed_code); $embed_code = F::app()->renderView('ThumbnailController', 'articleBlock', $params); // Make output match what's in a saved article if ($layout == 'center') { $embed_code = '<div class="center">' . $embed_code . '</div>'; } $summary = wfMessage('vet-added-from-placeholder')->plain(); $text = substr_replace($text, $tag, $placeholder[1], strlen($placeholder_tag)); $button_message = wfMessage('vet-placeholder-return')->plain(); $success = $article_obj->doEdit($text, $summary); } if (!$success) { header('X-screen-type: error'); return wfMessage('vet-insert-error')->plain(); } } $tmpl = new EasyTemplate(dirname(__FILE__) . '/templates/'); $tmpl->set_vars(array('tag' => $tag, 'message' => $message, 'code' => $embed_code, 'button_message' => $button_message)); return $tmpl->render('summary'); }