# Created: 1997
#
-if (&IsParam("useStrict")) { use strict; }
+# use strict; # TODO
sub update {
my($lhs, $mhs, $rhs) = @_;
}
# teaching.
- if (&IsFlag("t") ne "t") {
+ if (&IsFlag("t") ne "t" && &IsFlag("o") ne "o") {
&msg($who, "permission denied.");
&status("alert: $who wanted to teach me.");
return 1;
}
# also checking.
- my $also = ($rhs =~ s/^(-?)also //i);
- &DEBUG("1=>$1");
+ my $also = ($rhs =~ s/^-?also //i);
my $also_or = ($also and $rhs =~ s/\s+(or|\|\|)\s+//);
- # freshmeat
- if (&IsChanConf("freshmeatForFactoid")) {
- if (&dbGet("freshmeat", "name", $lhs, "name")) {
- &msg($who, "permission denied. (freshmeat)");
- &status("alert: $who wanted to teach me something that freshmeat already has info on.");
- return 1;
+ # factoid arguments handler.
+ # must start with a non-variable
+ if (&IsChanConf("factoidArguments") > 0 and $lhs =~ /^[^\$]+.*\$/) {
+ &status("Update: Factoid Arguments found.");
+ &status("Update: orig lhs => '$lhs'.");
+ &status("Update: orig rhs => '$rhs'.");
+
+ my @list;
+ my $count = 0;
+ $lhs =~ s/^/cmd: /;
+ while ($lhs =~ s/\$(\S+)/(.*?)/) {
+ push(@list, "\$$1");
+ $count++;
+ last if ($count >= 10);
+ }
+
+ if ($count >= 10) {
+ &msg($who, "error: could not SAR properly.");
+ &DEBUG("error: lhs => '$lhs' rhs => '$rhs'.");
+ return;
}
+
+ my $z = join(',',@list);
+ $rhs =~ s/^/($z): /;
+
+ &status("Update: new lhs => '$lhs' rhs => '$rhs'.");
}
# the fun begins.
if (!$exists) {
# nice 'are' hack (or work-around).
if ($mhs =~ /^are$/i and $rhs !~ /<\S+>/) {
- &DEBUG("Update: 'are' hack detected.");
+ &status("Update: 'are' hack detected.");
$mhs = "is";
$rhs = "<REPLY> are ". $rhs;
}
&performAddressedReply("okay");
- &setFactInfo($lhs,"created_by", $nuh);
- &setFactInfo($lhs,"created_time", time());
- &setFactInfo($lhs,"factoid_value", $rhs);
+ &sqlReplace("factoids", {
+ created_by => $nuh,
+ created_time => time(), # modified time.
+ factoid_key => $lhs,
+ factoid_value => $rhs,
+ } );
if (!defined $rhs or $rhs eq "") {
&ERROR("Update: rhs1 == NULL.");
# factoid exists.
if ($exists eq $rhs) {
+ # this catches the following situation: (right or wrong?)
+ # "test is test"
+ # "test is also test"
&performAddressedReply("i already had it that way");
return 1;
}
if ($also) { # 'is also'.
if ($exists =~ /^<REPLY> see /i) {
- &DEBUG("todo: append to linked factoid.");
+ &TODO("Update.pl: append to linked factoid.");
}
if ($also_or) { # 'is also ||'.
# if ($exists =~ s/\,\s*$/, /) {
if ($exists =~ /\,\s*$/) {
&DEBUG("current has trailing comma, just append as is");
+ &DEBUG("Up: exists => $exists");
+ &DEBUG("Up: rhs => $rhs");
# $rhs =~ s/^\s+//;
# $rhs = $exists." ".$rhs; # keep comma.
}
if ($exists =~ /\.\s*$/) {
&DEBUG("current has trailing period, just append as is with 2 WS");
+ &DEBUG("Up: exists => $exists");
+ &DEBUG("Up: rhs => $rhs");
# $rhs =~ s/^\s+//;
# use ucfirst();?
# $rhs = $exists." ".$rhs; # keep comma.
$count{'Update'}++;
&status("update: <$who> \'$lhs\' =$mhs=> \'$rhs\'; was \'$exists\'");
- &AddModified($lhs,$nuh);
- &setFactInfo($lhs, "factoid_value", $rhs);
+ &sqlReplace("factoids", {
+ factoid_key => $lhs,
+ modified_by => $nuh,
+ modified_time => time(),
+ factoid_value => $rhs,
+ } );
if (!defined $rhs or $rhs eq "") {
&ERROR("Update: rhs1 == NULL.");
&performStrictReply("...but \002$lhs\002 is already something else...");
&status("FAILED update: <$who> \'$lhs\' =$mhs=> \'$rhs\'");
}
- return;
+ return 1;
}
my $author = &getFactInfo($lhs, "created_by") || "";
- if (IsFlag("m") ne "m" and $author !~ /^\Q$who\E\!/i) {
+ if (IsFlag("m") ne "m" && IsFlag("o") ne "o" &&
+ $author !~ /^\Q$who\E\!/i
+ ) {
&msg($who, "you can't change that factoid.");
return 1;
}
$count{'Update'}++;
&status("update: <$who> \'$lhs\' =$mhs=> \'$rhs\'; was \'$exists\'");
- &delFactoid($lhs);
- &setFactInfo($lhs,"created_by", $nuh);
- &setFactInfo($lhs,"created_time", time());
- &setFactInfo($lhs,"factoid_value", $rhs);
+ &sqlReplace("factoids", {
+ factoid_key => $lhs,
+ modified_by => $nuh,
+ modified_time => time(),
+ factoid_value => $rhs,
+ } );
if (!defined $rhs or $rhs eq "") {
&ERROR("Update: rhs1 == NULL.");