Parent Directory
|
Revision Log
fixed a logic error in addUserProblem -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 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, $params), $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 listSetUsers($$) { 224 my ($self, $setID) = @_; 225 return map { $_->[0] } # extract user_id 226 $self->{set_user}->list(undef, $setID); 227 } 228 229 sub listUserSets($$) { 230 my ($self, $userID) = @_; 231 return map { $_->[1] } # extract set_id 232 $self->{set_user}->list($userID, undef); 233 } 234 235 sub addUserSet($$) { 236 my ($self, $UserSet) = @_; 237 die "addUserSet failed: user ", $UserSet->user_id, " does not exist.\n" 238 unless $self->{user}->exists($UserSet->user_id); 239 die "addUserSet failed: set ", $UserSet->set_id, " does not exist.\n" 240 unless $self->{set}->exists($UserSet->set_id); 241 return $self->{set_user}->add($UserSet); 242 } 243 244 sub getUserSet($$$) { 245 my ($self, $userID, $setID) = @_; 246 return $self->{set_user}->get($userID, $setID); 247 } 248 249 sub putUserSet($$) { 250 my ($self, $UserSet) = @_; 251 return $self->{set_user}->put($UserSet); 252 } 253 254 sub deleteUserSet($$$) { 255 my ($self, $userID, $setID) = @_; 256 $self->deleteUserProblem($userID, $setID, $_) 257 foreach $self->listUserProblems($userID, $setID); 258 return $self->{set_user}->delete($userID, $setID); 259 } 260 261 ################################################################################ 262 # problem functions 263 ################################################################################ 264 265 sub listGlobalProblems($$) { 266 my ($self, $setID) = @_; 267 return map { $_->[1] } 268 grep { $_->[0] eq $setID } 269 $self->{problem}->list(undef, undef); 270 } 271 272 sub addGlobalProblem($$) { 273 my ($self, $GlobalProblem) = @_; 274 die "addGlobalProblem failed: set ", $GlobalProblem->set_id, " does not exist.\n" 275 unless $self->{set}->exists($GlobalProblem->set_id); 276 return $self->{problem}->add($GlobalProblem); 277 } 278 279 sub getGlobalProblem($$$) { 280 my ($self, $setID, $problemID) = @_; 281 return $self->{problem}->get($problemID); 282 } 283 284 sub putGlobalProblem($$) { 285 my ($self, $GlobalProblem) = @_; 286 return $self->{problem}->put($GlobalProblem); 287 } 288 289 sub deleteGlobalProblem($$$) { 290 my ($self, $setID, $problemID) = @_; 291 $self->deleteUserProblem($_, $setID, $problemID) 292 foreach $self->listUsers(); 293 return $self->{problem}->delete($setID, $problemID); 294 } 295 296 ################################################################################ 297 # problem_user functions 298 ################################################################################ 299 300 sub listUserProblems($$$) { 301 my ($self, $userID, $setID) = @_; 302 return map { $_->[2] } 303 $self->{problem_user}->list($userID, $setID, undef); 304 } 305 306 sub listProblemUsers($$$) { 307 my ($self, $setID, $problemID) = @_; 308 return map { $_->[2] } 309 $self->{problem_user}->list(undef, $setID, $problemID); 310 } 311 312 sub addUserProblem($$) { 313 my ($self, $UserProblem) = @_; 314 die "addUserProblem failed: user set ", $UserProblem->set_id, " does not exist.\n" 315 unless $self->{set_user}->exists($UserProblem->user_id, $UserProblem->set_id); 316 die "addUserProblem failed: problem ", $UserProblem->problem_id, " does not exist.\n" 317 unless $self->{problem}->exists($UserProblem->set_id, $UserProblem->problem_id); 318 return $self->{problem_user}->add($UserProblem); 319 } 320 321 sub getUserProblem($$$$) { 322 my ($self, $userID, $setID, $problemID) = @_; 323 return $self->{problem_user}->get($userID, $setID, $problemID); 324 } 325 326 sub putUserProblem($$) { 327 my ($self, $UserProblem) = @_; 328 return $self->{problem_user}->put($UserProblem); 329 } 330 331 sub deleteUserProblem($$$$) { 332 my ($self, $userID, $setID, $problemID) = @_; 333 return $self->{problem_user}->delete($userID, $setID, $problemID); 334 } 335 336 ################################################################################ 337 # set+set_user functions 338 ################################################################################ 339 340 sub getGlobalUserSet($$$) { 341 my ($self, $userID, $setID) = @_; 342 my $UserSet = $self->getUserSet($userID, $setID); 343 return unless $UserSet; 344 my $GlobalSet = $self->getGlobalSet($setID); 345 if ($GlobalSet) { 346 foreach ($UserSet->FIELDS()) { 347 next unless $GlobalSet->can($_); 348 next if $UserSet->$_(); 349 $UserSet->$_($GlobalSet->$_()); 350 } 351 } 352 return $UserSet; 353 } 354 355 ################################################################################ 356 # problem+problem_user functions 357 ################################################################################ 358 359 sub getGlobalUserProblem($$$$) { 360 my ($self, $userID, $setID, $problemID) = @_; 361 my $UserProblem = $self->getUserProblem($userID, $setID, $problemID); 362 return unless $UserProblem; 363 my $GlobalProblem = $self->getGlobalProblem($setID, $problemID); 364 if ($GlobalProblem) { 365 foreach ($UserProblem->FIELDS()) { 366 next unless $GlobalProblem->can($_); 367 next if $UserProblem->$_(); 368 $UserProblem->$_($GlobalProblem->$_()); 369 } 370 } 371 return $UserProblem; 372 } 373 374 ################################################################################ 375 # debugging 376 ################################################################################ 377 378 sub dumpDB($$) { 379 my ($self, $table) = @_; 380 return $self->{$table}->dumpDB(); 381 } 382 383 1;
| aubreyja at gmail dot com | ViewVC Help |
| Powered by ViewVC 1.0.9 |