/** * Adds the User object to the shared database * * @param User $User * @param String $password * @param String $email * @param String $realname * * @return bool success */ protected function addToDatabase(User &$User, $password, $email, $realname) { wfProfileIn(__METHOD__); global $wgExternalSharedDB; $dbw = wfGetDB(DB_MASTER, [], $wgExternalSharedDB); try { $userId = null; $result = null; if (is_null($result)) { $dbw->insert('`user`', ['user_id' => null, 'user_name' => $User->mName, 'user_real_name' => $realname, 'user_password' => $User->mPassword, 'user_newpassword' => '', 'user_email' => $email, 'user_touched' => '', 'user_token' => '', 'user_options' => '', 'user_registration' => $dbw->timestamp($User->mRegistration), 'user_editcount' => 0, 'user_birthdate' => $User->mBirthDate], __METHOD__); $userId = $dbw->insertId(); } else { if (!$result) { throw new ExternalUserException(); } } $User->mId = $userId; $User->setToken(); $User->saveSettings(); $dbw->commit(__METHOD__); wfRunHooks('ExternalUserAddUserToDatabaseComplete', [&$User]); \Wikia\Logger\WikiaLogger::instance()->info('HELIOS_REGISTRATION_INSERTS', ['exception' => new Exception(), 'userid' => $User->mId, 'username' => $User->mName]); // Clear instance cache other than user table data, which is already accurate $User->clearInstanceCache(); $ret = true; } catch (DBQueryError $e) { \Wikia\Logger\WikiaLogger::instance()->info(__METHOD__, ['exception' => $e, 'username' => $User->mName]); $dbw->rollback(__METHOD__); $ret = false; } catch (ExternalUserException $e) { \Wikia\Logger\WikiaLogger::instance()->info(__METHOD__, ['exception' => $e, 'username' => $User->mName]); $dbw->rollback(__METHOD__); $ret = false; } wfProfileOut(__METHOD__); return $ret; }