]> git.donarmstrong.com Git - infobot.git/blobdiff - src/Factoids/Update.pl
* Add vim formatting comments ( # vim:ts=4:sw=4:expandtab:tw=80 )
[infobot.git] / src / Factoids / Update.pl
index 2a02b24d24e5f4b2c611f1d654fed974cfa19c6e..9ee8e220399e8cef4517dbcd9f1f995ede0a16ce 100644 (file)
@@ -21,13 +21,13 @@ sub update {
     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;
@@ -54,14 +54,14 @@ sub update {
 
     # factoid arguments handler.
     # must start with a non-variable
-    if (&IsChanConf("factoidArguments") and $lhs =~ /^[^\$]+.*\$/) {
+    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: /;
+       $lhs =~ s/^/cmd: /;
        while ($lhs =~ s/\$(\S+)/(.*?)/) {
            push(@list, "\$$1");
            $count++;
@@ -87,23 +87,23 @@ sub update {
        # 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');
 
-       &sqlReplace("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.");
        }
 
@@ -120,7 +120,23 @@ sub update {
     }
 
     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.");
        }
 
@@ -174,21 +190,20 @@ sub update {
            }
        }
 
-       &performAddressedReply("okay");
+       &performAddressedReply('okay');
 
        $count{'Update'}++;
        &status("update: <$who> \'$lhs\' =$mhs=> \'$rhs\'; was \'$exists\'");
-       &sqlReplace("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) {
@@ -198,28 +213,27 @@ sub update {
            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\'");
 
-       &sqlReplace("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.");
        }
     }
@@ -228,3 +242,5 @@ sub update {
 }
 
 1;
+
+# vim:ts=4:sw=4:expandtab:tw=80