[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 931 - (download) (as text) (annotate)
Wed May 28 19:21:04 2003 UTC (9 years, 11 months ago) by sh002i
File size: 10544 byte(s)
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