function ImagePlaceholderImageBeforeProduceHTML($skin, Title $title, $file, $frameParams, $handlerParams, $time, &$res)
{
    if (ImagePlaceholderIsPlaceholder($title->getText())) {
        $res = ImagePlaceholderMakePlaceholder($file, $frameParams, $handlerParams);
        return false;
    }
    return true;
}
Example #2
0
 /**
  * Parse image options text and use it to make an image
  * @param Title $title
  * @param string $options
  * @param LinkHolderArray $holders
  * @param int $wikitextIdx
  */
 function makeImage($title, $options, $holders = false)
 {
     wfProfileIn(__METHOD__);
     $wikitextIdx = RTEMarker::getDataIdx(RTEMarker::IMAGE_DATA, $options);
     // store wikitext for media placeholder rendering method
     self::$lastWikitext = RTEData::get('wikitext', $wikitextIdx);
     // call MW parser - image params will be populated
     parent::makeImage($title, $options, $holders);
     // maybe it's an image placeholder
     global $wgEnableImagePlaceholderExt;
     if (!empty($wgEnableImagePlaceholderExt)) {
         $isImagePlaceholder = ImagePlaceholderIsPlaceholder($title->getText());
         // pass rendered image placeholder
         if ($isImagePlaceholder) {
             // return HTML stored by renderMediaPlaceholder() method
             $ret = self::$mediaPlaceholder;
             wfProfileOut(__METHOD__);
             return $ret;
         }
     }
     // check that given image exists
     $image = wfFindFile($title);
     $isBrokenImage = empty($image);
     // render broken image placeholder
     if ($isBrokenImage) {
         // handle not existing images
         $ret = RTELinkerHooks::makeBrokenImageLinkObj($title, '', '', '', '', false, $wikitextIdx);
         wfProfileOut(__METHOD__);
         return $ret;
     }
     // get and merge image parameters returned by Parser::makeImage
     $params = array_merge(self::$imageParams['frame'], self::$imageParams['handler']);
     // cleanup
     if (isset($params['title'])) {
         unset($params['title']);
     }
     // generate image data
     $data = array('type' => 'image', 'wikitext' => RTEData::get('wikitext', $wikitextIdx), 'title' => $title->getDBkey());
     // try to resolve internal links in image caption (RT #90616)
     if (RTEData::resolveLinksInMediaCaption($data['wikitext'])) {
         // now resolve link markers in caption parsed to HTML
         if (!empty($holders)) {
             $holders->replace($params['caption']);
         }
         RTE::log(__METHOD__ . ': resolved internal link');
     }
     // trigger an edgecase when image caption contains double brackets markers
     if (RTEData::checkWikitextForMarkers($data['wikitext'])) {
         RTE::$edgeCases[] = 'COMPLEX.09';
     }
     // small fix: set value of thumbnail entry
     if (isset($params['thumbnail'])) {
         $params['thumbnail'] = true;
     }
     // keep caption only for thumbs and framed images
     if (!isset($params['thumbnail']) && !isset($params['framed'])) {
         $params['caption'] = '';
     }
     // get "unparsed" caption from original wikitext and store parsed one as 'captionParsed'
     if ($params['caption'] != '') {
         $wikitext = trim($data['wikitext'], '[]');
         $wikitextParts = self::explodeImageArgs($wikitext);
         // let's assume caption is the last part of image wikitext
         $originalCaption = end($wikitextParts);
         $originalCaption = htmlspecialchars_decode($originalCaption);
         // keep parsed caption and store its wikitext
         $params['captionParsed'] = $params['caption'];
         $params['caption'] = $originalCaption;
     }
     // pass link image parameter (BugId:6506)
     // this can be either link-title (internal links) or link-url (external links)
     if (isset($params['link-title']) && $params['link-title'] instanceof Title) {
         $params['link'] = $params['link-title']->getPrefixedText();
         unset($params['link-title']);
     } else {
         if (isset($params['link-url'])) {
             $params['link'] = $params['link-url'];
             unset($params['link-url']);
         }
     }
     // parameters are cleaned up - store them in image's meta data
     $data['params'] = $params;
     RTE::log(__METHOD__, $data);
     // image width
     $imageWidth = intval($image->getWidth());
     if (!empty($data['params']['width'])) {
         // width provided in wikitext
         $width = $data['params']['width'];
         // images with width provided should not be resized larger than the original file resolution (RT #41805)
         if ($imageWidth < $width) {
             $width = $imageWidth;
         }
     } else {
         if (!empty($data['params']['height'])) {
             $height = $data['params']['height'];
             $width = round($image->getWidth() * ($height / $image->getHeight()));
         } else {
             if (isset($data['params']['thumbnail'])) {
                 // width not provided - get default for thumbs
                 global $wgUser, $wgThumbLimits;
                 $wopt = $wgUser->getOption('thumbsize');
                 if (!isset($wgThumbLimits[$wopt])) {
                     $wopt = User::getDefaultOption('thumbsize');
                 }
                 $width = $wgThumbLimits[$wopt];
                 // thumbed images should not be resized larger than the original file resolution
                 if ($imageWidth < $width) {
                     $width = $imageWidth;
                 }
             } else {
                 // full size
                 $width = $image->getWidth();
             }
         }
     }
     // add extra CSS classes
     $imgClass = array('image');
     if (isset($data['params']['thumbnail'])) {
         $imgClass[] = 'thumb';
     }
     if (isset($data['params']['framed'])) {
         $imgClass[] = 'frame';
     }
     if (isset($data['params']['frameless'])) {
         $imgClass[] = 'frameless';
     }
     if (isset($data['params']['border'])) {
         $imgClass[] = 'border';
     }
     if (isset($data['params']['align'])) {
         $imgClass[] = 'align' . ucfirst($data['params']['align']);
     }
     if ($data['params']['caption'] != '') {
         $imgClass[] = 'withCaption';
     }
     // generate image thumbnail
     $thumb = $image->transform(array('width' => $width));
     $thumbClass = get_class($thumb);
     // RT #25329
     if ($thumbClass == 'OggAudioDisplay') {
         $data['type'] = 'ogg-file';
         $ret = RTEMarker::generate(RTEMarker::PLACEHOLDER, RTEData::put('placeholder', $data));
         wfProfileOut(__METHOD__);
         return $ret;
     }
     $ret = $thumb->toHtml(array('img-class' => implode(' ', $imgClass)));
     // add type attribute
     $ret = substr($ret, 0, -2) . ' type="image" />';
     RTE::log(__METHOD__, $ret);
     // store data and mark HTML
     $ret = RTEData::addIdxToTag(RTEData::put('data', $data), $ret);
     wfProfileOut(__METHOD__);
     return $ret;
 }