'.&mt('When assembling a test you may:').
' '.&mt('(a) have a valid test built automatically by the WebCenter, or').' '.&mt('(b) select the questions to include by combining questions chosen from eleven bins with four mandatory questions, or').
- ' '.&mt('(c) copy one of your existing tests (including optional copying of the student roster)').'
'.&mt('The most efficient way to enroll students is to upload a text file containing usernames and passwords.').' '.&mt("Students' full e-mail addresses should be used as their usernames to ensure uniqueness.").'
'.
+ ' '.&mt('(c) copy one of your existing tests (including optional copying of the student roster)').'
'.&mt('The most efficient way to enroll students is to upload a text file containing usernames and passwords.').' '.&mt("Students' e-mail addresses must be used as their usernames to ensure uniqueness.").'
'.
'
'.
@@ -845,7 +897,7 @@ END
my $nexttext = &mt('Next');
$r->print(&Apache::lonhtmlcommon::row_title(&mt('Action')).'
'.&mt('The following management tools are available via the "[_1]Manage Tests[_2]" tab, or from the toolbar on the [_3]Concept Test Contents[_4] page.[_5]',
+ '','','','',' ').
+ '
'.
+ '
'.&mt('Concept Test Contents').'
'.
+ '
'.&mt('Display the Table of Contents for your Concept Test.').'
'.
+ '
'.&mt('Assemble Concept Test').'
'.
+ '
'.&mt('If no students have attempted the Concept Test you will be able to modify it. You can also change the start and end date of the test itself.').'
'.
+ '
'.
+ '
'.&mt('Enrollment and Student Activity').'
'.
+ '
'.&mt('Display or download a course roster, and view information about completion status and last login. You can also add new students, or change access dates for existing students.').'
'.
+ '
'.&mt("What's New?").'
'.
+ '
'.&mt('View information about changes in your Concept Test course.').'
'.
+ '
'.
+ '
'.&mt('Prepare Printable Concept Test').'
'.
+ '
'.&mt('Create a PDF which you can send to a printer to create a hardcopy of the Concept Test.').'
'.
+ '
'.&mt('Concept Test Statistics').'
'.
+ '
'.&mt('After the closing date of the Concept Test you can view and download statistics for the test, as well as anonymized submission data.').'
'.
+ '
';
+}
+
sub get_cancreate_status {
my ($persondom,$personname,$dom) = @_;
my ($rules,$ruleorder) =
@@ -1582,16 +1672,25 @@ sub get_excluded_elements {
if (grep(/^instcode_/,@excluded)) {
push(@excluded,'instcode');
}
+ if ($env{'form.initmap'}) {
+ push(@excluded,'initmap');
+ }
+ if ($env{'form.output'}) {
+ push(@excluded,'output');
+ }
return @excluded;
}
sub print_enrollment_menu {
- my ($formname,$instcode,$dom,$codetitles,$cat_titles,$cat_order,$code_order,
- $invalidcrosslist) =@_;
+ my ($formname,$state,$instcode,$dom,$codetitles,$cat_titles,$cat_order,
+ $code_order,$invalidcrosslist) =@_;
my ($sections,$autoenroll,$access_dates,$output,$hasauto);
my $starttime = time;
- my $endtime = time+(6*30*24*60*60); # 6 months from now, approx
-
+ my $diff = 6*30*24*60*60; # 6 months from now, approx
+ if (&Apache::loncommon::needs_gci_custom()) {
+ $diff = 7*24*60*60; # 7 days from now, approx
+ }
+ my $endtime = $starttime+$diff;
my %accesstitles = (
'start' => 'Default start access',
'end' => 'Default end access',
@@ -1628,7 +1727,7 @@ sub print_enrollment_menu {
&Apache::lonhtmlcommon::row_title(&mt('Add another')).
''.
''.&mt('Add?').&Apache::lonhtmlcommon::row_closure();
$sections .= &Apache::lonhtmlcommon::row_headline.
'
'.&mt('Crosslisted courses for auto-enrollment').'
'.
@@ -1639,16 +1738,16 @@ sub print_enrollment_menu {
$autoenroll =
&Apache::lonhtmlcommon::row_title(&Apache::loncommon::help_open_topic('Course_Request_Autoadd').' '.&mt('Add registered students automatically')).
''.(' 'x3).''.
&Apache::lonhtmlcommon::row_closure(1).
&Apache::lonhtmlcommon::row_title(&Apache::loncommon::help_open_topic('Course_Request_Autodrop').' '.&mt('Drop unregistered students automatically')).
''.(' 'x3).''.
&Apache::lonhtmlcommon::row_closure(1).
&date_setting_table($starttime,$endtime,$formname,'enroll',
@@ -1675,7 +1774,7 @@ sub print_enrollment_menu {
$output .= &Apache::lonhtmlcommon::row_headline('Access').
'
'.$header.'
'.
&Apache::lonhtmlcommon::row_closure(1).
- $access_dates
+ $access_dates;
}
if ($dom eq 'gcitest') {
return $output;
@@ -1746,15 +1845,21 @@ sub inst_section_selector {
sub date_setting_table {
my ($starttime,$endtime,$formname,$prefix,$hasauto,%datetitles) = @_;
my ($perpetual,$table);
+ my $no_hh_mm_ss = 1;
+ if (&Apache::loncommon::needs_gci_custom()) {
+ $no_hh_mm_ss = '';
+ }
my $startform = &Apache::lonhtmlcommon::date_setter($formname,$prefix.'start',
- $starttime,'','','',1,'','','',1);
+ $starttime,'','','',$no_hh_mm_ss,'','','',1);
my $endform = &Apache::lonhtmlcommon::date_setter($formname,$prefix.'end',
- $endtime,'','','',1,'','','',1);
+ $endtime,'','','',$no_hh_mm_ss,'','','',1);
my $closure = '';
if ($prefix eq 'access') {
- $perpetual = ' ';
+ unless (&Apache::loncommon::needs_gci_custom()) {
+ $perpetual = ' ';
+ }
$closure = '1';
}
@@ -1783,7 +1888,7 @@ sub date_setting_table {
}
sub print_personnel_menu {
- my ($dom,$formname,$crstype,$invalidcrosslist) = @_;
+ my ($dom,$formname,$state,$crstype,$invalidcrosslist) = @_;
my $output;
if ($crstype eq 'official') {
if (&Apache::lonnet::auto_run('',$dom)) {
@@ -1896,7 +2001,7 @@ sub print_personnel_menu {
$output .= &Apache::lonhtmlcommon::row_title(&mt('Add another')).
''.
''.&mt('Add?').&Apache::lonhtmlcommon::row_closure(1).
&Apache::lonhtmlcommon::end_pick_box().'';
if ($crstype eq 'community') {
@@ -1925,7 +2030,7 @@ sub current_lc_sections {
}
sub print_request_status {
- my ($dom) = @_;
+ my ($dom,$action,$state) = @_;
my %statusinfo = &Apache::lonnet::dump('courserequests',$env{'user.domain'},
$env{'user.name'},'^status:'.$dom);
my ($output,$formname,%queue_by_date);
@@ -1968,9 +2073,9 @@ sub print_request_status {
}
$formname = 'requestcrs';
my @sortedtimes = sort {$a <=> $b} (keys(%queue_by_date));
- $output = ''."\n".
+ $output = ''."\n".
- ''."\n".
+ ''."\n".
''."\n".
''."\n".
''."\n";
@@ -2117,7 +2222,7 @@ sub viewdetails_javascript {
function nextPage(formname,nextstate) {
if (nextstate == "modify") {
formname.state.value = "personnel";
- formname.action.value = "new";
+ formname.reqaction.value = "new";
} else {
formname.state.value = nextstate;
}
@@ -2470,7 +2575,7 @@ sub dates_from_form {
}
sub courseinfo_form {
- my ($dom,$formname,$crstype,$next,$description) = @_;
+ my ($dom,$formname,$state,$crstype,$next,$description) = @_;
my %lt = &Apache::lonlocal::texthash(
official => 'You must provide a (brief) course description.',
community => 'You must provide a (brief) community description.'
@@ -2564,7 +2669,7 @@ ENDJS
if ($dom eq 'gcitest') {
my ($instcode,@codetitles,%cat_titles,%cat_order,@code_order);
my $invalidcrosslist = [];
- $output .= &print_enrollment_menu($formname,$instcode,$dom,
+ $output .= &print_enrollment_menu($formname,$state,$instcode,$dom,
\@codetitles,\%cat_titles,\%cat_order,
\@code_order,$invalidcrosslist);
}
@@ -2845,7 +2950,7 @@ sub display_navbuttons {
}
sub print_request_outcome {
- my ($r,$dom,$codetitles,$code_order) = @_;
+ my ($r,$dom,$codetitles,$code_order,$formname) = @_;
my ($output,$cnum,$now,$req_notifylist,$crstype,$enrollstart,$enrollend,
%sections,%crosslistings,%personnel,@baduname,@missingdom,%domconfig,);
my $sectotal = $env{'form.sectotal'};
@@ -2882,6 +2987,10 @@ sub print_request_outcome {
push(@instsections,$sec);
}
$sections{$i}{'loncapa'} = $env{'form.loncapasec_'.$i};
+ $sections{$i}{'loncapa'} =~ s/\W//g;
+ if ($sections{$i}{'loncapa'} eq 'none') {
+ $sections{$i}{'loncapa'} = '';
+ }
}
}
}
@@ -3045,7 +3154,7 @@ sub print_request_outcome {
}
$details->{'datemode'} = 'delete';
}
- my (@inststatuses,$storeresult,$creationresult);
+ my (@inststatuses,$storeresult,$creationresult,$donedisplay);
my $val = &get_processtype($dom,$crstype,\@inststatuses,\%domconfig);
if ($val eq '') {
if ($crstype eq 'official') {
@@ -3166,17 +3275,17 @@ sub print_request_outcome {
'
'.
- ' '.
- ''.&mt('Manage Test').'';
+ ' ';
$r->print($output);
$output = '';
+ $donedisplay = 1;
} else {
- &roster_upload_form($r,$output);
+ &roster_upload_form($r,$output,$formname);
$output = '';
}
} else {
$output .= '';
- &roster_upload_form($r,$output);
+ &roster_upload_form($r,$output,$formname);
$output = '';
}
} elsif ($env{'form.concepttest'} eq 'defchosen') {
@@ -3191,10 +3300,10 @@ sub print_request_outcome {
$output .= &mt('A concept test has also been generated.');
}
$output .= '';
- &roster_upload_form($r,$output);
+ &roster_upload_form($r,$output,$formname);
$output = '';
} else {
- $output .= ' '.&mt('The next step is to chose which questions are to be included in the Concept Test.').'';
+ $output .= ' '.&mt('The next step is to chose which questions are to be included in the Concept Test.').' ';
$r->print($output);
&Apache::londocsgci::editor($r,'requestcrs',$dom,$cnum);
$output = '';
@@ -3293,6 +3402,9 @@ sub print_request_outcome {
}
}
if ($creationresult ne '') {
+ if ($donedisplay) {
+ $r->print(' '.&done_display());
+ }
return ($creationresult,$output);
} else {
return ($storeresult,$output);
@@ -3515,13 +3627,55 @@ sub store_crsparms {
}
sub roster_upload_form {
- my ($r,$output) = @_;
+ my ($r,$output,$formname,$titletext) = @_;
+ my $title = &mt('Request Processed');
+ if ($titletext ne '') {
+ $title = $titletext;
+ }
+ $r->print(<<"ENDJS");
+
+
+ENDJS
+ $r->print('
'.$title.'
'.$output.
+ '
'.&mt('Course roster file upload').'
');
$r->print('
'.&mt('If you have a text file available containing student e-mail addresses and initial passwords, you may upload it now.').' '.
- &mt('You may also enroll students at a later date by visiting the [_1]"Menu"[_2] page and choosing: [_1]"Manage Enrollment"[_2].','','').'