/**
  * Add a page in the image namespace
  * @param Title $title
  * @param string $sortkey
  * @param int $pageLength
  * @param bool $isRedirect
  */
 function addImage(Title $title, $sortkey, $pageLength, $isRedirect = false)
 {
     global $wgContLang;
     if ($this->showGallery) {
         $flip = $this->flip['file'];
         if ($flip) {
             $this->gallery->insert($title);
         } else {
             $this->gallery->add($title);
         }
     } else {
         $this->imgsNoGallery[] = $this->generateLink('image', $title, $isRedirect);
         $this->imgsNoGallery_start_char[] = $wgContLang->convert($this->collation->getFirstLetter($sortkey));
     }
 }
Пример #2
0
 /**
  * Add a page in the image namespace
  * @param $title Title
  * @param $sortkey
  * @param $pageLength
  * @param $isRedirect bool
  */
 function addImage(Title $title, $sortkey, $pageLength, $isRedirect = false)
 {
     global $wgContLang;
     if ($this->showGallery) {
         $flip = $this->flip['file'];
         if ($flip) {
             $this->gallery->insert($title);
         } else {
             $this->gallery->add($title);
         }
     } else {
         $link = Linker::link($title);
         if ($isRedirect) {
             // This seems kind of pointless given 'mw-redirect' class,
             // but keeping for back-compatibility with user css.
             $link = '<span class="redirect-in-category">' . $link . '</span>';
         }
         $this->imgsNoGallery[] = $link;
         $this->imgsNoGallery_start_char[] = $wgContLang->convert($this->collation->getFirstLetter($sortkey));
     }
 }
Пример #3
0
 /**
  * Format the category data list.
  *
  * @param string $from -- return only sort keys from this item on
  * @param string $until -- don't return keys after this point.
  * @return string HTML output
  * @private
  */
 function doCategoryMagic($from = '', $until = '')
 {
     global $wgOut;
     global $wgContLang, $wgUser, $wgCategoryMagicGallery, $wgCategoryPagingLimit;
     $fname = 'CategoryPage::doCategoryMagic';
     wfProfileIn($fname);
     $articles = array();
     $articles_start_char = array();
     $children = array();
     $children_start_char = array();
     $showGallery = $wgCategoryMagicGallery && !$wgOut->mNoGallery;
     if ($showGallery) {
         $ig = new ImageGallery();
         $ig->setParsing();
     }
     $dbr =& wfGetDB(DB_SLAVE);
     if ($from != '') {
         $pageCondition = 'cl_sortkey >= ' . $dbr->addQuotes($from);
         $flip = false;
     } elseif ($until != '') {
         $pageCondition = 'cl_sortkey < ' . $dbr->addQuotes($until);
         $flip = true;
     } else {
         $pageCondition = '1 = 1';
         $flip = false;
     }
     $limit = $wgCategoryPagingLimit;
     $res = $dbr->select(array('page', 'categorylinks'), array('page_title', 'page_namespace', 'page_len', 'cl_sortkey'), array($pageCondition, 'cl_from          =  page_id', 'cl_to' => $this->mTitle->getDBKey()), $fname, array('ORDER BY' => $flip ? 'cl_sortkey DESC' : 'cl_sortkey', 'LIMIT' => $limit + 1));
     $sk =& $wgUser->getSkin();
     $r = "<br style=\"clear:both;\"/>\n";
     $count = 0;
     $nextPage = null;
     while ($x = $dbr->fetchObject($res)) {
         if (++$count > $limit) {
             // We've reached the one extra which shows that there are
             // additional pages to be had. Stop here...
             $nextPage = $x->cl_sortkey;
             break;
         }
         $title = Title::makeTitle($x->page_namespace, $x->page_title);
         if ($title->getNamespace() == NS_CATEGORY) {
             // Subcategory; strip the 'Category' namespace from the link text.
             array_push($children, $sk->makeKnownLinkObj($title, $wgContLang->convertHtml($title->getText())));
             // If there's a link from Category:A to Category:B, the sortkey of the resulting
             // entry in the categorylinks table is Category:A, not A, which it SHOULD be.
             // Workaround: If sortkey == "Category:".$title, than use $title for sorting,
             // else use sortkey...
             $sortkey = '';
             if ($title->getPrefixedText() == $x->cl_sortkey) {
                 $sortkey = $wgContLang->firstChar($x->page_title);
             } else {
                 $sortkey = $wgContLang->firstChar($x->cl_sortkey);
             }
             array_push($children_start_char, $wgContLang->convert($sortkey));
         } elseif ($showGallery && $title->getNamespace() == NS_IMAGE) {
             // Show thumbnails of categorized images, in a separate chunk
             if ($flip) {
                 $ig->insert(Image::newFromTitle($title));
             } else {
                 $ig->add(Image::newFromTitle($title));
             }
         } else {
             // Page in this category
             array_push($articles, $sk->makeSizeLinkObj($x->page_len, $title, $wgContLang->convert($title->getPrefixedText())));
             array_push($articles_start_char, $wgContLang->convert($wgContLang->firstChar($x->cl_sortkey)));
         }
     }
     $dbr->freeResult($res);
     if ($flip) {
         $children = array_reverse($children);
         $children_start_char = array_reverse($children_start_char);
         $articles = array_reverse($articles);
         $articles_start_char = array_reverse($articles_start_char);
     }
     if ($until != '') {
         $r .= $this->pagingLinks($this->mTitle, $nextPage, $until, $limit);
     } elseif ($nextPage != '' || $from != '') {
         $r .= $this->pagingLinks($this->mTitle, $from, $nextPage, $limit);
     }
     # Don't show subcategories section if there are none.
     if (count($children) > 0) {
         # Showing subcategories
         $r .= '<h2>' . wfMsg('subcategories') . "</h2>\n";
         $r .= wfMsgExt('subcategorycount', array('parse'), count($children));
         $r .= $this->formatList($children, $children_start_char);
     }
     # Showing articles in this category
     $ti = htmlspecialchars($this->mTitle->getText());
     $r .= '<h2>' . wfMsg('category_header', $ti) . "</h2>\n";
     $r .= wfMsgExt('categoryarticlecount', array('parse'), count($articles));
     $r .= $this->formatList($articles, $articles_start_char);
     if ($showGallery && !$ig->isEmpty()) {
         $r .= $ig->toHTML();
     }
     if ($until != '') {
         $r .= $this->pagingLinks($this->mTitle, $nextPage, $until, $limit);
     } elseif ($nextPage != '' || $from != '') {
         $r .= $this->pagingLinks($this->mTitle, $from, $nextPage, $limit);
     }
     wfProfileOut($fname);
     return $r;
 }