private function filterHiddenCategories($categories) { global $wgMemc; wfProfileIn(__METHOD__); if (!is_array(self::$hiddenCategories)) { $memcKey = wfMemcKey('hidden-categories'); self::$hiddenCategories = $wgMemc->get($memcKey); if (!is_array(self::$hiddenCategories)) { $dbr = wfGetDB(DB_SLAVE); $res = $dbr->query("SELECT page_title FROM page JOIN page_props ON page_id=pp_page AND pp_propname='hiddencat';"); self::$hiddenCategories = array(); while ($row = $dbr->fetchObject($res)) { self::$hiddenCategories[] = $row->page_title; } $wgMemc->set($memcKey, self::$hiddenCategories, 60 * 60); } } $categories = array_values(array_diff($categories, self::$hiddenCategories)); wfProfileOut(__METHOD__); return $categories; }
/** * Get list of hidden categories (cached in memcached using WikiaDataAccess). * * Using WikiaDataAccess to limit number of processes regenerating cache and prevent delay when other * process is already regenerating data. The stalled data is returned in the latter case. * * @see https://wikia-inc.atlassian.net/browse/PLATFORM-615 * * @return array */ private function getHiddenCategories() { wfProfileIn(__METHOD__); $fname = __METHOD__; if (!is_array(self::$hiddenCategories)) { self::$hiddenCategories = WikiaDataAccess::cacheWithLock(wfMemcKey('hidden-categories-v2'), WikiaResponse::CACHE_SHORT, function () use($fname) { $dbr = wfGetDB(DB_SLAVE); $res = $dbr->query("SELECT page_title FROM page JOIN page_props ON page_id=pp_page AND pp_propname='hiddencat' LIMIT " . self::HIDDEN_CATEGORIES_LIMIT, $fname); $hiddenCategories = array(); while ($row = $dbr->fetchObject($res)) { $hiddenCategories[] = $row->page_title; } return $hiddenCategories; }); } wfProfileOut(__METHOD__); return self::$hiddenCategories; }