diff --git a/lib/WeBWorK/ContentGenerator/CourseAdmin.pm b/lib/WeBWorK/ContentGenerator/CourseAdmin.pm index df17696589..dc2661ae83 100644 --- a/lib/WeBWorK/ContentGenerator/CourseAdmin.pm +++ b/lib/WeBWorK/ContentGenerator/CourseAdmin.pm @@ -384,10 +384,11 @@ sub do_add_course ($c) { eval { addCourse( - courseID => $add_courseID, - ce => $ce2, - courseOptions => \%courseOptions, - users => \@users, + courseID => $add_courseID, + ce => $ce2, + courseOptions => \%courseOptions, + users => \@users, + initial_userID => $add_initial_userID, %optional_arguments, ); }; diff --git a/lib/WeBWorK/Utils/CourseManagement.pm b/lib/WeBWorK/Utils/CourseManagement.pm index 08b32ead6c..4963af6165 100644 --- a/lib/WeBWorK/Utils/CourseManagement.pm +++ b/lib/WeBWorK/Utils/CourseManagement.pm @@ -201,7 +201,7 @@ boolean options: =cut sub addCourse { - my (%options) = @_; + my (%options) = (initial_userID => '', @_); for my $key (keys(%options)) { my $value = '####UNDEF###'; @@ -217,6 +217,8 @@ sub addCourse { debug \@users; + my ($initialUser) = grep { $_->[0]{user_id} eq $options{initial_userID} } @users; + # get the database layout out of the options hash my $dbLayoutName = $courseOptions{dbLayoutName}; @@ -405,6 +407,7 @@ sub addCourse { assignSetsToUsers($db, $ce, \@user_sets, [$user_id]); } } + assignSetsToUsers($db, $ce, \@set_ids, [ $initialUser->[0]{user_id} ]) if $initialUser; } # add achievements @@ -413,6 +416,12 @@ sub addCourse { for my $achievement_id (@achievement_ids) { eval { $db->addAchievement($db0->getAchievement($achievement_id)) }; warn $@ if $@; + if ($initialUser) { + my $userAchievement = $db->newUserAchievement(); + $userAchievement->user_id($initialUser->[0]{user_id}); + $userAchievement->achievement_id($achievement_id); + $db->addUserAchievement($userAchievement); + } } if ($options{copyNonStudents}) { foreach my $userTriple (@users) {