11# !/usr/bin/env perl
2+
3+ # Sometimes a webwork user id changes. This script transfers the webwork data for the old user_id to the new user_id.
24#
3- # Sometimes a webwork user id changes. This script transfers the webwork data for the old user_id to the new user_id
4- # Update database tables
5- # user
6- # permission
7- # password
8- # key
9- # set_user
10- # problem_user
11- # set_locations_user
12- # global_achievement_user
13- # achievement_user
5+ # The script updates the following database database tables
6+ # user
7+ # permission
8+ # password
9+ # key
10+ # set_user
11+ # problem_user
12+ # set_locations_user
13+ # global_achievement_user
14+ # achievement_user
1415#
15- # Update answer_log
16+ # and updates the answer_log.
1617
1718use strict;
1819use warnings;
@@ -21,7 +22,7 @@ use File::Basename;
2122
2223BEGIN {
2324 use Mojo::File qw( curfile) ;
24- use Env qw( WEBWORK_ROOT) ;
25+ use Env qw( WEBWORK_ROOT) ;
2526
2627 $WEBWORK_ROOT = curfile-> dirname-> dirname;
2728}
@@ -32,13 +33,13 @@ use WeBWorK::CourseEnvironment;
3233use WeBWorK::DB;
3334use Data::Dumper;
3435
35- if ((scalar (@ARGV ) != 3)) {
36- print " \n Syntax is: change_user_id course_id old_user_id new_user_id" ;
37- print " \n (e.g. newpassword MAT_123 jjones jsmith\n\n " ;
38- exit ();
36+ if ((scalar (@ARGV ) != 3)) {
37+ print " \n Syntax is: change_user_id course_id old_user_id new_user_id" ;
38+ print " \n (e.g. newpassword MAT_123 jjones jsmith\n\n " ;
39+ exit ();
3940}
4041
41- my $courseID = shift ;
42+ my $courseID = shift ;
4243my $old_user_id = shift ;
4344my $new_user_id = shift ;
4445
@@ -50,63 +51,63 @@ my $ce = WeBWorK::CourseEnvironment->new({
5051my $db = WeBWorK::DB-> new($ce );
5152die " Error: $old_user_id does not exist!" unless $db -> existsUser($old_user_id );
5253
53- unless ($db -> existsUser($new_user_id )) {
54- my $user = $db -> getUser($old_user_id );
55- $user -> {user_id }= $new_user_id ;
56- $user -> {comment } = $user -> {comment }. " Record created from $old_user_id record" ;
57- $db -> addUser($user );
54+ unless ($db -> existsUser($new_user_id )) {
55+ my $user = $db -> getUser($old_user_id );
56+ $user -> {user_id } = $new_user_id ;
57+ $user -> {comment } = $user -> {comment } . " Record created from $old_user_id record" ;
58+ $db -> addUser($user );
5859}
5960
60- unless ($db -> existsPassword($new_user_id )) {
61- my $password = $db -> getPassword($old_user_id );
62- $password -> {user_id } = $new_user_id ;
63- $db -> addPassword($password );
61+ if (!$db -> existsPassword($new_user_id ) && (my $password = $db -> getPassword($old_user_id ))) {
62+ $password -> {user_id } = $new_user_id ;
63+ $db -> addPassword($password );
6464}
6565
66- unless ($db -> existsPermissionLevel($new_user_id )) {
67- my $permission = $db -> getPermissionLevel($old_user_id );
68- $permission -> {user_id } = $new_user_id ;
69- $db -> addPermissionLevel($permission );
66+ unless ($db -> existsPermissionLevel($new_user_id )) {
67+ my $permission = $db -> getPermissionLevel($old_user_id );
68+ $permission -> {user_id } = $new_user_id ;
69+ $db -> addPermissionLevel($permission );
7070}
7171
7272my @old_user_sets = $db -> listUserSets($old_user_id );
73- foreach (@old_user_sets ) {
74- my $set_id = $_ ;
75- my $new_set = $db -> newUserSet;
76- $new_set -> user_id($new_user_id );
77- $new_set -> set_id($set_id );
78- eval {$db -> addUserSet($new_set )};
79- my $old_set = $db -> getUserSet($old_user_id ,$set_id );
80- foreach (keys %$old_set ) {
81- next if / user_id|set_id/ ;
82- $new_set -> $_ ($old_set -> $_ );
83- }
84-
85- $db -> putUserSet($new_set ) unless $db -> existsUserSet($new_user_id ,$set_id );
86- my @global_problems = grep { defined $_ } $db -> getAllGlobalProblems($set_id );
87- foreach (@global_problems ) {
88- if ($db -> existsUserProblem($old_user_id ,$set_id ,$_ -> {problem_id })) {
89- my $old_user_problem = $db -> getUserProblem($old_user_id ,$set_id ,$_ -> {problem_id });
90- my $new_user_problem = $db -> newUserProblem;
91- $new_user_problem -> user_id($new_user_id );
92- $new_user_problem -> set_id($set_id );
93- $new_user_problem -> problem_id($_ -> {problem_id });
94- $db -> addUserProblem($new_user_problem ) unless $db -> existsUserProblem($new_user_id ,$set_id ,$_ -> {problem_id });
95- foreach (keys %$old_user_problem ) {
96- next if / (user_id|set_id|problem_id)/ ;
97- $new_user_problem -> $_ ($old_user_problem -> $_ );
98- }
99- $db -> putUserProblem($new_user_problem );
100- }
101- }
73+ foreach (@old_user_sets ) {
74+ my $set_id = $_ ;
75+ my $new_set = $db -> newUserSet;
76+ $new_set -> user_id($new_user_id );
77+ $new_set -> set_id($set_id );
78+ eval { $db -> addUserSet($new_set ) };
79+ my $old_set = $db -> getUserSet($old_user_id , $set_id );
80+ foreach (keys %$old_set ) {
81+ next if / user_id|set_id/ ;
82+ $new_set -> $_ ($old_set -> $_ );
83+ }
84+
85+ $db -> putUserSet($new_set ) unless $db -> existsUserSet($new_user_id , $set_id );
86+ my @global_problems = grep { defined $_ } $db -> getAllGlobalProblems($set_id );
87+ foreach (@global_problems ) {
88+ if ($db -> existsUserProblem($old_user_id , $set_id , $_ -> {problem_id })) {
89+ my $old_user_problem = $db -> getUserProblem($old_user_id , $set_id , $_ -> {problem_id });
90+ my $new_user_problem = $db -> newUserProblem;
91+ $new_user_problem -> user_id($new_user_id );
92+ $new_user_problem -> set_id($set_id );
93+ $new_user_problem -> problem_id($_ -> {problem_id });
94+ $db -> addUserProblem($new_user_problem )
95+ unless $db -> existsUserProblem($new_user_id , $set_id , $_ -> {problem_id });
96+ foreach (keys %$old_user_problem ) {
97+ next if / (user_id|set_id|problem_id)/ ;
98+ $new_user_problem -> $_ ($old_user_problem -> $_ );
99+ }
100+ $db -> putUserProblem($new_user_problem );
101+ }
102+ }
102103}
103104
104105my $answer_log = $ce -> {courseFiles }-> {logs }-> {answer_log };
105- my $dirname = dirname($answer_log );
106- copy($answer_log ," $dirname /answer_log.bak" );
107- open (my $in ,' <' ," $dirname /answer_log.bak" ) or die " Can't open $dirname /answer_log.bak:$! " ;
108- open (my $out ,' >' ,$answer_log );
109- while (<$in >) {
110- s / $old_user_id/ $new_user_id / g ;
111- print $out $_ ;
106+ my $dirname = dirname($answer_log );
107+ copy($answer_log , " $dirname /answer_log.bak" );
108+ open (my $in , ' <' , " $dirname /answer_log.bak" ) or die " Can't open $dirname /answer_log.bak:$! " ;
109+ open (my $out , ' >' , $answer_log );
110+ while (<$in >) {
111+ s / $old_user_id/ $new_user_id / g ;
112+ print $out $_ ;
112113}
0 commit comments