public function execute() { global $wgRequest, $wgOut, $wgSolrHost, $wgSolrPort, $wgEnableWikiaSearchExt; if (empty($wgEnableWikiaSearchExt)) { $wgOut->addHTML("ERROR: WikiaSearch extension is disabled"); return; } $params = array(); $query = $wgRequest->getVal('q'); $sort = $wgRequest->getVal('sort'); $params['sort'] = !empty($sort) ? $sort : 'created desc'; $params['fl'] = 'title,url,html,created'; $lang = $wgRequest->getVal('uselang'); if (!empty($lang) && !empty($query)) { $query .= ' AND lang:' . strtolower($lang); } $excludeWikis = $wgRequest->getVal('exclude'); if (!empty($excludeWikis) && !empty($query)) { $excludeWikis = explode(',', $excludeWikis); foreach ($excludeWikis as $wikiDomain) { $wikiId = WikiFactory::DomainToID($wikiDomain); if (!empty($wikiId)) { $query .= ' AND !wid:' . $wikiId; } } } $namespaces = $wgRequest->getVal('ns'); if (!empty($namespaces) && !empty($query)) { $namespaces = explode(',', $namespaces); $nsQuery = ''; foreach ($namespaces as $ns) { $nsQuery .= (!empty($nsQuery) ? ' OR ' : '') . 'ns:' . $ns; } $query .= " AND ({$nsQuery})"; } $limit = $wgRequest->getVal('rows'); $limit = empty($limit) || $limit > 100 ? 15 : $limit; if (!empty($query)) { $solr = new Apache_Solr_Service($wgSolrHost, $wgSolrPort, '/solr'); try { $response = $solr->search($query, 0, $limit, $params); } catch (Exception $exception) { $wgOut->addHTML('ERROR: ' . $exception->getMessage()); } // render template $oTmpl = new EasyTemplate(dirname(__FILE__) . '/templates'); $oTmpl->set_vars(array('url' => $wgRequest->getFullRequestURL(), 'docs' => !is_null($response->response->docs) ? $response->response->docs : array(), 'dateFormat' => 'D, d M Y H:i:s O')); $wgRequest->response()->header('Cache-Control: max-age=60'); $wgRequest->response()->header('Content-Type: application/xml'); echo $oTmpl->render('results'); exit; } }
/** * Enqueue a task to rebuild the special pages localization cache * * @param string $wikiaDomain The domain name of the wikia in need of a cache rebuild * @return string Generated task ID for the rebuild task * @throws \InvalidArgumentException */ public function enqueue($wikiaDomain) { $wikiaDomain = \Wikia::fixDomainName($wikiaDomain); $wikiId = \WikiFactory::DomainToID($wikiaDomain); if (!$wikiId) { // TODO localize? throw new \InvalidArgumentException("No wikia exists for domain {$wikiaDomain}"); } $localizationTask = new UpdateSpecialPagesTask(); $localizationTask->wikiId($wikiId); $localizationTask->call('rebuildLocalizationCache'); return $localizationTask->queue(); }
/** * Get wiki ID by its url. Handles both "dev.wikia.com" and "dev" * (in the second pass it appends ".wikia.com" at the end of the supplied value). * * @param $url string * @return int Wiki ID (or null) */ protected static function getCityIdByUrl($url) { wfProfileIn(__METHOD__); $id = null; if ($url === 'dev') { $id = self::DEV_WIKI_ID; } if ($id === null) { $id = WikiFactory::DomainToID($url); } if ($id === null) { $id = WikiFactory::DomainToID($url . self::WIKIA_DEFAULT_DOMAIN_SUFFIX); } wfProfileOut(__METHOD__); return $id; }
$positive = array('y', 'Y', 'Yes', 'YES'); $negative = array('n', 'no', 'No', 'NO'); $input = trim($input); if (in_array($input, $positive)) { return true; } if (in_array($input, $negative)) { return false; } return null; } foreach ($list as $wiki) { echo "\n"; $wiki = sanitizeUrl($wiki); // get wiki ID $id = WikiFactory::DomainToID($wiki); if (empty($id)) { echo "{$wiki}: ERROR (not found in WikiFactory)\n"; continue; } // get URL, in case the one given is not the main one $oUrl = WikiFactory::getVarByName('wgServer', $id); $oLang = WikiFactory::getVarByName('wgLanguageCode', $id); $oSkin = WikiFactory::getVarByName('wgDefaultSkin', $id); if (empty($oUrl) || empty($oLang)) { // should never happen, but... echo "{$wiki}: ERROR (failed to get URL for ID {$id} or language; something's wrong)\n"; continue; } $domain = sanitizeUrl(unserialize($oUrl->cv_value)); $lang = unserialize($oLang->cv_value);
} elseif (!empty($bydb)) { Wikia::log('WikiFactory', 'compare', 'detected a bydb, using it'); $to = WikiFactory::DBtoID($bydb); Wikia::log('WikiFactory', 'compare', 'DBtoID says:' . $to); if ($to == false) { Wikia::log('WikiFactory', 'compare', 'found false, failing'); $to = null; } } elseif (!empty($byurl)) { Wikia::log('WikiFactory', 'compare', 'detected a byurl, using it'); if (strpos($byurl, '.') == false) { Wikia::log('WikiFactory', 'compare', 'no . found in input, adding .wikia.com'); #no $byurl .= '.wikia.com'; } $to = WikiFactory::DomainToID($byurl); Wikia::log('WikiFactory', 'compare', 'DomainToID says:' . $to); if ($to == false) { Wikia::log('WikiFactory', 'compare', 'found false, failing'); $to = null; } } else { #no inputs were valid or supplied } ?> <fieldset> <legend>Target Wiki</legend> <form name="wfCompareFormID" method="get"> <label for="comp-by-id">By ID:</label><input type="text" id="comp-by-id" name="id" size="3" value="<?php if ($byid) { print $byid;
private function isWikiShared($wikiName) { global $wgExternalSharedDB; $dbr = wfGetDB(DB_SLAVE, array(), $wgExternalSharedDB); $wikiID = null; $wikiDomains = ['', '.wikia.com', '.sjc.wikia-inc.com']; foreach ($wikiDomains as $wikiDomain) { if (!is_null($wikiID = \WikiFactory::DomainToID($wikiName . $wikiDomain))) { break; } } if (is_null($wikiID)) { return [false, null]; } $isShared = (new \WikiaSQL())->SELECT('city_useshared')->FROM('city_list')->WHERE('city_id')->EQUAL_TO($wikiID)->run($dbr, function ($res) use($wikiID) { /** @var \ResultWrapper $res */ if ($row = $res->fetchObject()) { if ($row->city_useshared != '1') { $this->warning('wiki does not use a shared database, message was not sent', ['wiki_id' => $wikiID]); return false; } } return true; }); return [$isShared, $wikiID]; }
public function loadDataAndUpdateDatabase() { global $wgCityId; wfProfileIn(__METHOD__); if( !$this->options->overwrittenLang ) { $wikisVisualizationLangCode = WikiFactory::getVarValueByName('wgLanguageCode', $wgCityId); } else { $wikisVisualizationLangCode = $this->options->overwrittenLang; } echo "\n"; echo 'Uploading wikis for "'.$wikisVisualizationLangCode.'" visualization: '; echo "\n"; foreach( $this->options->csvContent as $line ) { $element = str_getcsv($line, ',', '"'); if( $this->areAllRequiredWikiDataForDatabaseSet($element) ) { $wikiDomain = trim( str_replace('http://', '', $element[2]), '/'); $wikiId = WikiFactory::DomainToID($wikiDomain); $spreadSheetImageName = basename($element[4]); $wikiMainImageUrl = $element[4]; $wikiMainImageName = $this->getCorpDestImageName($wikiDomain, $spreadSheetImageName); $sliderImages = $this->getSliderImages( array_slice($element, self::SPREADSHEET_FIRST_ADD_IMG_IDX, self::SPREADSHEET_LAST_ADD_IMG_IDX) ); $wikiHeadline = !empty($element[1]) ? $element[1] : ''; $wikiDesc = !empty($element[5]) ? $element[5] : wfMsg( 'wikiahome-import-script-no-description' ); if( !$this->options->skipUpload ) { //upload main image $this->uploadImage($wikiMainImageUrl, $wikiMainImageName, $wikiId); //upload slider images $sliderUploadedImages = $this->uploadSliderImages($wikiDomain, $sliderImages, $wikiId); } if( $wikiId > 0 ) { $wikiCityVertical = HubService::getComscoreCategory($wikiId); $sliderUploadedImages = (!empty($sliderUploadedImages)) ? json_encode($sliderUploadedImages) : null; $this->addToVisualizationTable( array( 'city_id' => $wikiId, 'city_lang_code' => $wikisVisualizationLangCode, 'city_vertical' => $wikiCityVertical, 'city_headline' => $wikiHeadline, 'city_description' => $wikiDesc, 'city_main_image' => $wikiMainImageName, 'city_images' => $sliderUploadedImages, ) ); } else { $this->wikisNotAdded[] = $wikiDomain.' ('.$wikiId.') '; } } } $this->uploadImagesOnWikis(); $this->displayStatus(); wfProfileOut(__METHOD__); }
public function save() { if (!$this->wg->User->isAllowed('gameguidessponsored')) { $this->displayRestrictionError(); return false; // skip rendering } $this->response->setFormat('json'); $languages = $this->request->getArray('languages'); $err = []; if (!empty($languages)) { foreach ($languages as $lang => $videos) { foreach ($videos as $key => $video) { $wikiId = (int) WikiFactory::DomainToID($video['wiki_domain']); $video['wiki_id'] = $wikiId; $wiki = WikiFactory::getWikiByID($wikiId); $video['wiki_name'] = $wiki->city_title; $video['wiki_lang'] = $wiki->city_lang; $title = Title::newFromText($video['video_name'], NS_FILE); if (!empty($title) && $title->exists()) { $vid = wfFindFile($title); if (!empty($vid) && $vid instanceof WikiaLocalFile) { $handler = $vid->getHandler(); if ($handler instanceof OoyalaVideoHandler) { $metadata = $handler->getVideoMetadata(true); $video['video_id'] = $metadata['videoId']; $video['duration'] = WikiaFileHelper::formatDuration($metadata['duration']); $video['video_thumb'] = WikiaFileHelper::getMediaDetail($title)['imageUrl']; } else { $err[$video['video_name']] = self::VIDEO_IS_NOT_PROVIDED_BY_OOYALA; } } else { $err[$video['video_name']] = self::VIDEO_DOES_NOT_EXIST; } } else { $err[$video['video_name']] = self::VIDEO_DOES_NOT_EXIST; } $videos[$key] = $video; } $languages[$lang] = $videos; } } if (!empty($err)) { $this->response->setVal('error', $err); } else { $status = WikiFactory::setVarByName('wgWikiaGameGuidesSponsoredVideos', $this->wg->CityId, $languages); $this->response->setVal('status', $status); if ($status) { wfRunHooks('GameGuidesSponsoredVideosSave'); } } return true; }
/** * Hooks into WikiFactory to force use of the wiki which the developer * has explicitly set using this panel (if applicable). * * @return true to allow the WikiFactoryLoader to do its other necessary initalization. */ function wfDevBoxForceWiki(&$wikiFactoryLoader) { global $wgDevelEnvironment, $wgWikiFactoryDB, $wgCommandLineMode; if ($wgDevelEnvironment) { $forcedWikiDomain = getForcedWikiValue(); $cityId = WikiFactory::DomainToID($forcedWikiDomain); if (!$cityId) { // If the overridden name doesn't exist AT ALL, use a default just to let the panel run. $forcedWikiDomain = DEVBOX_DEFAULT_WIKI_DOMAIN; $cityId = WikiFactory::DomainToID($forcedWikiDomain); } if ($wgCommandLineMode) { $cityId = getenv("SERVER_ID"); $wikiFactoryLoader->mCityID = $cityId; $wikiFactoryLoader->mWikiID = $cityId; } if ($cityId) { $wikiFactoryLoader->mServerName = $forcedWikiDomain; // Need to set both in order to get our desired effects. $wikiFactoryLoader->mCityID = $cityId; $wikiFactoryLoader->mWikiID = $cityId; } // This section allows us to use c1 or c2 as a source for wiki databases // Be aware that this means the database has to be loaded in the right cluster according to wikicities! $db = wfGetDB(DB_SLAVE, "dump", $wgWikiFactoryDB); $sql = 'SELECT city_cluster from city_list where city_id = ' . $cityId; $result = $db->query($sql, __METHOD__); $row = $result->fetchRow(); $wikiFactoryLoader->mVariables["wgDBcluster"] = $row['city_cluster']; // Final sanity check to make sure our database exists if ($forcedWikiDomain != DEVBOX_DEFAULT_WIKI_DOMAIN) { $dbname = WikiFactory::DomainToDB($forcedWikiDomain); $db1 = wfGetDB(DB_SLAVE, "dump", $wgWikiFactoryDB . '_c1'); $db2 = wfGetDB(DB_SLAVE, "dump", $wgWikiFactoryDB . '_c2'); // lame $devbox_dbs = array_merge(getDevBoxOverrideDatabases($db1), getDevBoxOverrideDatabases($db2)); if (array_search($dbname, $devbox_dbs) === false) { echo "<pre>Fatal Error: No local copy of database [{$dbname}] was found.</pre>"; exit; // fatal error } } // TODO: move this into the config file global $wgReadOnly; $wgReadOnly = false; } return true; }
/** * submitForm() * * Tasks with forms execute this method to put params from form to database * * @author eloy@wikia * @access public * * @return mixed: true if success, submitted params if error */ function submitForm() { global $wgRequest, $wgOut; $iTaskID = $wgRequest->getVal("task-source-task-id"); $sTargetWiki = $wgRequest->getVal("task-target-wiki"); $sTargetWikiID = WikiFactory::DomainToID($sTargetWiki); if (!is_numeric($iTaskID) || !is_numeric($sTargetWikiID) || is_null($sTargetWikiID)) { $aFormData = array(); $aFormData["values"] = array("task-source-task-id" => $iTaskID, "task-target-wiki" => $sTargetWiki); if (!is_numeric($iTaskID)) { $aFormData["errors"]["task-source-task-id"] = "This field must not be empty and must be integer."; } if (!is_numeric($sTargetWikiID) || is_null($sTargetWikiID)) { $aFormData["errors"]["task-target-wiki"] = "This field must not be empty. Domain must be wiki.factory domain."; } return $aFormData; } else { $this->createTask(array("source-task-id" => $iTaskID, "target-wiki-id" => $sTargetWikiID)); $wgOut->addHTML(Wikia::successbox("Task added")); return true; } }
/** * sendMessageToWiki * * sends a message to specified group of users * * @access private * @author Maciej Błaszkowski (Marooned) <marooned at wikia.com> * * @param mixed $params - task arguments * * @return boolean: result of sending */ private function sendMessageToWiki($params) { global $wgExternalSharedDB; $result = true; $wikiID = null; $wikiDomains = array('', '.wikia.com', '.sjc.wikia-inc.com'); foreach ($wikiDomains as $wikiDomain) { if (!is_null($wikiID = WikiFactory::DomainToID($params['wikiName'] . $wikiDomain))) { break; } } if (is_null($wikiID)) { return false; } $DB = wfGetDB(DB_SLAVE, array(), $wgExternalSharedDB); $dbResult = $DB->Query('SELECT city_useshared' . ' FROM city_list' . " WHERE city_id = {$wikiID}" . ';', __METHOD__); if ($row = $DB->FetchObject($dbResult)) { if ($row->city_useshared != '1') { $this->log("Wiki [wiki_id = {$wikiID}] does not use shared database. Message was not sent."); return false; } } $DB->FreeResult($dbResult); $wikiDB = WikiFactory::IDtoDB($wikiID); $this->log("Look into selected wiki for users that belong to a specified group [wiki_id = {$wikiID}, wiki_db = {$wikiDB}]"); $DB = wfGetDB(DB_SLAVE); $DB->selectDB($wikiDB); $dbResult = $DB->Query('SELECT ug_user' . ' FROM user_groups' . ' WHERE ug_group = ' . $DB->AddQuotes($params['groupName']) . ';', __METHOD__); $sqlValues = array(); while ($row = $DB->FetchObject($dbResult)) { $sqlValues[] = "({$wikiID}, {$row->ug_user}, {$params['messageId']}, " . MSG_STATUS_UNSEEN . ')'; } $DB->FreeResult($dbResult); $this->log("Add records about new message to right users [wiki_id = {$wikiID}, wiki_db = {$wikiDB}, number of users = " . count($sqlValues) . "]"); if (count($sqlValues)) { $result = $this->sendMessageHelperToUsers($sqlValues); } unset($sqlValues); return $result; }
private function sendMessage($mSender, $mText, $formData) { global $wgExternalSharedDB, $wgStatsDB, $wgUser; $result = array('msgId' => null, 'errMsg' => null); $dbInsertResult = false; $mWikiId = null; $mLang = $formData['mLang']; if (is_array($mLang)) { $mLang = implode(',', $mLang); } $mRecipientId = $formData['sendModeUsers'] != 'USER' ? null : $wgUser->idFromName($formData['userName']); $mWikiName = $formData['wikiName']; $mRecipientName = $formData['userName']; $mGroupName = $formData['groupName'] == '' ? $formData['groupNameS'] : $formData['groupName']; $mSendModeWikis = $formData['sendModeWikis']; $mSendModeUsers = $formData['sendModeUsers']; $mHubId = $formData['hubId']; $mClusterId = $formData['clusterId']; $mUserNamesArr = array_unique(explode("\n", $formData['listUserNames'])); $mWikiNamesArr = array_unique(explode("\n", $formData['listWikiNames'])); //remove unnecessary data switch ($mSendModeWikis) { case 'ALL': $mWikiName = ''; $mHubId = null; $mClusterId = null; break; case 'HUB': $mWikiName = ''; $mClusterId = null; break; case 'CLUSTER': $mWikiName = ''; $mHubId = null; break; case 'WIKI': $mHubId = null; $mClusterId = null; break; case 'WIKIS': $mWikiName = count($mWikiNamesArr) . ' wikis'; $mHubId = null; $mClusterId = null; break; case 'CREATED': $mWikiName = MSG_WIKI_CREATION_DATE; $mHubId = null; $mClusterId = null; break; } switch ($mSendModeUsers) { case 'ALL': case 'ACTIVE': $mRecipientName = ''; $mGroupName = ''; break; case 'GROUP': $mRecipientName = ''; break; case 'USER': $mGroupName = ''; $mLang = MSG_LANG_ALL; break; case 'USERS': $mRecipientName = count($mUserNamesArr) . ' users'; $mGroupName = ''; $mLang = MSG_LANG_ALL; break; case 'ANONS': $mRecipientName = MSG_RECIPIENT_ANON; $mGroupName = ''; break; case 'REGISTRATION': $mRecipientName = ''; $mGroupName = ''; break; case 'EDITCOUNT': $mRecipientName = ''; $mGroupName = ''; break; } $sendToAll = $mSendModeWikis == 'ALL' && $mSendModeUsers == 'ALL'; $tmpWikiName = false; if ($mSendModeWikis == 'WIKI' && $mWikiName != '') { $tmpWikiName = $mWikiName; } if ($tmpWikiName) { $wikiDomains = array('', '.wikia.com'); foreach ($wikiDomains as $wikiDomain) { if (!is_null($mWikiId = WikiFactory::DomainToID($tmpWikiName . $wikiDomain))) { break; } } } $validDateTime = true; if ($formData['expireTimeS'] !== '') { $timestamp = wfTimestamp(TS_UNIX, $formData['expireTimeS']); if (!$timestamp) { $validDateTime = false; } $mExpire = wfTimestamp(TS_DB, $timestamp); } else { //null => expire never $mExpire = $formData['expireTime'] != '0' ? date('Y-m-d H:i:s', strtotime(ctype_digit($formData['expireTime']) ? " +{$formData['expireTime']} day" : ' +' . substr($formData['expireTime'], 0, -1) . ' hour')) : null; } if ($mSendModeWikis === 'CREATED') { $timestamp = wfTimestamp(TS_UNIX, $formData['wikiCreationDateOne']); if (!$timestamp) { $validDateTime = false; } $formData['wikiCreationDateOne'] = wfTimestamp(TS_DB, $timestamp); if ($formData['wikiCreationDateOption'] === 'between') { if ($formData['wikiCreationDateTwo'] !== '') { $timestamp = wfTimestamp(TS_UNIX, $formData['wikiCreationDateTwo']); if (!$timestamp) { $validDateTime = false; } $formData['wikiCreationDateTwo'] = wfTimestamp(TS_DB, $timestamp); } else { $validDateTime = false; } } } if ($mSendModeUsers === 'REGISTRATION') { $timestamp = wfTimestamp(TS_UNIX, $formData['registrationDateOne']); if (!$timestamp) { $validDateTime = false; } $formData['registrationDateOne'] = wfTimestamp(TS_MW, $timestamp); if ($formData['registrationDateOption'] === 'between') { if ($formData['registrationDateTwo'] !== '') { $timestamp = wfTimestamp(TS_UNIX, $formData['registrationDateTwo']); if (!$timestamp) { $validDateTime = false; } $formData['registrationDateTwo'] = wfTimestamp(TS_MW, $timestamp); } else { $validDateTime = false; } } } if (wfReadOnly()) { $reason = wfReadOnlyReason(); $result['errMsg'] = wfMsg('readonlytext', $reason); } elseif ($mText == '') { $result['errMsg'] = wfMsg('swm-error-empty-message'); } elseif (mb_strlen($mText) > 500) { $result['errMsg'] = wfMsg('swm-error-long-message'); } elseif ($mSendModeWikis == 'WIKI' && is_null($mWikiId)) { //this wiki doesn't exist $result['errMsg'] = wfMsg('swm-error-no-such-wiki'); } elseif ($mSendModeUsers == 'WIKIS' && empty($formData['listWikiNames'])) { $result['errMsg'] = wfMsg('swm-error-no-wiki-list'); } elseif ($mSendModeUsers == 'USER' && !User::idFromName($mRecipientName)) { $result['errMsg'] = wfMsg('swm-error-no-such-user'); } elseif ($mSendModeUsers == 'USERS' && empty($formData['listUserNames'])) { $result['errMsg'] = wfMsg('swm-error-no-user-list'); } elseif (!$validDateTime) { $result['errMsg'] = wfMsg('swm-error-invalid-time'); } elseif ($mSendModeUsers === 'REGISTRATION' && $formData['registrationDateOption'] === 'between' && $formData['registrationDateTwo'] <= $formData['registrationDateOne']) { $result['errMsg'] = wfMsg('swm-error-registered-tobeforefrom'); } elseif ($mSendModeWikis === 'CREATED' && $formData['wikiCreationDateOption'] === 'between' && $formData['wikiCreationDateTwo'] <= $formData['wikiCreationDateOne']) { $result['errMsg'] = wfMsg('swm-error-created-tobeforefrom'); } elseif ($mSendModeUsers === 'EDITCOUNT' && (!is_numeric($formData['editCountOne']) || $formData['editCountOption'] === 'between' && !is_numeric($formData['editCountTwo']))) { $result['errMsg'] = wfMsg('swm-error-editcount-notnumber'); } elseif ($mSendModeUsers === 'EDITCOUNT' && $formData['editCountOption'] === 'between' && $formData['editCountTwo'] <= $formData['editCountOne']) { $result['errMsg'] = wfMsg('swm-error-editcount-tolessthanfrom'); } else { global $wgParser, $wgUser; $title = Title::newFromText(uniqid('tmp')); $options = ParserOptions::newFromUser($wgUser); //Parse some wiki markup [eg. ~~~~] $mText = $wgParser->preSaveTransform($mText, $title, $wgUser, $options); $DB = wfGetDB(DB_MASTER, array(), $wgExternalSharedDB); $dbResult = (bool) $DB->Query('INSERT INTO ' . MSG_TEXT_DB . ' (msg_sender_id, msg_text, msg_mode, msg_expire, msg_recipient_name, msg_group_name, msg_wiki_name, msg_hub_id, msg_lang, msg_cluster_id)' . ' VALUES (' . $DB->AddQuotes($mSender->GetID()) . ', ' . $DB->AddQuotes($mText) . ', ' . ($sendToAll ? MSG_MODE_ALL : MSG_MODE_SELECTED) . ', ' . $DB->AddQuotes($mExpire) . ', ' . $DB->AddQuotes($mRecipientName) . ', ' . $DB->AddQuotes($mGroupName) . ', ' . $DB->AddQuotes($mWikiName) . ', ' . $DB->AddQuotes($mHubId) . ' , ' . $DB->AddQuotes($mLang) . ' , ' . $DB->AddQuotes($mClusterId) . ');', __METHOD__); if ($dbResult) { $dbInsertResult = true; $result['msgId'] = $DB->insertId(); if (is_null($mWikiId)) { $mWikiId = 0; } if ($mSendModeUsers == 'USER') { if (!is_null($mRecipientId) && !is_null($result['msgId'])) { $dbResult = (bool) $DB->Query('INSERT INTO ' . MSG_STATUS_DB . ' (msg_wiki_id, msg_recipient_id, msg_id, msg_status)' . ' VALUES (' . $DB->AddQuotes($mWikiId) . ', ' . $DB->AddQuotes($mRecipientId) . ', ' . $DB->AddQuotes($result['msgId']) . ', ' . MSG_STATUS_UNSEEN . ');', __METHOD__); $dbInsertResult &= $dbResult; } } elseif ($mSendModeWikis != 'WIKIS' && $mSendModeWikis != 'CREATED' && $mSendModeUsers == 'ANONS') { if (!is_null($result['msgId'])) { $dbResult = (bool) $DB->query('INSERT INTO ' . MSG_STATUS_DB . ' (msg_wiki_id, msg_recipient_id, msg_id, msg_status)' . ' VALUES (' . $DB->addQuotes($mWikiId) . ', 0, ' . $DB->addQuotes($result['msgId']) . ', ' . MSG_STATUS_UNSEEN . ');', __METHOD__); $dbInsertResult &= $dbResult; } } elseif ($mSendModeUsers == 'USERS') { $oTask = new SWMSendToGroupTask(); $oTask->createTask(array('messageId' => $result['msgId'], 'sendModeWikis' => $mSendModeWikis, 'sendModeUsers' => $mSendModeUsers, 'wikiName' => $mWikiName, 'groupName' => $mGroupName, 'userNames' => $mUserNamesArr, 'senderId' => $mSender->GetID(), 'senderName' => $mSender->GetName(), 'hubId' => $mHubId, 'clusterId' => $mClusterId), TASK_QUEUED, BatchTask::PRIORITY_HIGH); $result['taskId'] = $oTask->getID(); } else { switch ($mSendModeWikis) { case 'ALL': switch ($mSendModeUsers) { case 'ALL': break; case 'ACTIVE': case 'GROUP': //add task to TaskManager $oTask = new SWMSendToGroupTask(); $oTask->createTask(array('messageId' => $result['msgId'], 'sendModeWikis' => $mSendModeWikis, 'sendModeUsers' => $mSendModeUsers, 'wikiName' => $mWikiName, 'groupName' => $mGroupName, 'senderId' => $mSender->GetID(), 'senderName' => $mSender->GetName(), 'hubId' => $mHubId, 'clusterId' => $mClusterId), TASK_QUEUED, BatchTask::PRIORITY_HIGH); $result['taskId'] = $oTask->getID(); break; case 'REGISTRATION': //add task to TaskManager $oTask = new SWMSendToGroupTask(); $oTask->createTask(array('messageId' => $result['msgId'], 'sendModeWikis' => $mSendModeWikis, 'sendModeUsers' => $mSendModeUsers, 'wikiName' => $mWikiName, 'groupName' => $mGroupName, 'regOption' => $formData['registrationDateOption'], 'regStartDate' => $formData['registrationDateOne'], 'regEndDate' => $formData['registrationDateTwo'], 'senderId' => $mSender->getID(), 'senderName' => $mSender->getName(), 'hubId' => $mHubId, 'clusterId' => $mClusterId), TASK_QUEUED, BatchTask::PRIORITY_HIGH); $result['taskId'] = $oTask->getID(); break; case 'EDITCOUNT': //add task to TaskManager $oTask = new SWMSendToGroupTask(); $oTask->createTask(array('messageId' => $result['msgId'], 'sendModeWikis' => $mSendModeWikis, 'sendModeUsers' => $mSendModeUsers, 'wikiName' => $mWikiName, 'groupName' => $mGroupName, 'editCountOption' => $formData['editCountOption'], 'editCountStart' => $formData['editCountOne'], 'editCountEnd' => $formData['editCountTwo'], 'senderId' => $mSender->getID(), 'senderName' => $mSender->getName(), 'hubId' => $mHubId, 'clusterId' => $mClusterId), TASK_QUEUED, BatchTask::PRIORITY_HIGH); $result['taskId'] = $oTask->getID(); break; } break; case 'HUB': switch ($mSendModeUsers) { case 'ALL': case 'ACTIVE': case 'GROUP': //add task to TaskManager $oTask = new SWMSendToGroupTask(); $oTask->createTask(array('messageId' => $result['msgId'], 'sendModeWikis' => $mSendModeWikis, 'sendModeUsers' => $mSendModeUsers, 'wikiName' => $mWikiName, 'groupName' => $mGroupName, 'senderId' => $mSender->GetID(), 'senderName' => $mSender->GetName(), 'hubId' => $mHubId, 'clusterId' => $mClusterId), TASK_QUEUED, BatchTask::PRIORITY_HIGH); $result['taskId'] = $oTask->getID(); break; } break; case 'CLUSTER': switch ($mSendModeUsers) { case 'ALL': case 'ACTIVE': case 'GROUP': //add task to TaskManager $oTask = new SWMSendToGroupTask(); $oTask->createTask(array('messageId' => $result['msgId'], 'sendModeWikis' => $mSendModeWikis, 'sendModeUsers' => $mSendModeUsers, 'wikiName' => $mWikiName, 'groupName' => $mGroupName, 'senderId' => $mSender->GetID(), 'senderName' => $mSender->GetName(), 'hubId' => $mHubId, 'clusterId' => $mClusterId), TASK_QUEUED, BatchTask::PRIORITY_HIGH); $result['taskId'] = $oTask->getID(); break; } break; case 'WIKI': switch ($mSendModeUsers) { case 'ALL': case 'ACTIVE': $dbr = wfGetDB(DB_SLAVE, array(), $wgStatsDB); $dbResult = $dbr->select(array('`specials`.`events_local_users`'), array('user_id'), array('wiki_id' => $mWikiId), __METHOD__, array('DISTINCT')); $activeUsers = array(); while ($oMsg = $dbr->FetchObject($dbResult)) { $activeUsers[] = $oMsg->user_id; } if ($dbResult !== false) { $dbr->FreeResult($dbResult); } if (!$DB) { $DB = wfGetDB(DB_MASTER, array(), $wgExternalSharedDB); } $sqlValues = array(); foreach ($activeUsers as $activeUser) { $sqlValues[] = "({$mWikiId}, {$activeUser}, {$result['msgId']}, " . MSG_STATUS_UNSEEN . ')'; } if (count($sqlValues)) { $dbResult = (bool) $DB->Query('INSERT INTO ' . MSG_STATUS_DB . ' (msg_wiki_id, msg_recipient_id, msg_id, msg_status)' . ' VALUES ' . implode(',', $sqlValues) . ';', __METHOD__); $dbInsertResult &= $dbResult; } break; case 'GROUP': //add task to TaskManager $oTask = new SWMSendToGroupTask(); $oTask->createTask(array('messageId' => $result['msgId'], 'sendModeWikis' => $mSendModeWikis, 'sendModeUsers' => $mSendModeUsers, 'wikiName' => $mWikiName, 'groupName' => $mGroupName, 'senderId' => $mSender->GetID(), 'senderName' => $mSender->GetName(), 'hubId' => $mHubId, 'clusterId' => $mClusterId), TASK_QUEUED, BatchTask::PRIORITY_HIGH); $result['taskId'] = $oTask->getID(); break; case 'EDITCOUNT': //add task to TaskManager $oTask = new SWMSendToGroupTask(); $oTask->createTask(array('messageId' => $result['msgId'], 'sendModeWikis' => $mSendModeWikis, 'sendModeUsers' => $mSendModeUsers, 'wikiName' => $mWikiName, 'groupName' => $mGroupName, 'editCountOption' => $formData['editCountOption'], 'editCountStart' => $formData['editCountOne'], 'editCountEnd' => $formData['editCountTwo'], 'senderId' => $mSender->getID(), 'senderName' => $mSender->getName(), 'hubId' => $mHubId, 'clusterId' => $mClusterId), TASK_QUEUED, BatchTask::PRIORITY_HIGH); $result['taskId'] = $oTask->getID(); break; } break; case 'WIKIS': switch ($mSendModeUsers) { case 'ALL': case 'ACTIVE': case 'GROUP': case 'EDITCOUNT': case 'ANONS': //add task to TaskManager $oTask = new SWMSendToGroupTask(); $oTask->createTask(array('messageId' => $result['msgId'], 'sendModeWikis' => $mSendModeWikis, 'sendModeUsers' => $mSendModeUsers, 'wikiName' => $mWikiName, 'wikiNames' => $mWikiNamesArr, 'groupName' => $mGroupName, 'editCountOption' => $formData['editCountOption'], 'editCountStart' => $formData['editCountOne'], 'editCountEnd' => $formData['editCountTwo'], 'senderId' => $mSender->GetID(), 'senderName' => $mSender->GetName(), 'hubId' => $mHubId, 'clusterId' => $mClusterId), TASK_QUEUED, BatchTask::PRIORITY_HIGH); $result['taskId'] = $oTask->getID(); break; } break; case 'CREATED': switch ($mSendModeUsers) { case 'ALL': case 'ACTIVE': case 'GROUP': case 'EDITCOUNT': case 'ANONS': //add task to TaskManager $oTask = new SWMSendToGroupTask(); $oTask->createTask(array('messageId' => $result['msgId'], 'sendModeWikis' => $mSendModeWikis, 'sendModeUsers' => $mSendModeUsers, 'wikiName' => $mWikiName, 'wikiNames' => $mWikiNamesArr, 'groupName' => $mGroupName, 'wcOption' => $formData['wikiCreationDateOption'], 'wcStartDate' => $formData['wikiCreationDateOne'], 'wcEndDate' => $formData['wikiCreationDateTwo'], 'editCountOption' => $formData['editCountOption'], 'editCountStart' => $formData['editCountOne'], 'editCountEnd' => $formData['editCountTwo'], 'senderId' => $mSender->GetID(), 'senderName' => $mSender->GetName(), 'hubId' => $mHubId, 'clusterId' => $mClusterId), TASK_QUEUED, BatchTask::PRIORITY_HIGH); $result['taskId'] = $oTask->getID(); break; } break; } //end: switch ($mSendModeWikis) } //end: if ($mSendModeUsers == 'USER') } //end: if ($dbResult) => message sent } //end: else =? no errors wfDebug(basename(__FILE__) . ' || ' . __METHOD__ . " || SenderId=" . $mSender->GetID() . ", RecipientId={$mRecipientId}, Expire={$mExpire}, result=" . ($dbInsertResult ? 'true' : 'false') . "\n"); return $result; }
/** * @desc Parses the source file, retrives city_ids of wikis from the file and checks if given city_id is on the list * @param String $params city_id or comma-separated city_id list */ public function checkCityIdList($params) { if (!is_string($params)) { echo 'Invalid city id or city id list' . "\n"; return false; } $isList = strpos($params, ','); if ($isList) { $cityIdList = explode(',', $params); } else { $cityIdList = array(intval($params)); } foreach ($this->options->csvContent as $line) { $element = str_getcsv($line, ',', '"'); if ($this->areAllRequiredWikiDataForDatabaseSet($element)) { $wikiDomain = trim(str_replace('http://', '', $element[2]), '/'); $wikiId = WikiFactory::DomainToID($wikiDomain); if (in_array($wikiId, $cityIdList)) { echo 'Found: ' . $wikiId . ' in the file (' . $wikiDomain . ')' . "\n"; } } } }
/** * Hooks into WikiFactory to force use of the wiki which the developer * has explicitly set using this panel (if applicable). * * @return boolean true to allow the WikiFactoryLoader to do its other necessary initalization. */ function wfDevBoxForceWiki(WikiFactoryLoader $wikiFactoryLoader) { global $wgDevelEnvironment, $wgExternalSharedDB, $wgCommandLineMode, $wgDevboxDefaultWikiDomain; if ($wgDevelEnvironment) { $forcedWikiDomain = getForcedWikiValue(); $cityId = WikiFactory::DomainToID($forcedWikiDomain); if (!$cityId) { // If the overridden name doesn't exist AT ALL, use a default just to let the panel run. $forcedWikiDomain = $wgDevboxDefaultWikiDomain; $cityId = WikiFactory::DomainToID($forcedWikiDomain); wfDebug(__METHOD__ . ": domain forced to {$forcedWikiDomain}\n"); } if ($wgCommandLineMode) { $cityId = getenv("SERVER_ID"); if (is_numeric($cityId)) { $wikiFactoryLoader->mCityID = $cityId; $wikiFactoryLoader->mWikiID = $cityId; } else { $dbName = getenv("SERVER_DBNAME"); /** * find city_id by database name */ $dbr = WikiFactory::db(DB_SLAVE); $cityId = $dbr->selectField("city_list", array("city_id"), array("city_dbname" => $dbName), __METHOD__); if (is_numeric($cityId)) { $wikiFactoryLoader->mCityID = $cityId; $wikiFactoryLoader->mWikiID = $cityId; } } } if ($cityId) { $wikiFactoryLoader->mServerName = $forcedWikiDomain; // Need to set both in order to get our desired effects. $wikiFactoryLoader->mCityID = $cityId; $wikiFactoryLoader->mWikiID = $cityId; } // This section allows us to use c1 or c2 as a source for wiki databases // Be aware that this means the database has to be loaded in the right cluster according to wikicities! $db = WikiFactory::db(DB_SLAVE); $cluster = $db->selectField('city_list', 'city_cluster', ['city_id' => $cityId], __METHOD__); $wikiFactoryLoader->mVariables["wgDBcluster"] = $cluster; // Final sanity check to make sure our database exists if ($forcedWikiDomain != $wgDevboxDefaultWikiDomain) { // check if the wiki exist on a cluster wfDebug(__METHOD__ . ": checking if wiki #{$cityId} exists on {$cluster} cluster...\n"); $dbname = WikiFactory::DomainToDB($forcedWikiDomain); $db = wfGetDB(DB_MASTER, [], $wgExternalSharedDB . '_' . $cluster); // force master - @see PLATFORM-528 $res = $db->query('SHOW DATABASES ' . $db->buildLike($dbname), __METHOD__); // SHOW DATABASES LIKE 'muppet' if ($res->numRows() === 0) { header('HTTP/1.1 503'); header('X-Error: missing database'); header('Content-Type: text/plain'); die("No local copy of database [{$dbname}] was found on {$cluster} cluster [using {$db->getServer()} DB]."); } } } return true; }
/** * Get wiki ID by its url. Handles both "dev.wikia.com" and "dev" * (in the second pass it appends ".wikia.com" at the end of the supplied value). * * @param $url string * @return int Wiki ID (or null) */ protected function getCityIdByUrl($url) { $id = null; if ($url === 'dev') { $id = self::DEV_WIKI_ID; } if ($id === null) { $id = WikiFactory::DomainToID($url); } if ($id === null) { $id = WikiFactory::DomainToID($url . self::WIKIA_DEFAULT_DOMAIN_SUFFIX); } return $id; }
public function identifyExternalReferrer($host, $path, $query) { if (!empty($host)) { $matches = array(); $params = array(); $result = new stdClass(); $result->id = self::EXTERNAL_REFERRER_UNKNOWN; $result->keyword = null; $root = !empty($path) && $path != '/' ? $path : null; if (!empty($query)) { foreach (explode('&', $query) as $component) { $tokens = explode('=', $component); $params[$tokens[0]] = !empty($tokens[1]) ? $tokens[1] : null; } } if (stripos($host, '.google.')) { $result->id = self::EXTERNAL_REFERRER_GOOGLE; $result->keyword = !empty($params['q']) ? urldecode($params['q']) : null; } elseif (stripos($host, '.bing.')) { $result->id = self::EXTERNAL_REFERRER_BING; $result->keyword = !empty($params['q']) ? urldecode($params['q']) : null; } elseif (stripos($host, '.yahoo.')) { $result->id = self::EXTERNAL_REFERRER_YAHOO; $result->keyword = !empty($params['p']) ? urldecode($params['p']) : null; } elseif (stripos($host, '.aol.')) { $result->id = self::EXTERNAL_REFERRER_AOL; $result->keyword = !empty($params['q']) ? urldecode($params['q']) : null; } elseif (stripos($host, '.ask.')) { $result->id = self::EXTERNAL_REFERRER_ASK; $result->keyword = !empty($params['q']) ? urldecode($params['q']) : null; } elseif (stripos($host, '.wikipedia.')) { $result->id = self::EXTERNAL_REFERRER_WIKIPEDIA; $result->keyword = $root; } else { /* $key = $this->cache->makeKey( 'PF', 'domain2cityid', $host ); $cityId = $this->cache->get( $key ); if ( !is_numeric( $cityId ) ) { //force to 0 if null via int cast $this->cache->set( $key , (int) WikiFactory::DomainToID( $host ), self::CACHE_TEMPORARY_DURATION ); } */ if (!isset($this->hosts[$host])) { $this->hosts[$host] = (int) WikiFactory::DomainToID($host); } if (!empty($this->hosts[$host])) { $result->id = $this->hosts[$host]; $root = !empty($root) ? $this->removeWikiPrefix($root) : null; if (!empty($root) && $root == 'index.php') { $result->keyword = !empty($params['title']) ? urldecode($params['title']) : null; } else { $result->keyword = $root; } } } } else { return false; } return $result; }
private function prefixMainDomain($cityId) { $mainDomain = substr(WikiFactory::getVarValueByName("wgServer", $cityId), 7); if (!empty($mainDomain)) { $index = null; do { $prefixedDomain = self::CLOSED_WIKI_DOMAIN_PREFIX . (!empty($index) ? $index : '') . "." . $mainDomain; $exists = WikiFactory::DomainToID($prefixedDomain); $index = is_null($index) ? 1 : $index + 1; } while (!empty($exists)); WikiFactory::addDomain($cityId, $prefixedDomain); WikiFactory::setmainDomain($cityId, $prefixedDomain); return $prefixedDomain; } return null; }