更改项目结构,增加活动作者用户组和相关自动规则
parent
e50608265b
commit
dcad83b11c
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
namespace Isekai\Job;
|
||||
|
||||
use Exception;
|
||||
use Isekai\MiscUtils;
|
||||
use Job;
|
||||
use MediaWiki\MediaWikiServices;
|
||||
use Title;
|
||||
|
||||
class CheckActivatedEditorJob extends Job {
|
||||
public function __construct(Title $title, array $params){
|
||||
parent::__construct('CheckActivatedEditor', $title, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测用户是否满足加入编辑者用户组的条件
|
||||
*/
|
||||
public function run() {
|
||||
$services = MediaWikiServices::getInstance();
|
||||
if (!$this->params['user_id']) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$user = $services->getUserFactory()->newFromId($this->params['user_id']);
|
||||
|
||||
if ($user->isRegistered() && MiscUtils::checkUserIsActivatedEditor($user)) {
|
||||
$services->getUserGroupManager()->addUserToGroup($user, 'activated-editor');
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
<?php
|
||||
namespace Isekai;
|
||||
|
||||
use ApiMain;
|
||||
use FauxRequest;
|
||||
use User;
|
||||
use MediaWiki\MediaWikiServices;
|
||||
|
||||
class MiscUtils {
|
||||
/**
|
||||
* @param User $user
|
||||
*/
|
||||
public static function checkUserIsActivatedEditor($user) {
|
||||
$services = MediaWikiServices::getInstance();
|
||||
$config = $services->getMainConfig();
|
||||
$userGroupManager = $services->getUserGroupManager();
|
||||
|
||||
$userGroups = $userGroupManager->getUserGroups($user);
|
||||
|
||||
if (in_array('activated-editor', $userGroups)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$requiredWords = $config->get('IsekaiActivateEditorRequiredWords');
|
||||
|
||||
$continueKey = null;
|
||||
$userCreditSize = 0;
|
||||
|
||||
do {
|
||||
$apiParams = [
|
||||
'action' => 'query',
|
||||
'list' => 'usercontribs',
|
||||
'ucprop' => 'sizediff',
|
||||
'uclimit' => 20,
|
||||
'ucuserids' => $user->getId(),
|
||||
];
|
||||
if ($continueKey) {
|
||||
$apiParams['uccontinue'] = $continueKey;
|
||||
}
|
||||
$api = new ApiMain( new FauxRequest( $apiParams ) );
|
||||
|
||||
$api->execute();
|
||||
$result = $api->getResult();
|
||||
|
||||
$continueKey = $result->getResultData( [ 'continue', 'uccontinue' ] );
|
||||
if ($continueKey === '||') {
|
||||
$continueKey = null;
|
||||
}
|
||||
|
||||
$userCredits = $result->getResultData( [ 'query', 'usercontribs' ] );
|
||||
foreach ($userCredits as $userCreditData) {
|
||||
if (is_array($userCreditData) && isset($userCreditData['sizediff'])) {
|
||||
if ($userCreditData['sizediff'] > 0) {
|
||||
$userCreditSize += $userCreditData['sizediff'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($userCreditSize > $requiredWords) {
|
||||
return true;
|
||||
}
|
||||
} while($continueKey);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
@ -0,0 +1,97 @@
|
||||
<?php
|
||||
namespace Isekai\Maintenance;
|
||||
|
||||
use Maintenance;
|
||||
use Config;
|
||||
use ApiMain;
|
||||
use FauxRequest;
|
||||
use Isekai\MiscUtills;
|
||||
use Isekai\MiscUtils;
|
||||
use MediaWiki\MediaWikiServices;
|
||||
use Title;
|
||||
use Wikimedia\Rdbms\IDatabase;
|
||||
|
||||
$IP = getenv( 'MW_INSTALL_PATH' );
|
||||
if ( $IP === false ) {
|
||||
$IP = __DIR__ . '/../../..';
|
||||
}
|
||||
|
||||
require_once "$IP/maintenance/Maintenance.php";
|
||||
|
||||
class UpdateActivatedEditor extends Maintenance {
|
||||
/**
|
||||
* MediaWiki Sservices
|
||||
*
|
||||
* @var MediaWikiServices
|
||||
*/
|
||||
public $services;
|
||||
|
||||
/**
|
||||
* A database replica DB object
|
||||
*
|
||||
* @var IDatabase
|
||||
*/
|
||||
public $dbr;
|
||||
|
||||
/**
|
||||
* Config
|
||||
*
|
||||
* @var Config
|
||||
*/
|
||||
public $config;
|
||||
|
||||
public function __construct() {
|
||||
parent::__construct();
|
||||
|
||||
$this->addDescription( 'Update activated-editor users by editor history.' );
|
||||
|
||||
$this->setBatchSize( 300 );
|
||||
|
||||
$this->requireExtension( 'IsekaiMisc' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Return all users
|
||||
* @return IResultWrapper
|
||||
*/
|
||||
private function getUserRes() {
|
||||
return $this->dbr->select(
|
||||
[ 'user' ],
|
||||
[
|
||||
'user_id',
|
||||
'user_name',
|
||||
],
|
||||
[ 'user_editcount > 0' ],
|
||||
__METHOD__
|
||||
);
|
||||
}
|
||||
|
||||
public function execute() {
|
||||
$this->services = MediaWikiServices::getInstance();
|
||||
$this->dbr = $this->services->getDBLoadBalancer()->getConnection(DB_REPLICA);
|
||||
$this->config = $this->services->getMainConfig();
|
||||
|
||||
$userFactory = $this->services->getUserFactory();
|
||||
$userGroupManager = $this->services->getUserGroupManager();
|
||||
|
||||
$requiredWords = $this->config->get('IsekaiActivateEditorRequiredWords');
|
||||
|
||||
$groupedUserIds = [];
|
||||
|
||||
$res = $this->getUserRes(NS_MAIN);
|
||||
foreach ($res as $row) {
|
||||
$continueKey = null;
|
||||
$userCreditSize = 0;
|
||||
|
||||
$user = $userFactory->newFromId($row->user_id);
|
||||
$this->output('Checking user "' . $user->getName() . '"...' . PHP_EOL);
|
||||
if (MiscUtils::checkUserIsActivatedEditor($user)) {
|
||||
$this->output(' Adding user "' . $user->getName() . '" to activated-editor group' . PHP_EOL);
|
||||
$userGroupManager->addUserToGroup($user, 'activated-editor');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$maintClass = UpdateActivatedEditor::class;
|
||||
require_once RUN_MAINTENANCE_IF_MAIN;
|
Loading…
Reference in New Issue