]> git.donarmstrong.com Git - infobot.git/blob - src/Factoids/DBCommon.pl
- renamed Factoids/Misc.pl to Factoids/Core.pl
[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: &getFactInfo($faqtoid, [$what]);
21 sub main::getFactInfo {
22     return &dbGet("factoids", $_[1], "factoid_key=".&dbQuote($_[0]) );
23 }
24
25 #####
26 # Usage: &getFactoid($faqtoid);
27 sub main::getFactoid {
28     return &getFactInfo($_[0], "factoid_value");
29 }
30
31 #####
32 # Usage: &setFactInfo($faqtoid, $type, $what);
33 sub main::setFactInfo {
34     &dbSet("factoids", "factoid_key", $_[0], $_[1], $_[2]);
35 }
36
37 ##### 
38 # Usage: &delFactoid($faqtoid);
39 sub main::delFactoid {
40     my ($faqtoid) = @_;
41
42     &dbDel("factoids", "factoid_key",$faqtoid);
43     &status("DELETED $faqtoid");
44  
45     return 1;
46 }
47
48 #####
49 # Usage: &IsLocked($faqtoid);
50 sub IsLocked {
51     my ($faqtoid) = @_;
52     my $thisnuh   = &getFactInfo($faqtoid, "locked_by");
53
54     if (defined $thisnuh and $thisnuh ne "") {
55         if (!&IsHostMatch($thisnuh) and &IsFlag("o") ne "o") {
56             &performReply("cannot alter locked factoids");
57             return 1;
58         }
59     }
60
61     return 0;
62 }
63
64 #####
65 # Usage: &AddModified($faqtoid,$nuh);
66 sub AddModified {
67     my ($faqtoid,$nuh) = @_;
68     my $modified_by = &getFactInfo($faqtoid, "modified_by");
69     my (@modifiedlist, @modified, %modified);
70
71     if (defined $modified_by) {
72         push(@modifiedlist, split(/\,/, $modified_by)); 
73     }
74     push(@modifiedlist,$nuh);
75
76     foreach (reverse @modifiedlist) {
77         /^(\S+)!(\S+)@(\S+)$/;
78         my $nick = lc $1;
79         next if (exists $modified{$nick});
80
81         $modified{$nick} = $_;
82         push(@modified,$nick);
83     }
84
85     undef @modifiedlist;
86
87     foreach (reverse @modified) {
88         push(@modifiedlist, $modified{$_});
89     }
90     shift(@modifiedlist) while (scalar @modifiedlist > 3);
91
92     &setFactInfo($faqtoid,"modified_by",   join(",",@modifiedlist));
93     &setFactInfo($faqtoid,"modified_time", time());
94
95     return 1;
96 }
97
98 #####
99 ### Commands which use the fundamental functions... Helpers?
100 #####
101
102 #####
103 # Usage: &CmdLock($function,$faqtoid);
104 sub CmdLock {
105     my ($faqtoid) = @_;
106
107     my $thisnuh = &getFactInfo($faqtoid,"locked_by");
108
109     if (defined $thisnuh and $thisnuh ne "") {
110         my $locked_by = (split(/\!/,$thisnuh))[0];
111         &msg($who,"factoid \002$faqtoid\002 has already been locked by $locked_by.");
112         return 0;
113     }
114
115     $thisnuh ||= &getFactInfo($faqtoid,"created_by");
116
117     # fixes bug found on 19991103.
118     # code needs to be reorganised though.
119     if ($thisnuh ne "") {
120         if (!&IsHostMatch($thisnuh) && IsFlag("o") ne "o") {
121             &msg($who, "sorry, you are not allowed to lock '$faqtoid'.");
122             return 0;
123         }
124     }
125
126     &performReply("locking factoid \002$faqtoid\002");
127     &setFactInfo($faqtoid,"locked_by",$nuh);
128     &setFactInfo($faqtoid,"locked_time", time());
129
130     return 1;
131 }
132
133 #####
134 # Usage: &CmdUnLock($faqtoid);
135 sub CmdUnLock {
136     my ($faqtoid) = @_;
137
138     my $thisnuh = &getFactInfo($faqtoid,"locked_by");
139
140     if (!defined $thisnuh) {
141         &msg($who, "factoid \002$faqtoid\002 is not locked.");
142         return 0;
143     }
144
145     if ($thisnuh ne "" and !&IsHostMatch($thisnuh) and &IsFlag("o") ne "o") {
146         &msg($who, "sorry, you are not allowed to unlock factoid '$faqtoid'.");
147         return 0;
148     }
149
150     &performReply("unlocking factoid \002$faqtoid\002");
151     &setFactInfo($faqtoid,"locked_by",   "");
152     &setFactInfo($faqtoid,"locked_time", "");
153
154     return 1;
155 }
156
157 1;