コード例 #1
0
 /**
  * get image list
  * @return array imageList
  */
 public function getImageList($timestamp, $state = ImageReviewStatuses::STATE_UNREVIEWED, $order = self::ORDER_LATEST)
 {
     wfProfileIn(__METHOD__);
     $oDB = $this->getDatawareDB(DB_MASTER);
     $oDatabaseHelper = $this->getDatabaseHelper();
     $oResults = $oDatabaseHelper->selectImagesForList($this->getOrder($order), self::LIMIT_IMAGES_FROM_DB, $state);
     $rows = array();
     $updateWhere = array();
     $iconsWhere = array();
     while ($row = $oDB->fetchObject($oResults)) {
         $rows[] = $row;
         $updateWhere[] = "(wiki_id = {$row->wiki_id} and page_id = {$row->page_id})";
     }
     $oDB->freeResult($oResults);
     # update records
     if (count($updateWhere) > 0) {
         $review_start = wfTimestamp(TS_DB, $timestamp);
         switch ($state) {
             case ImageReviewStatuses::STATE_QUESTIONABLE:
                 $target_state = ImageReviewStatuses::STATE_QUESTIONABLE_IN_REVIEW;
                 break;
             case ImageReviewStatuses::STATE_REJECTED:
                 $target_state = ImageReviewStatuses::STATE_REJECTED_IN_REVIEW;
                 break;
             default:
                 $target_state = ImageReviewStatuses::STATE_IN_REVIEW;
         }
         $values = array('reviewer_id' => $this->user_id, 'review_start' => $review_start, 'state' => $target_state);
         if ($state == ImageReviewStatuses::STATE_QUESTIONABLE || $state == ImageReviewStatuses::STATE_REJECTED) {
             $values[] = "review_end = '0000-00-00 00:00:00'";
         }
         $oDB->update('image_review', $values, array(implode(' OR ', $updateWhere)), __METHOD__);
     }
     $oDB->commit();
     $imageList = $unusedImages = $aDeleteFromQueueList = [];
     foreach ($rows as $row) {
         $record = "(wiki_id = {$row->wiki_id} and page_id = {$row->page_id})";
         if (count($imageList) < self::LIMIT_IMAGES) {
             $bDisplayImage = true;
             $oImagePage = GlobalTitle::newFromId($row->page_id, $row->wiki_id);
             if ($oImagePage instanceof GlobalTitle !== true) {
                 $bDisplayImage = false;
                 $sReason = 'Page does not exist';
             } elseif ($oImagePage->isRedirect() === true) {
                 $bDisplayImage = false;
                 $sReason = 'Page is a redirect';
             } else {
                 $oImageGlobalFile = new GlobalFile($oImagePage);
                 if ($oImageGlobalFile->exists() === false) {
                     $bDisplayImage = false;
                     $sReason = 'File does not exist';
                 }
             }
             if ($bDisplayImage === true && $oImageGlobalFile instanceof GlobalFile) {
                 $sThumbUrl = $oImageGlobalFile->getUrlGenerator()->width(self::IMAGE_REVIEW_THUMBNAIL_SIZE)->height(self::IMAGE_REVIEW_THUMBNAIL_SIZE)->thumbnailDown()->url();
                 $aImageInfo = array('src' => $sThumbUrl, 'page' => $oImagePage->getFullUrl(), 'extension' => $oImageGlobalFile->getMimeType());
                 if (strpos('ico', $aImageInfo['extension'])) {
                     $iconsWhere[] = $record;
                     continue;
                 } else {
                     $isThumb = true;
                     // Vignette handles .gif and .svg files
                     $wikiRow = WikiFactory::getWikiByID($row->wiki_id);
                     $imageList[] = array('wikiId' => $row->wiki_id, 'pageId' => $row->page_id, 'state' => $row->state, 'src' => $aImageInfo['src'], 'url' => $aImageInfo['page'], 'priority' => $row->priority, 'flags' => $row->flags, 'isthumb' => $isThumb, 'wiki_url' => isset($wikiRow->city_url) ? $wikiRow->city_url : '');
                 }
             } else {
                 $aDeleteFromQueueList[] = ['wiki_id' => $row->wiki_id, 'page_id' => $row->page_id, 'reason' => $sReason];
                 continue;
             }
         } else {
             $unusedImages[] = $record;
         }
     }
     /**
      * Invalid images
      */
     if (!empty($aDeleteFromQueueList)) {
         $this->createDeleteFromQueueTask($aDeleteFromQueueList);
     }
     /**
      * Icons
      */
     if (!empty($iconsWhere)) {
         $aIconsValues = ['state' => ImageReviewStatuses::STATE_ICO_IMAGE];
         $aIconsWhere = [implode('OR', $iconsWhere)];
         $this->imageListAdditionalAction('icons', $oDB, $aIconsValues, $aIconsWhere);
     }
     /**
      * Unused images
      */
     if (!empty($unusedImages)) {
         $aUnusedValues = ['reviewer_id = null', 'state' => $state];
         $aUnusedWhere = [implode('OR', $unusedImages)];
         $this->imageListAdditionalAction('unused', $oDB, $aUnusedValues, $aUnusedWhere);
     }
     /**
      * Return valid images list
      */
     WikiaLogger::instance()->info("ImageReviewLog", ['method' => __METHOD__, 'message' => 'Fetched ' . count($imageList) . ' new images']);
     wfProfileOut(__METHOD__);
     return $imageList;
 }