return if (&IsLocked($lhs) == 1);
# profanity.
- if (&IsParam("profanityCheck") and &hasProfanity($rhs)) {
+ if (&IsParam('profanityCheck') and &hasProfanity($rhs)) {
&performReply("please, watch your language.");
return 1;
}
# teaching.
- if (&IsFlag("t") ne "t" && &IsFlag("o") ne "o") {
+ if (&IsFlag('t') ne 't' && &IsFlag('o') ne 'o') {
&msg($who, "permission denied.");
&status("alert: $who wanted to teach me.");
return 1;
my $also = ($rhs =~ s/^-?also //i);
my $also_or = ($also and $rhs =~ s/\s+(or|\|\|)\s+//);
+ if ($also or $also_or) {
+ my $author = &getFactInfo($from, 'created_by');
+ $author =~ /^(.*)!/;
+ my $created_by = $1;
+
+ # Can they even modify factoids?
+ if (&IsFlag('m') ne 'm' and &IsFlag('M') ne 'M' and &IsFlag('o') ne 'o') {
+ &performReply("You do not have permission to modify factoids");
+ return 1;
+
+ # If they have +M but they didnt create the factoid
+ } elsif (&IsFlag('M') eq 'M' and
+ $who !~ /^\Q$created_by\E$/i
+ &IsFlag('m') ne 'm'
+ &IsFlag('o') ne 'o') {
+ &performReply("factoid '$lhs' is not yours to modify.");
+ return 1;
+ }
+ }
+
# factoid arguments handler.
# must start with a non-variable
- if (&IsChanConf("factoidArguments") > 0 and $lhs =~ /^[^\$]+.*\$/) {
+ if (&IsChanConf('factoidArguments') > 0 and $lhs =~ /^[^\$]+.*\$/) {
&status("Update: Factoid Arguments found.");
&status("Update: orig lhs => '$lhs'.");
&status("Update: orig rhs => '$rhs'.");
# nice 'are' hack (or work-around).
if ($mhs =~ /^are$/i and $rhs !~ /<\S+>/) {
&status("Update: 'are' hack detected.");
- $mhs = "is";
+ $mhs = 'is';
$rhs = "<REPLY> are ". $rhs;
}
&status("enter: <$who> \'$lhs\' =$mhs=> \'$rhs\'");
$count{'Update'}++;
- &performAddressedReply("okay");
+ &performAddressedReply('okay');
- &sqlInsert("factoids", {
+ &sqlInsert('factoids', {
created_by => $nuh,
created_time => time(), # modified time.
factoid_key => $lhs,
factoid_value => $rhs,
} );
- if (!defined $rhs or $rhs eq "") {
+ if (!defined $rhs or $rhs eq '') {
&ERROR("Update: rhs1 == NULL.");
}
}
if ($also) { # 'is also'.
- if ($exists =~ /^<REPLY> see /i) {
+ my $redircount = 5;
+ my $origlhs = $lhs;
+ while ($exists =~ /^<REPLY> ?see (.*)/i) {
+ $redircount--;
+ unless ($redircount) {
+ &msg($who, "$origlhs has too many levels of redirection.");
+ return 1;
+ }
+
+ $lhs = $1;
+ $exists = &getFactoid($lhs);
+ unless( $exists ) {
+ &msg($who, "$1 is a dangling redirection.");
+ return 1;
+ }
+ }
+ if ($exists =~ /^<REPLY> ?see (.*)/i) {
&TODO("Update.pl: append to linked factoid.");
}
}
}
- &performAddressedReply("okay");
+ &performAddressedReply('okay');
$count{'Update'}++;
&status("update: <$who> \'$lhs\' =$mhs=> \'$rhs\'; was \'$exists\'");
- &sqlSet("factoids", {'factoid_key' => $lhs}, {
+ &sqlSet('factoids', {'factoid_key' => $lhs}, {
modified_by => $nuh,
modified_time => time(),
factoid_value => $rhs,
} );
- if (!defined $rhs or $rhs eq "") {
+ if (!defined $rhs or $rhs eq '') {
&ERROR("Update: rhs1 == NULL.");
}
- } else { # not "also"
+ } else { # not 'also'
if (!$correction_plausible) { # "no, blah is ..."
if ($addressed) {
return 1;
}
- my $author = &getFactInfo($lhs, "created_by") || "";
+ my $author = &getFactInfo($lhs, 'created_by') || '';
- if (IsFlag("m") ne "m" && IsFlag("o") ne "o" &&
+ if (IsFlag('m') ne 'm' && IsFlag('o') ne 'o' &&
$author !~ /^\Q$who\E\!/i
) {
&msg($who, "you can't change that factoid.");
return 1;
}
- &performAddressedReply("okay");
+ &performAddressedReply('okay');
$count{'Update'}++;
&status("update: <$who> \'$lhs\' =$mhs=> \'$rhs\'; was \'$exists\'");
- &sqlSet("factoids", {'factoid_key' => $lhs}, {
+ &sqlSet('factoids', {'factoid_key' => $lhs}, {
modified_by => $nuh,
modified_time => time(),
factoid_value => $rhs,
} );
- if (!defined $rhs or $rhs eq "") {
+ if (!defined $rhs or $rhs eq '') {
&ERROR("Update: rhs1 == NULL.");
}
}
}
1;
+
+# vim:ts=4:sw=4:expandtab:tw=80