'.&Apache::lonhtmlcommon::start_pick_box().
+ &Apache::lonhtmlcommon::row_title('Course Description').
'
';
my ($home_server_pick,$numlib) =
&Apache::loncommon::home_server_form_item($dom,'chome',
@@ -1466,7 +1529,7 @@ sub get_course_dom {
}
sub display_navbuttons {
- my ($r,$formname,$prev,$prevtext,$next,$nexttext) = @_;
+ my ($r,$formname,$prev,$prevtext,$next,$nexttext,$state) = @_;
$r->print('
');
if ($prev) {
$r->print('
@@ -1479,7 +1542,10 @@ sub display_navbuttons {
onclick="javascript:history.back()"/>
');
}
- if ($next) {
+ if ($state eq 'courseinfo') {
+ $r->print('
+
');
+ } elsif ($next) {
$r->print('
');
@@ -1532,8 +1598,10 @@ sub print_request_outcome {
$crosslistings{$i}{'loncapa'} = $env{'form.crosslist_'.$i.'_lcsec'};
}
}
+ } else {
+ $enrollstart = '';
+ $enrollend = '';
}
-
for (my $i=0; $i<$env{'form.persontotal'}; $i++) {
my $uname = $env{'form.person_'.$i.'_uname'};
my $udom = $env{'form.person_'.$i.'_uname'};
@@ -1559,15 +1627,17 @@ sub print_request_outcome {
if ($role eq 'cc') {
@{$personnel{$uname.':'.$udom}{$role}{'usec'}} = ();
} else {
- my @currsec;
- if ($env{'form.person_'.$i.'_sections'} ne '') {
- my @sections = split(',',$env{'form.person_'.$i.'_sections'});
- foreach my $sec (@sections) {
- next if ($sec eq '');
- if (@currsec > 0) {
- unless(grep(/^\Q$sec\E$/,@currsec)) {
- push(@currsec,$sec);
- }
+ my @currsec = &Apache::loncommon::get_env_multiple('form.person_'.$i.'_sec');
+ my $newsec = $env{'form.person_'.$i.'_newsec'};
+ $newsec =~ s/^\s+//;
+ $newsec =~s/\s+$//;
+ my @newsecs = split(/[\s,;]+/,$newsec);
+ foreach my $sec (@newsecs) {
+ next if ($sec =~ /\W/);
+ next if ($newsec eq 'none');
+ if ($sec ne '') {
+ unless (grep(/^\Q$sec\E$/,@currsec)) {
+ push(@currsec,$sec);
}
}
}
@@ -1582,6 +1652,43 @@ sub print_request_outcome {
}
}
my ($accessstart,$accessend) = &dates_from_form('accessstart','accessend');
+ my $autodrops = 0;
+ if ($env{'form.autodrops'}) {
+ $autodrops = $env{'form.autodrops'};
+ }
+ my $autoadds = 0;
+ if ($env{'form.autoadds'}) {
+ $autodrops = $env{'form.autoadds'};
+ }
+ my $sectotal = 0;
+ if ($env{'form.sectotal'}) {
+ $sectotal = $env{'form.sectotal'};
+ }
+ if ($env{'form.autoadds'}) {
+ $autodrops = $env{'form.autoadds'};
+ }
+ my $crosslisttotal = 0;
+ if ($env{'form.crosslisttotal'}) {
+ $crosslisttotal = $env{'form.crosslisttotal'};
+ }
+ my $instcode = '';
+ if (exists($env{'form.instcode'})) {
+ $instcode = $env{'form.instcode'};
+ }
+ my $clonecrs = '';
+ my $clonedom = '';
+ if (($env{'form.clonecrs'} =~ /^($match_courseid)$/) &&
+ ($env{'form.clonedom'} =~ /^($match_domain)$/)) {
+ my $clonehome = &Apache::lonnet::homeserver($env{'form.clonedom'},$env{'form.clonecrs'});
+ if ($clonehome ne 'no_host') {
+ my $canclone = &can_clone_course($env{'user.name'},$env{'user.domain'},
+ $env{'form.clonecrs'}, $env{'form.clonedom'});
+ if ($canclone) {
+ $clonecrs = $env{'form.clonecrs'};
+ $clonedom = $env{'form.clonedom'};
+ }
+ }
+ }
my $details = {
owner => $env{'user.name'},
domain => $env{'user.domain'},
@@ -1590,17 +1697,17 @@ sub print_request_outcome {
coursehome => $env{'form.chome'},
cdescr => $env{'form.cdescr'},
crstype => $env{'form.crstype'},
- instcode => $env{'form.instcode'},
- clonedom => $env{'form.clonedom'},
- clonecrs => $env{'form.clonecrs'},
+ instcode => $instcode,
+ clonedom => $clonedom,
+ clonecrs => $clonecrs,
datemode => $env{'form.datemode'},
- dateshift => $env{'form.datshift'},
- sectotal => $env{'form.sectotal'},
+ dateshift => $env{'form.dateshift'},
+ sectotal => $sectotal,
sections => \%sections,
- crosslisttotal => $env{'form.crosslisttotal'},
+ crosslisttotal => $crosslisttotal,
crosslists => \%crosslistings,
- autoadds => $env{'form.autoadds'},
- autodrops => $env{'form.autodrops'},
+ autoadds => $autoadds,
+ autodrops => $autodrops,
enrollstart => $enrollstart,
enrollend => $enrollend,
accessstart => $accessstart,
@@ -1620,9 +1727,9 @@ sub print_request_outcome {
$output = &mt('Unrecognized course type: [_1]',$crstype);
}
} else {
- my ($disposition,$message);
+ my ($disposition,$message,$reqstatus);
my %reqhash = (
- timestamp => $now,
+ reqtime => $now,
crstype => $crstype,
details => $details,
);
@@ -1640,37 +1747,39 @@ sub print_request_outcome {
} else {
$disposition = 'approval';
}
- $reqhash{'status'} = $disposition;
+ $reqhash{'disposition'} = $disposition;
+ $reqstatus = $disposition;
if ($disposition eq 'rejected') {
$output = &mt('Your course request was rejected.');
if ($message) {
$output .= '
'.$message.'
';
}
} elsif ($disposition eq 'process') {
+ my %domdefs = &Apache::lonnet::get_domain_defaults($dom);
+ my ($logmsg,$newusermsg,$addresult,$enrollcount,$response,$keysmsg,%longroles);
+ my @roles = &Apache::lonuserutils::roles_by_context('course');
my $type = 'Course';
if ($crstype eq 'community') {
$type = 'Community';
}
- my %domdefs = &Apache::lonnet::get_domain_defaults($dom);
- my ($logmsg,$newusermsg,$addresult,$enrollcount,$response,$keysmsg,%longroles);
- my @roles = &Apache::lonuserutils::roles_by_context('course');
foreach my $role (@roles) {
$longroles{$role}=&Apache::lonnet::plaintext($role,$type);
}
- my $owneremail;
- my %emails = &Apache::loncommon::getemails();
- foreach my $email ('permanentemail','critnotification','notification') {
- $owneremail = $emails{$email};
- last if ($owneremail ne '');
- }
- my %reqdetails = &build_batchcreatehash($dom,$details,$owneremail,\%domdefs);
- my $cid = &LONCAPA::batchcreatecourse::build_course($dom,$cnum,'requestcourses',\%reqdetails,\%longroles,\$logmsg,\$newusermsg,\$addresult,\$enrollcount,\$output,\$keysmsg,$env{'user.domain'},$env{'user.name'},$cnum,$crstype);
- $disposition = 'created';
- if ($cid eq "/$dom/$cnum") {
+ my $result = &Apache::loncoursequeueadmin::course_creation($dom,$cnum,
+ 'autocreate',$details,\$logmsg,\$newusermsg,\$addresult,
+ \$enrollcount,\$response,\$keysmsg,\%domdefs,\%longroles);
+ if ($result eq 'created') {
$disposition = 'created';
- $output = &mt('Your course request has been processed and the course has been created.').'
'.&mt('You will need to logout and log-in again to be able to select a role in the course.');
+ $reqstatus = 'created';
+ $output = &mt('Your course request has been processed and the course has been created.').
+ '
'.
+ &mt('You will need to logout and log-in again to be able to select a role in the course.');
} else {
- $output = &mt('An error occurred when processing your course request.').'
'.&mt('You may want to review the request details and submit the request again.');
+ $output = '
'.
+ &mt('An error occurred when processing your course request.').
+ '
'.
+ &mt('You may want to review the request details and submit the request again.').
+ '';
}
} else {
my $requestid = $cnum.'_'.$disposition;
@@ -1696,16 +1805,16 @@ sub print_request_outcome {
}
$output = &mt('Your course request has been recorded.').'
';
if ($disposition eq 'approval') {
- $output .= &mt('Your course request has been recorded.').'
'.
- &mt('A message will be sent to your LON-CAPA account when a domain coordinator takes action on your request.').'
'.
- &mt('To access your LON-CAPA message, go to the Main Menu and click on "Send and Receive Messages".').'
';
+ $output .= &mt('A message will be sent to your LON-CAPA account when a domain coordinator takes action on your request.').'
'.
+ &mt('To access your LON-CAPA message, go to the Main Menu and click on "Send and Receive Messages".').'
';
if ($address ne '') {
$output.= &mt('An e-mail will also be sent to: [_1] when this occurs.',$address).'
';
}
if ($req_notifylist) {
my $fullname = &Apache::loncommon::plainname($env{'user.name'},
$env{'user.domain'});
- &Apache::loncoursequeueadmin::send_selfserve_notification($req_notifylist,$fullname,$now,$dom,$details);
+ my $sender = $env{'user.name'}.':'.$env{'user.domain'};
+ &Apache::loncoursequeueadmin::send_selfserve_notification($req_notifylist,"$fullname ($env{'user.name'}:$env{'user.domain'})",$cnum,$env{'form.cdescr'},$now,'coursereq',$sender);
}
} else {
$output .= '
'.
@@ -1715,23 +1824,32 @@ sub print_request_outcome {
'
';
}
} else {
- $reqhash{'status'} = 'domainerror';
+ $reqstatus = 'domainerror';
$reqhash{'disposition'} = $disposition;
my $warning = &mt('An error occurred saving your request in the pending requests queue.');
$output = '
'.$warning.'';
}
}
- my $storeresult;
+ my ($storeresult,$statusresult);
if ($requestkey =~ /^($match_domain)_($match_courseid)$/) {
$storeresult = &Apache::lonnet::store_userdata(\%reqhash,$requestkey,
'courserequests');
+ if ($storeresult eq 'ok') {
+ my %status = (
+ 'status:'.$dom.':'.$cnum => $reqstatus,
+ );
+ $statusresult = &Apache::lonnet::put('courserequests',\%status);
+ }
} else {
$storeresult = 'error: invalid requestkey format';
}
if ($storeresult ne 'ok') {
$output .= '
'.&mt('An error occurred saving a record of the details of your request: [_1].',$storeresult).'';
&Apache::lonnet::logthis("Error saving course request - $requestkey for $env{'user.name'}:$env{'user.domain'} - $storeresult");
+ } elsif ($statusresult ne 'ok') {
+ $output .= '
'.&mt('An error occurred saving a record of the status of your request: [_1].',$statusresult).'';
+ &Apache::lonnet::logthis("Error saving course request status for $requestkey (for $env{'user.name'}:$env{'user.domain'}) - $statusresult");
}
}
return $output;
@@ -1853,38 +1971,6 @@ sub check_autolimit {
return;
}
-sub build_batchcreatehash {
- my ($dom,$details,$owneremail,$domdefs) = @_;
- my %batchhash;
- my @items = qw{owner domain coursehome clonecrs clonedom datemode dateshift enrollstart enrollend accessstart accessend sections crosslists users};
- if ((ref($details) eq 'HASH') && (ref($domdefs) eq 'HASH')) {
- my $emailenc = &Apache::lonnet::escape($owneremail);
- my $owner = $details->{'owner'}.':'.$details->{'domain'};
- foreach my $item (@items) {
- $batchhash{$item} = $details->{$item};
- }
- $batchhash{'title'} = $details->{'cdescr'};
- $batchhash{'coursecode'} = $details->{'instcode'};
- $batchhash{'emailenc'} = $emailenc;
- $batchhash{'adds'} = $details->{'autoadds'};
- $batchhash{'drops'} = $details->{'autodrops'};
- $batchhash{'authtype'} = $domdefs->{'auth_def'};
- $batchhash{'authparam'} = $domdefs->{'auth_arg_def'};
- if ($details->{'crstype'} eq 'community') {
- $batchhash{'crstype'} = 'Community';
- } else {
- $batchhash{'crstype'} = 'Course';
- }
- $batchhash{'users'}{$details->{$owner}} = {
- firstname => $env{'environment.first'},
- lastname => $env{'environment.last'},
- emailenc => $emailenc,
- email => $owneremail,
- };
- }
- return %batchhash;
-}
-
sub retrieve_settings {
my ($dom,$request_id) = @_;
my %reqinfo = &get_request_settings($request_id,$dom);