/** * The template used for article pages and edit previews. */ public function articlePage() { wfProfileIn(__METHOD__); // Template rendering cancelled by hook if (!wfRunHooks('CategorySelectArticlePage')) { wfProfileOut(__METHOD__); return false; } $categories = $this->wg->out->getCategories(); $showHidden = (bool) $this->wg->User->getGlobalPreference('showhiddencats'); $userCanEdit = $this->request->getVal('userCanEdit', CategorySelectHelper::isEditable()); // There are no categories present and user can't edit, skip rendering if (!$userCanEdit && !count($categories)) { wfProfileOut(__METHOD__); return false; } // Categories link $categoriesLinkAttributes = array('class' => 'categoriesLink'); $categoriesLinkPage = wfMessage('pagecategorieslink')->inContentLanguage()->text(); $categoriesLinkText = wfMessage('pagecategories')->escaped(); if (!empty($this->wg->WikiaUseNoFollow)) { $categoriesLinkAttributes['rel'] = 'nofollow'; } $categoriesLink = Linker::link(Title::newFromText($categoriesLinkPage), $categoriesLinkText, $categoriesLinkAttributes); Wikia::addAssetsToOutput('category_select_css'); Wikia::addAssetsToOutput('category_select_js'); $this->response->setVal('categories', $categories); $this->response->setVal('categoriesLink', $categoriesLink); $this->response->setVal('showHidden', $showHidden); $this->response->setVal('userCanEdit', $userCanEdit); if ($this->app->checkSkin('venus')) { $this->overrideTemplate('articlePageVenus'); } wfProfileOut(__METHOD__); }
/** * Whether the current user can edit categories for the current request. * @return Boolean */ public static function isEditable() { wfProfileIn(__METHOD__); if (!isset(self::$isEditable)) { $app = F::app(); $request = $app->wg->Request; $title = $app->wg->Title; $user = $app->wg->User; $isEditable = true; if (!$user->isAllowed('edit') || $title->mNamespace != NS_SPECIAL && !$title->quickUserCan('edit') || $request->getVal('diff') || $request->getVal('oldid')) { $isEditable = false; } self::$isEditable = $isEditable; } wfProfileOut(__METHOD__); return self::$isEditable; }