[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 814 - (download) (as text) (annotate)
Wed Apr 23 06:37:19 2003 UTC (10 years, 1 month ago) by sh002i
File size: 10102 byte(s)
implemented getGlobalUser{Set,Problem}.
-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), $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