Parent Directory
|
Revision Log
initial support for WWDBv2:
- DB.pm finished (except for getGlobalUser{Set,Problem} methods)
- schema modules for password, permission, key, and user with
WWDBv1 hash-bashed backends
- GDBM driver
- wwdb command-line frontend
-sam
1 ################################################################################ 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 use constant TABLES => qw(password permission key user set set_user problem problem_user); 19 20 ################################################################################ 21 # constructor 22 ################################################################################ 23 24 sub new($$) { 25 my $invocant = shift; 26 my $class = ref($invocant) || $invocant; 27 my $ce = shift; 28 my $self = {}; 29 30 # load the modules required to handle each table, and create driver 31 foreach my $table (TABLES) { 32 unless (defined $ce->{dbLayout}->{$table}) { 33 #warn "ignoring table $table: layout not specified in dbLayout"; 34 next; 35 } 36 37 my $layout = $ce->{dbLayout}->{$table}; 38 my $record = $layout->{record}; 39 my $schema = $layout->{schema}; 40 my $driver = $layout->{driver}; 41 my $source = $layout->{source}; 42 #warn "table=$table record=$record schema=$schema driver=$driver source=$source\n"; 43 44 runtime_use($record); 45 runtime_use($schema); 46 runtime_use($driver); 47 $self->{$table} = $schema->new($driver->new($source), $table, $record); 48 } 49 50 bless $self, $class; 51 return $self; 52 } 53 54 ################################################################################ 55 # password functions 56 ################################################################################ 57 58 sub listPasswords($) { 59 my ($self) = @_; 60 return $self->{password}->list(); 61 } 62 63 sub newPassword($$) { 64 my ($self, $Password) = @_; 65 die "newPassword failed: user ", $Password->user_id, " does not exist.\n" 66 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 return $self->{permission}->list(); 92 } 93 94 sub newPermissionLevel($$) { 95 my ($self, $PermissionLevel) = @_; 96 die "newPermissionLevel failed: user ", $PermissionLevel->user_id, " does not exist.\n" 97 unless $self->{user}->exists($PermissionLevel->user_id); 98 return $self->{permission}->add($PermissionLevel); 99 } 100 101 sub getPermissionLevel($$) { 102 my ($self, $userID) = @_; 103 return $self->{permission}->get($userID); 104 } 105 106 sub putPermissionLevel($$) { 107 my ($self, $PermissionLevel) = @_; 108 return $self->{permission}->put($PermissionLevel); 109 } 110 111 sub deletePermissionLevel($$) { 112 my ($self, $userID) = @_; 113 return $self->{permission}->delete($userID); 114 } 115 116 ################################################################################ 117 # key functions 118 ################################################################################ 119 120 sub listKeys($) { 121 my ($self) = @_; 122 return $self->{key}->list(); 123 } 124 125 sub newKey($$) { 126 my ($self, $Key) = @_; 127 die "newKey failed: user ", $Key->user_id, " does not exist.\n" 128 unless $self->{user}->exists($Key->user_id); 129 return $self->{key}->add($Key); 130 } 131 132 sub getKey($$) { 133 my ($self, $userID) = @_; 134 return $self->{key}->get($userID); 135 } 136 137 sub putKey($$) { 138 my ($self, $Key) = @_; 139 return $self->{key}->put($Key); 140 } 141 142 sub deleteKey($$) { 143 my ($self, $userID) = @_; 144 return $self->{key}->delete($userID); 145 } 146 147 ################################################################################ 148 # user functions 149 ################################################################################ 150 151 sub listUsers($) { 152 my ($self) = @_; 153 return $self->{user}->list(); 154 } 155 156 sub newUser($$) { 157 my ($self, $User) = @_; 158 return $self->{user}->add($User); 159 } 160 161 sub getUser($$) { 162 my ($self, $userID) = @_; 163 return $self->{user}->get($userID); 164 } 165 166 sub putUser($$) { 167 my ($self, $User) = @_; 168 return $self->{user}->put($User); 169 } 170 171 sub deleteUser($$) { 172 my ($self, $userID) = @_; 173 $self->deletePassword($userID); 174 $self->deletePermissionLevel($userID); 175 $self->deleteKey($userID); 176 $self->deleteUserSet($userID, $_) 177 foreach $self->listUsers(); 178 return $self->{user}->delete($userID); 179 } 180 181 ################################################################################ 182 # set functions 183 ################################################################################ 184 185 sub listGlobalSets($) { 186 my ($self) = @_; 187 return $self->{set}->list(); 188 } 189 190 sub newGlobalSet($$) { 191 my ($self, $GlobalSet) = @_; 192 return $self->{set}->add($GlobalSet); 193 } 194 195 sub getGlobalSet($$) { 196 my ($self, $setID) = @_; 197 return $self->{set}->get($setID); 198 } 199 200 sub putGlobalSet($$) { 201 my ($self, $GlobalSet) = @_; 202 return $self->{set}->put($GlobalSet); 203 } 204 205 sub deleteGlobalSet($$) { 206 my ($self, $setID) = @_; 207 $self->deleteGlobalProblem($setID, $_) 208 foreach $self->listGlobalProblems($setID); 209 $self->deleteUserSet($_, $setID) 210 foreach $self->listUsers(); 211 return $self->{set}->delete($setID); 212 } 213 214 ################################################################################ 215 # set_user functions 216 ################################################################################ 217 218 sub listUserSets($) { 219 my ($self, $userID) = @_; 220 return map { $_->[1] } 221 grep { $_->[0] eq $userID } 222 $self->{set_user}->list(); 223 } 224 225 sub newUserSet($$) { 226 my ($self, $UserSet) = @_; 227 die "newUserSet failed: user ", $UserSet->user_id, " does not exist.\n" 228 unless $self->{user}->exists($UserSet->user_id); 229 die "newUserSet failed: set ", $UserSet->set_id, " does not exist.\n" 230 unless $self->{set}->exists($UserSet->set_id); 231 return $self->{set_user}->add($UserSet); 232 } 233 234 sub getUserSet($$) { 235 my ($self, $userID, $setID) = @_; 236 return $self->{set_user}->get($userID, $setID); 237 } 238 239 sub putUserSet($$) { 240 my ($self, $UserSet) = @_; 241 return $self->{set_user}->put($UserSet); 242 } 243 244 sub deleteUserSet($$) { 245 my ($self, $userID, $setID) = @_; 246 $self->deleteUserProblem($userID, $setID, $_) 247 foreach $self->listUserProblems($userID, $setID); 248 return $self->{set_user}->delete($userID, $setID); 249 } 250 251 ################################################################################ 252 # problem functions 253 ################################################################################ 254 255 sub listGlobalProblems($$) { 256 my ($self, $setID) = @_; 257 return map { $_->[1] } 258 grep { $_->[0] eq $setID } 259 $self->{problem}->list(); 260 } 261 262 sub newGlobalProblem($$) { 263 my ($self, $GlobalProblem) = @_; 264 die "newGlobalProblem failed: set ", $GlobalProblem->set_id, " does not exist.\n" 265 unless $self->{set}->exists($GlobalProblem->set_id); 266 return $self->{problem}->add($GlobalProblem); 267 } 268 269 sub getGlobalProblem($$$) { 270 my ($self, $setID, $problemID) = @_; 271 return $self->{problem}->get($problemID); 272 } 273 274 sub putGlobalProblem($$) { 275 my ($self, $GlobalProblem) = @_; 276 return $self->{problem}->put($GlobalProblem); 277 } 278 279 sub deleteGlobalProblem($$$) { 280 my ($self, $setID, $problemID) = @_; 281 $self->deleteUserProblem($_, $setID, $problemID) 282 foreach $self->listUsers(); 283 return $self->{problem}->delete($setID, $problemID); 284 } 285 286 ################################################################################ 287 # problem_user functions 288 ################################################################################ 289 290 sub listUserProblems($$$) { 291 my ($self, $userID, $setID) = @_; 292 return map { $_->[2] } 293 grep { $_->[0] eq $userID and $_->[1] eq $setID } 294 $self->{problem_user}->list(); 295 } 296 297 sub newUserProblem($$) { 298 my ($self, $UserProblem) = @_; 299 die "newUserProblem failed: user set ", $UserProblem->set_id, " does not exist.\n" 300 unless $self->{set_user}->exists($UserProblem->set_id); 301 die "newUserProblem failed: problem ", $UserProblem->problem_id, " does not exist.\n" 302 unless $self->{problem}->exists($UserProblem->set_id); 303 return $self->{problem_user}->add($UserProblem); 304 } 305 306 sub getUserProblem($$$$) { 307 my ($self, $userID, $setID, $problemID) = @_; 308 return $self->{problem_user}->get($userID, $setID, $problemID); 309 } 310 311 sub putUserProblem($$) { 312 my ($self, $UserProblem) = @_; 313 return $self->{problem_user}->put($UserProblem); 314 } 315 316 sub deleteUserProblem($$$$) { 317 my ($self, $userID, $setID, $problemID) = @_; 318 return $self->{problem_user}->delete($userID, $setID, $problemID); 319 } 320 321 ################################################################################ 322 # set+set_user functions 323 ################################################################################ 324 325 sub getGlobalUserSet($$$) { 326 my ($self, $userID, $setID) = @_; 327 # *** 328 } 329 330 ################################################################################ 331 # problem+problem_user functions 332 ################################################################################ 333 334 sub getGlobalUserProblem($$$$) { 335 my ($self, $userID, $setID, $problemID) = @_; 336 # *** 337 } 338 339 1;
| aubreyja at gmail dot com | ViewVC Help |
| Powered by ViewVC 1.0.9 |