jenkins-bot has submitted this change and it was merged.

Change subject: Reorganizing things
......................................................................


Reorganizing things

* Moved core patches into the new patches/ directory
* Moved the main MediaWikiAuthPlugin class from the MediaWikiAuth.php file
* into its own, new file (MediaWikiAuthPlugin.class.php)

The only code change here is adding the MediaWikiAuthPlugin class to the
autoloader in MediaWikiAuth.php.

Change-Id: Ib5cc6ef78fabf00946bbed0c801d133777ece798
---
M MediaWikiAuth.php
A MediaWikiAuthPlugin.class.php
R patches/SpecialUserlogin.php-1.17alpha.r67921.patch
R patches/SpecialUserlogin.php-1.20.0.patch
R patches/SpecialUserlogin.php-1.21.2.patch
R patches/SpecialUserlogin.php-1.23.3.patch
6 files changed, 408 insertions(+), 406 deletions(-)

Approvals:
  Legoktm: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/MediaWikiAuth.php b/MediaWikiAuth.php
index dbc0598..3aa8c8b 100644
--- a/MediaWikiAuth.php
+++ b/MediaWikiAuth.php
@@ -49,409 +49,4 @@
 $wgMessagesDirs['MediaWikiAuth'] = __DIR__ . '/i18n';
 $wgExtensionMessagesFiles['MediaWikiAuth'] = dirname( __FILE__ ) . 
'/MediaWikiAuth.i18n.php';
 
-class MediaWikiAuthPlugin extends AuthPlugin {
-       private $snoopy;
-       private $old_user_id;
-       private $old_user_name;
-       #private $old_user_rev_cnt;
-       #private $old_user_singlegroup;
-
-       function userExists( $username ) {
-               # Check against a table of existing names to import
-               $dbr = wfGetDB( DB_SLAVE );
-
-               # If this table doesn't exist, we can't check this way
-               if ( $dbr->tableExists( 'user' ) ) {
-                       $res = $dbr->select(
-                               'user',
-                               array( 'user_id' ),
-                               array( 'user_name' => $username ),
-                               __METHOD__
-                       );
-                       $row = $dbr->fetchObject( $res );
-                       if ( $row ) {
-                               $this->old_user_id = $row->user_id;
-                               return true;
-                       }
-               }
-               # Just say they exist for now, the authenticate() check will 
provide an appropriate
-               # error message if the user does not exist on the remote wiki
-               return true;
-       }
-
-       /**
-        * This will be called if the user did not exist locally and userExists 
returned true
-        * Using &$errormsg requires a patch, otherwise it'll always be "bad 
password"
-        * See Extension:MediaWikiAuth for this patch
-        *
-        * @param $username Mixed: username
-        * @param $password Mixed: password to the above username
-        * @param $errormsg Mixed: error message or null
-        */
-       function authenticate( $username, $password, &$errormsg = null ) {
-               $dbr = wfGetDB( DB_SLAVE );
-
-               # If the user exists locally, fall back to local auth
-               if ( $dbr->tableExists( 'user' ) ) {
-                       $res = $dbr->select(
-                               'user',
-                               array( 'user_id' ),
-                               array( 'user_name' => $username ),
-                               __METHOD__
-                       );
-                       $row = $dbr->fetchObject( $res );
-                       if ( $row ) {
-                               $this->old_user_id = $row->user_id;
-                               return false;
-                       }
-               }
-               global $wgMediaWikiAuthAPIURL;
-
-               # This is loaded here so it isn't loaded needlessly
-               if ( !class_exists( 'Snoopy', false ) ) {
-                       require_once( dirname( __FILE__ ) . '/Snoopy.class.php' 
);
-               }
-               $this->snoopy = new Snoopy();
-               $this->snoopy->agent = 'Mozilla/5.0 (compatible; MSIE 9.0; 
Windows NT 6.1; Trident/5.0)';
-
-               # The user should exist remotely. Let's try to login.
-               $login_vars = array(
-                       'action' => 'login',
-                       'lgname' => $username,
-                       'lgpassword' => $password,
-                       'format' => 'php'
-               );
-               do {
-                       $this->snoopy->submit( $wgMediaWikiAuthAPIURL, 
$login_vars );
-
-                       # Did we get in? Look for result: 'Success'
-                       $results = unserialize( $this->snoopy->results );
-                       wfDebugLog( 'MediaWikiAuth', 'Login result:' . print_r( 
$results, true ) );
-                       $errormsg = wfMsg( 'mwa-error-unknown' );
-                       if ( isset( $results['login'] ) ) {
-                               $login = $results['login'];
-                               # This ignores the NoName option as it will be 
filtered out before now
-                               switch ( $login['result'] ) {
-                                       case 'Success':
-                                               # Set cookies from the 
successful login
-                                               $this->snoopy->setcookies();
-
-                                               # Did we not have an ID from 
earlier? Use the one we're given now
-                                               if ( !isset( $this->old_user_id 
) ) {
-                                                       $this->old_user_id = 
$login['lguserid'];
-                                                       # Check if ID already 
exists and handle
-                                                       $dbr = wfGetDB( 
DB_SLAVE );
-                                                       $localUser = 
$dbr->select(
-                                                               'user',
-                                                               'user_name',
-                                                               array( 
'user_id' => $this->old_user_id ),
-                                                               __METHOD__
-                                                       );
-                                                       if( $dbr->fetchObject( 
$localUser ) ) {
-                                                               $resid = 
(int)$dbr->selectField(
-                                                                       'user',
-                                                                       
'user_id',
-                                                                       array(),
-                                                                       
__METHOD__,
-                                                                       array( 
'ORDER BY' => 'user_id desc' )
-                                                               );
-                                                               
$this->old_user_id = $resid + 1;
-                                                       }
-                                               }
-                                               $this->old_user_name = 
$login['lgusername'];
-                                               return true;
-
-                                       case 'NotExists':
-                                               global $wgUser;
-                                               if( $wgUser->isAllowed( 
'createaccount' ) ) {
-                                                       $errormsg = 
wfMsgWikiHtml( 'nosuchuser', htmlspecialchars( $username ) );
-                                               } else {
-                                                       $errormsg = wfMsg( 
'nosuchusershort', htmlspecialchars( $username ) );
-                                               }
-                                               break;
-
-                                       case 'NeedToken':
-                                               # Set cookies and break out to 
resubmit
-                                               $this->snoopy->setcookies();
-                                               $login_vars['lgtoken'] = 
$login['token'];
-                                               break;
-
-                                       case 'WrongToken':
-                                               $errormsg = wfMsg( 
'mwa-error-wrong-token' );
-                                               break;
-
-                                       case 'EmptyPass':
-                                               $errormsg = wfMsg( 
'wrongpasswordempty' );
-                                               break;
-
-                                       case 'WrongPass':
-                                       case 'WrongPluginPass':
-                                               $errormsg = wfMsg( 
'wrongpassword' );
-                                               break;
-
-                                       case 'CreateBlocked':
-                                               $errormsg = wfMsg( 
'mwa-autocreate-blocked' );
-                                               break;
-
-                                       case 'Throttled':
-                                               $errormsg = wfMsg( 
'login-throttled' );
-                                               break;
-
-                                       case 'ResetPass':
-                                               $errormsg = wfMsg( 
'mwa-resetpass' );
-                                               break;
-                               }
-                               if ( isset( $login['wait'] ) ) {
-                                       $errormsg .= ' ' . wfMsg( 'mwa-wait', 
$login['wait'] );
-                               }
-                       }
-               } while ( isset( $results['login'] ) && $login['result'] == 
'NeedToken' );
-
-               # Login failed! Display a message
-               return false;
-       }
-
-       /**
-        * We do want to auto-create local accounts when a remote account 
exists.
-        */
-       function autoCreate() {
-               return true;
-       }
-
-       function initUser( &$user, $autocreate = false ) {
-               global $wgMediaWikiAuthAPIURL, $wgMediaWikiAuthPrefsURL;
-
-               # If autocreate is true (if it isn't, something's very wrong),
-               # import preferences, and remove from our local table of names 
to be imported
-               # $this->snoopy should still be active and logged in at this 
point
-               if ( $autocreate && !$user->isAnon() && $this->old_user_id ) {
-                       # Save user settings
-                       # $user->saveSettings();
-
-                       $dbw = wfGetDB( DB_MASTER );
-                       # Set old revisions with the old username to the new 
userID
-                       # (might have been imported with 0, or a temp ID)
-                       $dbw->update(
-                               'revision',
-                               array( 'rev_user' => $this->old_user_id ),
-                               array( 'rev_user_text' => $this->old_user_name 
),
-                               __METHOD__
-                       );
-                       $dbw->update(
-                               'logging',
-                               array( 'log_user' => $this->old_user_id ),
-                               array( 'log_user_text' => $this->old_user_name 
),
-                               __METHOD__
-                       );
-
-                       # Get correct edit count
-                       $dbr = wfGetDB( DB_SLAVE );
-                       $count = $dbr->selectField(
-                               'revision',
-                               'COUNT(rev_user)',
-                               array( 'rev_user' => $this->old_user_id ),
-                               __METHOD__
-                       );
-
-                       # Set real user editcount, email, and ID
-                       $dbw->update(
-                               'user',
-                               array(
-                                       'user_editcount' => $count,
-                                       'user_email' => $user->mEmail,
-                                       'user_id' => $this->old_user_id
-                               ),
-                               array( 'user_name' => $user->mName ),
-                               __METHOD__
-                       );
-                       $user->mId = $this->old_user_id;
-                       $user->mFrom = 'id';
-
-                       # Get account creation date
-                       $account_vars = array(
-                               'action' => 'query',
-                               'list' => 'users',
-                               'ususers' => $user->mName,
-                               'usprop' => 'registration',
-                               'format' => 'php'
-                       );
-                       $this->snoopy->submit( $wgMediaWikiAuthAPIURL, 
$account_vars );
-                       $unserializedResults = unserialize( 
$this->snoopy->results );
-                       # Remove formatting from API timestamp; database 
expects a plain number
-                       $results = str_replace(
-                               array( ':', 'T', 'Z', '-' ),
-                               '',
-                               
$unserializedResults['query']['users'][0]['registration']
-                       );
-                       # Bogus time? Missing dates default to the current 
timestamp; fall back to first edit
-                       if ( substr( $results, 0, 8 ) == gmdate( 'Ymd', time() 
) ) {
-                               $res = $dbr->select(
-                                       'revision',
-                                       array( 'rev_timestamp' ),
-                                       array( 'rev_user' => $this->old_user_id 
),
-                                       __METHOD__,
-                                       array( 'ORDER BY' => 'rev_timestamp 
ASC', 'LIMIT' => 1 )
-                               );
-                               if( $res->numRows() ) {
-                                       $results = $dbr->fetchObject( $res 
)->rev_timestamp;
-                               }
-                       }
-                       if( is_numeric( $results ) ) {
-                               $dbw->update(
-                                       'user',
-                                       array( 'user_registration' => $results 
),
-                                       array( 'user_id' => $this->old_user_id 
),
-                                       __METHOD__
-                               );
-                       }
-
-                       # Get watchlist
-                       # FIXME Bad things may happen with large watchlists. 
Also need option to not try.
-                       $watchlist_vars = array(
-                               'action' => 'query',
-                               'list' => 'watchlistraw',
-                               'wrlimit' => '500',
-                               'format' => 'php'
-                       );
-                       $more = true;
-                       $wrcontinue = null;
-                       do {
-                               if ( $wrcontinue === null ) {
-                                       unset( $watchlist_vars['wrcontinue'] );
-                               } else {
-                                       $watchlist_vars['wrcontinue'] = 
$wrcontinue;
-                               }
-                               $this->snoopy->submit( $wgMediaWikiAuthAPIURL, 
$watchlist_vars );
-                               $results = unserialize( $this->snoopy->results 
);
-
-                               if ( empty( $results['watchlistraw'] ) ) {
-                                       break;
-                               }
-                               foreach ( $results['watchlistraw'] as $wrEntry 
) {
-                                       # Insert the damn thing if it's not a 
talkpage
-                                       # For some reason the query returns 
talkpages too.
-                                       if ( $wrEntry['ns'] % 2 == 0 ) {
-                                               $watchTitle = 
Title::newFromText( $wrEntry['title'] );
-                                               if( $watchTitle instanceOf 
Title ) {
-                                                       $user->addWatch( 
$watchTitle );
-                                               } else {
-                                                       wfDebugLog( 
'MediaWikiAuth', 'Could not form Title object for ' . $wrEntry['title'] );
-                                               }
-                                       }
-                                       if ( isset( $results['query-continue'] 
) ) {
-                                               $wrcontinue = 
$results['query-continue']['watchlistraw']['wrcontinue'];
-                                       } else {
-                                               $wrcontinue = null;
-                                       }
-                                       $more = !( $wrcontinue === null );
-                               }
-                       } while ( $more );
-
-                       # Get user preferences
-                       $prefs_vars = array(
-                               'action' => 'query',
-                               'meta' => 'userinfo',
-                               'uiprop' => 'options|email|realname',
-                               'format' => 'php'
-                       );
-
-                       $this->snoopy->submit( $wgMediaWikiAuthAPIURL, 
$prefs_vars );
-                       $results = unserialize( $this->snoopy->results );
-                       if ( isset( $results['query'] ) && isset( 
$results['query']['userinfo'] ) ) {
-                               if ( isset( 
$results['query']['userinfo']['options'] ) ) {
-                                       $options = 
$results['query']['userinfo']['options'];
-                                       # Don't need some options
-                                       $ignoredOptions = array(
-                                               'widgets', 'showAds', 'theme',
-                                               'disableeditingtips', 
'edit-similar',
-                                               'skinoverwrite', 'htmlemails', 
'marketing',
-                                               'notifyhonorifics', 
'notifychallenge',
-                                               'notifygift', 
'notifyfriendsrequest',
-                                               'blackbirdenroll', 
'marketingallowed',
-                                               'disablecategorysuggest', 
'myhomedisableredirect',
-                                               'avatar', 
'widescreeneditingtips',
-                                               'disablelinksuggest', 
'watchlistdigestclear',
-                                               'hidefollowedpages', 
'enotiffollowedpages',
-                                               'enotiffollowedminoredits', 
'myhomedefaultview',
-                                               'disablecategoryselect'
-                                       );
-                                       foreach ( $ignoredOptions as $optName ) 
{
-                                               if ( isset( $options[$optName] 
) ) {
-                                                       unset( 
$options[$optName] );
-                                               }
-                                       }
-                                       $user->mOptions = array_merge( 
$user->mOptions, $options );
-                               }
-                               // Older wikis might not expose this in the API 
(1.15+)
-                               if ( isset( 
$results['query']['userinfo']['email'] ) ) {
-                                       $user->mEmail = 
$results['query']['userinfo']['email'];
-                                       wfRunHooks( 'UserSetEmail', array( 
$this, &$this->mEmail ) );
-                                       if ( isset( 
$results['query']['userinfo']['emailauthenticated'] ) ) {
-                                               $user->confirmEmail();
-                                       } else {
-                                               $user->sendConfirmationMail();
-                                       }
-                               }
-
-                               // This is 1.18+
-                               if ( isset( 
$results['query']['userinfo']['realname'] ) ) {
-                                       $user->mRealName = 
$results['query']['userinfo']['realname'];
-                               }
-
-                       }
-
-                       if ( !$user->mRealName || !$user->mEmail ) {
-                               # Backwards-compat screenscraping...
-                               # Older versions had the user append 
?uselang=en; remove that since we'll do that ourselves here.
-                               $wgMediaWikiAuthPrefsURL = str_replace( array( 
'?uselang=en', '&uselang=en' ), '', $wgMediaWikiAuthPrefsURL );
-
-                               if ( strpos( $wgMediaWikiAuthPrefsURL, '?' ) ) {
-                                       $this->snoopy->fetch( 
$wgMediaWikiAuthPrefsURL . '&uselang=qqx' );
-                               } else {
-                                       $this->snoopy->fetch( 
$wgMediaWikiAuthPrefsURL . '?uselang=qqx' );
-                               }
-                               $result = $this->snoopy->results;
-
-                               # wpRealName = 1.15 and older, wprealname = 
1.16+
-                               if ( !$user->mRealName && preg_match( 
'^.*wp(R|r)eal(N|n)ame.*value="(.*?)".*^', $result, $matches ) ) {
-                                       $user->setRealName( stripslashes( 
html_entity_decode( $matches[3], ENT_QUOTES, 'UTF-8' ) ) );
-                               }
-                               # wpUserEmail = 1.15 and older, wpemailaddress 
= 1.16+
-                               if ( $user->mEmail == "" && preg_match( 
'^.*(wpUserEmail|wpemailaddress).*value="(.*?)".*^', $result, $matches ) ) {
-                                       $user->mEmail = stripslashes( 
html_entity_decode( $matches[2], ENT_QUOTES, 'UTF-8' ) );
-                                       wfRunHooks( 'UserSetEmail', array( 
$this, &$this->mEmail ) );
-                                       # We assume the target server knows 
what it is doing.
-                                       if (
-                                               strpos( $result, 
'(emailauthenticated: ' )
-                                               || strpos( $result, 
'(usersignup-user-pref-emailauthenticated)' ) # Wikia
-                                       ) {
-                                               $user->confirmEmail();
-                                       } else {
-                                               $user->sendConfirmationMail();
-                                       }
-                               }
-                       }
-
-                       # Because updating the user object manually doesn't 
seem to work
-                       $dbw->update(
-                               'user',
-                               array(
-                                       'user_real_name' => $user->mRealName,
-                                       'user_email' => $user->mEmail,
-                                       'user_id' => $this->old_user_id
-                               ),
-                               array( 'user_id' => $user->mId ),
-                               __METHOD__
-                       );
-                       # May need to set last message date so they don't get 
old messages
-               }
-
-               if ( isset( $this->snoopy ) ) {
-                       # Logout once we're finished
-                       $logout_vars = array( 'action' => 'logout' );
-                       $this->snoopy->submit( $wgMediaWikiAuthAPIURL, 
$logout_vars );
-               }
-               return true;
-       }
-}
-
+$wgAutoloadClasses['MediaWikiAuthPlugin'] = __DIR__ . 
'/MediaWikiAuthPlugin.class.php';
\ No newline at end of file
diff --git a/MediaWikiAuthPlugin.class.php b/MediaWikiAuthPlugin.class.php
new file mode 100644
index 0000000..4bae5d8
--- /dev/null
+++ b/MediaWikiAuthPlugin.class.php
@@ -0,0 +1,407 @@
+<?php
+
+class MediaWikiAuthPlugin extends AuthPlugin {
+       private $snoopy;
+       private $old_user_id;
+       private $old_user_name;
+       #private $old_user_rev_cnt;
+       #private $old_user_singlegroup;
+
+       function userExists( $username ) {
+               # Check against a table of existing names to import
+               $dbr = wfGetDB( DB_SLAVE );
+
+               # If this table doesn't exist, we can't check this way
+               if ( $dbr->tableExists( 'user' ) ) {
+                       $res = $dbr->select(
+                               'user',
+                               array( 'user_id' ),
+                               array( 'user_name' => $username ),
+                               __METHOD__
+                       );
+                       $row = $dbr->fetchObject( $res );
+                       if ( $row ) {
+                               $this->old_user_id = $row->user_id;
+                               return true;
+                       }
+               }
+               # Just say they exist for now, the authenticate() check will 
provide an appropriate
+               # error message if the user does not exist on the remote wiki
+               return true;
+       }
+
+       /**
+        * This will be called if the user did not exist locally and userExists 
returned true
+        * Using &$errormsg requires a patch, otherwise it'll always be "bad 
password"
+        * See Extension:MediaWikiAuth for this patch
+        *
+        * @param $username Mixed: username
+        * @param $password Mixed: password to the above username
+        * @param $errormsg Mixed: error message or null
+        */
+       function authenticate( $username, $password, &$errormsg = null ) {
+               $dbr = wfGetDB( DB_SLAVE );
+
+               # If the user exists locally, fall back to local auth
+               if ( $dbr->tableExists( 'user' ) ) {
+                       $res = $dbr->select(
+                               'user',
+                               array( 'user_id' ),
+                               array( 'user_name' => $username ),
+                               __METHOD__
+                       );
+                       $row = $dbr->fetchObject( $res );
+                       if ( $row ) {
+                               $this->old_user_id = $row->user_id;
+                               return false;
+                       }
+               }
+               global $wgMediaWikiAuthAPIURL;
+
+               # This is loaded here so it isn't loaded needlessly
+               if ( !class_exists( 'Snoopy', false ) ) {
+                       require_once( dirname( __FILE__ ) . '/Snoopy.class.php' 
);
+               }
+               $this->snoopy = new Snoopy();
+               $this->snoopy->agent = 'Mozilla/5.0 (compatible; MSIE 9.0; 
Windows NT 6.1; Trident/5.0)';
+
+               # The user should exist remotely. Let's try to login.
+               $login_vars = array(
+                       'action' => 'login',
+                       'lgname' => $username,
+                       'lgpassword' => $password,
+                       'format' => 'php'
+               );
+               do {
+                       $this->snoopy->submit( $wgMediaWikiAuthAPIURL, 
$login_vars );
+
+                       # Did we get in? Look for result: 'Success'
+                       $results = unserialize( $this->snoopy->results );
+                       wfDebugLog( 'MediaWikiAuth', 'Login result:' . print_r( 
$results, true ) );
+                       $errormsg = wfMsg( 'mwa-error-unknown' );
+                       if ( isset( $results['login'] ) ) {
+                               $login = $results['login'];
+                               # This ignores the NoName option as it will be 
filtered out before now
+                               switch ( $login['result'] ) {
+                                       case 'Success':
+                                               # Set cookies from the 
successful login
+                                               $this->snoopy->setcookies();
+
+                                               # Did we not have an ID from 
earlier? Use the one we're given now
+                                               if ( !isset( $this->old_user_id 
) ) {
+                                                       $this->old_user_id = 
$login['lguserid'];
+                                                       # Check if ID already 
exists and handle
+                                                       $dbr = wfGetDB( 
DB_SLAVE );
+                                                       $localUser = 
$dbr->select(
+                                                               'user',
+                                                               'user_name',
+                                                               array( 
'user_id' => $this->old_user_id ),
+                                                               __METHOD__
+                                                       );
+                                                       if( $dbr->fetchObject( 
$localUser ) ) {
+                                                               $resid = 
(int)$dbr->selectField(
+                                                                       'user',
+                                                                       
'user_id',
+                                                                       array(),
+                                                                       
__METHOD__,
+                                                                       array( 
'ORDER BY' => 'user_id desc' )
+                                                               );
+                                                               
$this->old_user_id = $resid + 1;
+                                                       }
+                                               }
+                                               $this->old_user_name = 
$login['lgusername'];
+                                               return true;
+
+                                       case 'NotExists':
+                                               global $wgUser;
+                                               if( $wgUser->isAllowed( 
'createaccount' ) ) {
+                                                       $errormsg = 
wfMsgWikiHtml( 'nosuchuser', htmlspecialchars( $username ) );
+                                               } else {
+                                                       $errormsg = wfMsg( 
'nosuchusershort', htmlspecialchars( $username ) );
+                                               }
+                                               break;
+
+                                       case 'NeedToken':
+                                               # Set cookies and break out to 
resubmit
+                                               $this->snoopy->setcookies();
+                                               $login_vars['lgtoken'] = 
$login['token'];
+                                               break;
+
+                                       case 'WrongToken':
+                                               $errormsg = wfMsg( 
'mwa-error-wrong-token' );
+                                               break;
+
+                                       case 'EmptyPass':
+                                               $errormsg = wfMsg( 
'wrongpasswordempty' );
+                                               break;
+
+                                       case 'WrongPass':
+                                       case 'WrongPluginPass':
+                                               $errormsg = wfMsg( 
'wrongpassword' );
+                                               break;
+
+                                       case 'CreateBlocked':
+                                               $errormsg = wfMsg( 
'mwa-autocreate-blocked' );
+                                               break;
+
+                                       case 'Throttled':
+                                               $errormsg = wfMsg( 
'login-throttled' );
+                                               break;
+
+                                       case 'ResetPass':
+                                               $errormsg = wfMsg( 
'mwa-resetpass' );
+                                               break;
+                               }
+                               if ( isset( $login['wait'] ) ) {
+                                       $errormsg .= ' ' . wfMsg( 'mwa-wait', 
$login['wait'] );
+                               }
+                       }
+               } while ( isset( $results['login'] ) && $login['result'] == 
'NeedToken' );
+
+               # Login failed! Display a message
+               return false;
+       }
+
+       /**
+        * We do want to auto-create local accounts when a remote account 
exists.
+        */
+       function autoCreate() {
+               return true;
+       }
+
+       function initUser( &$user, $autocreate = false ) {
+               global $wgMediaWikiAuthAPIURL, $wgMediaWikiAuthPrefsURL;
+
+               # If autocreate is true (if it isn't, something's very wrong),
+               # import preferences, and remove from our local table of names 
to be imported
+               # $this->snoopy should still be active and logged in at this 
point
+               if ( $autocreate && !$user->isAnon() && $this->old_user_id ) {
+                       # Save user settings
+                       # $user->saveSettings();
+
+                       $dbw = wfGetDB( DB_MASTER );
+                       # Set old revisions with the old username to the new 
userID
+                       # (might have been imported with 0, or a temp ID)
+                       $dbw->update(
+                               'revision',
+                               array( 'rev_user' => $this->old_user_id ),
+                               array( 'rev_user_text' => $this->old_user_name 
),
+                               __METHOD__
+                       );
+                       $dbw->update(
+                               'logging',
+                               array( 'log_user' => $this->old_user_id ),
+                               array( 'log_user_text' => $this->old_user_name 
),
+                               __METHOD__
+                       );
+
+                       # Get correct edit count
+                       $dbr = wfGetDB( DB_SLAVE );
+                       $count = $dbr->selectField(
+                               'revision',
+                               'COUNT(rev_user)',
+                               array( 'rev_user' => $this->old_user_id ),
+                               __METHOD__
+                       );
+
+                       # Set real user editcount, email, and ID
+                       $dbw->update(
+                               'user',
+                               array(
+                                       'user_editcount' => $count,
+                                       'user_email' => $user->mEmail,
+                                       'user_id' => $this->old_user_id
+                               ),
+                               array( 'user_name' => $user->mName ),
+                               __METHOD__
+                       );
+                       $user->mId = $this->old_user_id;
+                       $user->mFrom = 'id';
+
+                       # Get account creation date
+                       $account_vars = array(
+                               'action' => 'query',
+                               'list' => 'users',
+                               'ususers' => $user->mName,
+                               'usprop' => 'registration',
+                               'format' => 'php'
+                       );
+                       $this->snoopy->submit( $wgMediaWikiAuthAPIURL, 
$account_vars );
+                       $unserializedResults = unserialize( 
$this->snoopy->results );
+                       # Remove formatting from API timestamp; database 
expects a plain number
+                       $results = str_replace(
+                               array( ':', 'T', 'Z', '-' ),
+                               '',
+                               
$unserializedResults['query']['users'][0]['registration']
+                       );
+                       # Bogus time? Missing dates default to the current 
timestamp; fall back to first edit
+                       if ( substr( $results, 0, 8 ) == gmdate( 'Ymd', time() 
) ) {
+                               $res = $dbr->select(
+                                       'revision',
+                                       array( 'rev_timestamp' ),
+                                       array( 'rev_user' => $this->old_user_id 
),
+                                       __METHOD__,
+                                       array( 'ORDER BY' => 'rev_timestamp 
ASC', 'LIMIT' => 1 )
+                               );
+                               if( $res->numRows() ) {
+                                       $results = $dbr->fetchObject( $res 
)->rev_timestamp;
+                               }
+                       }
+                       if( is_numeric( $results ) ) {
+                               $dbw->update(
+                                       'user',
+                                       array( 'user_registration' => $results 
),
+                                       array( 'user_id' => $this->old_user_id 
),
+                                       __METHOD__
+                               );
+                       }
+
+                       # Get watchlist
+                       # FIXME Bad things may happen with large watchlists. 
Also need option to not try.
+                       $watchlist_vars = array(
+                               'action' => 'query',
+                               'list' => 'watchlistraw',
+                               'wrlimit' => '500',
+                               'format' => 'php'
+                       );
+                       $more = true;
+                       $wrcontinue = null;
+                       do {
+                               if ( $wrcontinue === null ) {
+                                       unset( $watchlist_vars['wrcontinue'] );
+                               } else {
+                                       $watchlist_vars['wrcontinue'] = 
$wrcontinue;
+                               }
+                               $this->snoopy->submit( $wgMediaWikiAuthAPIURL, 
$watchlist_vars );
+                               $results = unserialize( $this->snoopy->results 
);
+
+                               if ( empty( $results['watchlistraw'] ) ) {
+                                       break;
+                               }
+                               foreach ( $results['watchlistraw'] as $wrEntry 
) {
+                                       # Insert the damn thing if it's not a 
talkpage
+                                       # For some reason the query returns 
talkpages too.
+                                       if ( $wrEntry['ns'] % 2 == 0 ) {
+                                               $watchTitle = 
Title::newFromText( $wrEntry['title'] );
+                                               if( $watchTitle instanceOf 
Title ) {
+                                                       $user->addWatch( 
$watchTitle );
+                                               } else {
+                                                       wfDebugLog( 
'MediaWikiAuth', 'Could not form Title object for ' . $wrEntry['title'] );
+                                               }
+                                       }
+                                       if ( isset( $results['query-continue'] 
) ) {
+                                               $wrcontinue = 
$results['query-continue']['watchlistraw']['wrcontinue'];
+                                       } else {
+                                               $wrcontinue = null;
+                                       }
+                                       $more = !( $wrcontinue === null );
+                               }
+                       } while ( $more );
+
+                       # Get user preferences
+                       $prefs_vars = array(
+                               'action' => 'query',
+                               'meta' => 'userinfo',
+                               'uiprop' => 'options|email|realname',
+                               'format' => 'php'
+                       );
+
+                       $this->snoopy->submit( $wgMediaWikiAuthAPIURL, 
$prefs_vars );
+                       $results = unserialize( $this->snoopy->results );
+                       if ( isset( $results['query'] ) && isset( 
$results['query']['userinfo'] ) ) {
+                               if ( isset( 
$results['query']['userinfo']['options'] ) ) {
+                                       $options = 
$results['query']['userinfo']['options'];
+                                       # Don't need some options
+                                       $ignoredOptions = array(
+                                               'widgets', 'showAds', 'theme',
+                                               'disableeditingtips', 
'edit-similar',
+                                               'skinoverwrite', 'htmlemails', 
'marketing',
+                                               'notifyhonorifics', 
'notifychallenge',
+                                               'notifygift', 
'notifyfriendsrequest',
+                                               'blackbirdenroll', 
'marketingallowed',
+                                               'disablecategorysuggest', 
'myhomedisableredirect',
+                                               'avatar', 
'widescreeneditingtips',
+                                               'disablelinksuggest', 
'watchlistdigestclear',
+                                               'hidefollowedpages', 
'enotiffollowedpages',
+                                               'enotiffollowedminoredits', 
'myhomedefaultview',
+                                               'disablecategoryselect'
+                                       );
+                                       foreach ( $ignoredOptions as $optName ) 
{
+                                               if ( isset( $options[$optName] 
) ) {
+                                                       unset( 
$options[$optName] );
+                                               }
+                                       }
+                                       $user->mOptions = array_merge( 
$user->mOptions, $options );
+                               }
+                               // Older wikis might not expose this in the API 
(1.15+)
+                               if ( isset( 
$results['query']['userinfo']['email'] ) ) {
+                                       $user->mEmail = 
$results['query']['userinfo']['email'];
+                                       wfRunHooks( 'UserSetEmail', array( 
$this, &$this->mEmail ) );
+                                       if ( isset( 
$results['query']['userinfo']['emailauthenticated'] ) ) {
+                                               $user->confirmEmail();
+                                       } else {
+                                               $user->sendConfirmationMail();
+                                       }
+                               }
+
+                               // This is 1.18+
+                               if ( isset( 
$results['query']['userinfo']['realname'] ) ) {
+                                       $user->mRealName = 
$results['query']['userinfo']['realname'];
+                               }
+
+                       }
+
+                       if ( !$user->mRealName || !$user->mEmail ) {
+                               # Backwards-compat screenscraping...
+                               # Older versions had the user append 
?uselang=en; remove that since we'll do that ourselves here.
+                               $wgMediaWikiAuthPrefsURL = str_replace( array( 
'?uselang=en', '&uselang=en' ), '', $wgMediaWikiAuthPrefsURL );
+
+                               if ( strpos( $wgMediaWikiAuthPrefsURL, '?' ) ) {
+                                       $this->snoopy->fetch( 
$wgMediaWikiAuthPrefsURL . '&uselang=qqx' );
+                               } else {
+                                       $this->snoopy->fetch( 
$wgMediaWikiAuthPrefsURL . '?uselang=qqx' );
+                               }
+                               $result = $this->snoopy->results;
+
+                               # wpRealName = 1.15 and older, wprealname = 
1.16+
+                               if ( !$user->mRealName && preg_match( 
'^.*wp(R|r)eal(N|n)ame.*value="(.*?)".*^', $result, $matches ) ) {
+                                       $user->setRealName( stripslashes( 
html_entity_decode( $matches[3], ENT_QUOTES, 'UTF-8' ) ) );
+                               }
+                               # wpUserEmail = 1.15 and older, wpemailaddress 
= 1.16+
+                               if ( $user->mEmail == "" && preg_match( 
'^.*(wpUserEmail|wpemailaddress).*value="(.*?)".*^', $result, $matches ) ) {
+                                       $user->mEmail = stripslashes( 
html_entity_decode( $matches[2], ENT_QUOTES, 'UTF-8' ) );
+                                       wfRunHooks( 'UserSetEmail', array( 
$this, &$this->mEmail ) );
+                                       # We assume the target server knows 
what it is doing.
+                                       if (
+                                               strpos( $result, 
'(emailauthenticated: ' )
+                                               || strpos( $result, 
'(usersignup-user-pref-emailauthenticated)' ) # Wikia
+                                       ) {
+                                               $user->confirmEmail();
+                                       } else {
+                                               $user->sendConfirmationMail();
+                                       }
+                               }
+                       }
+
+                       # Because updating the user object manually doesn't 
seem to work
+                       $dbw->update(
+                               'user',
+                               array(
+                                       'user_real_name' => $user->mRealName,
+                                       'user_email' => $user->mEmail,
+                                       'user_id' => $this->old_user_id
+                               ),
+                               array( 'user_id' => $user->mId ),
+                               __METHOD__
+                       );
+                       # May need to set last message date so they don't get 
old messages
+               }
+
+               if ( isset( $this->snoopy ) ) {
+                       # Logout once we're finished
+                       $logout_vars = array( 'action' => 'logout' );
+                       $this->snoopy->submit( $wgMediaWikiAuthAPIURL, 
$logout_vars );
+               }
+               return true;
+       }
+}
\ No newline at end of file
diff --git a/SpecialUserlogin.php-1.17alpha.r67921.patch 
b/patches/SpecialUserlogin.php-1.17alpha.r67921.patch
similarity index 100%
rename from SpecialUserlogin.php-1.17alpha.r67921.patch
rename to patches/SpecialUserlogin.php-1.17alpha.r67921.patch
diff --git a/SpecialUserlogin.php-1.20.0.patch 
b/patches/SpecialUserlogin.php-1.20.0.patch
similarity index 100%
rename from SpecialUserlogin.php-1.20.0.patch
rename to patches/SpecialUserlogin.php-1.20.0.patch
diff --git a/SpecialUserlogin.php-1.21.2.patch 
b/patches/SpecialUserlogin.php-1.21.2.patch
similarity index 100%
rename from SpecialUserlogin.php-1.21.2.patch
rename to patches/SpecialUserlogin.php-1.21.2.patch
diff --git a/SpecialUserlogin.php-1.23.3.patch 
b/patches/SpecialUserlogin.php-1.23.3.patch
similarity index 100%
rename from SpecialUserlogin.php-1.23.3.patch
rename to patches/SpecialUserlogin.php-1.23.3.patch

-- 
To view, visit https://gerrit.wikimedia.org/r/184232
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ib5cc6ef78fabf00946bbed0c801d133777ece798
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/MediaWikiAuth
Gerrit-Branch: master
Gerrit-Owner: Jack Phoenix <[email protected]>
Gerrit-Reviewer: Bartosz DziewoƄski <[email protected]>
Gerrit-Reviewer: Daniel Friesen <[email protected]>
Gerrit-Reviewer: Legoktm <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to