Parent Directory
|
Revision Log
Lots of work on WWDBv2... WW1Hash is done! A complete dbLayout (as detailed on global.conf.dist) works now. -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 my $params = $layout->{params}; 43 44 runtime_use($record); 45 runtime_use($schema); 46 runtime_use($driver); 47 $self->{$table} = $schema->new($driver->new($source), $table, $record, $params); 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 map { $_->[0] } 61 $self->{password}->list(undef); 62 } 63 64 sub addPassword($$) { 65 my ($self, $Password) = @_; 66 die "addPassword failed: user ", $Password->user_id, " does not exist.\n" 67 unless $self->{user}->exists($Password->user_id); 68 return $self->{password}->add($Password); 69 } 70 71 sub getPassword($$) { 72 my ($self, $userID) = @_; 73 return $self->{password}->get($userID); 74 } 75 76 sub putPassword($$) { 77 my ($self, $Password) = @_; 78 return $self->{password}->put($Password); 79 } 80 81 sub deletePassword($$) { 82 my ($self, $userID) = @_; 83 return $self->{password}->delete($userID); 84 } 85 86 ################################################################################ 87 # permission functions 88 ################################################################################ 89 90 sub listPermissionLevels($) { 91 my ($self) = @_; 92 return map { $_->[0] } 93 $self->{permission}->list(undef); 94 } 95 96 sub addPermissionLevel($$) { 97 my ($self, $PermissionLevel) = @_; 98 die "addPermissionLevel failed: user ", $PermissionLevel->user_id, " does not exist.\n" 99 unless $self->{user}->exists($PermissionLevel->user_id); 100 return $self->{permission}->add($PermissionLevel); 101 } 102 103 sub getPermissionLevel($$) { 104 my ($self, $userID) = @_; 105 return $self->{permission}->get($userID); 106 } 107 108 sub putPermissionLevel($$) { 109 my ($self, $PermissionLevel) = @_; 110 return $self->{permission}->put($PermissionLevel); 111 } 112 113 sub deletePermissionLevel($$) { 114 my ($self, $userID) = @_; 115 return $self->{permission}->delete($userID); 116 } 117 118 ################################################################################ 119 # key functions 120 ################################################################################ 121 122 sub listKeys($) { 123 my ($self) = @_; 124 return map { $_->[0] } 125 $self->{key}->list(undef); 126 } 127 128 sub addKey($$) { 129 my ($self, $Key) = @_; 130 die "addKey failed: user ", $Key->user_id, " does not exist.\n" 131 unless $self->{user}->exists($Key->user_id); 132 return $self->{key}->add($Key); 133 } 134 135 sub getKey($$) { 136 my ($self, $userID) = @_; 137 return $self->{key}->get($userID); 138 } 139 140 sub putKey($$) { 141 my ($self, $Key) = @_; 142 return $self->{key}->put($Key); 143 } 144 145 sub deleteKey($$) { 146 my ($self, $userID) = @_; 147 return $self->{key}->delete($userID); 148 } 149 150 ################################################################################ 151 # user functions 152 ################################################################################ 153 154 sub listUsers($) { 155 my ($self) = @_; 156 return map { $_->[0] } 157 $self->{user}->list(undef); 158 } 159 160 sub addUser($$) { 161 my ($self, $User) = @_; 162 return $self->{user}->add($User); 163 } 164 165 sub getUser($$) { 166 my ($self, $userID) = @_; 167 return $self->{user}->get($userID); 168 } 169 170 sub putUser($$) { 171 my ($self, $User) = @_; 172 return $self->{user}->put($User); 173 } 174 175 sub deleteUser($$) { 176 my ($self, $userID) = @_; 177 $self->deletePassword($userID); 178 $self->deletePermissionLevel($userID); 179 $self->deleteKey($userID); 180 $self->deleteUserSet($userID, $_) 181 foreach $self->listUsers(); 182 return $self->{user}->delete($userID); 183 } 184 185 ################################################################################ 186 # set functions 187 ################################################################################ 188 189 sub listGlobalSets($) { 190 my ($self) = @_; 191 return map { $_->[0] } 192 $self->{set}->list(undef); 193 } 194 195 sub addGlobalSet($$) { 196 my ($self, $GlobalSet) = @_; 197 return $self->{set}->add($GlobalSet); 198 } 199 200 sub getGlobalSet($$) { 201 my ($self, $setID) = @_; 202 return $self->{set}->get($setID); 203 } 204 205 sub putGlobalSet($$) { 206 my ($self, $GlobalSet) = @_; 207 return $self->{set}->put($GlobalSet); 208 } 209 210 sub deleteGlobalSet($$) { 211 my ($self, $setID) = @_; 212 $self->deleteGlobalProblem($setID, $_) 213 foreach $self->listGlobalProblems($setID); 214 $self->deleteUserSet($_, $setID) 215 foreach $self->listUsers(); 216 return $self->{set}->delete($setID); 217 } 218 219 ################################################################################ 220 # set_user functions 221 ################################################################################ 222 223 sub listUserSets($) { 224 my ($self, $userID) = @_; 225 return map { $_->[1] } # extract set_id 226 $self->{set_user}->list($userID, undef); 227 } 228 229 sub addUserSet($$) { 230 my ($self, $UserSet) = @_; 231 die "addUserSet failed: user ", $UserSet->user_id, " does not exist.\n" 232 unless $self->{user}->exists($UserSet->user_id); 233 die "addUserSet failed: set ", $UserSet->set_id, " does not exist.\n" 234 unless $self->{set}->exists($UserSet->set_id); 235 return $self->{set_user}->add($UserSet); 236 } 237 238 sub getUserSet($$) { 239 my ($self, $userID, $setID) = @_; 240 return $self->{set_user}->get($userID, $setID); 241 } 242 243 sub putUserSet($$) { 244 my ($self, $UserSet) = @_; 245 return $self->{set_user}->put($UserSet); 246 } 247 248 sub deleteUserSet($$) { 249 my ($self, $userID, $setID) = @_; 250 $self->deleteUserProblem($userID, $setID, $_) 251 foreach $self->listUserProblems($userID, $setID); 252 return $self->{set_user}->delete($userID, $setID); 253 } 254 255 ################################################################################ 256 # problem functions 257 ################################################################################ 258 259 sub listGlobalProblems($$) { 260 my ($self, $setID) = @_; 261 return map { $_->[1] } 262 grep { $_->[0] eq $setID } 263 $self->{problem}->list(undef, undef); 264 } 265 266 sub addGlobalProblem($$) { 267 my ($self, $GlobalProblem) = @_; 268 die "addGlobalProblem failed: set ", $GlobalProblem->set_id, " does not exist.\n" 269 unless $self->{set}->exists($GlobalProblem->set_id); 270 return $self->{problem}->add($GlobalProblem); 271 } 272 273 sub getGlobalProblem($$$) { 274 my ($self, $setID, $problemID) = @_; 275 return $self->{problem}->get($problemID); 276 } 277 278 sub putGlobalProblem($$) { 279 my ($self, $GlobalProblem) = @_; 280 return $self->{problem}->put($GlobalProblem); 281 } 282 283 sub deleteGlobalProblem($$$) { 284 my ($self, $setID, $problemID) = @_; 285 $self->deleteUserProblem($_, $setID, $problemID) 286 foreach $self->listUsers(); 287 return $self->{problem}->delete($setID, $problemID); 288 } 289 290 ################################################################################ 291 # problem_user functions 292 ################################################################################ 293 294 sub listUserProblems($$$) { 295 my ($self, $userID, $setID) = @_; 296 return map { $_->[2] } 297 $self->{problem_user}->list($userID, $setID, undef); 298 } 299 300 sub addUserProblem($$) { 301 my ($self, $UserProblem) = @_; 302 die "addUserProblem failed: user set ", $UserProblem->set_id, " does not exist.\n" 303 unless $self->{set_user}->exists($UserProblem->user_id, $UserProblem->set_id); 304 die "addUserProblem failed: problem ", $UserProblem->problem_id, " does not exist.\n" 305 unless $self->{problem}->exists($UserProblem->user_id, $UserProblem->set_id); 306 return $self->{problem_user}->add($UserProblem); 307 } 308 309 sub getUserProblem($$$$) { 310 my ($self, $userID, $setID, $problemID) = @_; 311 return $self->{problem_user}->get($userID, $setID, $problemID); 312 } 313 314 sub putUserProblem($$) { 315 my ($self, $UserProblem) = @_; 316 return $self->{problem_user}->put($UserProblem); 317 } 318 319 sub deleteUserProblem($$$$) { 320 my ($self, $userID, $setID, $problemID) = @_; 321 return $self->{problem_user}->delete($userID, $setID, $problemID); 322 } 323 324 ################################################################################ 325 # set+set_user functions 326 ################################################################################ 327 328 sub getGlobalUserSet($$$) { 329 my ($self, $userID, $setID) = @_; 330 # *** 331 } 332 333 ################################################################################ 334 # problem+problem_user functions 335 ################################################################################ 336 337 sub getGlobalUserProblem($$$$) { 338 my ($self, $userID, $setID, $problemID) = @_; 339 # *** 340 } 341 342 ################################################################################ 343 # debugging 344 ################################################################################ 345 346 sub dumpDB($$) { 347 my ($self, $table) = @_; 348 return $self->{$table}->dumpDB(); 349 } 350 351 1;
| aubreyja at gmail dot com | ViewVC Help |
| Powered by ViewVC 1.0.9 |