/**
  * @desc A file upload verification hook; if it returns false UploadBase::verifyUpload() will return UploadBase::HOOK_ABORTED error; we return it here when somebody tries to upload visualization files manually not on development environment
  *
  * @param string $destName
  * @param string $tempPath
  * @param $error
  *
  * @return bool true because it's a hook
  */
 public static function UploadVerification($destName, $tempPath, &$error)
 {
     $promoImage = PromoImage::fromPathname($destName);
     if ($promoImage->isValid() and $promoImage->getCityId() == F::app()->wg->cityId) {
         // you cannot upload to this wiki an image with database name the same as this wiki
         $error = wfMsg('promote-manual-upload-error');
         return false;
     } else {
         return true;
     }
 }
Exemplo n.º 2
0
 /**
  * Get details about one or more wikis
  *
  * @param Array $wikiIds An array of one or more wiki ID's
  * @param bool $getBlocked If set to true, will return also blocked (not displayed on global page) wikias
  *
  * @return Array A collection of results, the index is the wiki ID and each item has a name,
  * url, lang, hubId, headline, desc, image and flags index.
  */
 public function getDetails(array $wikiIds = null, $getBlocked = false)
 {
     wfProfileIn(__METHOD__);
     $results = array();
     if (!empty($wikiIds)) {
         $notFound = array();
         foreach ($wikiIds as $index => $val) {
             $val = (int) $val;
             if (!empty($val)) {
                 $cacheKey = wfSharedMemcKey(__METHOD__, self::CACHE_VERSION, $val);
                 $item = $this->wg->Memc->get($cacheKey);
                 if (is_array($item)) {
                     $results[$val] = $item;
                 } else {
                     $notFound[] = $val;
                 }
             }
         }
         $wikiIds = $notFound;
     }
     if (!empty($wikiIds)) {
         $db = $this->getSharedDB();
         $where = array('city_list.city_public' => 1, 'city_list.city_id IN (' . implode(',', $wikiIds) . ')');
         if (!$getBlocked) {
             $where[] = '((city_visualization.city_flags & ' . self::FLAG_BLOCKED . ') != ' . self::FLAG_BLOCKED . ' OR city_visualization.city_flags IS NULL)';
         }
         $rows = $db->select(array('city_visualization', 'city_list'), array('city_list.city_id', 'city_list.city_title', 'city_list.city_url', 'city_visualization.city_lang_code', 'city_visualization.city_vertical', 'city_visualization.city_headline', 'city_visualization.city_description', 'city_visualization.city_main_image', 'city_visualization.city_flags'), $where, __METHOD__, array(), array('city_visualization' => array('LEFT JOIN', 'city_list.city_id = city_visualization.city_id')));
         while ($row = $db->fetchObject($rows)) {
             $item = array('name' => $row->city_title, 'url' => $row->city_url, 'lang' => $row->city_lang_code, 'hubId' => $row->city_vertical, 'headline' => $row->city_headline, 'desc' => $row->city_description, 'image' => PromoImage::fromPathname($row->city_main_image)->ensureCityIdIsSet($row->city_id)->getPathname(), 'flags' => array('official' => ($row->city_flags & self::FLAG_OFFICIAL) == self::FLAG_OFFICIAL, 'promoted' => ($row->city_flags & self::FLAG_PROMOTED) == self::FLAG_PROMOTED));
             $cacheKey = wfSharedMemcKey(__METHOD__, self::CACHE_VERSION, $row->city_id);
             $this->wg->Memc->set($cacheKey, $item, 43200);
             $results[$row->city_id] = $item;
         }
     }
     wfProfileOut(__METHOD__);
     return $results;
 }
<?php

// get wiki thumbnail and thumbnail tracking
$isOnWikiMatch = isset($result['onWikiMatch']) && $result['onWikiMatch'];
$imageFileName = PromoImage::fromPathname($result['image_s'])->ensureCityIdIsSet($result['id'])->getPathname();
$imageOriginalURL = ImagesService::getImageSrcByTitle($corporateWikiId, $imageFileName, WikiaSearchController::CROSS_WIKI_PROMO_THUMBNAIL_WIDTH, WikiaSearchController::CROSS_WIKI_PROMO_THUMBNAIL_HEIGHT);
if (!empty($imageOriginalURL)) {
    $imageURL = ImagesService::overrideThumbnailFormat($imageOriginalURL, ImagesService::EXT_JPG);
    $thumbTracking = 'class="wiki-thumb-tracking" data-pos="' . $pos . '" data-event="search_click_wiki-thumb"';
}
if (empty($imageURL)) {
    // display placeholder image if no thumbnail
    $imageURL = $wg->ExtensionsPath . '/wikia/Search/images/wiki_image_placeholder.png';
    $thumbTracking = 'class="wiki-thumb-tracking" data-pos="' . $pos . '" data-event="search_click_wiki-no-thumb"';
}
$service = new Wikia\Search\MediaWikiService();
$pagesMsg = $service->shortnumForMsg($result['articles_i'] ?: 0, 'wikiasearch2-pages');
$imgMsg = $service->shortnumForMsg($result['images_i'] ?: 0, 'wikiasearch2-images');
$videoMsg = $service->shortnumForMsg($result['videos_i'] ?: 0, 'wikiasearch2-videos');
$title = ($sn = $result->getText('sitename_txt')) ? $sn : $result->getText('headline_txt');
$url = $result->getText('url');
?>

<li class="result">
	<?php 
$suffix = $result['exactWikiMatch'] ? "match" : "wiki";
$trackingData = 'class="result-link" data-pos="' . $pos . '" data-event="search_click_' . $suffix . '"';
?>
	<a href="<?php 
echo $url;
?>
 /**
  * @param $targetWikiId
  * @param $targetWikiLang
  * @param $images
  */
 private function addImagesToPromoteDb($targetWikiId, $targetWikiLang, $images)
 {
     global $wgExternalSharedDB;
     $imagesToAdd = [];
     foreach ($images as $image) {
         $promoImage = \PromoImage::fromPathname($image['name'])->ensureCityIdIsSet($targetWikiId);
         $imageData = new \stdClass();
         $imageData->city_id = $targetWikiId;
         $imageData->page_id = $image['id'];
         $imageData->city_lang_code = $targetWikiLang;
         $imageData->image_index = $promoImage->getType();
         $imageData->image_name = $promoImage->getPathname();
         $imageData->image_review_status = \ImageReviewStatuses::STATE_APPROVED;
         $imageData->last_edited = date('Y-m-d H:i:s');
         $imageData->review_start = null;
         $imageData->review_end = null;
         $imageData->reviewer_id = null;
         $imagesToAdd[] = $imageData;
     }
     if (count($imagesToAdd) > 0) {
         $dbm = wfGetDB(DB_MASTER, array(), $wgExternalSharedDB);
         $deleteArray = [];
         $insertArray = [];
         foreach ($imagesToAdd as $image) {
             $tmpArr = array();
             foreach ($image as $field => $value) {
                 $tmpArr[$field] = $value;
             }
             $insertArray[] = $tmpArr;
             $deleteArray[] = $image->page_id;
         }
         (new \WikiaSQL())->DELETE('city_visualization_images')->WHERE('page_id')->IN($deleteArray)->AND_('city_id')->EQUAL_TO($targetWikiId)->run($dbm);
         (new \WikiaSQL())->INSERT('city_visualization_images', array_keys($insertArray[0]))->VALUES($insertArray)->run($dbm);
     }
 }
Exemplo n.º 5
0
 public function saveImagesForReview($cityId, $langCode, $images, $imageReviewStatus = ImageReviewStatuses::STATE_UNREVIEWED)
 {
     $currentImages = $this->getImagesFromReviewTable($cityId, $langCode);
     $reversedImages = array_flip($images);
     $imagesToModify = array();
     foreach ($currentImages as $image) {
         if (isset($reversedImages[$image->image_name])) {
             $image->last_edited = date('Y-m-d H:i:s');
             $image->image_review_status = $imageReviewStatus;
             $imagesToModify[] = $image;
             unset($reversedImages[$image->image_name]);
         }
     }
     $newImages = array_flip($reversedImages);
     $imagesToAdd = array();
     foreach ($newImages as $image) {
         $imageData = new stdClass();
         $imageIndex = PromoImage::fromPathname($image)->ensureCityIdIsSet($cityId)->getType();
         $title = Title::newFromText($image, NS_FILE);
         $imageData->city_id = $cityId;
         $imageData->page_id = $title->getArticleId();
         $imageData->city_lang_code = $langCode;
         $imageData->image_index = $imageIndex;
         $imageData->image_name = $image;
         $imageData->image_review_status = $imageReviewStatus;
         $imageData->last_edited = date('Y-m-d H:i:s');
         $imageData->review_start = null;
         $imageData->review_end = null;
         $imageData->reviewer_id = null;
         $imagesToAdd[] = $imageData;
     }
     if (!empty($imagesToAdd) || !empty($imagesToModify)) {
         $dbm = wfGetDB(DB_MASTER, array(), $this->wg->ExternalSharedDB);
         $dbm->begin(__METHOD__);
         foreach ($imagesToAdd as $image) {
             $insertArray = array();
             foreach ($image as $field => $value) {
                 $insertArray[$field] = $value;
             }
             $dbm->insert(self::CITY_VISUALIZATION_IMAGES_TABLE_NAME, $insertArray);
         }
         foreach ($imagesToModify as $image) {
             $updateArray = array();
             $image->reviewer_id = null;
             $image->review_start = null;
             $image->review_end = null;
             $oldPageId = $image->page_id;
             $title = Title::newFromText($image->image_name, NS_FILE);
             if ($title instanceof Title) {
                 $image->page_id = $title->getArticleId();
             }
             foreach ($image as $field => $value) {
                 $updateArray[$field] = $value;
             }
             $dbm->update(self::CITY_VISUALIZATION_IMAGES_TABLE_NAME, $updateArray, array('city_id' => $image->city_id, 'page_id' => $oldPageId, 'city_lang_code' => $image->city_lang_code));
         }
         $dbm->commit(__METHOD__);
     }
 }
Exemplo n.º 6
0
 /**
  * @desc Adding data of wikis imported on wikia.com by import script
  *
  * @param $targetWikiId
  * @param $targetWikiLang
  * @param $images
  */
 protected function addImagesToPromoteDb($targetWikiId, $targetWikiLang, $images)
 {
     global $wgExternalSharedDB;
     foreach ($images as $image) {
         $imageData = new stdClass();
         $promoImage = PromoImage::fromPathname($image['name'])->ensureCityIdIsSet($targetWikiId);
         $imageData->city_id = $targetWikiId;
         $imageData->page_id = $image['id'];
         $imageData->city_lang_code = $targetWikiLang;
         $imageData->image_index = $promoImage->getType();
         $imageData->image_name = $promoImage->getPathname();
         $imageData->image_review_status = ImageReviewStatuses::STATE_APPROVED;
         $imageData->last_edited = date('Y-m-d H:i:s');
         $imageData->review_start = null;
         $imageData->review_end = null;
         $imageData->reviewer_id = null;
         $imagesToAdd[] = $imageData;
     }
     $dbm = wfGetDB(DB_MASTER, array(), $wgExternalSharedDB);
     $deleteArray = array();
     $insertArray = array();
     foreach ($imagesToAdd as $image) {
         $tmpArr = array();
         foreach ($image as $field => $value) {
             $tmpArr[$field] = $value;
         }
         $insertArray[] = $tmpArr;
         $deleteArray[] = $image->page_id;
     }
     $dbm->begin(__METHOD__);
     $sql = 'DELETE FROM city_visualization_images WHERE page_id IN (' . $dbm->makeList($deleteArray) . ') AND city_id = \'' . $targetWikiId . '\'';
     $dbm->query($sql);
     $dbm->commit(__METHOD__);
     $dbm->begin(__METHOD__);
     $dbm->insert('city_visualization_images', $insertArray);
     $dbm->commit(__METHOD__);
 }
 protected function saveAdditionalFiles($additionalImagesNames)
 {
     $unchangedTypes = array();
     $imagesToProcess = array();
     $allFiles = array();
     foreach ($additionalImagesNames as $singleFileName) {
         $promoImage = PromoImage::fromPathname($singleFileName);
         if (!$promoImage->isType(PromoImage::INVALID)) {
             // check if file exists, if not do not add it to processed files, effectively removing it
             $file = GlobalFile::newFromText($promoImage->getPathname(), $this->wg->cityId);
             if ($file->exists()) {
                 array_push($promoImages, $promoImage);
             }
             if (in_array($unchangedTypes, $promoImage->getType())) {
                 WikiaLogger::instance()->info("SpecialPromote additional files duplicated type", ['method' => __METHOD__, 'type_duplicated' => $promoImage->getType()]);
             } else {
                 array_push($unchangedTypes, $promoImage->getType());
             }
             array_push($allFiles, $promoImage);
         } else {
             array_push($imagesToProcess, $singleFileName);
         }
     }
     $freeImageTypeSlots = array_diff(PromoImage::listAllAdditionalTypes(), $unchangedTypes);
     foreach ($imagesToProcess as $uploadedImageFileName) {
         $imageType = array_shift($freeImageTypeSlots);
         if (!empty($imageType)) {
             $promoImage = new PromoImage($imageType, $this->wg->DBname);
             $promoImage->processUploadedFile($uploadedImageFileName);
             array_push($allFiles, $promoImage);
         } else {
             WikiaLogger::instance()->info("SpecialPromote too many uploaded files", ['method' => __METHOD__]);
             break;
         }
     }
     foreach ($freeImageTypeSlots as $imageType) {
         $promoImage = new PromoImage($imageType, $this->wg->DBname);
         // attempt to delete leftover image types from current wiki
         if ($promoImage->getOriginFile(F::app()->wg->cityId)->exists()) {
             $promoImage->deleteImage();
         }
         // attempt to delete leftover image types from corporate wiki
         if ($promoImage->corporateFileByLang($this->wg->ContLanguageCode)->exists()) {
             $promoImage->deleteImageFromCorporate();
         }
     }
     return $allFiles;
 }
 public static function fileExists(PromoImage $promoImage, $cityId)
 {
     $f = GlobalFile::newFromText($promoImage->getPathname(), $cityId);
     $title = GlobalTitle::newFromText($promoImage->getPathname(), NS_FILE, $cityId);
     return $title->exists() && $f->exists();
 }
Exemplo n.º 9
0
 public static function srcFileExists(PromoImage $targetPromoImage)
 {
     $promoImage = new PromoImage($targetPromoImage->getType());
     $title = GlobalTitle::newFromText($promoImage->getPathname(), NS_FILE, $targetPromoImage->cityId);
     //		$f = GlobalFile::newFromText($promoImage->getPathname(), $targetPromoImage->getCityId());
     return $title->exists();
 }