/** * Mark given wiki as queued for removal * * @param $wikiId integer city ID * @return bool */ private function markWikiAsClosed($wikiId) { WikiFactory::setFlags($wikiId, WikiFactory::FLAG_FREE_WIKI_URL | WikiFactory::FLAG_DELETE_DB_IMAGES); $res = WikiFactory::setPublicStatus(WikiFactory::CLOSE_ACTION, $wikiId, self::REASON); WikiFactory::clearCache($wikiId); return $res !== false; }
function sendMail($commandLineOptions, $jobOptions, $wikiId, $wikiData) { global $wgSitename; $wiki = WikiFactory::getWikiByID($wikiId); $magicwords = array('#WIKINAME' => $wiki->city_title); $flags = WikiFactory::getFlags($wikiId); $flag = $jobOptions['mailType'] == 'first' ? WikiFactory::FLAG_ADOPT_MAIL_FIRST : WikiFactory::FLAG_ADOPT_MAIL_SECOND; //this kind of e-mail already sent for this wiki if ($flags & $flag) { return; } $globalTitleUserRights = GlobalTitle::newFromText('UserRights', -1, $wikiId); $specialUserRightsUrl = $globalTitleUserRights->getFullURL(); $globalTitlePreferences = GlobalTitle::newFromText('Preferences', -1, $wikiId); $specialPreferencesUrl = $globalTitlePreferences->getFullURL(); //at least one admin has not edited during xx days foreach ($wikiData['admins'] as $adminId) { //print info if (!isset($commandLineOptions['quiet'])) { echo "Trying to send the e-mail to the user (id:{$adminId}) on wiki (id:{$wikiId}).\n"; } $adminUser = User::newFromId($adminId); $defaultOption = null; if ($wikiId > 194785) { $defaultOption = 1; } $acceptMails = $adminUser->getOption("adoptionmails-{$wikiId}", $defaultOption); if ($acceptMails && $adminUser->isEmailConfirmed()) { $adminName = $adminUser->getName(); if (!isset($commandLineOptions['quiet'])) { echo "Sending the e-mail to the user (id:{$adminId}, name:{$adminName}) on wiki (id:{$wikiId}).\n"; } if (!isset($commandLineOptions['dryrun'])) { echo "Really Sending the e-mail to the user (id:{$adminId}, name:{$adminName}) on wiki (id:{$wikiId}).\n"; $adminUser->sendMail(strtr(wfMsgForContent("wikiadoption-mail-{$jobOptions['mailType']}-subject"), $magicwords), strtr(wfMsgForContent("wikiadoption-mail-{$jobOptions['mailType']}-content", $adminName, $specialUserRightsUrl, $specialPreferencesUrl), $magicwords), null, null, 'AutomaticWikiAdoption', strtr(wfMsgForContent("wikiadoption-mail-{$jobOptions['mailType']}-content-HTML", $adminName, $specialUserRightsUrl, $specialPreferencesUrl), $magicwords)); } } } if (!isset($commandLineOptions['dryrun'])) { WikiFactory::setFlags($wikiId, $flag); } }
/** * doUpdateDomains * * Store changes connected with domains * * @access private * @author eloy@wikia * * @return mixed info when change, null when not changed */ private function doUpdateDomains(&$request) { $action = $request->getText("wpAction", null); $reason = $request->getText("wpReason", wfMsg('wikifactory-public-status-change-default-reason')); $message = ""; switch ($action) { case "status": $status = $request->getVal("wpWikiStatus", 0); WikiFactory::setPublicStatus($status, $this->mWiki->city_id, $reason); $this->mWiki->city_public = $status; WikiFactory::clearCache($this->mWiki->city_id); $message = "Status of this wiki was changed to " . $this->mStatuses[$status]; case "protect": $protect = $request->getCheck("wpProtected", false); if ($protect) { $message = "Wiki protected"; WikiFactory::setFlags($this->mWiki->city_id, WikiFactory::FLAG_PROTECTED, false, $reason); } else { $message = "Wiki un-protected"; WikiFactory::resetFlags($this->mWiki->city_id, WikiFactory::FLAG_PROTECTED, false, $reason); } break; } return Wikia::successmsg($message); }
protected function doDisableWiki($wikiId, $flags, $reason = '') { // TOOD: copied from WikiFactory::disableWiki since it's not released yet WikiFactory::setFlags($wikiId, $flags); $res = WikiFactory::setPublicStatus(WikiFactory::CLOSE_ACTION, $wikiId, $reason); if ($this->debug) { var_dump("setPublicStatus", $wikiId, $res); } WikiFactory::clearCache($wikiId); return $res !== false; }
protected function processWikis() { $flags = $this->getFlags(); $status = $flags & WikiFactory::FLAG_HIDE_DB_IMAGES ? WikiFactory::HIDE_ACTION : WikiFactory::CLOSE_ACTION; $reason = $this->reason; foreach ($this->wikiIds as $wikiId) { // skip wikis with id lesser than "start" if ($this->start && $this->start > $wikiId) { continue; } // echo "status: memory = ".memory_get_usage(true)."\n"; // check memory usage if (!$this->checkMemoryLimit(1)) { echo "error: memory limit exceeded (1G), please restart the script\n"; return; } $city = WikiFactory::getWikiByID($wikiId); if (!$city) { echo "{$wikiId}: error: city could not be found\n"; continue; } $city_name = $city->city_dbname; if (!$city->city_public) { echo "{$wikiId}: error: ({$city_name}) city is already non-public\n"; continue; } $evaluator = new DeadWikiEvaluator($wikiId); if (!$evaluator->getStatus()) { echo "{$wikiId}: error: ({$city_name}) city does not meet requirements to be closed: " . $evaluator->getMessage() . "\n"; continue; } echo "{$wikiId}: ({$city_name}) marking as closed... "; if (!$this->dryRun) { WikiFactory::setFlags($wikiId, $flags); $res = WikiFactory::setPublicStatus($status, $wikiId, $reason); WikiFactory::clearCache($wikiId); echo "OK\n"; } else { echo "OK (dry run)\n"; } } }
/** * close Wiki(s) * @access private */ private function doClose($newWiki = "") { global $wgRequest, $wgOut; wfProfileIn(__METHOD__); $WFTitle = Title::makeTitle(NS_SPECIAL, 'WikiFactory'); #--- $output = ""; if (!empty($this->mWikis)) { $output = Xml::openElement('ul', null); foreach ($this->mWikis as $wiki) { Wikia::log(__METHOD__, "Closing: {$wiki->city_title} (url: {$wiki->city_url}) (id: {$wiki->city_id}) (dbname: {$wiki->city_dbname}) "); #-- move to archive $message = wfMsgExt('closewiki-wiki-closed', array('parse'), $wiki->city_title, $wiki->city_url); if (!empty($newWiki)) { Wikia::log(__METHOD__, " ... and redirecting to: {$this->mRedirect} (id: {$newWiki})"); $this->moveOldDomains($wiki->city_id, $newWiki); #-- add "old" prefix to main domain and set is as primary $prefixedDomain = $this->prefixMainDomain($wiki->city_id); Wikia::log(__METHOD__, " ... primary domain set to: {$prefixedDomain}"); #-- set new city ID in city_domains (except for just created "old" domain) $isMoved = WikiFactory::redirectDomains($wiki->city_id, $newWiki, !empty($prefixedDomain) ? array($prefixedDomain) : array()); #--- $message = wfMsgExt('closewiki-wiki-closed_redirect', array('parse'), $wiki->city_title, $wiki->city_url, sprintf("%s%s", "http://", $this->mRedirect)); } #-- set public to 0 $status = isset($this->mFlags[WikiFactory::FLAG_HIDE_DB_IMAGES]) ? WikiFactory::HIDE_ACTION : WikiFactory::CLOSE_ACTION; #-- set flags as a number if (!empty($this->mFlags)) { $city_flags = 0; foreach ($this->mFlags as $flag) { $city_flags |= $flag; } WikiFactory::setFlags($wiki->city_id, $city_flags); } // Let's request the XML dump if needed if (isset($this->mFlags[WikiFactory::FLAG_CREATE_DB_DUMP])) { DumpsOnDemand::queueDump($wiki->city_id, isset($this->mFlags[WikiFactory::FLAG_HIDE_DB_IMAGES]), true); } if (empty($this->mReason)) { $this->mReason = "-"; } $res = WikiFactory::setPublicStatus($status, $wiki->city_id, $this->mReason); if ($res === $status) { $output .= Xml::tags('li', array('style' => 'padding:4px;'), $message); WikiFactory::clearCache($wiki->city_id); if (!empty($newWiki)) { WikiFactory::clearCache($newWiki); } } } $output .= Xml::closeElement('ul'); } $output .= Xml::element('input', array('name' => 'wiki-return', 'type' => 'button', 'value' => wfMsg('closewiki-return', wfMsg('wikifactory')), 'onclick' => "window.location='{$WFTitle->getFullURL()}'")); $wgOut->addHtml($output); $aHookParams = ['city_id' => $wiki->city_id]; wfRunHooks('WikiFactoryWikiClosed', array($aHookParams)); wfProfileOut(__METHOD__); }