[system] / trunk / webwork-modperl / lib / WeBWorK / DB.pm Repository:
ViewVC logotype

View of /trunk/webwork-modperl/lib/WeBWorK/DB.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 914 - (download) (as text) (annotate)
Tue May 27 23:37:57 2003 UTC (10 years ago) by sh002i
File size: 10422 byte(s)
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