]> git.donarmstrong.com Git - infobot.git/blob - src/Factoids/DBCommon.pl
- irctextcounters: add percentage to top3
[infobot.git] / src / Factoids / DBCommon.pl
1 #
2 #  DBStubs.pl: DB independent (I hope, heh) factoid support
3 #      Author: dms
4 #     Version: v0.6d (20000223)
5 #     Created: 19991020
6 #
7
8 if (&IsParam("useStrict")) { use strict; }
9
10 #####
11 # Usage: &setFactInfo($faqtoid, $type, $primval, $key, $val);
12 sub setFactInfo {
13     &dbSet("factoids", 
14         { factoid_key => $_[0] },
15         { $_[1] => $_[2] }      # dbquote done in dbset!
16     );
17 }   
18
19 #####
20 # Usage: &IsLocked($faqtoid);
21 sub IsLocked {
22     my ($faqtoid) = @_;
23     my $thisnuh   = &getFactInfo($faqtoid, "locked_by");
24
25     if (defined $thisnuh and $thisnuh ne "") {
26         if (!&IsHostMatch($thisnuh) and &IsFlag("o") ne "o") {
27             &performReply("cannot alter locked factoids");
28             return 1;
29         }
30     }
31
32     return 0;
33 }
34
35 #####
36 # Usage: &AddModified($faqtoid,$nuh);
37 sub AddModified {
38     my ($faqtoid,$nuh) = @_;
39     my $modified_by = &getFactInfo($faqtoid, "modified_by");
40     my (@modifiedlist, @modified, %modified);
41
42     if (defined $modified_by) {
43         push(@modifiedlist, split(/\,/, $modified_by)); 
44     }
45     push(@modifiedlist,$nuh);
46
47     foreach (reverse @modifiedlist) {
48         /^(\S+)!(\S+)@(\S+)$/;
49         my $nick = lc $1;
50         next if (exists $modified{$nick});
51
52         $modified{$nick} = $_;
53         push(@modified,$nick);
54     }
55
56     undef @modifiedlist;
57
58     foreach (reverse @modified) {
59         push(@modifiedlist, $modified{$_});
60     }
61     shift(@modifiedlist) while (scalar @modifiedlist > 3);
62
63     &setFactInfo($faqtoid,"modified_by",   join(",",@modifiedlist));
64     &setFactInfo($faqtoid,"modified_time", time());
65
66     return 1;
67 }
68
69 #####
70 ### Commands which use the fundamental functions... Helpers?
71 #####
72
73 #####
74 # Usage: &CmdLock($function,$faqtoid);
75 sub CmdLock {
76     my ($faqtoid) = @_;
77
78     my $thisnuh = &getFactInfo($faqtoid,"locked_by");
79
80     if (defined $thisnuh and $thisnuh ne "") {
81         my $locked_by = (split(/\!/,$thisnuh))[0];
82         &msg($who,"factoid \002$faqtoid\002 has already been locked by $locked_by.");
83         return 0;
84     }
85
86     $thisnuh ||= &getFactInfo($faqtoid,"created_by");
87
88     # fixes bug found on 19991103.
89     # code needs to be reorganised though.
90     if ($thisnuh ne "") {
91         if (!&IsHostMatch($thisnuh) && IsFlag("o") ne "o") {
92             &msg($who, "sorry, you are not allowed to lock '$faqtoid'.");
93             return 0;
94         }
95     }
96
97     &performReply("locking factoid \002$faqtoid\002");
98     &setFactInfo($faqtoid,"locked_by",$nuh);
99     &setFactInfo($faqtoid,"locked_time", time());
100
101     return 1;
102 }
103
104 #####
105 # Usage: &CmdUnLock($faqtoid);
106 sub CmdUnLock {
107     my ($faqtoid) = @_;
108
109     my $thisnuh = &getFactInfo($faqtoid,"locked_by");
110
111     if (!defined $thisnuh) {
112         &msg($who, "factoid \002$faqtoid\002 is not locked.");
113         return 0;
114     }
115
116     if ($thisnuh ne "" and !&IsHostMatch($thisnuh) and &IsFlag("o") ne "o") {
117         &msg($who, "sorry, you are not allowed to unlock factoid '$faqtoid'.");
118         return 0;
119     }
120
121     &performReply("unlocking factoid \002$faqtoid\002");
122     &setFactInfo($faqtoid,"locked_by",   "");
123     &setFactInfo($faqtoid,"locked_time", "");
124
125     return 1;
126 }
127
128 1;