/** * Add a local account record for the given wiki to the central database. * @param $wikiID String * @param $method String * @param $sendToRC bool * * Prerequisites: * - completed migration state */ public function attach($wikiID, $method = 'new', $sendToRC = true) { $dbw = self::getCentralDB(); $dbw->begin(__METHOD__); $dbw->insert('localuser', array('lu_wiki' => $wikiID, 'lu_name' => $this->mName, 'lu_attached_timestamp' => $dbw->timestamp(), 'lu_attached_method' => $method), __METHOD__, array('IGNORE')); $success = $dbw->affectedRows() === 1; $dbw->commit(__METHOD__); if ($wikiID === wfWikiID()) { $this->resetState(); } $this->invalidateCache(); if (!$success) { wfDebugLog('CentralAuth', "Race condition? Already attached {$this->mName}@{$wikiID}, just tried by '{$method}'"); return; } wfDebugLog('CentralAuth', "Attaching local user {$this->mName}@{$wikiID} by '{$method}'"); if ($dbw->writesOrCallbacksPending()) { wfDebugLog('CentralAuth-Bug39996', __METHOD__ . ": Database::writesOrCallbacksPending() returns " . "true after successful attach"); } if ($sendToRC) { global $wgCentralAuthRC; $userpage = Title::makeTitleSafe(NS_USER, $this->mName); foreach ($wgCentralAuthRC as $rc) { /** @var CARCFeedFormatter $formatter */ $formatter = new $rc['formatter'](); /** @var RCFeedEngine $engine */ $engine = RecentChange::getEngine($rc['uri']); $engine->send($rc, $formatter->getLine($userpage, $wikiID)); } } }