<?php
/**
- * Support functions for the removeUnusedAccounts script
+ * Support functions for the removeUnusedAccounts maintenance script
*
- * @package MediaWiki
- * @subpackage Maintenance
+ *
+ * @addtogroup Maintenance
* @author Rob Church <robchur@gmail.com>
*/
-define( 'ACTION_REPORT', 0 );
-define( 'ACTION_DELETE', 1 );
-
-# Count the number of edits the specified user has made
-function CountEdits( $user_id ) {
- # We've *got* to pull this stuff off the master. If the user *has* made an edit, but it hasn't
- # been replicated to the slaves yet, we'll end up falsely marking them as inactive. This could
- # (and usually would) lead to their deletion.
- $dbw =& wfGetDB( DB_MASTER );
- $sql = 'SELECT COUNT(rev_id) AS count FROM ' . $dbw->tableName( 'revision' ) . ' WHERE rev_user = ' . $user_id;
- $res = $dbw->query( $sql );
- $row = $dbw->fetchObject( $res );
- return( $row->count );
-}
+/**
+ * Could the specified user account be deemed inactive?
+ * (No edits, no deleted edits, no log entries, no current/old uploads)
+ *
+ * @param $id User's ID
+ * @param $master Perform checking on the master
+ * @return bool
+ */
+function isInactiveAccount( $id, $master = false ) {
+ $dbo = wfGetDB( $master ? DB_MASTER : DB_SLAVE );
+ $fname = 'isInactiveAccount';
+ $checks = array( 'revision' => 'rev', 'archive' => 'ar', 'logging' => 'log',
+ 'image' => 'img', 'oldimage' => 'oi' );
+ $count = 0;
-# Return an array containing all valid user IDs
-function GetUsers() {
- # We're safe enough pulling this off a slave
- $dbr =& wfGetDB( DB_SLAVE );
- $sql = 'SELECT user_id FROM ' . $dbr->tableName( 'user' );
- $res = $dbr->query( $sql );
- $users = array();
- while( $row = $dbr->fetchObject( $res ) ) {
- $users[] = $row->user_id;
+ $dbo->immediateBegin();
+ foreach( $checks as $table => $fprefix ) {
+ $conds = array( $fprefix . '_user' => $id );
+ $count += (int)$dbo->selectField( $table, 'COUNT(*)', $conds, $fname );
}
- return( $users );
+ $dbo->immediateCommit();
+
+ return $count == 0;
}
-# Delete one or more users
-function DeleteUsers( $users ) {
- # Need a master, obviously
- $dbw =& wfGetDB( DB_MASTER );
- # We'll do it all in one go, for speed
- $dbw->begin();
- $table = $dbw->tableName( 'user' );
- foreach( $users as $user ) {
- $dbw->query( 'DELETE FROM ' . $table . ' WHERE user_id = ' . $user . ' LIMIT 1' );
- }
- $dbw->commit();
+/**
+ * Show help for the maintenance script
+ */
+function showHelp() {
+ echo( "Delete unused user accounts from the database.\n\n" );
+ echo( "USAGE: php removeUnusedAccounts.php [--delete]\n\n" );
+ echo( " --delete : Delete accounts which are discovered to be inactive\n" );
+ echo( "\n" );
}
?>
\ No newline at end of file