コード例 #1
0
 /**
  * Get image list
  *
  * @param  integer $userId ID of the user to get the list for
  * @param  string  $from   Timestamp to get images before
  * @return array           List of images
  */
 public function getImageList($userId, $from = null)
 {
     wfProfileIn(__METHOD__);
     $imageList = [];
     $db = $this->getDatawareDB(DB_MASTER);
     $where = ['user_id' => $userId, 'state != ' . ImageReviewStatuses::STATE_DELETED . ' AND state != ' . ImageReviewStatuses::STATE_WIKI_DISABLED];
     $from = wfTimestampOrNull(TS_DB, $from);
     if (!empty($from)) {
         $where[] = 'last_edited < ' . $db->addQuotes($from);
     }
     $result = $db->select(['image_review'], ['wiki_id, page_id, state, flags, priority, last_edited'], $where, __METHOD__, ['ORDER BY' => 'last_edited desc', 'LIMIT' => self::LIMIT_IMAGES]);
     foreach ($result as $row) {
         $img = ImagesService::getImageSrc($row->wiki_id, $row->page_id);
         $wikiRow = WikiFactory::getWikiByID($row->wiki_id);
         $extension = pathinfo(strtolower($img['page']), PATHINFO_EXTENSION);
         $isThumb = true;
         if (empty($img['src'])) {
             // If we don't have a thumb by this point, we still need to display something, fall back to placeholder
             $globalTitle = GlobalTitle::newFromId($row->page_id, $row->wiki_id);
             if (is_object($globalTitle)) {
                 $img['page'] = $globalTitle->getFullUrl();
                 // @TODO this should be taken from the code instead of being hardcoded
                 $img['src'] = '//images.wikia.com/central/images/8/8c/Wikia_image_placeholder.png';
             } else {
                 // This should never happen
                 continue;
             }
         }
         if (in_array($extension, ['gif', 'svg'])) {
             $img = ImagesService::getImageOriginalUrl($row->wiki_id, $row->page_id);
             $isThumb = false;
         }
         $imageList[] = ['wikiId' => $row->wiki_id, 'pageId' => $row->page_id, 'state' => $row->state, 'src' => $img['src'], 'priority' => $row->priority, 'url' => $img['page'], 'isthumb' => $isThumb, 'flags' => $row->flags, 'wiki_url' => isset($wikiRow->city_url) ? $wikiRow->city_url : '', 'user_page' => '', 'last_edited' => $row->last_edited];
     }
     $db->freeResult($result);
     wfProfileOut(__METHOD__);
     return $imageList;
 }
コード例 #2
0
 public function getImageUrl($wikiId, $pageId, $imgSize)
 {
     $data = ImagesService::getImageSrc($wikiId, $pageId, $imgSize);
     $url = !empty($data['src']) ? $data['src'] : null;
     return $url;
 }
コード例 #3
0
 /**
  * @param array $wikiInfo
  * @param int $width Image width
  * @param int $height Image height
  * @return array
  */
 protected function getImageData($wikiInfo, $width = null, $height = null)
 {
     $imageName = $wikiInfo['image'];
     $crop = $width != null || $height != null;
     $width = $width !== null ? $width : static::DEFAULT_WIDTH;
     $height = $height !== null ? $height : static::DEFAULT_HEIGHT;
     $imgWidth = null;
     $imgHeight = null;
     $img = wfFindFile($imageName);
     if ($img instanceof WikiaLocalFile) {
         //found on en-corporate wiki
         $imgWidth = $img->getWidth();
         $imgHeight = $img->getHeight();
         if ($crop) {
             //get original image if no cropping
             $imageServing = new ImageServing(null, $width, $height);
             $imgUrl = $imageServing->getUrl($img, $width, $height);
         } else {
             $imgUrl = $img->getFullUrl();
         }
     } else {
         $f = $this->findGlobalFileImage($imageName, $wikiInfo['lang'], $wikiInfo['id']);
         if ($f && $f->exists()) {
             $imgWidth = $f->getWidth();
             $imgHeight = $f->getHeight();
             if ($crop) {
                 $globalTitle = $f->getTitle();
                 $imageService = new ImagesService();
                 $response = $imageService->getImageSrc($globalTitle->getCityId(), $globalTitle->getArticleID(), $width, $height);
                 $imgUrl = $response['src'];
             } else {
                 $imgUrl = $f->getUrl();
             }
         }
     }
     if (isset($imgUrl)) {
         return ['image' => $imgUrl, 'original_dimensions' => ['width' => $imgWidth, 'height' => $imgHeight]];
     }
     return ['image' => ''];
 }
コード例 #4
0
    /**
     * get image list
     * @return array imageList
     */
    public function getImageList($timestamp, $state = ImageReviewStatuses::STATE_UNREVIEWED, $order = self::ORDER_LATEST)
    {
        $this->wf->ProfileIn(__METHOD__);
        // get images
        $db = $this->getDatawareDB(DB_MASTER);
        $result = $db->query('
			SELECT pages.page_title_lower, image_review.wiki_id, image_review.page_id, image_review.state, image_review.flags, image_review.priority
			FROM (
				SELECT image_review.wiki_id, image_review.page_id, image_review.state, image_review.flags, image_review.priority
				FROM `image_review`
				WHERE state = ' . $state . ' AND top_200 = false
				ORDER BY ' . $this->getOrder($order) . '
				LIMIT ' . self::LIMIT_IMAGES_FROM_DB . '
			) as image_review
			LEFT JOIN pages ON (image_review.wiki_id=pages.page_wikia_id) AND (image_review.page_id=pages.page_id)');
        $rows = array();
        $updateWhere = array();
        $iconsWhere = array();
        while ($row = $db->fetchObject($result)) {
            $rows[] = $row;
            $updateWhere[] = "(wiki_id = {$row->wiki_id} and page_id = {$row->page_id})";
        }
        $db->freeResult($result);
        # 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'";
            }
            $db->update('image_review', $values, array(implode(' OR ', $updateWhere)), __METHOD__);
        }
        $db->commit();
        $imageList = $invalidImages = $unusedImages = array();
        foreach ($rows as $row) {
            $record = "(wiki_id = {$row->wiki_id} and page_id = {$row->page_id})";
            if (count($imageList) < self::LIMIT_IMAGES) {
                $img = ImagesService::getImageSrc($row->wiki_id, $row->page_id);
                if (empty($img['src'])) {
                    $invalidImages[] = $record;
                } elseif ('ico' == pathinfo(strtolower($img['src']), PATHINFO_EXTENSION)) {
                    $iconsWhere[] = $record;
                } else {
                    $imageList[] = array('wikiId' => $row->wiki_id, 'pageId' => $row->page_id, 'state' => $row->state, 'src' => $img['src'], 'url' => $img['page'], 'priority' => $row->priority, 'flags' => $row->flags);
                }
            } else {
                $unusedImages[] = $record;
            }
        }
        $commit = false;
        if (count($invalidImages) > 0) {
            $db->update('image_review', array('state' => ImageReviewStatuses::STATE_INVALID_IMAGE), array(implode(' OR ', $invalidImages)), __METHOD__);
            $commit = true;
        }
        if (count($iconsWhere) > 0) {
            $db->update('image_review', array('state' => ImageReviewStatuses::STATE_ICO_IMAGE), array(implode(' OR ', $iconsWhere)), __METHOD__);
            $commit = true;
        }
        if (count($unusedImages) > 0) {
            $db->update('image_review', array('reviewer_id = null', 'state' => $state), array(implode(' OR ', $unusedImages)), __METHOD__);
            $commit = true;
            error_log("ImageReview : returning " . count($unusedImages) . " back to the queue");
        }
        if ($commit) {
            $db->commit();
        }
        error_log("ImageReview : fetched new " . count($imageList) . " images");
        $this->wf->ProfileOut(__METHOD__);
        return $imageList;
    }
コード例 #5
0
 /**
  * get image list from reviewer id based on the timestamp
  * Note: NOT update image state
  * @param integer $timestamp review_end
  * @return array images
  */
 public function refetchImageListByTimestamp($timestamp)
 {
     wfProfileIn(__METHOD__);
     $db = $this->getDatawareDB(DB_SLAVE);
     // try to re-fetch the previuos set of images
     // TODO: optimize it, so we don't do it on every request
     $review_start = wfTimestamp(TS_DB, $timestamp);
     $result = $db->select(array('image_review'), array('wiki_id, page_id, state, flags, priority'), array('review_start' => $review_start, 'reviewer_id' => $this->user_id), __METHOD__, array('ORDER BY' => 'priority desc, last_edited desc', 'LIMIT' => self::LIMIT_IMAGES));
     $imageList = array();
     while ($row = $db->fetchObject($result)) {
         $img = ImagesService::getImageSrc($row->wiki_id, $row->page_id);
         $wikiRow = WikiFactory::getWikiByID($row->wiki_id);
         $tmp = array('wikiId' => $row->wiki_id, 'pageId' => $row->page_id, 'state' => $row->state, 'src' => $img['src'], 'priority' => $row->priority, 'url' => $img['page'], 'flags' => $row->flags, 'wiki_url' => isset($wikiRow->city_url) ? $wikiRow->city_url : '', 'user_page' => '');
         if (!empty($tmp['src']) && !empty($tmp['url'])) {
             $imageList[] = $tmp;
         }
     }
     $db->freeResult($result);
     WikiaLogger::instance()->info("ImageReviewLog", ['method' => __METHOD__, 'message' => "Refetched " . count($imageList) . " images based on timestamp"]);
     wfProfileOut(__METHOD__);
     return $imageList;
 }