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