+ function getHTML() {
+ global $wgOut, $wgCategoryMagicGallery, $wgCategoryPagingLimit;
+ wfProfileIn( __METHOD__ );
+
+ $this->showGallery = $wgCategoryMagicGallery && !$wgOut->mNoGallery;
+
+ $this->clearCategoryState();
+ $this->doCategoryQuery();
+ $this->finaliseCategoryState();
+
+ $r = $this->getCategoryTop() .
+ $this->getSubcategorySection() .
+ $this->getPagesSection() .
+ $this->getImageSection() .
+ $this->getCategoryBottom();
+
+ wfProfileOut( __METHOD__ );
+ return $r;
+ }
+
+ function clearCategoryState() {
+ $this->articles = array();
+ $this->articles_start_char = array();
+ $this->children = array();
+ $this->children_start_char = array();
+ if( $this->showGallery ) {
+ $this->gallery = new ImageGallery();
+ $this->gallery->setParsing();
+ }
+ }
+
+ function getSkin() {
+ if ( !$this->skin ) {
+ global $wgUser;
+ $this->skin = $wgUser->getSkin();
+ }
+ return $this->skin;
+ }
+
+ /**
+ * Add a subcategory to the internal lists
+ */
+ function addSubcategory( $title, $sortkey, $pageLength ) {
+ global $wgContLang;
+ // Subcategory; strip the 'Category' namespace from the link text.
+ $this->children[] = $this->getSkin()->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() == $sortkey ) {
+ $sortkey = $wgContLang->firstChar( $title->getDBkey() );
+ } else {
+ $sortkey = $wgContLang->firstChar( $sortkey );
+ }
+ $this->children_start_char[] = $wgContLang->convert( $sortkey );
+ }
+
+ /**
+ * Add a page in the image namespace
+ */
+ function addImage( $title, $sortkey, $pageLength ) {
+ if ( $this->showGallery ) {
+ $image = new Image( $title );
+ if( $this->flip ) {
+ $this->gallery->insert( $image );
+ } else {
+ $this->gallery->add( $image );
+ }
+ } else {
+ $this->addPage( $title, $sortkey, $pageLength );
+ }
+ }
+
+ /**
+ * Add a miscellaneous page
+ */
+ function addPage( $title, $sortkey, $pageLength ) {
+ global $wgContLang;
+ $this->articles[] = $this->getSkin()->makeSizeLinkObj(
+ $pageLength, $title, $wgContLang->convert( $title->getPrefixedText() )
+ );
+ $this->articles_start_char[] = $wgContLang->convert( $wgContLang->firstChar( $sortkey ) );
+ }
+
+ function finaliseCategoryState() {
+ if( $this->flip ) {
+ $this->children = array_reverse( $this->children );
+ $this->children_start_char = array_reverse( $this->children_start_char );
+ $this->articles = array_reverse( $this->articles );
+ $this->articles_start_char = array_reverse( $this->articles_start_char );