| … | |
… | |
| 38 | } |
38 | } |
| 39 | |
39 | |
| 40 | return $message; |
40 | return $message; |
| 41 | } |
41 | } |
| 42 | |
42 | |
|
|
43 | ### Utility functions for assigning sets to users. |
|
|
44 | # These silently fail if the problem or set exists for the user. |
|
|
45 | |
| 43 | sub assignProblemToUser { |
46 | sub assignProblemToUser { |
| 44 | my ($self, $user, $globalProblem) = @_; |
47 | my ($self, $user, $globalProblem) = @_; |
| 45 | my $db = $self->{db}; |
48 | my $db = $self->{db}; |
| 46 | my $userProblem = $db->{problem_user}->{record}->new; |
49 | my $userProblem = $db->{problem_user}->{record}->new; |
|
|
50 | |
| 47 | # Set up the key |
51 | # Set up the key |
| 48 | $userProblem->user_id($user); |
52 | $userProblem->user_id($user); |
| 49 | $userProblem->set_id($globalProblem->set_id); |
53 | $userProblem->set_id($globalProblem->set_id); |
| 50 | $userProblem->problem_id($globalProblem->problem_id); |
54 | $userProblem->problem_id($globalProblem->problem_id); |
| 51 | |
55 | |
| … | |
… | |
| 55 | $userProblem->num_correct(0); |
59 | $userProblem->num_correct(0); |
| 56 | $userProblem->num_incorrect(0); |
60 | $userProblem->num_incorrect(0); |
| 57 | $userProblem->attempted(0); |
61 | $userProblem->attempted(0); |
| 58 | $userProblem->problem_seed(int(rand(5000))); |
62 | $userProblem->problem_seed(int(rand(5000))); |
| 59 | |
63 | |
| 60 | $db->addUserProblem($userProblem); |
64 | eval {$db->addUserProblem($userProblem)}; |
| 61 | } |
65 | } |
| 62 | |
66 | |
| 63 | sub assignSetToUser { |
67 | sub assignSetToUser { |
| 64 | my ($self, $user, $globalSet) = @_; |
68 | my ($self, $user, $globalSet) = @_; |
| 65 | my $db = $self->{db}; |
69 | my $db = $self->{db}; |
| 66 | my $userSet = $db->{set_user}->{record}->new; |
70 | my $userSet = $db->{set_user}->{record}->new; |
| 67 | my $setID = $globalSet->set_id; |
71 | my $setID = $globalSet->set_id; |
| 68 | |
72 | |
| 69 | $userSet->user_id($user); |
73 | $userSet->user_id($user); |
| 70 | $userSet->set_id($setID); |
74 | $userSet->set_id($setID); |
| 71 | $db->addUserSet($userSet); |
75 | eval {$db->addUserSet($userSet)}; |
| 72 | |
76 | |
| 73 | foreach my $problemID ($db->listGlobalProblems) { |
77 | foreach my $problemID ($db->listGlobalProblems) { |
| 74 | my $problemRecord = $db->getGlobalProblem($setID, $problemID); |
78 | my $problemRecord = $db->getGlobalProblem($setID, $problemID); |
| 75 | $self->assignProblemToUser($user, $problemRecord); |
79 | $self->assignProblemToUser($user, $problemRecord); |
| 76 | } |
80 | } |
| … | |
… | |
| 82 | # of a set. |
86 | # of a set. |
| 83 | sub assignProblemToAllUsers { |
87 | sub assignProblemToAllUsers { |
| 84 | my ($self, $globalProblem) = @_; |
88 | my ($self, $globalProblem) = @_; |
| 85 | my $db = $self->{db}; |
89 | my $db = $self->{db}; |
| 86 | my $setID = $globalProblem->set_id; |
90 | my $setID = $globalProblem->set_id; |
| 87 | my @users = $db->listSetUsers($setID); |
91 | my @users = $db->listSetUsers; |
| 88 | |
92 | |
| 89 | foreach my $user (@users) { |
93 | foreach my $user (@users) { |
| 90 | $self->assignProblemToUser($user, $globalProblem); |
94 | $self->assignProblemToUser($user, $globalProblem); |
|
|
95 | } |
|
|
96 | } |
|
|
97 | |
|
|
98 | # READ THIS: Unlike the above function, "All" here refers to all of the |
|
|
99 | # users of a course. |
|
|
100 | # This function caches database data as a speed optimization. |
|
|
101 | sub assignSetToAllUsers { |
|
|
102 | my ($self, $setID) = @_; |
|
|
103 | my $db = $self->{db}; |
|
|
104 | my @problems = (); |
|
|
105 | my @users = $db->listUsers($setID); |
|
|
106 | my @problemRecords = map {$db->getGlobalProblem($setID, $_)} $db->listGlobalProblems($setID); |
|
|
107 | |
|
|
108 | foreach my $user (@users) { |
|
|
109 | # FIXME: Create a UserSet record for the user!!!! |
|
|
110 | my $userSet = $db->{set_user}->{record}->new; |
|
|
111 | $userSet->user_id($user); |
|
|
112 | $userSet->set_id($setID); |
|
|
113 | eval {$db->addUserSet($userSet)}; |
|
|
114 | foreach my $problemRecord (@problemRecords) { |
|
|
115 | $self->assignProblemToUser($user, $problemRecord); |
|
|
116 | } |
| 91 | } |
117 | } |
| 92 | } |
118 | } |
| 93 | |
119 | |
| 94 | ## Template Escapes ## |
120 | ## Template Escapes ## |
| 95 | |
121 | |