public function getExhibitionItems(Title $title)
 {
     wfProfileIn(__METHOD__);
     if (class_exists('CategoryDataService')) {
         $cacheKey = $this->getExhibitionItemsCacheKey($title->getText());
         $items = $this->wg->memc->get($cacheKey);
         if (!is_array($items)) {
             $exh = CategoryDataService::getMostVisited($title->getDBkey(), null, self::EXHIBITION_ITEMS_LIMIT);
             $ids = array_keys($exh);
             $length = count($ids);
             $items = array();
             for ($i = 0; $i < $length; $i++) {
                 $pageId = $ids[$i];
                 $imgRespnse = $this->app->sendRequest('ImageServing', 'index', array('ids' => array($pageId), 'height' => 150, 'width' => 150, 'count' => 1));
                 $img = $imgRespnse->getVal('result');
                 if (!empty($img[$pageId])) {
                     $img = $img[$pageId][0]['url'];
                 } else {
                     $img = false;
                 }
                 $oTitle = Title::newFromID($pageId);
                 $items[] = ['img' => $img, 'title' => $oTitle->getText(), 'url' => $oTitle->getFullURL()];
             }
             $this->wg->memc->set($cacheKey, $items, self::CACHE_TTL_EXHIBITION);
         }
         wfProfileOut(__METHOD__);
         return $items;
     }
     wfProfileOut(__METHOD__);
     return false;
 }
 /**
  * fetchSectionItems - returns gets array of items from category from specyfic namespace.
  * @param $sCategoryDBKey int category namespace
  * @param $mNamespace mixed: int namespace or array of int for category query
  * @return array
  */
 protected function fetchSectionItems($mNamespace = NS_MAIN, $negative = false)
 {
     $sCategoryDBKey = $this->categoryTitle->getDBkey();
     // Check if page is a redirect
     if ($this->categoryTitle->isRedirect()) {
         $oTmpArticle = new Article($this->categoryTitle);
         if (!is_null($oTmpArticle)) {
             $rdTitle = $oTmpArticle->getRedirectTarget();
             if (!is_null($rdTitle) && $rdTitle->getNamespace() == NS_CATEGORY) {
                 $sCategoryDBKey = $rdTitle->getDBkey();
             }
         }
     }
     if (!is_array($mNamespace)) {
         $mNamespace = (int) $mNamespace;
     } else {
         $mNamespace = implode(',', $mNamespace);
     }
     switch ($this->getSortType()) {
         case 'mostvisited':
             $res = CategoryDataService::getMostVisited($sCategoryDBKey, $mNamespace, false, $negative);
             //FB#26239 - fall back to alphabetical order if most visited data is empty
             return !empty($res) ? $res : CategoryDataService::getAlphabetical($sCategoryDBKey, $mNamespace, $negative);
         case 'alphabetical':
             return CategoryDataService::getAlphabetical($sCategoryDBKey, $mNamespace, $negative);
         case 'recentedits':
             return CategoryDataService::getRecentlyEdited($sCategoryDBKey, $mNamespace, $negative);
     }
     return array();
 }
 /**
  * Returns image or snippet for the category on id basis.
  * Uses in modified getArticle
  *
  * @param $iCategoryId int category pageId
  * @return array
  */
 protected function getCategoryImageOrSnippet($iCategoryId)
 {
     $title = Title::newFromID($iCategoryId);
     $sCategoryDBKey = $title->getDBKey();
     // tries to get image from images in category
     $result = CategoryDataService::getAlphabetical($sCategoryDBKey, NS_FILE, 1);
     if (!empty($result)) {
         $counter = 0;
         foreach ($result as $item) {
             if ($counter > F::App()->wg->maxCategoryExhibitionSubcatChecks) {
                 break;
             }
             $imageServing = new ImageServing(array($item['page_id']), $this->thumbWidth, array("w" => $this->thumbWidth, "h" => $this->thumbHeight));
             $itemTitle = Title::newFromID($item['page_id']);
             $image = wfFindFile($itemTitle);
             if (!empty($image)) {
                 $imageSrc = wfReplaceImageServer($image->getThumbUrl($imageServing->getCut($image->width, $image->height) . "-" . $image->getName()));
                 return array('imageUrl' => (string) $imageSrc, 'snippetText' => '');
             }
             $counter++;
         }
     }
     // if no images found, tries to get image or snippet from artice
     unset($result);
     $result = CategoryDataService::getAlphabetical($sCategoryDBKey, NS_MAIN, 10);
     if (!empty($result)) {
         $counter = 0;
         $snippetText = '';
         $imageUrl = '';
         foreach ($result as $item) {
             if ($counter > F::App()->wg->maxCategoryExhibitionSubcatChecks) {
                 break;
             }
             $imageUrl = $this->getImageFromPageId($item['page_id']);
             if (!empty($imageUrl)) {
                 break;
             }
             if (empty($snippetText)) {
                 $snippetService = new ArticleService($item['page_id']);
                 $snippetText = $snippetService->getTextSnippet();
             }
             $counter++;
         }
         return array('imageUrl' => $imageUrl, 'snippetText' => $snippetText);
     } else {
         return array('imageUrl' => '', 'snippetText' => '');
     }
 }