mediawiki-extensions-LoginN.../includes/DeferredChecksJob.php
Max Semenik 0a70efc9da Move expensive processing into job queue
Bug: T167731
Depends-On: I618840fafd22d9b6471eb470ef0414e354aa17f5

Change-Id: I1fcd15f523828141e8fadee9a8ad824eacefc0f9
2017-07-11 22:08:53 +00:00

68 lines
1.7 KiB
PHP

<?php
namespace LoginNotify;
use Exception;
use Job;
use Title;
use User;
/**
* Class DeferredChecksJob
* @package LoginNotify
*/
class DeferredChecksJob extends Job {
const TYPE_LOGIN_FAILED = 'failed';
const TYPE_LOGIN_SUCCESS = 'success';
/**
* @param Title $title
* @param array|bool $params
*/
public function __construct( Title $title, $params = false ) {
parent::__construct( 'LoginNotifyChecks', $title, $params );
}
/**
* Run the job
* @return bool Success
*/
public function run() {
$checkType = $this->params['checkType'];
$userId = $this->params['userId'];
$user = User::newFromId( $userId );
if ( !$user ) {
throw new Exception( "Can't find user for user id=" . print_r( $userId, true ) );
}
if ( !isset( $this->params['subnet'] ) || !is_string( $this->params['subnet'] ) ) {
throw new Exception( __CLASS__
. " expected to receive a string parameter 'subnet', got "
. print_r( $this->params['subnet'], true )
);
}
$subnet = $this->params['resultSoFar'];
if ( !isset( $this->params['resultSoFar'] ) || !is_string( $this->params['resultSoFar'] ) ) {
throw new Exception( __CLASS__
. " expected to receive a string parameter 'resultSoFar', got "
. print_r( $this->params['resultSoFar'], true )
);
}
$resultSoFar = $this->params['resultSoFar'];
$loginNotify = new LoginNotify();
switch ( $checkType ) {
case self::TYPE_LOGIN_FAILED:
$loginNotify->recordFailureDeferred( $user, $subnet, $resultSoFar );
break;
case self::TYPE_LOGIN_SUCCESS:
$loginNotify->sendSuccessNoticeDeferred( $user, $subnet, $resultSoFar );
break;
default:
throw new Exception( 'Unknown check type ' . print_r( $checkType, true ) );
}
return true;
}
}