/** * Map an existing Wikia user to a Facebook id * If an exact or partial match of the map already exists, OR * if creation of mapping does not succeed, returns not-OK Status * * @param int $wikiaUserId * @param int $fbUserId * @return \Status (status value will be null or \FacebookMapModel if successfully created) */ public function connectToFacebook($wikiaUserId, $fbUserId) { $status = new Status(); try { $map = \FacebookMapModel::getUserMapping($wikiaUserId, $fbUserId); if ($map) { // Error! There is already a mapping $status->setResult(false); $status->error('fbconnect-error-already-connected'); } else { $bizToken = \FacebookClient::getInstance()->getBizToken(); $map = \FacebookMapModel::createUserMapping($wikiaUserId, $fbUserId, $bizToken); if ($map instanceof \FacebookMapModel) { $status->setResult(true, $map); } else { $status->setResult(false); $status->error('fbconnect-error'); } } } catch (\Exception $e) { $messageParams = []; switch ($e->getCode()) { case \FacebookMapModel::ERROR_WIKIA_USER_ID_MISMATCH: $messageParams[] = 'fbconnect-error-fb-account-in-use'; $messageParams[] = \User::whoIs($wikiaUserId); break; case \FacebookMapModel::ERROR_FACEBOOK_USER_ID_MISMATCH: $messageParams[] = 'fbconnect-error-already-connected'; break; default: $messageParams[] = 'fbconnect-error'; } $status->setResult(false); call_user_func_array([$status, 'error'], $messageParams); } return $status; }
/** * Updates old v1 mappings to a new mapping with an App ID * * @param FacebookMapModel $map */ public function migrateMapping(FacebookMapModel $map) { WikiaLogger::instance()->notice('Migrating FB user mapping', ['wikiaUserId' => $map->getWikiaUserId(), 'facebookUserId' => $map->getFacebookUserId(), 'appId' => $map->getAppId()]); $newMapping = FacebookMapModel::createUserMapping($map->getWikiaUserId(), $map->getFacebookUserId()); if (!$newMapping) { WikiaLogger::instance()->warning('Unable to migrate mapping', ['wikiaUserId' => $map->getWikiaUserId(), 'facebookUserId' => $map->getFacebookUserId(), 'appId' => $map->getAppId()]); } }