- # parse the results.
- my $prefix = "Loose link (dead) redirections in factoids ";
- return &formListReply(1, $prefix, @newlist);
-
- } elsif ($type =~ /^dup(licate|e)$/i) {
- my $start_time = &gettimeofday();
- &status("factstats(dupe): starting...");
- my %hash = &dbGetCol("factoids", "factoid_key", "factoid_value", 1);
- my @list;
- my $refs = 0;
- my $v;
-
- foreach $v (keys %hash) {
- my $count = scalar(keys %{$hash{$v}});
- next if ($count == 1);
-
- my @sublist;
- foreach (keys %{$hash{$v}}) {
- if ($v =~ /^<REPLY> see /i) {
- $refs++;
- next;
- }
-
- s/([\,\;]+)/\037$1\037/g;
- if ($_ eq "") {
- &WARN("dupe: _ = NULL. should never happen!.");
- next;
- }
- push(@sublist, $_);
- }
-
- next unless (scalar @sublist);
-
- push(@list, join(", ", @sublist));
- }
-
- &status("factstats(dupe): (good) dupe refs: $refs.");
- my $delta_time = &gettimeofday() - $start_time;
- &status(sprintf("factstats(dupe): %.02f sec to complete", $delta_time)) if ($delta_time > 0);
-
- # bail out on no results.
- if (scalar @list == 0) {
- return "no duplicate factoids... woohoo.";
- }
-
- # parse the results.
- my $prefix = "dupe factoid ";
- return &formListReply(1, $prefix, @list);
-
- } elsif ($type =~ /^(2|too)short$/i) {
- # Custom select statement.
- my $query = "SELECT factoid_key,factoid_value FROM factoids WHERE length(factoid_value) <= 40";
- my $sth = $dbh->prepare($query);
- &ERROR("factstats(lame): => '$query'.") unless $sth->execute;
-
- my @list;
- while (my @row = $sth->fetchrow_array) {
- my($key,$val) = ($row[0], $row[1]);
- my $match = 0;
- $match++ if ($val =~ /\s{3,}/);
- next unless ($match);
-
- $key =~ s/\,/\037\,\037/g;
- push(@list, $key);
- }
- $sth->finish;
-
- # parse the results.
- my $prefix = "Lame factoids ";
- return &formListReply(1, $prefix, @list);
-
- } elsif ($type =~ /^listfix$/i) {
- # Custom select statement.
- my $query = "SELECT factoid_key,factoid_value FROM factoids";
- my $sth = $dbh->prepare($query);
- &ERROR("factstats(listfix): => '$query'.") unless $sth->execute;
-
- my @list;
- while (my @row = $sth->fetchrow_array) {
- my($key,$val) = ($row[0], $row[1]);
- my $match = 0;
- $match++ if ($val =~ /\S+,? or \S+,? or \S+,? or \S+,?/);
- next unless ($match);
-
- $key =~ s/\,/\037\,\037/g;
- push(@list, $key);
- $val =~ s/,? or /, /g;
- &DEBUG("fixed: => $val.");
- &setFactInfo($key,"factoid_value", $val);
- }
- $sth->finish;
-
- # parse the results.
- my $prefix = "Inefficient lists fixed ";
- return &formListReply(1, $prefix, @list);
-
- } elsif ($type =~ /^locked$/i) {
- my %hash = &dbGetCol("factoids", "factoid_key","locked_by");
- my @list = keys %hash;
-
- for (@list) {
- s/([\,\;]+)/\037$1\037/g;
- }
-
- my $prefix = "factoid statistics on $type ";
- return &formListReply(0, $prefix, @list);
-
- } elsif ($type =~ /^new$/i) {
- my %hash = &dbGetCol("factoids", "factoid_key","created_time");
- my %age;
-
- foreach (keys %hash) {
- my $created_time = $hash{$_};
- my $delta_time = time() - $created_time;
- next if ($delta_time >= 60*60*24);
-
- $age{$delta_time}{$_} = 1;
- }
-
- if (scalar keys %age == 0) {
- return "sorry, no new factoids.";
- }
-
- my @list;
- foreach (sort {$a <=> $b} keys %age) {
- push(@list, join(",", keys %{$age{$_}}));
- }
+ }
+ elsif ( $type =~ /^vandalism$/i ) {
+ &status('factstats(vandalism): starting...');
+ my $start_time = &timeget();
+ my %data = &sqlSelectColHash(
+ 'factoids', 'factoid_key,factoid_value',
+ undef, 'WHERE factoid_value IS NOT NULL'
+ );
+ my @list;
+
+ my $delta_time = &timedelta($start_time);
+ &status(
+ sprintf(
+ 'factstats(vandalism): %.02f sec to retreive all factoids.',
+ $delta_time )
+ ) if ( $delta_time > 0 );
+ $start_time = &timeget();
+
+ # parse the factoids.
+ foreach ( keys %data ) {
+ if ( &validFactoid( $_, $data{$_} ) == 0 ) {
+ s/([\,\;]+)/\037$1\037/g; # highlight chars.
+ push( @list, $_ ); # push it.
+ }
+ }
+
+ $delta_time = &timedelta($start_time);
+ &status(
+ sprintf( 'factstats(vandalism): %.02f sec to complete.',
+ $delta_time )
+ ) if ( $delta_time > 0 );
+
+ # bail out on no results.
+ if ( scalar @list == 0 ) {
+ return 'no vandalised factoids... wooohoo.';
+ }
+
+ # parse the results.
+ my $prefix = 'Vandalised factoid ';
+ return &formListReply( 1, $prefix, @list );