Index: trunk/extensions/CentralAuth/central-auth.sql |
— | — | @@ -74,6 +74,9 @@ |
75 | 75 | -- Used for "deleting" accounts without breaking referential integrity. |
76 | 76 | gu_hidden bool not null default 0, |
77 | 77 | |
| 78 | + -- If account is marked as in migration, bureaucrats may rename users under it. |
| 79 | + gu_inmigration bool not null default 0, |
| 80 | + |
78 | 81 | -- Registration time |
79 | 82 | gu_registration varchar(14) binary, |
80 | 83 | |
Index: trunk/extensions/CentralAuth/db_patches/patch-gu_inmigration.sql |
— | — | @@ -0,0 +1 @@ |
| 2 | +ALTER TABLE globaluser ADD gu_inmigration bool not null default 0 AFTER gu_hidden; |
\ No newline at end of file |
Property changes on: trunk/extensions/CentralAuth/db_patches/patch-gu_inmigration.sql |
___________________________________________________________________ |
Name: svn:eol-style |
1 | 3 | + native |
Index: trunk/extensions/CentralAuth/CentralAuthUser.php |
— | — | @@ -18,7 +18,7 @@ |
19 | 19 | */ |
20 | 20 | /*private*/ var $mName; |
21 | 21 | /*private*/ var $mStateDirty = false; |
22 | | - /*private*/ var $mVersion = 1; |
| 22 | + /*private*/ var $mVersion = 2; |
23 | 23 | /*private*/ var $mDelayInvalidation = 0; |
24 | 24 | |
25 | 25 | static $mCacheVars = array( |
— | — | @@ -28,6 +28,7 @@ |
29 | 29 | 'mAuthToken', |
30 | 30 | 'mLocked', |
31 | 31 | 'mHidden', |
| 32 | + 'mInMigration', |
32 | 33 | 'mRegistration', |
33 | 34 | 'mEmail', |
34 | 35 | 'mAuthenticationTimestamp', |
— | — | @@ -131,7 +132,7 @@ |
132 | 133 | |
133 | 134 | $sql = |
134 | 135 | "SELECT gu_id, lu_wiki, gu_salt, gu_password,gu_auth_token, " . |
135 | | - "gu_locked,gu_hidden,gu_registration,gu_email,gu_email_authenticated " . |
| 136 | + "gu_locked,gu_hidden,gu_inmigration,gu_registration,gu_email,gu_email_authenticated " . |
136 | 137 | "FROM $globaluser " . |
137 | 138 | "LEFT OUTER JOIN $localuser ON gu_name=lu_name AND lu_wiki=? " . |
138 | 139 | "WHERE gu_name=?"; |
— | — | @@ -189,6 +190,7 @@ |
190 | 191 | $this->mAuthToken = $row->gu_auth_token; |
191 | 192 | $this->mLocked = $row->gu_locked; |
192 | 193 | $this->mHidden = $row->gu_hidden; |
| 194 | + $this->mInMigration = $row->gu_inmigration; |
193 | 195 | $this->mRegistration = wfTimestamp( TS_MW, $row->gu_registration ); |
194 | 196 | $this->mEmail = $row->gu_email; |
195 | 197 | $this->mAuthenticationTimestamp = |
— | — | @@ -359,6 +361,14 @@ |
360 | 362 | } |
361 | 363 | |
362 | 364 | /** |
| 365 | + * @return bool |
| 366 | + */ |
| 367 | + public function isInMigration() { |
| 368 | + $this->loadState(); |
| 369 | + return (bool)$this->mInMigration; |
| 370 | + } |
| 371 | + |
| 372 | + /** |
363 | 373 | * @return string timestamp |
364 | 374 | */ |
365 | 375 | public function getRegistration() { |
— | — | @@ -387,6 +397,7 @@ |
388 | 398 | |
389 | 399 | 'gu_locked' => 0, |
390 | 400 | 'gu_hidden' => 0, |
| 401 | + 'gu_inmigration' => 0, |
391 | 402 | |
392 | 403 | 'gu_registration' => $dbw->timestamp(), |
393 | 404 | ), |
— | — | @@ -786,113 +797,6 @@ |
787 | 798 | } |
788 | 799 | |
789 | 800 | /** |
790 | | - * Unattach a list of local accounts from the global account |
791 | | - * @param array $list List of wiki names |
792 | | - * @return Status |
793 | | - */ |
794 | | - public function adminUnattach( $list ) { |
795 | | - global $wgMemc; |
796 | | - if ( !count( $list ) ) { |
797 | | - return Status::newFatal( 'centralauth-admin-none-selected' ); |
798 | | - } |
799 | | - $status = new Status; |
800 | | - $valid = $this->validateList( $list ); |
801 | | - $invalid = array_diff( $list, $valid ); |
802 | | - foreach ( $invalid as $wikiName ) { |
803 | | - $status->error( 'centralauth-invalid-wiki', $wikiName ); |
804 | | - $status->failCount++; |
805 | | - } |
806 | | - |
807 | | - $invalidCount = count( $list ) - count( $valid ); |
808 | | - $missingCount = 0; |
809 | | - $dbcw = self::getCentralDB(); |
810 | | - $password = $this->getPassword(); |
811 | | - |
812 | | - foreach ( $valid as $wikiName ) { |
813 | | - # Delete the user from the central localuser table |
814 | | - $dbcw->delete( 'localuser', |
815 | | - array( |
816 | | - 'lu_name' => $this->mName, |
817 | | - 'lu_wiki' => $wikiName ), |
818 | | - __METHOD__ ); |
819 | | - if ( !$dbcw->affectedRows() ) { |
820 | | - $wiki = WikiMap::getWiki( $wikiName ); |
821 | | - $status->error( 'centralauth-admin-already-unmerged', $wiki->getDisplayName() ); |
822 | | - $status->failCount++; |
823 | | - continue; |
824 | | - } |
825 | | - |
826 | | - # Touch the local user row, update the password |
827 | | - $lb = wfGetLB( $wikiName ); |
828 | | - $dblw = $lb->getConnection( DB_MASTER, array(), $wikiName ); |
829 | | - $dblw->update( 'user', |
830 | | - array( |
831 | | - 'user_touched' => wfTimestampNow(), |
832 | | - 'user_password' => $password |
833 | | - ), array( 'user_name' => $this->mName ), __METHOD__ |
834 | | - ); |
835 | | - $id = $dblw->selectField( 'user', 'user_id', array( 'user_name' => $this->mName ), __METHOD__ ); |
836 | | - $wgMemc->delete( "$wikiName:user:id:$id" ); |
837 | | - |
838 | | - $lb->reuseConnection( $dblw ); |
839 | | - |
840 | | - $status->successCount++; |
841 | | - } |
842 | | - |
843 | | - if( in_array( wfWikiID(), $valid ) ) { |
844 | | - $this->resetState(); |
845 | | - } |
846 | | - |
847 | | - $this->invalidateCache(); |
848 | | - |
849 | | - return $status; |
850 | | - } |
851 | | - |
852 | | - /** |
853 | | - * Delete a global account |
854 | | - */ |
855 | | - function adminDelete() { |
856 | | - global $wgMemc; |
857 | | - wfDebugLog( 'CentralAuth', "Deleting global account for user {$this->mName}" ); |
858 | | - $centralDB = self::getCentralDB(); |
859 | | - |
860 | | - # Synchronise passwords |
861 | | - $password = $this->getPassword(); |
862 | | - $localUserRes = $centralDB->select( 'localuser', '*', |
863 | | - array( 'lu_name' => $this->mName ), __METHOD__ ); |
864 | | - $name = $this->getName(); |
865 | | - foreach ( $localUserRes as $localUserRow ) { |
866 | | - $wiki = $localUserRow->lu_wiki; |
867 | | - wfDebug( __METHOD__.": Fixing password on $wiki\n" ); |
868 | | - $lb = wfGetLB( $wiki ); |
869 | | - $localDB = $lb->getConnection( DB_MASTER, array(), $wiki ); |
870 | | - $localDB->update( 'user', |
871 | | - array( 'user_password' => $password ), |
872 | | - array( 'user_name' => $name ), |
873 | | - __METHOD__ |
874 | | - ); |
875 | | - $id = $localDB->selectField( 'user', 'user_id', array( 'user_name' => $this->mName ), __METHOD__ ); |
876 | | - $wgMemc->delete( "$wiki:user:id:$id" ); |
877 | | - $lb->reuseConnection( $localDB ); |
878 | | - } |
879 | | - |
880 | | - $centralDB->begin(); |
881 | | - # Delete and lock the globaluser row |
882 | | - $centralDB->delete( 'globaluser', array( 'gu_name' => $this->mName ), __METHOD__ ); |
883 | | - if ( !$centralDB->affectedRows() ) { |
884 | | - $centralDB->commit(); |
885 | | - return Status::newFatal( 'centralauth-admin-delete-nonexistent', $this->mName ); |
886 | | - } |
887 | | - # Delete the localuser rows |
888 | | - $centralDB->delete( 'localuser', array( 'lu_name' => $this->mName ), __METHOD__ ); |
889 | | - $centralDB->commit(); |
890 | | - |
891 | | - $this->invalidateCache(); |
892 | | - |
893 | | - return Status::newGood(); |
894 | | - } |
895 | | - |
896 | | - /** |
897 | 801 | * Lock a global account |
898 | 802 | */ |
899 | 803 | function adminLock() { |
— | — | @@ -969,6 +873,25 @@ |
970 | 874 | } |
971 | 875 | |
972 | 876 | /** |
| 877 | + * Mark a global account as in migration |
| 878 | + */ |
| 879 | + function adminSetInMigration( $newstatus, $actionType ) { |
| 880 | + $dbw = self::getCentralDB(); |
| 881 | + $dbw->begin(); |
| 882 | + $dbw->update( 'globaluser', array( 'gu_inmigration' => (bool)$newstatus ), |
| 883 | + array( 'gu_name' => $this->mName ), __METHOD__ ); |
| 884 | + if ( !$dbw->affectedRows() ) { |
| 885 | + $dbw->commit(); |
| 886 | + return Status::newFatal( "centralauth-admin-{$actionType}-nonexistent", $this->mName ); |
| 887 | + } |
| 888 | + $dbw->commit(); |
| 889 | + |
| 890 | + $this->invalidateCache(); |
| 891 | + |
| 892 | + return Status::newGood(); |
| 893 | + } |
| 894 | + |
| 895 | + /** |
973 | 896 | * Add a local account record for the given wiki to the central database. |
974 | 897 | * @param string $wikiID |
975 | 898 | * @param int $localid |
— | — | @@ -1597,6 +1520,7 @@ |
1598 | 1521 | 'gu_auth_token' => $this->mAuthToken, |
1599 | 1522 | 'gu_locked' => $this->mLocked, |
1600 | 1523 | 'gu_hidden' => $this->mHidden, |
| 1524 | + 'gu_inmigration' => $this->mInMigration, |
1601 | 1525 | 'gu_email' => $this->mEmail, |
1602 | 1526 | 'gu_email_authenticated' => $dbw->timestampOrNull( $this->mAuthenticationTimestamp ) |
1603 | 1527 | ), |
Index: trunk/extensions/CentralAuth/CentralAuth.php |
— | — | @@ -171,14 +171,16 @@ |
172 | 172 | $wgSpecialPages['GlobalUsers'] = 'SpecialGlobalUsers'; |
173 | 173 | $wgSpecialPageGroups['GlobalUsers'] = 'users'; |
174 | 174 | |
175 | | -$wgLogTypes[] = 'globalauth'; |
176 | | -$wgLogNames['globalauth'] = 'centralauth-log-name'; |
177 | | -$wgLogHeaders['globalauth'] = 'centralauth-log-header'; |
178 | | -$wgLogActions['globalauth/delete'] = 'centralauth-log-entry-delete'; |
179 | | -$wgLogActions['globalauth/lock'] = 'centralauth-log-entry-lock'; |
180 | | -$wgLogActions['globalauth/unlock'] = 'centralauth-log-entry-unlock'; |
181 | | -$wgLogActions['globalauth/hide'] = 'centralauth-log-entry-hide'; |
182 | | -$wgLogActions['globalauth/unhide'] = 'centralauth-log-entry-unhide'; |
| 175 | +$wgLogTypes[] = 'globalauth'; |
| 176 | +$wgLogNames['globalauth'] = 'centralauth-log-name'; |
| 177 | +$wgLogHeaders['globalauth'] = 'centralauth-log-header'; |
| 178 | +$wgLogActions['globalauth/delete'] = 'centralauth-log-entry-delete'; //Legacy |
| 179 | +$wgLogActions['globalauth/lock'] = 'centralauth-log-entry-lock'; |
| 180 | +$wgLogActions['globalauth/unlock'] = 'centralauth-log-entry-unlock'; |
| 181 | +$wgLogActions['globalauth/hide'] = 'centralauth-log-entry-hide'; |
| 182 | +$wgLogActions['globalauth/unhide'] = 'centralauth-log-entry-unhide'; |
| 183 | +$wgLogActions['globalauth/markasmigrating'] = 'centralauth-log-entry-markasmigrating'; |
| 184 | +$wgLogActions['globalauth/unmarkasmigrating'] = 'centralauth-log-entry-unmarkasmigrating'; |
183 | 185 | |
184 | 186 | $wgLogTypes[] = 'gblrights'; |
185 | 187 | $wgLogNames['gblrights'] = 'centralauth-rightslog-name'; |
Index: trunk/extensions/CentralAuth/SpecialCentralAuth.php |
— | — | @@ -66,31 +66,12 @@ |
67 | 67 | return; |
68 | 68 | } |
69 | 69 | |
70 | | - $deleted = $locked = $unlocked = $hidden = $unhidden = false; |
| 70 | + $locked = $unlocked = $hidden = $unhidden = |
| 71 | + $markedAsInMigration = $unmarkedAsInMigration = false; |
71 | 72 | |
72 | 73 | if( $this->mPosted ) { |
73 | 74 | if ( !$wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ) ) ) { |
74 | 75 | $this->showError( 'centralauth-token-mismatch' ); |
75 | | - /* } elseif( $this->mMethod == 'unmerge' ) { |
76 | | - $status = $globalUser->adminUnattach( $this->mWikis ); |
77 | | - if ( !$status->isGood() ) { |
78 | | - $this->showStatusError( $status->getWikiText() ); |
79 | | - } else { |
80 | | - global $wgLang; |
81 | | - $this->showSuccess( 'centralauth-admin-unmerge-success', |
82 | | - $wgLang->formatNum( $status->successCount ), |
83 | | - */ /* deprecated */ /* $status->successCount ); |
84 | | - } |
85 | | - } elseif ( $this->mMethod == 'delete' ) { |
86 | | - $status = $globalUser->adminDelete(); |
87 | | - if ( !$status->isGood() ) { |
88 | | - $this->showStatusError( $status->getWikiText() ); |
89 | | - } else { |
90 | | - global $wgLang; |
91 | | - $this->showSuccess( 'centralauth-admin-delete-success', $this->mUserName ); |
92 | | - $deleted = true; |
93 | | - $this->logAction( 'delete', $this->mUserName, $wgRequest->getVal( 'reason' ) ); |
94 | | - } */ |
95 | 76 | } elseif( $this->mMethod == 'lock' ) { |
96 | 77 | $status = $globalUser->adminLock(); |
97 | 78 | if ( !$status->isGood() ) { |
— | — | @@ -131,6 +112,26 @@ |
132 | 113 | $unhidden = true; |
133 | 114 | $this->logAction( 'unhide', $this->mUserName, $wgRequest->getVal( 'reason' ) ); |
134 | 115 | } |
| 116 | + } elseif( $this->mMethod == 'markasmigrating' ) { |
| 117 | + $status = $globalUser->adminSetInMigration( 1, 'markasmigrating' ); |
| 118 | + if ( !$status->isGood() ) { |
| 119 | + $this->showStatusError( $status->getWikiText() ); |
| 120 | + } else { |
| 121 | + global $wgLang; |
| 122 | + $this->showSuccess( 'centralauth-admin-markasmigrating-success', $this->mUserName ); |
| 123 | + $unhidden = true; |
| 124 | + $this->logAction( 'markasmigrating', $this->mUserName, $wgRequest->getVal( 'reason' ) ); |
| 125 | + } |
| 126 | + } elseif( $this->mMethod == 'unmarkasmigrating' ) { |
| 127 | + $status = $globalUser->adminSetInMigration( 0, 'unmarkasmigrating' ); |
| 128 | + if ( !$status->isGood() ) { |
| 129 | + $this->showStatusError( $status->getWikiText() ); |
| 130 | + } else { |
| 131 | + global $wgLang; |
| 132 | + $this->showSuccess( 'centralauth-admin-unmarkasmigrating-success', $this->mUserName ); |
| 133 | + $unhidden = true; |
| 134 | + $this->logAction( 'unmarkasmigrating', $this->mUserName, $wgRequest->getVal( 'reason' ) ); |
| 135 | + } |
135 | 136 | } else { |
136 | 137 | $this->showError( 'centralauth-admin-bad-input' ); |
137 | 138 | } |
— | — | @@ -138,20 +139,19 @@ |
139 | 140 | } |
140 | 141 | |
141 | 142 | $this->showUsernameForm(); |
142 | | - if ( !$deleted ) { |
143 | | - $this->showInfo(); |
144 | | - //$this->showActionForm( 'delete' ); |
145 | | - if( !$globalUser->isLocked() && !$locked ) |
146 | | - $this->showActionForm( 'lock' ); |
147 | | - if( $globalUser->isLocked() && !$unlocked ) |
148 | | - $this->showActionForm( 'unlock' ); |
149 | | - if( !$globalUser->isHidden() && !$hidden ) { |
150 | | - $this->showActionForm( 'hide' ); |
151 | | - } |
152 | | - if( $globalUser->isHidden() && !$unhidden ) { |
153 | | - $this->showActionForm( 'unhide' ); |
154 | | - } |
155 | | - } |
| 143 | + $this->showInfo(); |
| 144 | + if( !$globalUser->isLocked() && !$locked ) |
| 145 | + $this->showActionForm( 'lock' ); |
| 146 | + if( $globalUser->isLocked() && !$unlocked ) |
| 147 | + $this->showActionForm( 'unlock' ); |
| 148 | + if( !$globalUser->isHidden() && !$hidden ) |
| 149 | + $this->showActionForm( 'hide' ); |
| 150 | + if( $globalUser->isHidden() && !$unhidden ) |
| 151 | + $this->showActionForm( 'unhide' ); |
| 152 | + if( !$globalUser->isInMigration() && !$markedAsInMigration ) |
| 153 | + $this->showActionForm( 'markasmigrating' ); |
| 154 | + if( $globalUser->isInMigration() && !$unmarkedAsInMigration ) |
| 155 | + $this->showActionForm( 'unmarkasmigrating' ); |
156 | 156 | } |
157 | 157 | |
158 | 158 | function showStatusError( $wikitext ) { |
— | — | @@ -267,12 +267,6 @@ |
268 | 268 | global $wgUser; |
269 | 269 | ksort( $list ); |
270 | 270 | return |
271 | | - /*Xml::openElement( 'form', |
272 | | - array( |
273 | | - 'method' => 'post', |
274 | | - 'action' => $this->getTitle( $this->mUserName )->getLocalUrl( 'action=submit' ) ) ) . |
275 | | - Xml::hidden( 'wpMethod', $action ) . |
276 | | - Xml::hidden( 'wpEditToken', $wgUser->editToken() ) .*/ |
277 | 271 | '<table>' . |
278 | 272 | '<thead>' . |
279 | 273 | $this->tableRow( 'th', |
— | — | @@ -282,15 +276,8 @@ |
283 | 277 | implode( "\n", |
284 | 278 | array_map( array( $this, $listMethod ), |
285 | 279 | $list ) ) . |
286 | | - /*'<tr>' . |
287 | | - '<td></td>' . |
288 | | - '<td>' . |
289 | | - Xml::submitButton( $buttonText ) . |
290 | | - '</td>' . |
291 | | - '</tr>' .*/ |
292 | 280 | '</tbody>' . |
293 | | - '</table>' /*. |
294 | | - Xml::closeElement( 'form' )*/; |
| 281 | + '</table>'; |
295 | 282 | } |
296 | 283 | |
297 | 284 | function listMergedWikiItem( $row ) { |
Index: trunk/extensions/CentralAuth/CentralAuthHooks.php |
— | — | @@ -287,7 +287,7 @@ |
288 | 288 | return false; |
289 | 289 | } |
290 | 290 | $newCentral = new CentralAuthUser( $newName ); |
291 | | - if ( $newCentral->exists() ) { |
| 291 | + if ( $newCentral->exists() && !$newCentral->isInMigration() ) { |
292 | 292 | global $wgOut; |
293 | 293 | wfLoadExtensionMessages('SpecialCentralAuth'); |
294 | 294 | $wgOut->addWikiMsg( 'centralauth-renameuser-exists', $oldName, $newName ); |
Index: trunk/extensions/CentralAuth/CentralAuth.i18n.php |
— | — | @@ -118,60 +118,61 @@ |
119 | 119 | 'centralauth-attach-success' => 'The account was migrated to the unified account.', |
120 | 120 | |
121 | 121 | // Administrator's console |
122 | | - 'centralauth' => 'Unified login administration', |
123 | | - 'centralauth-admin-manage' => 'Manage user data', |
124 | | - 'centralauth-admin-username' => 'User name:', |
125 | | - 'centralauth-admin-lookup' => 'View or edit user data', |
126 | | - 'centralauth-admin-permission' => "Only stewards may merge other people's accounts for them.", |
127 | | - 'centralauth-admin-no-unified' => 'No unified account for this username.', |
128 | | - 'centralauth-admin-info-id' => 'User ID:', |
129 | | - 'centralauth-admin-info-registered' => 'Registered:', |
130 | | - 'centralauth-admin-info-locked' => 'Locked:', |
131 | | - 'centralauth-admin-info-hidden' => 'Hidden:', |
132 | | - 'centralauth-admin-yes' => 'yes', |
133 | | - 'centralauth-admin-no' => 'no', |
134 | | - 'centralauth-admin-attached' => 'Fully merged accounts', |
135 | | - 'centralauth-admin-unattached' => 'Unattached accounts', |
136 | | - 'centralauth-admin-no-unattached' => 'No unmerged accounts remain.', |
137 | | - 'centralauth-admin-list-localwiki' => 'Local wiki', |
138 | | - 'centralauth-admin-list-attached-on' => 'Attached on', |
139 | | - 'centralauth-admin-list-method' => 'Method', |
140 | | - 'centralauth-admin-unmerge' => 'Unmerge selected', |
141 | | - 'centralauth-admin-merge' => 'Merge selected', |
142 | | - 'centralauth-admin-bad-input' => 'Invalid merge selection', |
143 | | - 'centralauth-admin-none-selected' => 'No accounts selected to modify.', |
144 | | - 'centralauth-admin-already-unmerged' => 'Skipping $1, already unmerged', |
145 | | - 'centralauth-admin-unmerge-success' => 'Successfully unmerged $1 {{PLURAL:$1|account|accounts}}', |
146 | | - 'centralauth-admin-delete-title' => 'Delete account', |
147 | | - 'centralauth-admin-delete-description' => 'Deleting the global account will delete any global preferences, unattach all local accounts, and leave the global name free for another user to take. |
148 | | -All local accounts will continue to exist. |
149 | | -The passwords for local accounts created before the merge will revert to their pre-merge values.', |
150 | | - 'centralauth-admin-delete-button' => 'Delete this account', |
151 | | - 'centralauth-admin-delete-success' => 'Successfully deleted the global account for "<nowiki>$1</nowiki>"', |
152 | | - 'centralauth-admin-nonexistent' => 'There is no global account for "<nowiki>$1</nowiki>"', |
153 | | - 'centralauth-admin-delete-nonexistent' => 'Error: the global account "<nowiki>$1</nowiki>" does not exist.', |
154 | | - 'centralauth-token-mismatch' => 'Sorry, we could not process your form submission due to a loss of session data.', |
155 | | - 'centralauth-admin-lock-title' => 'Lock account', |
156 | | - 'centralauth-admin-lock-description' => 'Locking account will make impossible to log under it in any wiki.', |
157 | | - 'centralauth-admin-lock-button' => 'Lock this account', |
158 | | - 'centralauth-admin-lock-success' => 'Successfully locked the global account for "<nowiki>$1</nowiki>"', |
159 | | - 'centralauth-admin-lock-nonexistent' => 'Error: the global account "<nowiki>$1</nowiki>" does not exist.', |
160 | | - 'centralauth-admin-unlock-title' => 'Unlock account', |
161 | | - 'centralauth-admin-unlock-description' => 'Unlocking account will make it possible again to log under it.', |
162 | | - 'centralauth-admin-unlock-button' => 'Unlock this account', |
163 | | - 'centralauth-admin-unlock-success' => 'Successfully unlocked the global account for "<nowiki>$1</nowiki>"', |
164 | | - 'centralauth-admin-unlock-nonexistent' => 'Error: the global account "<nowiki>$1</nowiki>" does not exist.', |
165 | | - 'centralauth-admin-hide-title' => 'Hide account', |
166 | | - 'centralauth-admin-hide-description' => 'Hidden accounts are not shown on [[Special:GlobalUsers|Global users]].', |
167 | | - 'centralauth-admin-hide-button' => 'Hide this account', |
168 | | - 'centralauth-admin-hide-success' => 'Successfully hid the global account for "<nowiki>$1</nowiki>"', |
169 | | - 'centralauth-admin-hide-nonexistent' => 'Error: the global account "<nowiki>$1</nowiki>" does not exist.', |
170 | | - 'centralauth-admin-unhide-title' => 'Unhide account', |
171 | | - 'centralauth-admin-unhide-description' => 'Unhiding account will make it again appear on [[Special:GlobalUsers|Global users]].', |
172 | | - 'centralauth-admin-unhide-button' => 'Unhide this account', |
173 | | - 'centralauth-admin-unhide-success' => 'Successfully unhid the global account for "<nowiki>$1</nowiki>"', |
174 | | - 'centralauth-admin-unhide-nonexistent' => 'Error: the global account "<nowiki>$1</nowiki>" does not exist.', |
175 | | - 'centralauth-admin-reason' => 'Reason:', |
| 122 | + 'centralauth' => 'Unified login administration', |
| 123 | + 'centralauth-admin-manage' => 'Manage user data', |
| 124 | + 'centralauth-admin-username' => 'User name:', |
| 125 | + 'centralauth-admin-lookup' => 'View or edit user data', |
| 126 | + 'centralauth-admin-permission' => "Only stewards may merge other people's accounts for them.", |
| 127 | + 'centralauth-admin-no-unified' => 'No unified account for this username.', |
| 128 | + 'centralauth-admin-info-id' => 'User ID:', |
| 129 | + 'centralauth-admin-info-registered' => 'Registered:', |
| 130 | + 'centralauth-admin-info-locked' => 'Locked:', |
| 131 | + 'centralauth-admin-info-hidden' => 'Hidden:', |
| 132 | + 'centralauth-admin-yes' => 'yes', |
| 133 | + 'centralauth-admin-no' => 'no', |
| 134 | + 'centralauth-admin-attached' => 'Fully merged accounts', |
| 135 | + 'centralauth-admin-unattached' => 'Unattached accounts', |
| 136 | + 'centralauth-admin-no-unattached' => 'No unmerged accounts remain.', |
| 137 | + 'centralauth-admin-list-localwiki' => 'Local wiki', |
| 138 | + 'centralauth-admin-list-attached-on' => 'Attached on', |
| 139 | + 'centralauth-admin-list-method' => 'Method', |
| 140 | + 'centralauth-admin-unmerge' => 'Unmerge selected', |
| 141 | + 'centralauth-admin-merge' => 'Merge selected', |
| 142 | + 'centralauth-admin-bad-input' => 'Invalid merge selection', |
| 143 | + 'centralauth-admin-none-selected' => 'No accounts selected to modify.', |
| 144 | + 'centralauth-admin-nonexistent' => 'There is no global account for "<nowiki>$1</nowiki>"', |
| 145 | + 'centralauth-token-mismatch' => 'Sorry, we could not process your form submission due to a loss of session data.', |
| 146 | + 'centralauth-admin-lock-title' => 'Lock account', |
| 147 | + 'centralauth-admin-lock-description' => 'Locking account will make impossible to log under it in any wiki.', |
| 148 | + 'centralauth-admin-lock-button' => 'Lock this account', |
| 149 | + 'centralauth-admin-lock-success' => 'Successfully locked the global account for "<nowiki>$1</nowiki>"', |
| 150 | + 'centralauth-admin-lock-nonexistent' => 'Error: the global account "<nowiki>$1</nowiki>" does not exist.', |
| 151 | + 'centralauth-admin-unlock-title' => 'Unlock account', |
| 152 | + 'centralauth-admin-unlock-description' => 'Unlocking account will make it possible again to log under it.', |
| 153 | + 'centralauth-admin-unlock-button' => 'Unlock this account', |
| 154 | + 'centralauth-admin-unlock-success' => 'Successfully unlocked the global account for "<nowiki>$1</nowiki>"', |
| 155 | + 'centralauth-admin-unlock-nonexistent' => 'Error: the global account "<nowiki>$1</nowiki>" does not exist.', |
| 156 | + 'centralauth-admin-hide-title' => 'Hide account', |
| 157 | + 'centralauth-admin-hide-description' => 'Hidden accounts are not shown on [[Special:GlobalUsers|Global users]].', |
| 158 | + 'centralauth-admin-hide-button' => 'Hide this account', |
| 159 | + 'centralauth-admin-hide-success' => 'Successfully hid the global account for "<nowiki>$1</nowiki>"', |
| 160 | + 'centralauth-admin-hide-nonexistent' => 'Error: the global account "<nowiki>$1</nowiki>" does not exist.', |
| 161 | + 'centralauth-admin-unhide-title' => 'Unhide account', |
| 162 | + 'centralauth-admin-unhide-description' => 'Unhiding account will make it again appear on [[Special:GlobalUsers|Global users]].', |
| 163 | + 'centralauth-admin-unhide-button' => 'Unhide this account', |
| 164 | + 'centralauth-admin-unhide-success' => 'Successfully unhid the global account for "<nowiki>$1</nowiki>"', |
| 165 | + 'centralauth-admin-unhide-nonexistent' => 'Error: the global account "<nowiki>$1</nowiki>" does not exist.', |
| 166 | + 'centralauth-admin-markasmigrating-title' => 'Mark account as migrating', |
| 167 | + 'centralauth-admin-markasmigrating-description' => 'If account is in migration state, local bureaucrats may rename other accounts to its name.', |
| 168 | + 'centralauth-admin-markasmigrating-button' => 'Mark account as migrating', |
| 169 | + 'centralauth-admin-markasmigrating-success' => 'Successfully marked the global account for "<nowiki>$1</nowiki>" as migrating', |
| 170 | + 'centralauth-admin-markasmigrating-nonexistent' => 'Error: the global account "<nowiki>$1</nowiki>" does not exist.', |
| 171 | + 'centralauth-admin-unmarkasmigrating-title' => 'Unmark this account as migrating', |
| 172 | + 'centralauth-admin-unmarkasmigrating-description' => 'Allows to remove migration mark from the account.', |
| 173 | + 'centralauth-admin-unmarkasmigrating-button' => 'Umark this account as migrating', |
| 174 | + 'centralauth-admin-unmarkasmigrating-success' => 'Successfully unmarked the global account for "<nowiki>$1</nowiki>" as migrating', |
| 175 | + 'centralauth-admin-unmarkasmigrating-nonexistent' => 'Error: the global account "<nowiki>$1</nowiki>" does not exist.', |
| 176 | + 'centralauth-admin-reason' => 'Reason:', |
176 | 177 | |
177 | 178 | // List of global users |
178 | 179 | 'globalusers' => 'Global user list', |
— | — | @@ -205,20 +206,22 @@ |
206 | 207 | // Other messages |
207 | 208 | 'centralauth-invalid-wiki' => 'No such wiki DB: $1', |
208 | 209 | 'centralauth-account-exists' => 'Cannot create account: the requested username is already taken in the unified login system.', |
209 | | - 'centralauth-autologin-desc' => 'This special page is used internally by MediaWiki. |
| 210 | + 'centralauth-autologin-desc' => 'This special page is used internally by MediaWiki. |
210 | 211 | When you [[Special:UserLogin|log in]], the central login system instructs your browser to request this page from all linked domains, using image links. |
211 | 212 | You have requested this page without providing any authentication data, so it does nothing.', |
212 | 213 | 'centralauth-login-progress' => 'Logging you in to Wikimedia\'s other projects:', |
213 | 214 | 'centralauth-logout-progress' => 'Logging you out from Wikimedia\'s other projects:', |
214 | 215 | |
215 | 216 | // Logging |
216 | | - 'centralauth-log-name' => 'Global account log', |
217 | | - 'centralauth-log-header' => 'This log contains operations under global accounts: deletions, locking and unlocking.', |
218 | | - 'centralauth-log-entry-delete' => 'deleted global account "<nowiki>$1</nowiki>"', |
219 | | - 'centralauth-log-entry-lock' => 'locked global account "<nowiki>$1</nowiki>"', |
220 | | - 'centralauth-log-entry-unlock' => 'unlocked global account "<nowiki>$1</nowiki>"', |
221 | | - 'centralauth-log-entry-hide' => 'hid global account "<nowiki>$1</nowiki>"', |
222 | | - 'centralauth-log-entry-unhide' => 'unhid global account "<nowiki>$1</nowiki>"', |
| 217 | + 'centralauth-log-name' => 'Global account log', |
| 218 | + 'centralauth-log-header' => 'This log contains operations under global accounts: deletions, locking and unlocking.', |
| 219 | + 'centralauth-log-entry-delete' => 'deleted global account "<nowiki>$1</nowiki>"', |
| 220 | + 'centralauth-log-entry-lock' => 'locked global account "<nowiki>$1</nowiki>"', |
| 221 | + 'centralauth-log-entry-unlock' => 'unlocked global account "<nowiki>$1</nowiki>"', |
| 222 | + 'centralauth-log-entry-hide' => 'hid global account "<nowiki>$1</nowiki>"', |
| 223 | + 'centralauth-log-entry-unhide' => 'unhid global account "<nowiki>$1</nowiki>"', |
| 224 | + 'centralauth-log-entry-markasmigrating' => 'marked global account "<nowiki>$1</nowiki>" as migrating', |
| 225 | + 'centralauth-log-entry-unmarkasmigrating' => 'unmarked global account "<nowiki>$1</nowiki> as migrating"', |
223 | 226 | |
224 | 227 | 'centralauth-rightslog-name' => 'Global rights log', |
225 | 228 | 'centralauth-rightslog-entry-usergroups' => 'changed global group membership for $1 from $2 to $3', |