Parent Directory
|
Revision Log
initial work on SQL backend. untested. -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, $ce) = @_; 26 my $class = ref($invocant) || $invocant; 27 my $self = {}; 28 29 # load the modules required to handle each table, and create driver 30 foreach my $table (TABLES) { 31 unless (defined $ce->{dbLayout}->{$table}) { 32 #warn "ignoring table $table: layout not specified in dbLayout"; # *** 33 next; 34 } 35 36 my $layout = $ce->{dbLayout}->{$table}; 37 my $record = $layout->{record}; 38 my $schema = $layout->{schema}; 39 my $driver = $layout->{driver}; 40 my $source = $layout->{source}; 41 my $params = $layout->{params}; 42 43 runtime_use($record); 44 runtime_use($schema); 45 runtime_use($driver); 46 $self->{$table} = $schema->new($driver->new($source, $params), $table, $record, $params); 47 } 48 49 bless $self, $class; 50 return $self; 51 } 52 53 ################################################################################ 54 # password functions 55 ################################################################################ 56 57 sub listPasswords($) { 58 my ($self) = @_; 59 return map { $_->[0] } 60 $self->{password}->list(undef); 61 } 62 63 sub addPassword($$) { 64 my ($self, $Password) = @_; 65 die "addPassword 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 map { $_->[0] } 92 $self->{permission}->list(undef); 93 } 94 95 sub addPermissionLevel($$) { 96 my ($self, $PermissionLevel) = @_; 97 die "addPermissionLevel failed: user ", $PermissionLevel->user_id, " does not exist.\n" 98 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 return map { $_->[0] } 124 $self->{key}->list(undef); 125 } 126 127 sub addKey($$) { 128 my ($self, $Key) = @_; 129 die "addKey failed: user ", $Key->user_id, " does not exist.\n" 130 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 return map { $_->[0] } 156 $self->{user}->list(undef); 157 } 158 159 sub addUser($$) { 160 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 return map { $_->[0] } 191 $self->{set}->list(undef); 192 } 193 194 sub addGlobalSet($$) { 195 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 return map { $_->[1] } # extract set_id 225 $self->{set_user}->list($userID, undef); 226 } 227 228 sub addUserSet($$) { 229 my ($self, $UserSet) = @_; 230 die "addUserSet failed: user ", $UserSet->user_id, " does not exist.\n" 231 unless $self->{user}->exists($UserSet->user_id); 232 die "addUserSet failed: set ", $UserSet->set_id, " does not exist.\n" 233 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 $self->{problem}->list(undef, undef); 263 } 264 265 sub addGlobalProblem($$) { 266 my ($self, $GlobalProblem) = @_; 267 die "addGlobalProblem failed: set ", $GlobalProblem->set_id, " does not exist.\n" 268 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 $self->{problem_user}->list($userID, $setID, undef); 297 } 298 299 sub addUserProblem($$) { 300 my ($self, $UserProblem) = @_; 301 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 return $self->{problem_user}->add($UserProblem); 306 } 307 308 sub getUserProblem($$$$) { 309 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 sub deleteUserProblem($$$$) { 319 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 sub getGlobalUserSet($$$) { 328 my ($self, $userID, $setID) = @_; 329 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 } 341 342 ################################################################################ 343 # problem+problem_user functions 344 ################################################################################ 345 346 sub getGlobalUserProblem($$$$) { 347 my ($self, $userID, $setID, $problemID) = @_; 348 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 } 360 361 ################################################################################ 362 # debugging 363 ################################################################################ 364 365 sub dumpDB($$) { 366 my ($self, $table) = @_; 367 return $self->{$table}->dumpDB(); 368 } 369 370 1;
| aubreyja at gmail dot com | ViewVC Help |
| Powered by ViewVC 1.0.9 |