/** * Obtain an HTML image gallery to output, or else an error message * * @return string */ public function render() { if( is_object( $this->user ) ) { $this->user->load(); if( $this->user->getId() > 0 ) { $images = $this->getImages(); if( count( $images ) > 0 ) { $gallery = new ImageGallery(); #$gallery->setParsing( true ); # Fixme (?) undefined method ImageGallery::setParsing $gallery->setCaption( $this->getCaption() ); foreach( $images as $image ) { $title = Title::makeTitleSafe( NS_IMAGE, $image->img_name ); $gallery->add( $title ); } return $gallery->toHtml(); } else { return '<p>' . wfMsgForContent( 'userimages-noimages', $this->user->getName() ) . '</p>'; } } else { return '<p>' . wfMsgForContent( 'nosuchusershort', $this->user->getName() ) . '</p>'; } } else { return '<p>' . wfMsgForContent( 'userimages-noname' ) . '</p>'; } }
public function getResultText(SMWQueryResult $results, $outputmode) { global $wgUser, $wgParser; $ig = new ImageGallery(); $ig->setShowBytes(false); $ig->setShowFilename(false); $ig->setParser($wgParser); $ig->setCaption($this->mIntro); // set caption to IQ header if ($this->params['galleryformat'] == 'carousel') { static $carouselNr = 0; // Set attributes for jcarousel $dataAttribs = array('wrap' => 'both', 'vertical' => 'false', 'rtl' => 'false'); // Use perrow parameter to determine the scroll sequence. if (empty($this->params['perrow'])) { $dataAttribs['scroll'] = 1; // default 1 } else { $dataAttribs['scroll'] = $this->params['perrow']; $dataAttribs['visible'] = $this->params['perrow']; } $attribs = array('id' => 'carousel' . ++$carouselNr, 'class' => 'jcarousel jcarousel-skin-smw', 'style' => 'display:none;'); foreach ($dataAttribs as $name => $value) { $attribs['data-' . $name] = $value; } $ig->setAttributes($attribs); // Load javascript module SMWOutputs::requireResource('ext.srf.jcarousel'); } // In case galleryformat = carousel, perrow should not be set if ($this->params['perrow'] !== '' && $this->params['galleryformat'] !== 'carousel') { $ig->setPerRow($this->params['perrow']); } if ($this->params['widths'] !== '') { $ig->setWidths($this->params['widths']); } if ($this->params['heights'] !== '') { $ig->setHeights($this->params['heights']); } $printReqLabels = array(); foreach ($results->getPrintRequests() as $printReq) { $printReqLabels[] = $printReq->getLabel(); } if ($this->params['imageproperty'] !== '' && in_array($this->params['imageproperty'], $printReqLabels)) { $this->addImageProperties($results, $ig, $this->params['imageproperty'], $this->params['captionproperty']); } else { $this->addImagePages($results, $ig); } return array($ig->toHTML(), 'nowiki' => true, 'isHTML' => true); }
public function getResultText($results, $outputmode) { global $smwgIQRunningNumber, $wgUser, $wgParser; $skin = $wgUser->getSkin(); $ig = new ImageGallery(); $ig->setShowBytes(false); $ig->setShowFilename(false); $ig->setParser($wgParser); $ig->useSkin($skin); $ig->setCaption($this->mIntro); // set caption to IQ header if (isset($this->m_params['perrow'])) { $ig->setPerRow($this->m_params['perrow']); } if (isset($this->m_params['widths'])) { $ig->setWidths($this->m_params['widths']); } if (isset($this->m_params['heights'])) { $ig->setHeights($this->m_params['heights']); } while ($row = $results->getNext()) { $firstField = $row[0]; $imgTitle = $firstField->getNextObject()->getTitle(); $imgCaption = ''; // Is there a property queried for display with ?property if (isset($row[1])) { $imgCaption = $row[1]->getNextObject(); if (is_object($imgCaption)) { $imgCaption = $imgCaption->getShortText(SMW_OUTPUT_HTML, $this->getLinker(true)); $imgCaption = $wgParser->recursiveTagParse($imgCaption); } } if (empty($imgCaption)) { $imgCaption = $imgTitle->getBaseText(); $imgCaption = preg_replace('#\\.[^.]+$#', '', $imgCaption); // Remove image extension } $ig->add($imgTitle, $imgCaption); // Only add real images (bug #5586) if ($imgTitle->getNamespace() == NS_IMAGE) { $wgParser->mOutput->addImage($imgTitle->getDBkey()); } } return array($ig->toHTML(), 'nowiki' => true, 'isHTML' => true); }
public function getResultText( SMWQueryResult $results, $outputmode ) { global $wgUser, $wgParser; $ig = new ImageGallery(); $ig->setShowBytes( false ); $ig->setShowFilename( false ); $ig->setParser( $wgParser ); $ig->setCaption( $this->mIntro ); // set caption to IQ header if ( $this->m_params['perrow'] !== '' ) { $ig->setPerRow( $this->m_params['perrow'] ); } if ( $this->m_params['widths'] !== '' ) { $ig->setWidths( $this->m_params['widths'] ); } if ( $this->m_params['heights'] !== '' ) { $ig->setHeights( $this->m_params['heights'] ); } $printReqLabels = array(); foreach ( $results->getPrintRequests() as /* SMWPrintRequest */ $printReq ) { $printReqLabels[] = $printReq->getLabel(); } if ( $this->m_params['imageproperty'] !== '' && in_array( $this->m_params['imageproperty'], $printReqLabels ) ) { $this->addImageProperties( $results, $ig, $this->m_params['imageproperty'], $this->m_params['captionproperty'] ); } else { $this->addImagePages( $results, $ig ); } return array( $ig->toHTML(), 'nowiki' => true, 'isHTML' => true ); }
/** * Renders an image gallery from a text with one line per image. * text labels may be given by using |-style alternative text. E.g. * Image:one.jpg|The number "1" * Image:tree.jpg|A tree * given as text will return the HTML of a gallery with two images, * labeled 'The number "1"' and * 'A tree'. */ function renderImageGallery($text, $params) { $ig = new ImageGallery(); $ig->setShowBytes(false); $ig->setShowFilename(false); $ig->setParsing(); $ig->useSkin($this->mOptions->getSkin()); if (isset($params['caption'])) { $ig->setCaption($params['caption']); } $lines = explode("\n", $text); foreach ($lines as $line) { # match lines like these: # Image:someimage.jpg|This is some image preg_match("/^([^|]+)(\\|(.*))?\$/", $line, $matches); # Skip empty lines if (count($matches) == 0) { continue; } $tp = Title::newFromText($matches[1]); $nt =& $tp; if (is_null($nt)) { # Bogus title. Ignore these so we don't bomb out later. continue; } if (isset($matches[3])) { $label = $matches[3]; } else { $label = ''; } $pout = $this->parse($label, $this->mTitle, $this->mOptions, false, false); $html = $pout->getText(); $ig->add(new Image($nt), $html); # Only add real images (bug #5586) if ($nt->getNamespace() == NS_IMAGE) { $this->mOutput->addImage($nt->getDBkey()); } } return $ig->toHTML(); }
/** * @see SMWResultPrinter::getResultText * * @param $results SMWQueryResult * @param $fullParams array * @param $outputmode integer * * @return string */ public function getResultText(SMWQueryResult $results, $outputmode) { $ig = new ImageGallery(); $ig->setShowBytes(false); $ig->setShowFilename(false); $ig->setCaption($this->mIntro); // set caption to IQ header // No need for a special page to use the parser but for the "normal" page // view we have to ensure caption text is parsed correctly through the parser if (!$this->isSpecialPage()) { $ig->setParser($GLOBALS['wgParser']); } // Initialize static $statNr = 0; $html = ''; $processing = ''; if ($this->params['widget'] == 'carousel') { // Carousel widget $ig->setAttributes($this->getCarouselWidget()); } elseif ($this->params['widget'] == 'slideshow') { // Slideshow widget $ig->setAttributes($this->getSlideshowWidget()); } else { // Standard gallery attributes $attribs = array('id' => uniqid(), 'class' => $this->getImageOverlay()); $ig->setAttributes($attribs); } // Only use redirects where the overlay option is not used and redirect // thumb images towards a different target if ($this->params['redirects'] !== '' && !$this->params['overlay']) { SMWOutputs::requireResource('ext.srf.gallery.redirect'); } // For the carousel widget, the perrow option should not be set if ($this->params['perrow'] !== '' && $this->params['widget'] !== 'carousel') { $ig->setPerRow($this->params['perrow']); } if ($this->params['widths'] !== '') { $ig->setWidths($this->params['widths']); } if ($this->params['heights'] !== '') { $ig->setHeights($this->params['heights']); } $printReqLabels = array(); $redirectType = ''; /** * @var SMWPrintRequest $printReq */ foreach ($results->getPrintRequests() as $printReq) { $printReqLabels[] = $printReq->getLabel(); // Get redirect type if ($this->params['redirects'] === $printReq->getLabel()) { $redirectType = $printReq->getTypeID(); } } if ($this->params['imageproperty'] !== '' && in_array($this->params['imageproperty'], $printReqLabels) || $this->params['redirects'] !== '' && in_array($this->params['redirects'], $printReqLabels)) { $this->addImageProperties($results, $ig, $this->params['imageproperty'], $this->params['captionproperty'], $this->params['redirects'], $outputmode); } else { $this->addImagePages($results, $ig); } // SRF Global settings SRFUtils::addGlobalJSVariables(); // Display a processing image as long as the DOM is no ready if ($this->params['widget'] !== '') { $processing = SRFUtils::htmlProcessingElement(); } // Beautify the class selector $class = $this->params['widget'] ? '-' . $this->params['widget'] . ' ' : ''; $class = $this->params['redirects'] !== '' && $this->params['overlay'] === false ? $class . ' srf-redirect' . ' ' : $class; $class = $this->params['class'] ? $class . ' ' . $this->params['class'] : $class; // Separate content from result output if (!$ig->isEmpty()) { $attribs = array('class' => 'srf-gallery' . $class, 'align' => 'justify', 'data-redirect-type' => $redirectType); $html = Html::rawElement('div', $attribs, $processing . $ig->toHTML()); } // If available, create a link that points to further results if ($this->linkFurtherResults($results)) { $html .= $this->getLink($results, SMW_OUTPUT_HTML)->getText(SMW_OUTPUT_HTML, $this->mLinker); } return array($html, 'nowiki' => true, 'isHTML' => true); }
function renderDynamicPageList($input, $args, $mwParser) { global $wgUser, $wgContLang; global $wgDisableCounters; // to determine if to allow sorting by #hits. global $wgDLPmaxCategories, $wgDLPMaxResultCount, $wgDLPMaxCacheTime; global $wgDLPAllowUnlimitedResults, $wgDLPAllowUnlimitedCategories; if ($wgDLPMaxCacheTime !== false) { $mwParser->getOutput()->updateCacheExpiry($wgDLPMaxCacheTime); } $countSet = false; $startList = '<ul>'; $endList = '</ul>'; $startItem = '<li>'; $endItem = '</li>'; $inlineMode = false; $useGallery = false; $galleryFileSize = false; $galleryFileName = true; $galleryImageHeight = 0; $galleryImageWidth = 0; $galleryNumbRows = 0; $galleryCaption = ''; $gallery = null; $orderMethod = 'categoryadd'; $order = 'descending'; $redirects = 'exclude'; $stable = $quality = 'include'; $flaggedRevs = false; $namespaceFiltering = false; $namespaceIndex = 0; $offset = 0; $googleHack = false; $suppressErrors = false; $showNamespace = true; $addFirstCategoryDate = false; $dateFormat = ''; $stripYear = false; $linkOptions = array(); $categories = array(); $excludeCategories = array(); $parameters = explode("\n", $input); $parser = new Parser(); $poptions = new ParserOptions(); foreach ($parameters as $parameter) { $paramField = explode('=', $parameter, 2); if (count($paramField) < 2) { continue; } $type = trim($paramField[0]); $arg = trim($paramField[1]); switch ($type) { case 'category': $title = Title::makeTitleSafe(NS_CATEGORY, $parser->transformMsg($arg, $poptions)); if (is_null($title)) { continue; } $categories[] = $title; break; case 'notcategory': $title = Title::makeTitleSafe(NS_CATEGORY, $parser->transformMsg($arg, $poptions)); if (is_null($title)) { continue; } $excludeCategories[] = $title; break; case 'namespace': $ns = $wgContLang->getNsIndex($arg); if ($ns != null) { $namespaceIndex = $ns; $namespaceFiltering = true; } else { // Note, since intval("some string") = 0 // this considers pretty much anything // invalid here as the main namespace. // This was probably originally a bug, // but is now depended upon by people // writing things like namespace=main // so be careful when changing this code. $namespaceIndex = intval($arg); if ($namespaceIndex >= 0) { $namespaceFiltering = true; } else { $namespaceFiltering = false; } } break; case 'count': // ensure that $count is a number; $count = intval($arg); $countSet = true; break; case 'offset': $offset = intval($arg); break; case 'imagewidth': $galleryImageWidth = intval($arg); break; case 'imageheight': $galleryImageHeight = intval($arg); break; case 'imagesperrow': $galleryNumbRows = intval($arg); break; case 'mode': switch ($arg) { case 'gallery': $useGallery = true; $gallery = new ImageGallery(); $startList = ''; $endList = ''; $startItem = ''; $endItem = ''; break; case 'none': $startList = ''; $endList = ''; $startItem = ''; $endItem = '<br />'; $inlineMode = false; break; case 'ordered': $startList = '<ol>'; $endList = '</ol>'; $startItem = '<li>'; $endItem = '</li>'; $inlineMode = false; break; case 'inline': // aka comma seperated list $startList = ''; $endList = ''; $startItem = ''; $endItem = ''; $inlineMode = true; break; case 'unordered': default: $startList = '<ul>'; $endList = '</ul>'; $startItem = '<li>'; $endItem = '</li>'; $inlineMode = false; break; } break; case 'gallerycaption': // Should perhaps actually parse caption instead // as links and what not in caption might be useful. $galleryCaption = $parser->transformMsg($arg, $poptions); break; case 'galleryshowfilesize': switch ($arg) { case 'no': case 'false': $galleryFileSize = false; break; case 'true': default: $galleryFileSize = true; } break; case 'galleryshowfilename': switch ($arg) { case 'no': case 'false': $galleryFileName = false; break; case 'true': default: $galleryFileName = true; break; } break; case 'order': switch ($arg) { case 'ascending': $order = 'ascending'; break; case 'descending': default: $order = 'descending'; break; } break; case 'ordermethod': switch ($arg) { case 'lastedit': $orderMethod = 'lastedit'; break; case 'length': $orderMethod = 'length'; break; case 'created': $orderMethod = 'created'; break; case 'sortkey': case 'categorysortkey': $orderMethod = 'categorysortkey'; break; case 'popularity': if (!$wgDisableCounters) { $orderMethod = 'popularity'; } else { $orderMethod = 'categoyadd'; // default if hitcounter disabled. } break; case 'categoryadd': default: $orderMethod = 'categoryadd'; break; } break; case 'redirects': switch ($arg) { case 'include': $redirects = 'include'; break; case 'only': $redirects = 'only'; break; case 'exclude': default: $redirects = 'exclude'; break; } break; case 'stablepages': switch ($arg) { case 'include': $stable = 'include'; break; case 'only': $flaggedRevs = true; $stable = 'only'; break; case 'exclude': default: $flaggedRevs = true; $stable = 'exclude'; break; } break; case 'qualitypages': switch ($arg) { case 'include': $quality = 'include'; break; case 'only': $flaggedRevs = true; $quality = 'only'; break; case 'exclude': default: $flaggedRevs = true; $quality = 'exclude'; break; } break; case 'suppresserrors': if ($arg == 'true') { $suppressErrors = true; } else { $suppressErrors = false; } break; case 'addfirstcategorydate': if ($arg == 'true') { $addFirstCategoryDate = true; } elseif (preg_match('/^(?:[ymd]{2,3}|ISO 8601)$/', $arg)) { // if it more or less is valid dateformat. $addFirstCategoryDate = true; $dateFormat = $arg; if (strlen($dateFormat) == 2) { $dateFormat = $dateFormat . 'y'; # DateFormatter does not support no year. work around $stripYear = true; } } else { $addFirstCategoryDate = false; } break; case 'shownamespace': if ('false' == $arg) { $showNamespace = false; } else { $showNamespace = true; } break; case 'googlehack': if ('false' == $arg) { $googleHack = false; } else { $googleHack = true; } break; case 'nofollow': # bug 6658 if ('false' != $arg) { $linkOptions['rel'] = 'nofollow'; } break; } // end main switch() } // end foreach() $catCount = count($categories); $excludeCatCount = count($excludeCategories); $totalCatCount = $catCount + $excludeCatCount; if ($catCount < 1 && false == $namespaceFiltering) { if ($suppressErrors == false) { return htmlspecialchars(wfMsgForContent('intersection_noincludecats')); // "!!no included categories!!"; } else { return ''; } } if ($totalCatCount > $wgDLPmaxCategories && !$wgDLPAllowUnlimitedCategories) { if ($suppressErrors == false) { return htmlspecialchars(wfMsgForContent('intersection_toomanycats')); // "!!too many categories!!"; } else { return ''; } } if ($countSet) { if ($count < 1) { $count = 1; } if ($count > $wgDLPMaxResultCount) { $count = $wgDLPMaxResultCount; } } elseif (!$wgDLPAllowUnlimitedResults) { $count = $wgDLPMaxResultCount; $countSet = true; } // disallow showing date if the query doesn't have an inclusion category parameter if ($catCount < 1) { $addFirstCategoryDate = false; // don't sort by fields relating to categories if there are no categories. if ($orderMethod == 'categoryadd' || $orderMethod == 'categorysortkey') { $orderMethod = 'created'; } } // build the SQL query $dbr = wfGetDB(DB_SLAVE); $tables = array('page'); $fields = array('page_namespace', 'page_title'); $where = array(); $join = array(); $options = array(); if ($googleHack) { $fields[] = 'page_id'; } if ($addFirstCategoryDate) { $fields[] = 'c1.cl_timestamp'; } if ($namespaceFiltering == true) { $where['page_namespace'] = $namespaceIndex; } // Bug 14943 - Allow filtering based on FlaggedRevs stability. // Check if the extension actually exists before changing the query... if ($flaggedRevs && defined('FLAGGED_REVISIONS')) { $tables[] = 'flaggedpages'; $join['flaggedpages'] = array('LEFT JOIN', 'page_id = fp_page_id'); switch ($stable) { case 'only': $where[] = 'fp_stable IS NOT NULL'; break; case 'exclude': $where['fp_stable'] = null; break; } switch ($quality) { case 'only': $where[] = 'fp_quality >= 1'; break; case 'exclude': $where[] = 'fp_quality = 0 OR fp_quality IS NULL'; break; } } switch ($redirects) { case 'only': $where['page_is_redirect'] = 1; break; case 'exclude': $where['page_is_redirect'] = 0; break; } $currentTableNumber = 1; $categorylinks = $dbr->tableName('categorylinks'); for ($i = 0; $i < $catCount; $i++) { $join["{$categorylinks} AS c{$currentTableNumber}"] = array('INNER JOIN', array("page_id = c{$currentTableNumber}.cl_from", "c{$currentTableNumber}.cl_to={$dbr->addQuotes($categories[$i]->getDBKey())}")); $tables[] = "{$categorylinks} AS c{$currentTableNumber}"; $currentTableNumber++; } for ($i = 0; $i < $excludeCatCount; $i++) { $join["{$categorylinks} AS c{$currentTableNumber}"] = array('LEFT OUTER JOIN', array("page_id = c{$currentTableNumber}.cl_from", "c{$currentTableNumber}.cl_to={$dbr->addQuotes($excludeCategories[$i]->getDBKey())}")); $tables[] = "{$categorylinks} AS c{$currentTableNumber}"; $where["c{$currentTableNumber}.cl_to"] = null; $currentTableNumber++; } if ('descending' == $order) { $sqlOrder = 'DESC'; } else { $sqlOrder = 'ASC'; } switch ($orderMethod) { case 'lastedit': $sqlSort = 'page_touched'; break; case 'length': $sqlSort = 'page_len'; break; case 'created': $sqlSort = 'page_id'; # Since they're never reused and increasing break; case 'categorysortkey': $sqlSort = "c1.cl_type {$sqlOrder}, c1.cl_sortkey"; break; case 'popularity': $sqlSort = 'page_counter'; break; case 'categoryadd': default: $sqlSort = 'c1.cl_timestamp'; break; } $options['ORDER BY'] = "{$sqlSort} {$sqlOrder}"; if ($countSet) { $options['LIMIT'] = $count; } if ($offset > 0) { $options['OFFSET'] = $offset; } // process the query $res = $dbr->select($tables, $fields, $where, __METHOD__, $options, $join); $sk = $wgUser->getSkin(); if ($dbr->numRows($res) == 0) { if ($suppressErrors == false) { return htmlspecialchars(wfMsgForContent('intersection_noresults')); } else { return ''; } } // start unordered list $output = $startList . "\n"; $categoryDate = ''; $df = null; if ($dateFormat != '' && $addFirstCategoryDate) { $df = DateFormatter::getInstance(); } // process results of query, outputing equivalent of <li>[[Article]]</li> // for each result, or something similar if the list uses other // startlist/endlist $articleList = array(); foreach ($res as $row) { $title = Title::makeTitle($row->page_namespace, $row->page_title); if (true == $addFirstCategoryDate) { if ($dateFormat != '') { # this is a tad ugly # use DateFormatter, and support disgarding year. $categoryDate = wfTimestamp(TS_ISO_8601, $row->cl_timestamp); if ($stripYear) { $categoryDate = $wgContLang->getMonthName(substr($categoryDate, 5, 2)) . ' ' . substr($categoryDate, 8, 2); } else { $categoryDate = substr($categoryDate, 0, 10); } $categoryDate = $df->reformat($dateFormat, $categoryDate, array('match-whole')); } else { $categoryDate = $wgContLang->date(wfTimestamp(TS_MW, $row->cl_timestamp)); } if (!$useGallery) { $categoryDate .= wfMsgForContent('colon-separator'); } else { $categoryDate .= ' '; } } $query = array(); if ($googleHack == true) { $query['dpl_id'] = intval($row->page_id); } if ($showNamespace == true) { $titleText = $title->getPrefixedText(); } else { $titleText = $title->getText(); } if ($useGallery) { # Note, $categoryDate is treated as raw html # this is safe since the only html present # would come from the dateformatter <span>. $gallery->add($title, $categoryDate); } else { $articleList[] = $categoryDate . $sk->link($title, htmlspecialchars($titleText), $linkOptions, $query, array('forcearticlepath', 'known')); } } // end unordered list if ($useGallery) { $gallery->setHideBadImages(); $gallery->setShowFilename($galleryFileName); $gallery->setShowBytes($galleryFileSize); if ($galleryImageHeight > 0) { $gallery->setHeights($galleryImageHeight); } if ($galleryImageWidth > 0) { $gallery->setWidths($galleryImageWidth); } if ($galleryNumbRows > 0) { $gallery->setPerRow($galleryNumbRows); } if ($galleryCaption != '') { $gallery->setCaption($galleryCaption); # gallery class escapes string } $output = $gallery->toHtml(); } else { $output .= $startItem; if ($inlineMode) { $output .= $wgContLang->commaList($articleList); } else { $output .= implode("{$endItem} \n{$startItem}", $articleList); } $output .= $endItem; $output .= $endList . "\n"; } return $output; }