return $noreply;
}
+ # fix for problem observed by asuffield.
+ # why did it happen though?
+ if (!$factinfo{'factoid_value'}) {
+ &performReply("there's no such factoid as \002$faqtoid\002; deleted because we don't have factoid_value!");
+ foreach (keys %factinfo) {
+ &DEBUG("factinfo{$_} => '$factinfo{$_}'.");
+ }
+### &delFactoid($faqtoid);
+ return $noreply;
+ }
+
# created:
if ($factinfo{'created_by'}) {
my $time = $factinfo{'created_time'};
if ($time) {
if (time() - $time > 60*60*24*7) {
- $string .= " at \037". scalar(localtime $time). "\037";
+ my $days = int( (time() - $time)*60*60*24 );
+ $string .= " at \037". scalar(localtime $time). "\037" .
+ " ($days days) ";
} else {
$string .= " ".&Time2String(time() - $time)." ago";
}
} elsif ($type =~ /^broken$/i) {
&status("factstats(broken): starting...");
- my $start_time = &gettimeofday();
- my %data = &dbGetCol("factoids", "factoid_key","factoid_value");
+ my $start_time = &timeget();
+ my %data = &dbGetCol("factoids", "factoid_key","factoid_value");
my @list;
- my $delta_time = &gettimeofday() - $start_time;
+ my $delta_time = &timedelta($start_time);
&status(sprintf("factstats(broken): %.02f sec to retreive all factoids.", $delta_time)) if ($delta_time > 0);
- $start_time = &gettimeofday();
+ $start_time = &timeget();
# parse the factoids.
foreach (keys %data) {
}
}
- $delta_time = &gettimeofday() - $start_time;
+ $delta_time = &timedelta($start_time);
&status(sprintf("factstats(broken): %.02f sec to complete.", $delta_time)) if ($delta_time > 0);
# bail out on no results.
my $prefix = "broken factoid ";
return &formListReply(1, $prefix, @list);
- } elsif ($type =~ /^deadredir?$/i) {
+ } elsif ($type =~ /^deadredir$/i) {
my @list = &searchTable("factoids", "factoid_key",
"factoid_value", "^<REPLY> see ");
my %redir;
my $redirf = lc $2;
my $redir = &getFactInfo($redirf, "factoid_value");
next if (defined $redir);
+ next if (length $val > 50);
$redir{$redirf}{$factoid} = 1;
}
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 $start_time = &timeget();
+ my %hash = &dbGetCol("factoids", "factoid_key", "factoid_value", 1);
+ my $refs = 0;
my @list;
- my $refs = 0;
my $v;
foreach $v (keys %hash) {
}
&status("factstats(dupe): (good) dupe refs: $refs.");
- my $delta_time = &gettimeofday() - $start_time;
+ my $delta_time = &timedelta($start_time);
&status(sprintf("factstats(dupe): %.02f sec to complete", $delta_time)) if ($delta_time > 0);
# bail out on no results.
my $prefix = "dupe factoid ";
return &formListReply(1, $prefix, @list);
- } elsif ($type =~ /^lame$/i) {
+ } elsif ($type =~ /^nullfactoids$/i) {
+ my $query = "SELECT factoid_key,factoid_value FROM factoids WHERE factoid_value=''";
+ my $sth = $dbh->prepare($query);
+ &ERROR("factstats(null): => '$query'.") unless $sth->execute;
+
+ my @list;
+ while (my @row = $sth->fetchrow_array) {
+ if ($row[1] ne "") {
+ &DEBUG("row[1] != NULL for $row[0].");
+ next;
+ }
+
+ &DEBUG("row[0] => '$row[0]'.");
+ push(@list, $row[0]);
+ }
+ $sth->finish;
+
+ # parse the results.
+ my $prefix = "NULL factoids (not deleted yet) ";
+ 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);
my @list;
while (my @row = $sth->fetchrow_array) {
my($key,$val) = ($row[0], $row[1]);
- next if ($val =~ /^</);
- next if ($val =~ /\s{2,}/);
+ my $match = 0;
+ $match++ if ($val =~ /\s{3,}/);
+ next unless ($match);
$key =~ s/\,/\037\,\037/g;
push(@list, $key);
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;
} elsif ($type =~ /^part(ial)?dupe$/i) {
### requires "custom" select statement... oh well...
- my $start_time = &gettimeofday();
+ my $start_time = &timeget();
# form length|key and key=length hash list.
&status("factstats(partdupe): forming length hash list.");
push(@list, join(" ,",@sublist)) if (scalar @sublist);
}
- my $delta_time = sprintf("%.02fs", &gettimeofday() - $start_time);
+ my $delta_time = sprintf("%.02fs", &timedelta($start_time) );
&status("factstats(partdupe): $delta_time sec to complete.") if ($delta_time > 0);
# bail out on no results.
my $prefix = "rank of top factoid requesters: ";
return &formListReply(0, $prefix, @list);
+ } elsif ($type =~ /^seefix$/i) {
+ my @list = &searchTable("factoids", "factoid_key",
+ "factoid_value", "^see ");
+ my @newlist;
+ my $fixed = 0;
+ my %loop;
+ my $f;
+
+ for (@list) {
+ my $factoid = $_;
+ my $val = &getFactInfo($factoid, "factoid_value");
+ if ($val =~ /^see( also)? (.*?)\.?$/i) {
+ my $redirf = lc $2;
+ my $redir = &getFactInfo($redirf, "factoid_value");
+
+ if ($redirf =~ /^\Q$factoid\W$/i) {
+ &delFactoid($factoid);
+ $loop{$factoid} = 1;
+ }
+
+ if (defined $redir) { # good.
+ &setFactInfo($factoid,"factoid_value","<REPLY> see $redir");
+ $fixed++;
+ } else {
+ push(@newlist, $redirf);
+ }
+ }
+ }
+
+ # parse the results.
+ &msg($who, "Fixed $fixed factoids.");
+ &msg($who, "Self looped factoids removed: ".
+ sort(keys %loop) ) if (scalar keys %loop);
+
+ my $prefix = "Loose link (dead) redirections in factoids ";
+ return &formListReply(1, $prefix, @newlist);
+
} elsif ($type =~ /^(2|too)long$/i) {
my @list;
my @list = &searchTable("factoids","factoid_key", "created_by", "^$query!");
my $prefix = "factoid author list by '$query' ";
- return &formListReply(1, $prefix, @list);
+ &performStrictReply( &formListReply(1, $prefix, @list) );
}
1;