X-Git-Url: https://git.cyclocoop.org/%27.WWW_URL.%27admin/?a=blobdiff_plain;f=includes%2FExternalUser.php;h=37716390a57a778320311dcba7ec98c6ca6222da;hb=2c83ec33e432defdeb0fc06bf71c649f789b233b;hp=a5f932232ecaa419140ff9c923974371794f490b;hpb=0d1d98431314b1a8374a175165d15f349c55f4b0;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/ExternalUser.php b/includes/ExternalUser.php index a5f932232e..37716390a5 100644 --- a/includes/ExternalUser.php +++ b/includes/ExternalUser.php @@ -1,21 +1,28 @@ initFromName( $name ) ) { return false; } @@ -60,8 +68,7 @@ abstract class ExternalUser { if ( is_null( $wgExternalAuthType ) ) { return false; } - $class = "ExternalUser_$wgExternalAuthType"; - $obj = new $class; + $obj = new $wgExternalAuthType; if ( !$obj->initFromId( $id ) ) { return false; } @@ -69,17 +76,15 @@ abstract class ExternalUser { } /** - * @param $cookie string * @return mixed ExternalUser, or false on failure */ - public static function newFromCookie( $cookie ) { + public static function newFromCookie() { global $wgExternalAuthType; if ( is_null( $wgExternalAuthType ) ) { return false; } - $class = "ExternalUser_$wgExternalAuthType"; - $obj = new $class; - if ( !$obj->initFromCookie( $cookie ) ) { + $obj = new $wgExternalAuthType; + if ( !$obj->initFromCookie() ) { return false; } return $obj; @@ -93,7 +98,7 @@ abstract class ExternalUser { * This is a wrapper around newFromId(). * * @param $user User - * @return mixed ExternalUser or false + * @return ExternalUser|false */ public static function newFromUser( $user ) { global $wgExternalAuthType; @@ -105,7 +110,7 @@ abstract class ExternalUser { $dbr = wfGetDB( DB_SLAVE ); $id = $dbr->selectField( 'external_user', 'eu_external_id', - array( 'eu_wiki_id' => $user->getId() ), __METHOD__ ); + array( 'eu_local_id' => $user->getId() ), __METHOD__ ); if ( $id === false ) { return false; } @@ -134,18 +139,15 @@ abstract class ExternalUser { protected abstract function initFromId( $id ); /** - * Given the user's cookie, initialize this object to the correct user if - * the cookie indicates that the user is logged into the external database. - * If successful, return true. If the external database doesn't support - * cookie-based authentication, or if the cookies don't belong to a - * logged-in user, return false. + * Try to magically initialize the user from cookies or similar information + * so he or she can be logged in on just viewing the wiki. If this is + * impossible to do, just return false. * * TODO: Actually use this. * - * @param $cookie string * @return bool Success? */ - protected function initFromCookie( $cookie ) { + protected function initFromCookie() { return false; } @@ -180,8 +182,7 @@ abstract class ExternalUser { /** * Is the given password valid for the external user? The password is - * provided in plaintext, with whitespace stripped but not otherwise - * modified. + * provided in plaintext. * * @param $password string * @return bool @@ -242,7 +243,7 @@ abstract class ExternalUser { * @param $pref string * @return mixed String or false */ - public static function prefMessage( $pref ) { + public static function getPrefMessage( $pref ) { return false; } @@ -277,12 +278,30 @@ abstract class ExternalUser { * * @param $id int user_id */ - public final function link( $id ) { + public final function linkToLocal( $id ) { $dbw = wfGetDB( DB_MASTER ); $dbw->replace( 'external_user', - array( 'eu_wiki_id', 'eu_external_id' ), - array( 'eu_wiki_id' => $id, - 'eu_external_id' => $this->getId() ), - __METHOD__ ); + array( 'eu_local_id', 'eu_external_id' ), + array( 'eu_local_id' => $id, + 'eu_external_id' => $this->getId() ), + __METHOD__ ); + } + + /** + * Check whether this external user id is already linked with + * a local user. + * @return Mixed User if the account is linked, Null otherwise. + */ + public final function getLocalUser(){ + $dbr = wfGetDB( DB_SLAVE ); + $row = $dbr->selectRow( + 'external_user', + '*', + array( 'eu_external_id' => $this->getId() ) + ); + return $row + ? User::newFromId( $row->eu_local_id ) + : null; } + }