更改项目结构,增加活动作者用户组和相关自动规则
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