Ejemplo n.º 1
0
 /**
  * Get list of two most linked categories current article is in
  */
 public function getMostLinkedCategories()
 {
     wfProfileIn(__METHOD__);
     global $wgOut, $wgMemc;
     // check whether current article belongs to any category
     $categoryLinks = $wgOut->getCategoryLinks();
     if (empty($categoryLinks)) {
         wfProfileOut(__METHOD__);
         return array();
     }
     // try to get cached data
     $key = $this->getKey('mostlinkedcategories');
     $categories = $wgMemc->get($key);
     if (!is_array($categories)) {
         wfProfileIn(__METHOD__ . '::miss');
         $limit = 2;
         // get list of articles categories with number of articles "linked" to them
         $dbr = wfGetDB(DB_SLAVE);
         // check querycache first
         $res = $dbr->select(array('querycache', 'categorylinks'), array('qc_title as cl_to, qc_value as cnt'), array('qc_title = cl_to', 'qc_type' => 'Mostpopularcategories', 'cl_from' => $this->pageId), __METHOD__, array('ORDER BY' => 'qc_value DESC', 'LIMIT' => $limit));
         // order and filter out blacklisted categories
         $service = new CategoriesService();
         $categories = array();
         while ($obj = $dbr->fetchObject($res)) {
             if (!$service->isCategoryBlacklisted($obj->cl_to) && !$service->isCategoryHidden($obj->cl_to)) {
                 $categories[$obj->cl_to] = $obj->cnt;
             }
         }
         $wgMemc->set($key, $categories, self::CACHE_TTL);
         wfProfileOut(__METHOD__ . '::miss');
     }
     wfProfileOut(__METHOD__);
     return $categories;
 }