Merge pull request #7 from jacob-g/master

Added a few fixes, including detection of Scratch Team members
This commit is contained in:
Sarah Otts 2016-01-12 09:42:42 -06:00
commit b585046ae5
6 changed files with 134 additions and 84 deletions

View file

@ -1,81 +1,91 @@
<?php <?php
/*
(c) Aaron Schulz 2007, GPL /*
This program is free software; you can redistribute it and/or modify (c) Aaron Schulz 2007, GPL
it under the terms of the GNU General Public License as published by This program is free software; you can redistribute it and/or modify
the Free Software Foundation; either version 2 of the License, or it under the terms of the GNU General Public License as published by
(at your option) any later version. the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of This program is distributed in the hope that it will be useful,
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the but WITHOUT ANY WARRANTY; without even the implied warranty of
GNU General Public License for more details. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc., You should have received a copy of the GNU General Public License along
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. with this program; if not, write to the Free Software Foundation, Inc.,
http://www.gnu.org/copyleft/gpl.html 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ http://www.gnu.org/copyleft/gpl.html
if ( !defined( 'MEDIAWIKI' ) ) { */
echo "ConfirmAccount extension\n";
exit( 1 ) ; if ( !defined( 'MEDIAWIKI' ) ) {
} echo "ConfirmAccount extension\n";
exit( 1 ) ;
$wgExtensionCredits['specialpage'][] = array( }
'path' => __FILE__,
'name' => 'Confirm User Accounts', $wgExtensionCredits['specialpage'][] = array(
'descriptionmsg' => 'confirmedit-desc', 'path' => __FILE__,
'author' => 'Aaron Schulz and Jacob G.', 'name' => 'Confirm User Accounts',
'url' => 'https://www.mediawiki.org/wiki/Extension:ConfirmAccount', 'descriptionmsg' => 'confirmedit-desc',
); 'author' => 'Aaron Schulz and Jacob G.',
'url' => 'https://www.mediawiki.org/wiki/Extension:ConfirmAccount',
# Load default config variables );
require( dirname( __FILE__ ) . '/ConfirmAccount.config.php' );
# Load default config variables
# Define were PHP files and i18n files are located require( dirname( __FILE__ ) . '/ConfirmAccount.config.php' );
require( dirname( __FILE__ ) . '/ConfirmAccount.setup.php' );
ConfirmAccountSetup::defineSourcePaths( $wgAutoloadClasses, $wgExtensionMessagesFiles ); # Define were PHP files and i18n files are located
require( dirname( __FILE__ ) . '/ConfirmAccount.setup.php' );
# Define JS/CSS modules and file locations
ConfirmAccountUISetup::defineResourceModules( $wgResourceModules ); ConfirmAccountSetup::defineSourcePaths( $wgAutoloadClasses, $wgExtensionMessagesFiles );
# Let some users confirm account requests and view credentials for created accounts # Define JS/CSS modules and file locations
$wgAvailableRights[] = 'confirmaccount'; // user can confirm account requests require( dirname( __FILE__ ) . '/frontend/ConfirmAccountUI.setup.php' );
$wgAvailableRights[] = 'requestips'; // user can see IPs in request queue ConfirmAccountUISetup::defineResourceModules( $wgResourceModules );
$wgAvailableRights[] = 'lookupcredentials'; // user can lookup info on confirmed users
# Let some users confirm account requests and view credentials for created accounts
# Actually register special pages $wgAvailableRights[] = 'confirmaccount'; // user can confirm account requests
ConfirmAccountUISetup::defineSpecialPages( $wgSpecialPages, $wgSpecialPageGroups ); $wgAvailableRights[] = 'requestips'; // user can see IPs in request queue
$wgAvailableRights[] = 'lookupcredentials'; // user can lookup info on confirmed users
# ####### HOOK CALLBACK FUNCTIONS #########
# Actually register special pages
# UI-related hook handlers ConfirmAccountUISetup::defineSpecialPages( $wgSpecialPages, $wgSpecialPageGroups );
ConfirmAccountUISetup::defineHookHandlers( $wgHooks );
# ####### HOOK CALLBACK FUNCTIONS #########
# Check for account name collisions
$wgHooks['AbortNewAccount'][] = 'ConfirmAccountUIHooks::checkIfAccountNameIsPending'; # UI-related hook handlers
ConfirmAccountUISetup::defineHookHandlers( $wgHooks );
# Schema changes
$wgHooks['LoadExtensionSchemaUpdates'][] = 'ConfirmAccountUpdaterHooks::addSchemaUpdates'; # Check for account name collisions
$wgHooks['AbortNewAccount'][] = 'ConfirmAccountUIHooks::checkIfAccountNameIsPending';
# ####### END HOOK CALLBACK FUNCTIONS #########
# Schema changes
# Load the extension after setup is finished $wgHooks['LoadExtensionSchemaUpdates'][] = 'ConfirmAccountUpdaterHooks::addSchemaUpdates';
$wgExtensionFunctions[] = 'efLoadConfirmAccount';
# ####### END HOOK CALLBACK FUNCTIONS #########
/**
* This function is for setup that has to happen in Setup.php # Load the extension after setup is finished
* when the functions in $wgExtensionFunctions get executed. $wgExtensionFunctions[] = 'efLoadConfirmAccount';
* @return void
*/ /**
function efLoadConfirmAccount() {
global $wgEnableEmail; * This function is for setup that has to happen in Setup.php
# This extension needs email enabled! * when the functions in $wgExtensionFunctions get executed.
# Otherwise users can't get their passwords... * @return void
if ( !$wgEnableEmail ) {
echo "ConfirmAccount extension requires \$wgEnableEmail set to true.\n"; */
exit( 1 ) ;
} function efLoadConfirmAccount() {
} global $wgEnableEmail;
# This extension needs email enabled!
# Otherwise users can't get their passwords...
/*if ( !$wgEnableEmail ) {
echo "ConfirmAccount extension requires \$wgEnableEmail set to true.\n";
exit( 1 ) ;
}*/
}

View file

@ -294,10 +294,10 @@ class AccountConfirmSubmission {
} }
# Actually send out the email (@TODO: rollback on failure including $wgAuth) # Actually send out the email (@TODO: rollback on failure including $wgAuth)
$result = $user->sendMail( /*$result = $user->sendMail(
$context->msg( 'confirmaccount-email-subj' )->inContentLanguage()->text(), $context->msg( 'confirmaccount-email-subj' )->inContentLanguage()->text(),
$ebody $ebody
); );*/
# Update user count # Update user count
$ssUpdate = new SiteStatsUpdate( 0, 0, 0, 0, 1 ); $ssUpdate = new SiteStatsUpdate( 0, 0, 0, 0, 1 );

View file

@ -112,7 +112,7 @@ class AccountRequestSubmission {
return; return;
} }
$success = false; $success = false;
preg_match_all('%<div id="comments-\d+" class="comment +" data-comment-id="\d+">.*?<div class="actions-wrap">.*?<div class="name">\s+<a href="/users/(([a-zA-Z0-9]|-|_)+)">(([a-zA-Z0-9]|-|_)+)</a>\s+</div>\s+<div class="content">(.*?)</div>%ms', $data, $matches); preg_match_all('%<div id="comments-\d+" class="comment +" data-comment-id="\d+">.*?<div class="actions-wrap">.*?<div class="name">\s+<a href="/users/(([a-zA-Z0-9]|-|_)+)">(([a-zA-Z0-9]|-|_|\*)+)</a>\s+</div>\s+<div class="content">(.*?)</div>%ms', $data, $matches);
unset($matches[2]); unset($matches[2]);
unset($matches[3]); unset($matches[3]);
unset($matches[4]); unset($matches[4]);

View file

@ -135,6 +135,8 @@ There may be contact lists on site that you can use if you want to know more abo
$2 $2
There may be contact lists on site that you can use if you want to know more about user account policy.', There may be contact lists on site that you can use if you want to know more about user account policy.',
'confirmaccount-altwarning' => 'The following accounts have made edits from the same IP address as this user:',
'confirmaccount-warning' => 'Warning',
); );

View file

@ -1123,6 +1123,15 @@ Este código de confirmación caducará el $4.',
La dirección de correo electrónico ha sido confirmada. Puedes confirmar la solicitud aquí "$2".', La dirección de correo electrónico ha sido confirmada. Puedes confirmar la solicitud aquí "$2".',
'acct_request_throttle_hit' => 'Perdón, ya has solicitado {{PLURAL:$1|1 cuenta|$1 cuentas}}. 'acct_request_throttle_hit' => 'Perdón, ya has solicitado {{PLURAL:$1|1 cuenta|$1 cuentas}}.
No puedes hacer ninguna otra solicitud.', No puedes hacer ninguna otra solicitud.',
//Scratch-specific stuff
'requestaccount-user-verification' => 'Verificion de usuario',
'requestaccount-code-troubleshoot' => '\'\'\'Aviso:\'\'\' Si tienes problemas con el sistema de verificacion, por favor lee la [[Scratch_Wiki:Become a contributor/Verification code troubleshooting|pagina de soluciones]].',
'requestaccount-set-pwd' => 'Decide la contrasena',
'requestaccount-project-info' => 'Por favor ve al [$1 proyecto de verificacion] y comenta el codigo siguiente:<br />\'\'\'$2\'\'\'',
'requestaccount-project-link' => 'http://scratch.mit.edu/projects/10135908/',
'requestaccount-nocomment-error' => 'No aparece como hayas comentado el codigo.',
'requestaccount-api-failed' => 'Estamos teniendo problemas con el servidor. Por favor trata de registrarte otra vez en un tiempo diferente.',
); );
/** Estonian (eesti) /** Estonian (eesti)

View file

@ -421,6 +421,20 @@ class ConfirmAccountsPage extends SpecialPage {
} }
$form .= '</fieldset>'; $form .= '</fieldset>';
} }
//search for possible alt accounts
$ip = $accountReq->getIP();
$alts = $this->getUsersFromIP($ip);
if (!empty($alts)) {
foreach ($alts as &$user) {
}
$form .= '<fieldset>';
$form .= '<legend style="color:#F00; font-weight:bold">' . $this->msg('confirmaccount-warning') . '</legend>';
$form .= '<strong>' . $this->msg('confirmaccount-altwarning') . '</strong>';
$form .= '<ul><li>' . implode('</li><li>', $alts) . '</li></ul>';
$form .= '</fieldset>';
}
$form .= '<fieldset>'; $form .= '<fieldset>';
$form .= '<legend>' . $this->msg( 'confirmaccount-legend' )->escaped() . '</legend>'; $form .= '<legend>' . $this->msg( 'confirmaccount-legend' )->escaped() . '</legend>';
@ -746,6 +760,21 @@ class ConfirmAccountsPage extends SpecialPage {
return $r; return $r;
} }
function getUsersFromIP($ip) {
global $wgShowExceptionDetails ;
$wgShowExceptionDetails = true;
$dbr = wfGetDB( DB_SLAVE );
$result = $dbr->select('recentchanges', array('DISTINCT(rc_user_text)'), 'rc_ip=\'' . $ip . '\'');
$return = array();
foreach ($result as $row) {
$return[] = (string)$row->rc_user_text;
}
array_unique($return);
return $return;
}
} }
/** /**