Use an accurate number of captchas

Change-Id: Ice434235687aa68ccf37a0219d379beb97e5a8ec
This commit is contained in:
Reedy 2017-02-07 18:02:46 +00:00
parent 0cbcb020fa
commit a2fc069174
4 changed files with 21 additions and 30 deletions

View file

@ -34,28 +34,24 @@ class FancyCaptcha extends SimpleCaptcha {
}
/**
* @return integer Estimate of the number of captchas files
* @deprecated Use getCaptchaCount instead for an accurate figure
* @return int Number of captcha files
*/
public function estimateCaptchaCount() {
global $wgCaptchaDirectoryLevels;
wfDeprecated( __METHOD__ );
return $this->getCaptchaCount();
}
$factor = 1;
$sampleDir = $this->getBackend()->getRootStoragePath() . '/captcha-render';
if ( $wgCaptchaDirectoryLevels >= 1 ) { // 1/16 sample if 16 shards
$sampleDir .= '/' . dechex( mt_rand( 0, 15 ) );
$factor = 16;
}
if ( $wgCaptchaDirectoryLevels >= 3 ) { // 1/256 sample if 4096 shards
$sampleDir .= '/' . dechex( mt_rand( 0, 15 ) );
$factor = 256;
}
/**
* @return int Number of captcha files
*/
public function getCaptchaCount() {
$backend = $this->getBackend();
$files = $backend->getFileList(
[ 'dir' => $backend->getRootStoragePath() . '/captcha-render' ]
);
$count = 0;
foreach ( $this->getBackend()->getFileList( [ 'dir' => $sampleDir ] ) as $file ) {
++$count;
}
return ( $count * $factor );
return iterator_count( $files );
}
/**

View file

@ -1,7 +1,7 @@
{
"@doc": "Please read README.md",
"name": "ConfirmEdit",
"version": "1.4.0",
"version": "1.4.1",
"author": [
"Brion Vibber",
"Florian Schmidt",

View file

@ -41,22 +41,16 @@ class CountCaptchas extends Maintenance {
}
public function execute() {
$instance = ConfirmEditHooks::getInstance();
if ( !( $instance instanceof FancyCaptcha ) ) {
$this->error( "\$wgCaptchaClass is not FancyCaptcha.\n", 1 );
}
$backend = $instance->getBackend();
$countEst = $instance->estimateCaptchaCount();
$this->output( "Estimated number of current captchas is $countEst.\n" );
$files = $backend->getFileList(
[ 'dir' => $backend->getRootStoragePath() . '/captcha-render' ]
);
$count = iterator_count( $files );
$this->output( "Actual number of current captchas is $count.\n" );
$countAct = $instance->getCaptchaCount();
$this->output( "Current number of captchas is $countAct.\n" );
}
}

View file

@ -24,7 +24,7 @@
if ( getenv( 'MW_INSTALL_PATH' ) ) {
$IP = getenv( 'MW_INSTALL_PATH' );
} else {
$IP = __DIR__.'/../../..';
$IP = __DIR__ . '/../../..';
}
require_once ( "$IP/maintenance/Maintenance.php" );
@ -37,6 +37,7 @@ require_once ( "$IP/maintenance/Maintenance.php" );
class GenerateFancyCaptchas extends Maintenance {
public function __construct() {
parent::__construct();
// See captcha.py for argument usage
$this->addOption( "wordlist", 'A list of words', true, true );
$this->addOption( "font", "The font to use", true, true );
@ -66,8 +67,8 @@ class GenerateFancyCaptchas extends Maintenance {
$countGen = (int)$this->getOption( 'fill' );
if ( !$deleteOldCaptchas ) {
$countAct = $instance->estimateCaptchaCount();
$this->output( "Estimated number of current captchas is $countAct.\n" );
$countAct = $instance->getCaptchaCount();
$this->output( "Current number of captchas is $countAct.\n" );
$countGen -= $countAct;
}