Follow up of r45960, adding English comment in Names.php
[lhc/web/wiklou.git] / maintenance / removeUnusedAccounts.inc
index ac3b5c4..02c07c1 100644 (file)
@@ -1,49 +1,46 @@
 <?php
 
 /**
- * Support functions for the removeUnusedAccounts script
+ * Support functions for the removeUnusedAccounts maintenance script
  *
- * @package MediaWiki
- * @subpackage Maintenance
+ * @file
+ * @ingroup Maintenance
  * @author Rob Church <robchur@gmail.com>
  */
 
-# 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();
 
-# 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();
+       return $count == 0;
 }
 
-?>
\ No newline at end of file
+/**
+ * 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( "  --ignore-touched=x   : Ignore accounts touched within the lasts x days\n" );
+       echo( "  --ignore-groups=x,y  : Ignore accounts within these groups\n" );
+       echo( "\n" );
+}