/** * Main execution function * @param $par Parameters passed to the page */ function execute($par) { global $wgRequest, $wgOut, $wgMakeBotPrivileged, $wgUser; $this->setHeaders(); if ($par) { $this->target = $par; } else { $this->target = $wgRequest->getVal('target', wfMsg('rootcategory')); } $this->target = trim($this->target); #HACK for undefined root category if ($this->target == '<rootcategory>' || $this->target == '<rootcategory>') { $this->target = NULL; } $this->mode = $wgRequest->getVal('mode', CT_MODE_CATEGORIES); if ($this->mode == 'all') { $this->mode = CT_MODE_ALL; } else { if ($this->mode == 'pages') { $this->mode = CT_MODE_PAGES; } else { if ($this->mode == 'categories') { $this->mode = CT_MODE_CATEGORIES; } } } $this->mode = (int) $this->mode; $wgOut->addWikiText(wfMsgNoTrans('categorytree-header')); $wgOut->addHtml($this->makeInputForm()); if ($this->target !== '' && $this->target !== NULL) { CategoryTree::setHeaders($wgOut); $title = CategoryTree::makeTitle($this->target); if ($title && $title->getArticleID()) { $html = ''; $html .= wfOpenElement('div', array('class' => 'CategoryTreeParents')); $html .= wfElement('span', array('class' => 'CategoryTreeParents'), wfMsg('categorytree-parents')) . ': '; $ct = new CategoryTree(); $parents = $ct->renderParents($title, $this->mode); if ($parents == '') { $html .= wfMsg('categorytree-nothing-found'); } else { $html .= $parents; } $html .= wfCloseElement('div'); $html .= wfOpenElement('div', array('class' => 'CategoryTreeResult')); $html .= $ct->renderNode($title, $this->mode, true, false); $html .= wfCloseElement('div'); $wgOut->addHtml($html); } else { $wgOut->addHtml(wfOpenElement('div', array('class' => 'CategoryTreeNotice'))); $wgOut->addWikiText(wfMsg('categorytree-not-found', $this->target)); $wgOut->addHtml(wfCloseElement('div')); } } }
function getSubcategorySection() { global $wgOut, $wgRequest, $wgCookiePrefix, $wgCategoryTreeCategoryPageMode; if ($wgRequest->getCheck('notree')) { return parent::getSubcategorySection(); } if ($GLOBALS['wgCategoryTreeUnifiedView']) { return parent::getSubcategorySection(); } if (count($this->children) == 0) { return ''; } $r = '<h2>' . wfMsg('subcategories') . "</h2>\n" . wfMsgExt('subcategorycount', array('parse'), count($this->children)); # Use a cookie to save the user's last selection, so that AJAX doesn't # keep coming back to haunt them. # # FIXME: This doesn't work very well with IMS handling in # OutputPage::checkLastModified, because when the cookie changes, the # category pages are not, at present, invalidated. $cookieName = $wgCookiePrefix . 'ShowSubcatAs'; $cookieVal = @$_COOKIE[$cookieName]; $reqShowAs = $wgRequest->getVal('showas'); if ($reqShowAs == 'list') { $showAs = 'list'; } elseif ($reqShowAs == 'tree') { $showAs = 'tree'; } elseif ($cookieVal == 'list' || $cookieVal == 'tree') { $showAs = $cookieVal; } else { $showAs = 'tree'; } if (!is_null($reqShowAs)) { global $wgCookieExpiration, $wgCookiePath, $wgCookieDomain, $wgCookieSecure; $exp = time() + $wgCookieExpiration; setcookie($cookieName, $showAs, $exp, $wgCookiePath, $wgCookieDomain, $wgCookieSecure); } if ($showAs == 'tree' && count($this->children) > $this->limit) { # Tree doesn't page properly $showAs = 'list'; $r .= self::msg('too-many-subcats'); } else { $sk = $this->getSkin(); $r .= '<p>' . $this->makeShowAsLink('tree', $showAs) . ' | ' . $this->makeShowAsLink('list', $showAs) . '</p>'; } if ($showAs == 'list') { $r .= $this->formatList($this->children, $this->children_start_char); } else { CategoryTree::setHeaders($wgOut); $ct = new CategoryTree(); foreach ($this->child_titles as $title) { $r .= $ct->renderNode($title, $wgCategoryTreeCategoryPageMode); } } return $r; }
function getCategoryTree() { global $wgOut, $wgCategoryTreeCategoryPageOptions, $wgCategoryTreeForceHeaders; if (!isset($this->categorytree)) { if (!$wgCategoryTreeForceHeaders) { CategoryTree::setHeaders($wgOut); } $this->categorytree = new CategoryTree($wgCategoryTreeCategoryPageOptions); } return $this->categorytree; }
/** * Main execution function * @param $par array Parameters passed to the page */ function execute($par) { global $wgCategoryTreeDefaultOptions, $wgCategoryTreeSpecialPageOptions, $wgCategoryTreeForceHeaders; $this->setHeaders(); $request = $this->getRequest(); if ($par) { $this->target = $par; } else { $this->target = $request->getVal('target', wfMessage('rootcategory')->text()); } $this->target = trim($this->target); # HACK for undefined root category if ($this->target == '<rootcategory>' || $this->target == '<rootcategory>') { $this->target = null; } $options = array(); # grab all known options from the request. Normalization is done by the CategoryTree class foreach ($wgCategoryTreeDefaultOptions as $option => $default) { if (isset($wgCategoryTreeSpecialPageOptions[$option])) { $default = $wgCategoryTreeSpecialPageOptions[$option]; } $options[$option] = $request->getVal($option, $default); } $this->tree = new CategoryTree($options); $output = $this->getOutput(); $output->addWikiMsg('categorytree-header'); $this->executeInputForm(); if ($this->target !== '' && $this->target !== null) { if (!$wgCategoryTreeForceHeaders) { CategoryTree::setHeaders($output); } $title = CategoryTree::makeTitle($this->target); if ($title && $title->getArticleID()) { $output->addHTML(Xml::openElement('div', array('class' => 'CategoryTreeParents'))); $output->addHTML(wfMessage('categorytree-parents')->parse()); $output->addHTML(wfMessage('colon-separator')->escaped()); $parents = $this->tree->renderParents($title); if ($parents == '') { $output->addHTML(wfMessage('categorytree-no-parent-categories')->parse()); } else { $output->addHTML($parents); } $output->addHTML(Xml::closeElement('div')); $output->addHTML(Xml::openElement('div', array('class' => 'CategoryTreeResult'))); $output->addHTML($this->tree->renderNode($title, 1)); $output->addHTML(Xml::closeElement('div')); } else { $output->addHTML(Xml::openElement('div', array('class' => 'CategoryTreeNotice'))); $output->addHTML(wfMessage('categorytree-not-found', $this->target)->parse()); $output->addHTML(Xml::closeElement('div')); } } }
/** * Hook callback that injects messages and things into the <head> tag * Does nothing if $parserOutput->mCategoryTreeTag is not set */ function efCategoryTreeParserOutput($outputPage, $parserOutput) { if (!empty($parserOutput->mCategoryTreeTag)) { CategoryTree::setHeaders($outputPage); } return true; }
/** * BeforePageDisplay hook. This hook is set when $wgCategoryTreeForceHeaders * is set. * Otherwise similar to efCategoryTreeParserOutput. * @param $out OutputPage * @param $skin Skin * @return bool */ function efCategoryTreeAddHeaders(OutputPage $out, Skin $skin) { CategoryTree::setHeaders($out); return true; }