public function index()
 {
     if (!$this->checkAccess()) {
         return false;
     }
     $this->wg->out->setPageTitle(wfMsg('promote-title'));
     if (!$this->app->checkSkin('oasis')) {
         $this->wg->out->addWikiMsg('promote-error-oasis-only');
         $this->skipRendering();
         return true;
     }
     $this->response->addAsset('extensions/wikia/SpecialPromote/js/SpecialPromote.js');
     JSMessages::enqueuePackage('SpecialPromote', JSMessages::EXTERNAL);
     $this->minHeaderLength = $this->helper->getMinHeaderLength();
     $this->maxHeaderLength = $this->helper->getMaxHeaderLength();
     $this->minDescriptionLength = $this->helper->getMinDescriptionLength();
     $this->maxDescriptionLength = $this->helper->getMaxDescriptionLength();
     $this->wikiHeadline = $this->helper->getWikiHeadline();
     $this->wikiDesc = $this->helper->getWikiDesc();
     $this->mainImage = $this->helper->getMainImage();
     $this->additionalImages = $this->helper->getAdditionalImages();
     $this->wikiStatus = $this->helper->getWikiStatusMessage($this->wg->CityId, $this->wg->contLang->getCode());
     $cityVisualization = new CityVisualization();
     $this->isCorpLang = $cityVisualization->isCorporateLang($this->wg->contLang->getCode());
 }
 protected function initializeSkippedWikiList()
 {
     $cityVisualization = new CityVisualization();
     $corporateSites = $cityVisualization->getVisualizationWikisData();
     $dbNames = array();
     foreach ($corporateSites as $site) {
         $dbNames[] = $site['db'];
     }
     $this->dbNamesToBeSkipped = $dbNames;
 }
 /**
  * Called once a file has been deleted.
  *
  * @param $file reference to the deleted file
  * @param $oldimage in case of the deletion of an old image, the name of the old file
  * @param $article in case all revisions of the file have been deleted a reference to the article associated with the file.
  * @see http://www.mediawiki.org/wiki/Manual:Hooks/FileDeleteComplete
  */
 public static function onFileDeleteComplete($file, $oldimage, $page)
 {
     /**
      * No $page when deleting an old image ($oldimage). Nothing to do.
      *
      * @see FileDeleteForm::doDelete()
      */
     if (!$page instanceof Page) {
         return true;
     }
     global $wgCityId, $wgContLang;
     $visualization = new CityVisualization();
     $visualization->removeImageFromReviewByName($wgCityId, $page->getTitle()->getText(), $wgContLang->getCode());
     $visualization->purgeWikiPromoteDataCache($wgCityId, $wgContLang->getCode());
     return true;
 }
 public function updateImageState($images, $action = '')
 {
     wfProfileIn(__METHOD__);
     $approvalList = array();
     $rejectionList = array();
     $deletionList = array();
     $statsInsert = array();
     $taskAdditionList = array();
     $sqlWhere = array(ImageReviewStatuses::STATE_APPROVED_AND_TRANSFERRING => array(), ImageReviewStatuses::STATE_REJECTED => array(), ImageReviewStatuses::STATE_QUESTIONABLE => array());
     foreach ($images as $image) {
         if ($image['state'] == ImageReviewStatuses::STATE_APPROVED) {
             //for promote Image use temporary approval state as it will be used to supervise image copy
             $image['state'] = ImageReviewStatuses::STATE_APPROVED_AND_TRANSFERRING;
             $sqlWhere[ImageReviewStatuses::STATE_APPROVED_AND_TRANSFERRING][] = "( city_id = {$image['wikiId']} AND page_id = {$image['pageId']}) ";
             $approvalList[] = $image;
             $visualization = new CityVisualization();
             $targetWikiId = $visualization->getTargetWikiId($image['lang']);
             if (empty($taskAdditionList[$targetWikiId])) {
                 $taskAdditionList[$targetWikiId] = array();
             }
             if (empty($taskAdditionList[$targetWikiId][$image['wikiId']])) {
                 $taskAdditionList[$targetWikiId][$image['wikiId']] = array();
             }
             $taskAdditionList[$targetWikiId][$image['wikiId']][] = array('id' => $image['pageId'], 'name' => $image['name']);
         } elseif ($image['state'] == ImageReviewStatuses::STATE_REJECTED) {
             $sqlWhere[ImageReviewStatuses::STATE_REJECTED][] = "( city_id = {$image['wikiId']} AND page_id = {$image['pageId']}) ";
             $rejectionList[] = $image;
         } elseif ($image['state'] == ImageReviewStatuses::STATE_DELETED) {
             $sqlWhere[ImageReviewStatuses::STATE_DELETED][] = "( city_id = {$image['wikiId']} AND page_id = {$image['pageId']}) ";
             $deletionList[] = $image;
         } elseif ($image['state'] == ImageReviewStatuses::STATE_QUESTIONABLE) {
             $sqlWhere[ImageReviewStatuses::STATE_QUESTIONABLE][] = "( city_id = {$image['wikiId']} AND page_id = {$image['pageId']}) ";
         }
     }
     $statsInsert[] = array('city_id' => $image['wikiId'], 'page_id' => $image['pageId'], 'review_state' => $image['state'], 'reviewer_id' => $this->wg->user->getId());
     foreach ($sqlWhere as $state => $where) {
         if (!empty($where)) {
             $db = wfGetDB(DB_MASTER, array(), $this->wg->ExternalSharedDB);
             $db->update('city_visualization_images', array('reviewer_id' => $this->wg->user->getId(), 'image_review_status' => $state, 'review_end = now()'), array(implode(' OR ', $where)), __METHOD__);
             $db->commit();
         }
     }
     $this->createUploadTask($taskAdditionList);
     $this->saveStats($statsInsert, $sqlWhere, $action);
     wfProfileOut(__METHOD__);
 }
 private function syncAdditionalImages($sourceWikiId, $sourceWikiLang, $deletedImages)
 {
     $wikiData = $this->model->getWikiData($sourceWikiId, $sourceWikiLang, $this->helper);
     $data = $this->getWikiCityImages($wikiData['images'], $deletedImages);
     if (isset($data['city_images'])) {
         $data['city_images'] = json_encode($data['city_images']);
     }
     return $data;
 }
 public function removeFlag($wikiId, $flag, $corpWikiId, $langCode)
 {
     wfProfileIn(__METHOD__);
     /* @var $visualization CityVisualization */
     $visualization = new CityVisualization();
     $result = $visualization->removeFlag($wikiId, $langCode, $flag);
     if ($result === true) {
         //purge cache
         //wiki cache
         $visualization->getList($corpWikiId, $langCode, true);
         $memcKey = $visualization->getWikiDataCacheKey($visualization->getTargetWikiId($langCode), $wikiId, $langCode);
         $this->wg->Memc->set($memcKey, null);
         //visualization list cache
         $visualization->purgeVisualizationWikisListCache($corpWikiId, $langCode);
         wfProfileOut(__METHOD__);
         return true;
     }
     wfProfileOut(__METHOD__);
     return false;
 }
			<td>
				<a href="#" class="status-official" data-id="<?php 
    echo $wiki->city_id;
    ?>
" data-vertical="<?php 
    echo $wiki->city_vertical;
    ?>
" data-flags="<?php 
    echo CityVisualization::isOfficialWiki($wiki->city_flags);
    ?>
" data-flag-type="<?php 
    echo WikisModel::FLAG_OFFICIAL;
    ?>
">
					<?php 
    echo CityVisualization::isOfficialWiki($wiki->city_flags) ? wfMessage('manage-wikia-home-wiki-list-official-yes')->text() : wfMessage('manage-wikia-home-wiki-list-official-no')->text();
    ?>
				</a>
			</td>
			<td>
				<?php 
    $i = 1;
    ?>
				<?php 
    foreach ($collections as $collection) {
        ?>
					<label><input type="checkbox" class="collection-checkbox" value="<?php 
        echo $collection['id'];
        ?>
" <?php 
        if (in_array($collection['id'], $wiki->collections)) {
 /**
  * get data about corporate wikis
  * @return array
  */
 protected function getVisualizationData()
 {
     $visualizationModel = new CityVisualization();
     return $visualizationModel->getVisualizationWikisData();
 }
    ?>
				</a>
			</td>
			<td>
				<a href="#" class="status-promoted" data-id="<?php 
    echo $wiki->city_id;
    ?>
" data-vertical="<?php 
    echo $wiki->city_vertical;
    ?>
" data-flags="<?php 
    echo CityVisualization::isPromotedWiki($wiki->city_flags);
    ?>
">
					<?php 
    echo CityVisualization::isPromotedWiki($wiki->city_flags) ? wfMsg('manage-wikia-home-wiki-list-blocked-yes') : wfMsg('manage-wikia-home-wiki-list-blocked-no');
    ?>
				</a>
			</td>
		</tr>
		<?php 
}
?>
	</tbody>
</table>

<?php 
if (!empty($pagination)) {
    ?>
	<?php 
    echo $pagination;
 public function getWikiData($wikiId, $langCode)
 {
     $visualization = new CityVisualization();
     $wikiData = $visualization->getWikiDataForPromote($wikiId, $langCode);
     return $this->sanitizeWikiData($wikiData);
 }
 /**
  * Add wiki (wiki id) to selected collection
  *
  * @param $cityId
  * @param $collectionId
  */
 public function addWikiToCollection($collectionId, $cityId)
 {
     $collection = $this->getById($collectionId);
     $cityVisualization = new CityVisualization();
     $wikiData = $cityVisualization->getWikiDataForVisualization($cityId, $collection['lang_code']);
     if (empty($wikiData['main_image'])) {
         $status = ['value' => false, 'message' => wfMessage('manage-wikia-home-collections-add-failure-image', $wikiData['name'])->text()];
     } else {
         if (!$this->checkWikiCollectionExists($collectionId, $cityId)) {
             $db = wfGetDB(DB_MASTER, array(), $this->wg->ExternalSharedDB);
             $insertData = ['collection_id' => $collectionId, 'city_id' => $cityId];
             $db->insert(self::COLLECTIONS_CV_TABLE, $insertData);
             $db->commit();
             $this->clearCache($collection['lang_code']);
             $this->clearWikiCache($cityId);
             $status = ['value' => true, 'message' => wfMessage('manage-wikia-home-collections-add-success')->plain()];
         } else {
             $status = ['value' => false, 'message' => wfMessage('manage-wikia-home-collections-add-failure-already-exists')->plain()];
         }
     }
     return $status;
 }
 /**
  * @param string $imageName
  * @param string $lang
  * @param int $wikiId
  * @return GlobalFile|null
  */
 protected function findGlobalFileImage($imageName, $lang, $wikiId)
 {
     //try to find image on lang specific corporate wiki
     $f = null;
     $visualizationModel = new CityVisualization();
     $cityList = $visualizationModel->getVisualizationWikisData();
     if (isset($cityList[$lang])) {
         $f = GlobalFile::newFromText($imageName, $cityList[$lang]['wikiId']);
     } else {
         //if image wasn't found, try to find it on wiki itself
         $promoImage = (new PromoImage(PromoImage::MAIN))->setCityId($wikiId);
         $f = $promoImage->getOriginFile();
     }
     return $f;
 }
 public function getWikisInVisualisationAsCSV()
 {
     wfProfileIn(__METHOD__);
     global $wgOut;
     if (!$this->checkAccess()) {
         wfProfileOut(__METHOD__);
         $this->response->setHeader('Cache-Control', 'no-cache');
         throw new PermissionsException('managewikiahome');
     }
     // get data
     $visualizationLang = $this->request->getVal('lang', $this->wg->contLang->getCode());
     $list = $this->helper->getWikisForStaffTool($this->prepareFilterOptions($visualizationLang, []));
     $collections = $this->getWikiaCollectionsModel()->getList($visualizationLang);
     $verticals = $this->helper->getWikiVerticals();
     // output data in csv format
     $out = fopen('php://memory', 'w');
     // header
     $outHeader = ['ID', 'Vertical', 'Title', 'Is blocked?', 'Is promoted?', 'Is official?'];
     foreach ($collections as $collection) {
         $outHeader[] = 'In collection: ' . $collection['name'] . '?';
     }
     fputcsv($out, $outHeader);
     foreach ($list as $wiki) {
         $outLine = [$wiki->city_id, $verticals[$wiki->city_vertical], $wiki->city_title, CityVisualization::isBlockedWiki($wiki->city_flags) ? 1 : 0, CityVisualization::isPromotedWiki($wiki->city_flags) ? 1 : 0, CityVisualization::isOfficialWiki($wiki->city_flags) ? 1 : 0];
         foreach ($collections as $collection) {
             $outLine[] = in_array($collection['id'], $wiki->collections) ? 1 : 0;
         }
         fputcsv($out, $outLine);
     }
     fseek($out, 0);
     $csv = stream_get_contents($out);
     fclose($out);
     // turn off usual rendering
     $wgOut->disable();
     // set up headers
     $this->response->setFormat(WikiaResponse::FORMAT_RAW);
     $this->response->setHeader('Cache-Control', 'private');
     $this->response->setHeader('Content-Description', 'File Transfer');
     $this->response->setHeader('Content-Disposition', 'attachment; filename=ManageWikiaHomeWikisList-' . $visualizationLang . '.csv');
     $this->response->setHeader('Content-Transfer-Encoding', 'binary');
     $this->response->setContentType('application/octet-stream');
     $this->response->setBody($csv);
     wfProfileOut(__METHOD__);
 }
 /**
  * Get corporate wikis languages
  *
  * @return array
  */
 public function getCorporateWikisLanguages()
 {
     $visualizationModel = new CityVisualization();
     $wikisData = $visualizationModel->getVisualizationWikisData();
     $regions = [];
     foreach ($wikisData as $wikiData) {
         $regions[$wikiData['lang']] = Language::getLanguageName($wikiData['lang']);
     }
     return $regions;
 }
Beispiel #15
0
 protected function removalTaskHelper($imageName)
 {
     $visualization = new CityVisualization();
     $content_lang = $this->wg->contLang->getCode();
     //create task only for languages which have corporate wiki
     if ($visualization->isCorporateLang($content_lang)) {
         $deletion_list = array($content_lang => array($this->wg->cityId => array($imageName)));
         wfRunHooks('CreatePromoImageReviewTask', ['delete', $deletion_list]);
     }
 }
 /**
  * get wiki info ( wikiname, description, url, status, images )
  * @param integer $wikiId
  * @param string $langCode
  * @param WikiDataGetter $dataGetter
  * @return array wikiInfo
  */
 public function getWikiInfo($wikiId, $langCode, WikiDataGetter $dataGetter)
 {
     $this->wf->ProfileIn(__METHOD__);
     $wikiInfo = array('name' => '', 'headline' => '', 'description' => '', 'url' => '', 'new' => 0, 'hot' => 0, 'official' => 0, 'promoted' => 0, 'blocked' => 0, 'images' => array());
     if (!empty($wikiId)) {
         $wiki = F::build('WikiFactory', array($wikiId), 'getWikiById');
         if (!empty($wiki)) {
             $wikiInfo['url'] = $wiki->city_url . '?redirect=no';
         }
         $wikiData = $dataGetter->getWikiData($wikiId, $langCode);
         if (!empty($wikiData)) {
             $wikiInfo['name'] = $wikiData['name'];
             $wikiInfo['headline'] = $wikiData['headline'];
             $wikiInfo['description'] = $wikiData['description'];
             // wiki status
             $wikiInfo['new'] = intval(CityVisualization::isNewWiki($wikiData['flags']));
             $wikiInfo['hot'] = intval(CityVisualization::isHotWiki($wikiData['flags']));
             $wikiInfo['official'] = intval(CityVisualization::isOfficialWiki($wikiData['flags']));
             $wikiInfo['promoted'] = intval(CityVisualization::isPromotedWiki($wikiData['flags']));
             $wikiInfo['blocked'] = intval(CityVisualization::isBlockedWiki($wikiData['flags']));
             $wikiInfo['images'] = array();
             if (!empty($wikiData['main_image'])) {
                 $wikiInfo['images'][] = $wikiData['main_image'];
             }
             $wikiData['images'] = !empty($wikiData['images']) ? (array) $wikiData['images'] : array();
             // wiki images
             if (!empty($wikiData['images'])) {
                 $wikiInfo['images'] = array_merge($wikiInfo['images'], $wikiData['images']);
             }
         }
     }
     $this->wf->ProfileOut(__METHOD__);
     return $wikiInfo;
 }
 public function getMemcKey($wikiId, $langCode)
 {
     /** @var $visualization CityVisualization */
     $visualization = new CityVisualization();
     return $visualization->getWikiDataCacheKey($visualization->getTargetWikiId($langCode), $wikiId, $langCode);
 }
 protected function checkWikiStatus($wikiId, $langCode)
 {
     $wikiStatus = ['hasImagesRejected' => false, 'hasImagesInReview' => false, 'isApproved' => false, 'isAutoApproved' => false];
     WikiaLogger::instance()->debug("SpecialPromote", ['method' => __METHOD__, 'wikiId' => $wikiId, 'lang' => $langCode]);
     $visualization = new CityVisualization();
     $wikiDataVisualization = $visualization->getWikiDataForVisualization($wikiId, $langCode);
     $mainImage = $this->getMainImage();
     $additionalImages = $this->getAdditionalImages();
     if (!empty($wikiDataVisualization['main_image'])) {
         $wikiStatus['isApproved'] = true;
     }
     $imageStatuses = array();
     if ($mainImage) {
         $imageStatuses[] = $mainImage['review_status'];
     }
     if ($additionalImages) {
         foreach ($additionalImages as $image) {
             $imageStatuses[] = $image['review_status'];
         }
     }
     foreach ($imageStatuses as $status) {
         switch ($status) {
             case ImageReviewStatuses::STATE_REJECTED:
                 $wikiStatus['hasImagesRejected'] = true;
                 break;
             case ImageReviewStatuses::STATE_UNREVIEWED:
             case ImageReviewStatuses::STATE_IN_REVIEW:
             case ImageReviewStatuses::STATE_QUESTIONABLE:
             case ImageReviewStatuses::STATE_QUESTIONABLE_IN_REVIEW:
                 $wikiStatus['hasImagesInReview'] = true;
                 break;
             case ImageReviewStatuses::STATE_AUTO_APPROVED:
                 $wikiStatus['isAutoApproved'] = true;
                 break;
         }
     }
     WikiaLogger::instance()->debug("SpecialPromote", ['method' => __METHOD__, "imageStatuses" => $imageStatuses]);
     return $wikiStatus;
 }
Beispiel #19
0
 /**
  * @param $params array of options
  *
  * Valid options are:
  * noChangeThreshold (int) -> how many days of non-changed stat cause an error
  */
 public function __construct($params)
 {
     $this->baseDate = date(self::DATE_FORMAT);
     if (!empty($params['noChangeThreshold'])) {
         $this->noChangeThreshold = intval($params['noChangeThreshold']);
     } else {
         $this->noChangeThreshold = self::DEFAULT_NO_CHANGE_THRESHOLD;
     }
     if (!empty($params['watcherEmails'])) {
         $this->watcherEmails = explode(',', $params['watcherEmails']);
     } else {
         // if no emails are passed, we don't send anything
         $this->watcherEmails = [];
     }
     $this->dataStorage = new CorporateHomePageStatisticsStorage();
     $cityVisualization = new CityVisualization();
     $this->corporateWikis = $cityVisualization->getVisualizationWikisIds();
     $this->collectedErrors = [];
 }