📄 delete-idle-wiki-users.pl
字号:
#!/usr/bin/perl## Nuke idle wiki accounts from the wiki's user database.## Copyright (C) 2005 Ralf Baechle (ralf@linux-mips.org)## This program is free software; you can redistribute it and/or modify it# under the terms of the GNU General Public License as published by the# Free Software Foundation; either version 2 of the License, or (at your# option) any later version.## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN# NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.## You should have received a copy of the GNU General Public License along# with this program; if not, write to the Free Software Foundation, Inc.,# 675 Mass Ave, Cambridge, MA 02139, USA.#my $database = "DBI:mysql:database=wikidb;host=localhost";my $dbuser = "wikiuser";my $dbpasswd = "password";use strict;use DBI();my $verbose = 0;my $for_real = 1;sub do_db_op{ my ($dbh, $sql) = @_; if ($verbose >= 3) { print $sql . ";\n" } if ($for_real == 1) { $dbh->do($sql); }}sub undo_user{ my ($ref, $dbh, $sth, $killed); # Connect to the database. $dbh = DBI->connect($database, $dbuser, $dbpasswd, {RaiseError => 1}); $sth = $dbh->prepare("SELECT * FROM user"); $sth->execute(); $ref = $sth->fetchrow_hashref(); if ($sth->rows == 0) { print "There is no user in this wiki.\n"; return; } while ($ref = $sth->fetchrow_hashref()) { my ($user_id, $user_name, $cph, $oph, $edits); $user_name = $ref->{user_name}; $user_id = $ref->{user_id}; if ($verbose >= 2) { print "Annihilating user " . $user_name . " has user_id " . $user_id . ".\n"; } $cph = $dbh->prepare("SELECT * FROM cur where " . "cur_user = $user_id" . " AND " . "cur_user_text = " . $dbh->quote("$user_name")); $cph->execute(); $oph = $dbh->prepare("SELECT * FROM old where " . "old_user = $user_id" . " AND " . "old_user_text = " . $dbh->quote("$user_name")); $oph->execute(); $edits = $cph->rows + $oph->rows; $cph->finish(); $oph->finish(); if ($edits == 0) { if ($verbose >= 2) { print "Keeping user " . $user_name . ", user_id " . $user_id . ".\n"; } do_db_op($dbh, "DELETE FROM user WHERE user_name = " . $dbh->quote("$user_name") . " AND " . "user_id = $user_id"); $killed++; } } $sth->finish(); $dbh->disconnect(); if ($verbose >= 1) { print "Killed " . $killed . " users\n"; }}my (@users, $user, $this, $opts);@users = ();$opts = 1;foreach $this (@ARGV) { if ($opts == 1 && $this eq '-v') { $verbose++; } elsif ($opts == 1 && $this eq '--verbose') { $verbose = 1; } elsif ($opts == 1 && $this eq '--') { $opts = 0; } else { push(@users, $this); }}undo_user();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -