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