[system] / trunk / webwork2 / lib / WeBWorK / DB.pm Repository:
ViewVC logotype

Annotation of /trunk/webwork2/lib/WeBWorK/DB.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 814 - (view) (download) (as text)

1 : sh002i 775 ################################################################################
2 :     # WeBWorK mod_perl (c) 2000-2002 WeBWorK Project
3 :     # $Id$
4 :     ################################################################################
5 :    
6 :     package WeBWorK::DB;
7 :    
8 :     =head1 NAME
9 :    
10 :     WeBWorK::DB - interface with the WeBWorK databases (WWDBv2).
11 :    
12 :     =cut
13 :    
14 :     use strict;
15 :     use warnings;
16 :     use WeBWorK::Utils qw(runtime_use);
17 :    
18 : sh002i 798 use constant TABLES => qw(password permission key user set set_user problem problem_user);
19 : sh002i 775
20 :     ################################################################################
21 :     # constructor
22 :     ################################################################################
23 :    
24 :     sub new($$) {
25 : sh002i 814 my ($invocant, $ce) = @_;
26 : sh002i 775 my $class = ref($invocant) || $invocant;
27 : sh002i 798 my $self = {};
28 : sh002i 775
29 :     # load the modules required to handle each table, and create driver
30 :     foreach my $table (TABLES) {
31 : sh002i 798 unless (defined $ce->{dbLayout}->{$table}) {
32 : sh002i 808 #warn "ignoring table $table: layout not specified in dbLayout"; # ***
33 : sh002i 798 next;
34 :     }
35 : sh002i 775
36 :     my $layout = $ce->{dbLayout}->{$table};
37 : sh002i 798 my $record = $layout->{record};
38 : sh002i 775 my $schema = $layout->{schema};
39 :     my $driver = $layout->{driver};
40 :     my $source = $layout->{source};
41 : sh002i 808 my $params = $layout->{params};
42 : sh002i 775
43 : sh002i 798 runtime_use($record);
44 :     runtime_use($schema);
45 :     runtime_use($driver);
46 : sh002i 808 $self->{$table} = $schema->new($driver->new($source), $table, $record, $params);
47 : sh002i 775 }
48 :    
49 :     bless $self, $class;
50 :     return $self;
51 :     }
52 :    
53 :     ################################################################################
54 :     # password functions
55 :     ################################################################################
56 :    
57 :     sub listPasswords($) {
58 :     my ($self) = @_;
59 : sh002i 808 return map { $_->[0] }
60 :     $self->{password}->list(undef);
61 : sh002i 775 }
62 :    
63 : sh002i 808 sub addPassword($$) {
64 : sh002i 775 my ($self, $Password) = @_;
65 : sh002i 808 die "addPassword failed: user ", $Password->user_id, " does not exist.\n"
66 : sh002i 775 unless $self->{user}->exists($Password->user_id);
67 :     return $self->{password}->add($Password);
68 :     }
69 :    
70 :     sub getPassword($$) {
71 :     my ($self, $userID) = @_;
72 :     return $self->{password}->get($userID);
73 :     }
74 :    
75 :     sub putPassword($$) {
76 :     my ($self, $Password) = @_;
77 :     return $self->{password}->put($Password);
78 :     }
79 :    
80 :     sub deletePassword($$) {
81 :     my ($self, $userID) = @_;
82 :     return $self->{password}->delete($userID);
83 :     }
84 :    
85 :     ################################################################################
86 :     # permission functions
87 :     ################################################################################
88 :    
89 :     sub listPermissionLevels($) {
90 :     my ($self) = @_;
91 : sh002i 808 return map { $_->[0] }
92 :     $self->{permission}->list(undef);
93 : sh002i 775 }
94 :    
95 : sh002i 808 sub addPermissionLevel($$) {
96 : sh002i 775 my ($self, $PermissionLevel) = @_;
97 : sh002i 808 die "addPermissionLevel failed: user ", $PermissionLevel->user_id, " does not exist.\n"
98 : sh002i 775 unless $self->{user}->exists($PermissionLevel->user_id);
99 :     return $self->{permission}->add($PermissionLevel);
100 :     }
101 :    
102 :     sub getPermissionLevel($$) {
103 :     my ($self, $userID) = @_;
104 :     return $self->{permission}->get($userID);
105 :     }
106 :    
107 :     sub putPermissionLevel($$) {
108 :     my ($self, $PermissionLevel) = @_;
109 :     return $self->{permission}->put($PermissionLevel);
110 :     }
111 :    
112 :     sub deletePermissionLevel($$) {
113 :     my ($self, $userID) = @_;
114 :     return $self->{permission}->delete($userID);
115 :     }
116 :    
117 :     ################################################################################
118 :     # key functions
119 :     ################################################################################
120 :    
121 :     sub listKeys($) {
122 :     my ($self) = @_;
123 : sh002i 808 return map { $_->[0] }
124 :     $self->{key}->list(undef);
125 : sh002i 775 }
126 :    
127 : sh002i 808 sub addKey($$) {
128 : sh002i 775 my ($self, $Key) = @_;
129 : sh002i 808 die "addKey failed: user ", $Key->user_id, " does not exist.\n"
130 : sh002i 775 unless $self->{user}->exists($Key->user_id);
131 :     return $self->{key}->add($Key);
132 :     }
133 :    
134 :     sub getKey($$) {
135 :     my ($self, $userID) = @_;
136 :     return $self->{key}->get($userID);
137 :     }
138 :    
139 :     sub putKey($$) {
140 :     my ($self, $Key) = @_;
141 :     return $self->{key}->put($Key);
142 :     }
143 :    
144 :     sub deleteKey($$) {
145 :     my ($self, $userID) = @_;
146 :     return $self->{key}->delete($userID);
147 :     }
148 :    
149 :     ################################################################################
150 :     # user functions
151 :     ################################################################################
152 :    
153 :     sub listUsers($) {
154 :     my ($self) = @_;
155 : sh002i 808 return map { $_->[0] }
156 :     $self->{user}->list(undef);
157 : sh002i 775 }
158 :    
159 : sh002i 808 sub addUser($$) {
160 : sh002i 775 my ($self, $User) = @_;
161 :     return $self->{user}->add($User);
162 :     }
163 :    
164 :     sub getUser($$) {
165 :     my ($self, $userID) = @_;
166 :     return $self->{user}->get($userID);
167 :     }
168 :    
169 :     sub putUser($$) {
170 :     my ($self, $User) = @_;
171 :     return $self->{user}->put($User);
172 :     }
173 :    
174 :     sub deleteUser($$) {
175 :     my ($self, $userID) = @_;
176 :     $self->deletePassword($userID);
177 :     $self->deletePermissionLevel($userID);
178 :     $self->deleteKey($userID);
179 :     $self->deleteUserSet($userID, $_)
180 :     foreach $self->listUsers();
181 :     return $self->{user}->delete($userID);
182 :     }
183 :    
184 :     ################################################################################
185 :     # set functions
186 :     ################################################################################
187 :    
188 :     sub listGlobalSets($) {
189 :     my ($self) = @_;
190 : sh002i 808 return map { $_->[0] }
191 :     $self->{set}->list(undef);
192 : sh002i 775 }
193 :    
194 : sh002i 808 sub addGlobalSet($$) {
195 : sh002i 775 my ($self, $GlobalSet) = @_;
196 :     return $self->{set}->add($GlobalSet);
197 :     }
198 :    
199 :     sub getGlobalSet($$) {
200 :     my ($self, $setID) = @_;
201 :     return $self->{set}->get($setID);
202 :     }
203 :    
204 :     sub putGlobalSet($$) {
205 :     my ($self, $GlobalSet) = @_;
206 :     return $self->{set}->put($GlobalSet);
207 :     }
208 :    
209 :     sub deleteGlobalSet($$) {
210 :     my ($self, $setID) = @_;
211 :     $self->deleteGlobalProblem($setID, $_)
212 :     foreach $self->listGlobalProblems($setID);
213 :     $self->deleteUserSet($_, $setID)
214 :     foreach $self->listUsers();
215 :     return $self->{set}->delete($setID);
216 :     }
217 :    
218 :     ################################################################################
219 :     # set_user functions
220 :     ################################################################################
221 :    
222 :     sub listUserSets($) {
223 :     my ($self, $userID) = @_;
224 : sh002i 808 return map { $_->[1] } # extract set_id
225 :     $self->{set_user}->list($userID, undef);
226 : sh002i 775 }
227 :    
228 : sh002i 808 sub addUserSet($$) {
229 : sh002i 775 my ($self, $UserSet) = @_;
230 : sh002i 808 die "addUserSet failed: user ", $UserSet->user_id, " does not exist.\n"
231 : sh002i 775 unless $self->{user}->exists($UserSet->user_id);
232 : sh002i 808 die "addUserSet failed: set ", $UserSet->set_id, " does not exist.\n"
233 : sh002i 775 unless $self->{set}->exists($UserSet->set_id);
234 :     return $self->{set_user}->add($UserSet);
235 :     }
236 :    
237 :     sub getUserSet($$) {
238 :     my ($self, $userID, $setID) = @_;
239 :     return $self->{set_user}->get($userID, $setID);
240 :     }
241 :    
242 :     sub putUserSet($$) {
243 :     my ($self, $UserSet) = @_;
244 :     return $self->{set_user}->put($UserSet);
245 :     }
246 :    
247 :     sub deleteUserSet($$) {
248 :     my ($self, $userID, $setID) = @_;
249 :     $self->deleteUserProblem($userID, $setID, $_)
250 :     foreach $self->listUserProblems($userID, $setID);
251 :     return $self->{set_user}->delete($userID, $setID);
252 :     }
253 :    
254 :     ################################################################################
255 :     # problem functions
256 :     ################################################################################
257 :    
258 :     sub listGlobalProblems($$) {
259 :     my ($self, $setID) = @_;
260 :     return map { $_->[1] }
261 :     grep { $_->[0] eq $setID }
262 : sh002i 808 $self->{problem}->list(undef, undef);
263 : sh002i 775 }
264 :    
265 : sh002i 808 sub addGlobalProblem($$) {
266 : sh002i 775 my ($self, $GlobalProblem) = @_;
267 : sh002i 808 die "addGlobalProblem failed: set ", $GlobalProblem->set_id, " does not exist.\n"
268 : sh002i 775 unless $self->{set}->exists($GlobalProblem->set_id);
269 :     return $self->{problem}->add($GlobalProblem);
270 :     }
271 :    
272 :     sub getGlobalProblem($$$) {
273 :     my ($self, $setID, $problemID) = @_;
274 :     return $self->{problem}->get($problemID);
275 :     }
276 :    
277 :     sub putGlobalProblem($$) {
278 :     my ($self, $GlobalProblem) = @_;
279 :     return $self->{problem}->put($GlobalProblem);
280 :     }
281 :    
282 :     sub deleteGlobalProblem($$$) {
283 :     my ($self, $setID, $problemID) = @_;
284 :     $self->deleteUserProblem($_, $setID, $problemID)
285 :     foreach $self->listUsers();
286 :     return $self->{problem}->delete($setID, $problemID);
287 :     }
288 :    
289 :     ################################################################################
290 :     # problem_user functions
291 :     ################################################################################
292 :    
293 :     sub listUserProblems($$$) {
294 :     my ($self, $userID, $setID) = @_;
295 :     return map { $_->[2] }
296 : sh002i 808 $self->{problem_user}->list($userID, $setID, undef);
297 : sh002i 775 }
298 :    
299 : sh002i 808 sub addUserProblem($$) {
300 : sh002i 775 my ($self, $UserProblem) = @_;
301 : sh002i 808 die "addUserProblem failed: user set ", $UserProblem->set_id, " does not exist.\n"
302 :     unless $self->{set_user}->exists($UserProblem->user_id, $UserProblem->set_id);
303 :     die "addUserProblem failed: problem ", $UserProblem->problem_id, " does not exist.\n"
304 :     unless $self->{problem}->exists($UserProblem->user_id, $UserProblem->set_id);
305 : sh002i 775 return $self->{problem_user}->add($UserProblem);
306 :     }
307 :    
308 : sh002i 798 sub getUserProblem($$$$) {
309 : sh002i 775 my ($self, $userID, $setID, $problemID) = @_;
310 :     return $self->{problem_user}->get($userID, $setID, $problemID);
311 :     }
312 :    
313 :     sub putUserProblem($$) {
314 :     my ($self, $UserProblem) = @_;
315 :     return $self->{problem_user}->put($UserProblem);
316 :     }
317 :    
318 : sh002i 798 sub deleteUserProblem($$$$) {
319 : sh002i 775 my ($self, $userID, $setID, $problemID) = @_;
320 :     return $self->{problem_user}->delete($userID, $setID, $problemID);
321 :     }
322 :    
323 :     ################################################################################
324 :     # set+set_user functions
325 :     ################################################################################
326 :    
327 : sh002i 798 sub getGlobalUserSet($$$) {
328 :     my ($self, $userID, $setID) = @_;
329 : sh002i 814 my $UserSet = $self->getUserSet($userID, $setID);
330 :     return unless $UserSet;
331 :     my $GlobalSet = $self->getGlobalSet($setID);
332 :     if ($GlobalSet) {
333 :     foreach ($UserSet->FIELDS()) {
334 :     next unless $GlobalSet->can($_);
335 :     next if $UserSet->$_();
336 :     $UserSet->$_($GlobalSet->$_());
337 :     }
338 :     }
339 :     return $UserSet;
340 : sh002i 798 }
341 : sh002i 775
342 :     ################################################################################
343 :     # problem+problem_user functions
344 :     ################################################################################
345 :    
346 : sh002i 798 sub getGlobalUserProblem($$$$) {
347 :     my ($self, $userID, $setID, $problemID) = @_;
348 : sh002i 814 my $UserProblem = $self->getUserProblem($userID, $setID, $problemID);
349 :     return unless $UserProblem;
350 :     my $GlobalProblem = $self->getGlobalProblem($setID, $problemID);
351 :     if ($GlobalProblem) {
352 :     foreach ($UserProblem->FIELDS()) {
353 :     next unless $GlobalProblem->can($_);
354 :     next if $UserProblem->$_();
355 :     $UserProblem->$_($GlobalProblem->$_());
356 :     }
357 :     }
358 :     return $UserProblem;
359 : sh002i 798 }
360 : sh002i 775
361 : sh002i 808 ################################################################################
362 :     # debugging
363 :     ################################################################################
364 :    
365 :     sub dumpDB($$) {
366 :     my ($self, $table) = @_;
367 :     return $self->{$table}->dumpDB();
368 :     }
369 :    
370 : sh002i 775 1;

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9