--- loncom/interface/lonrequestcourse.pm 2010/12/05 17:27:00 1.41.2.11
+++ loncom/interface/lonrequestcourse.pm 2010/08/11 13:24:21 1.54.2.3
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Request a course
#
-# $Id: lonrequestcourse.pm,v 1.41.2.11 2010/12/05 17:27:00 raeburn Exp $
+# $Id: lonrequestcourse.pm,v 1.54.2.3 2010/08/11 13:24:21 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -94,8 +94,6 @@ described at http://www.lon-capa.org.
=item print_request_outcome()
-=item get_processtype()
-
=item check_autolimit()
=item retrieve_settings()
@@ -128,42 +126,23 @@ sub handler {
if ($r->header_only) {
return OK;
}
- &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
- ['action','showdom','cnum','state','crstype']);
- &Apache::lonhtmlcommon::clear_breadcrumbs();
- my $action = $env{'form.reqaction'};
- my $state = $env{'form.state'};
- my $context;
- &generate_page($r,$action,$state,$context);
- return OK;
-}
-sub generate_page {
- my ($r,$action,$state,$context) = @_;
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
- ['action','showdom','cnum','state','crstype']);
+ ['action','showdom','cnum','state','crstype','queue']);
+ &Apache::lonhtmlcommon::clear_breadcrumbs();
my $dom = &get_course_dom();
+ my $action = $env{'form.action'};
+ my $state = $env{'form.state'};
my (%states,%stored);
my ($jscript,$uname,$udom,$result,$warning);
$states{'display'} = ['details'];
$states{'view'} = ['pick_request','details','cancel','removal'];
- $states{'log'} = ['filter','display'];
+ $states{'log'} = ['display'];
$states{'new'} = ['courseinfo','enrollment','personnel','review','process'];
- if ($dom =~ /^\w+citest$/) {
- $states{'new'} = ['courseinfo','review','process'];
- if ($env{'form.concepttest'} eq 'editmyown') {
- push(@{$states{'new'}},'chooseitems','uploadroster','enrolling');
- } elsif (($env{'form.concepttest'} eq 'defchosen') ||
- (($env{'form.concepttest'} eq 'cloning') && (!$env{'form.cloneroster'}))) {
- push(@{$states{'new'}},'uploadroster','enrolling');
- } else {
- push(@{$states{'new'}},'done');
- }
- }
if (($action eq 'new') && ($env{'form.crstype'} eq 'official')) {
- unless ($state eq 'crstype') {
+ unless ($env{'form.state'} eq 'crstype') {
unshift(@{$states{'new'}},'codepick');
}
}
@@ -182,20 +161,13 @@ sub generate_page {
enrollment => 'Access Dates',
personnel => 'Personnel',
review => 'Review',
- process => 'Request Outcome',
+ process => 'Result',
pick_request => 'Display Summary',
details => 'Request Details',
cancel => 'Cancel Request',
removal => 'Outcome',
- chooseitems => 'Saved Test',
- uploadroster => 'Upload Roster',
- enrolling => 'Completed',
- done => 'Completed',
+ display => 'Request Logs',
);
- if ($dom =~ /^\w+citest$/) {
- $trail{'crstype'} = 'Building a Test';
- $trail{'courseinfo'} = 'Test Information';
- }
if (($env{'form.crstype'} eq 'official') && (&Apache::lonnet::auto_run('',$dom))) {
$trail{'enrollment'} = 'Enrollment';
@@ -205,10 +177,10 @@ sub generate_page {
&get_breadcrumbs($dom,$action,\$state,\%states,\%trail);
if ($action eq 'display') {
if (($dom eq $env{'request.role.domain'}) && (&Apache::lonnet::allowed('ccc',$dom))) {
- my $namespace = 'courserequestqueue';
if ($env{'form.cnum'} ne '') {
my $cnum = $env{'form.cnum'};
- my $reqkey = $cnum.'_approval';
+ my $queue = $env{'form.queue'};
+ my $reqkey = $cnum.'_'.$queue;
my $namespace = 'courserequestqueue';
my $domconfig = &Apache::lonnet::get_domainconfiguser($dom);
my %queued =
@@ -301,7 +273,7 @@ sub generate_page {
$env{'form.clonedom'} = $dom;
}
if ($state eq 'crstype') {
- $jscript = &mainmenu_javascript($action);
+ $jscript = &mainmenu_javascript();
} else {
$jscript = &Apache::lonhtmlcommon::set_form_elements($elementsref,\%stored);
if ($state eq 'courseinfo') {
@@ -314,7 +286,7 @@ sub generate_page {
$jscript .= "\n".&Apache::loncommon::userbrowser_javascript();
}
- my $loaditems = &onload_action($action,$state,$dom);
+ my $loaditems = &onload_action($action,$state);
my (%can_request,%request_domains);
my $canreq =
@@ -329,10 +301,6 @@ sub generate_page {
$jscript,$loaditems,$crumb,$newinstcode,
$codechk,$checkedcode,$description,
\@invalidcrosslist);
- if ($state eq 'chooseitems' || $state eq 'uploadroster' ||
- $state eq 'enrolling') {
- return $canreq;
- }
}
} else {
$r->print(&header('Course/Community Requests').$crumb.
@@ -350,7 +318,7 @@ sub generate_page {
} elsif ($action eq 'display') {
if ($warning ne '') {
my $args = { only_body => 1 };
- $r->print(&header('Course/Community Requests','','',$args).$crumb.
+ $r->print(&header('Course/Community Requests','','' ,'',$args).$crumb.
'
'.&mt('Course/Community Request Details').'
'.
'
'.$warning.'
'.
&close_popup_form());
@@ -359,15 +327,31 @@ sub generate_page {
$loaditems,$crumb,'','','','','',$uname,$udom);
}
} elsif ($action eq 'log') {
- &print_request_logs($jscript,$loaditems,$crumb);
+ if ($state eq 'crstype') {
+ &print_main_menu($r,\%can_request,\%states,$dom,$jscript,'',$crumb,\%request_domains);
+ } else {
+ $jscript .= < 1) {
+ if (courseForm.cloning.length > 1) {
for (var i=0; i 'requestcrs',
- uploadroster => 'studentform',
- enrolling => 'requestcrs',
- done => 'requestcrs',
- );
- my $lastidx;
- for (my $i=0; $i<@{$states->{$action}}; $i++) {
- if ($$state eq $states->{$action}[$i]) {
- $lastidx = $i;
- last;
- }
- }
for (my $i=0; $i<@{$states->{$action}}; $i++) {
if ($$state eq $states->{$action}[$i]) {
&Apache::lonhtmlcommon::add_breadcrumb(
{text=>"$trail->{$$state}"});
- $crumb = &Apache::lonhtmlcommon::breadcrumbs($crumbtitle,$crumbhelp);
+ $crumb = &Apache::lonhtmlcommon::breadcrumbs('Course/Community Requests','Course_Requests');
last;
} else {
if (($$state eq 'process') || ($$state eq 'removal')) {
@@ -483,43 +446,22 @@ sub get_breadcrumbs {
}
);
} else {
- if (($$state eq 'chooseitems') || ($$state eq 'uploadroster') ||
- ($$state eq 'enrolling') || ($$state eq 'done')) {
- if (($states->{$action}[$i] ne 'process') &&
- ($states->{$action}[$i] ne 'chooseitems') &&
- ($states->{$action}[$i] ne 'uploadroster') &&
- ($states->{$action}[$i] ne 'enrolling') &&
- ($states->{$action}[$i] ne 'done')) {
- &Apache::lonhtmlcommon::add_breadcrumb(
- { href => '/adm/requestcourse',
- text => "$trail->{$states->{$action}[$i]}",
- }
- );
- } else {
- my $diff = $i-$lastidx;
- &Apache::lonhtmlcommon::add_breadcrumb(
- { href => "javascript:history.go($diff)",
- text => "$trail->{$states->{$action}[$i]}", }
- );
- }
- } else {
- &Apache::lonhtmlcommon::add_breadcrumb(
+ &Apache::lonhtmlcommon::add_breadcrumb(
{ href => "javascript:backPage(document.requestcrs,'$states->{$action}[$i]')",
text => "$trail->{$states->{$action}[$i]}", }
- );
- }
- }
- }
- }
+ );
+ }
+ }
+ }
} else {
&Apache::lonhtmlcommon::add_breadcrumb(
- {text=>$firstcrumb});
- $crumb = &Apache::lonhtmlcommon::breadcrumbs($crumbtitle,$crumbhelp);
+ {text=>'Pick Action'});
+ $crumb = &Apache::lonhtmlcommon::breadcrumbs('Course/Community Requests','Course_Requests');
}
} else {
&Apache::lonhtmlcommon::add_breadcrumb(
- {text=>$firstcrumb});
- $crumb = &Apache::lonhtmlcommon::breadcrumbs($crumbtitle,$crumbhelp);
+ {text=>'Pick Action'});
+ $crumb = &Apache::lonhtmlcommon::breadcrumbs('Course/Community Requests','Course_Requests');
}
return ($page,$crumb,$newinstcode,$codechk,$checkedcode,$description);
}
@@ -535,13 +477,11 @@ sub header {
if (ref($args) eq 'HASH') {
my %loadhash = (
'add_entries' => $loaditems,
- 'function' => 'norole',
);
my %arghash = (%loadhash,%{$args});
- $args = \%arghash;
+ $args = \%arghash;
} else {
- $args = {'add_entries' => $loaditems,
- 'function' => 'norole'};
+ $args = {'add_entries' => $loaditems,};
}
}
return &Apache::loncommon::start_page($bodytitle,$jscript.$jsextra,$args);
@@ -559,7 +499,7 @@ sub form_elements {
},
courseinfo => {
cdescr => 'text',
- cloning => 'radio',
+ cloning => 'radio',
clonecrs => 'text',
clonedom => 'selectbox',
datemode => 'radio',
@@ -595,28 +535,12 @@ sub form_elements {
},
);
my %servers = &Apache::lonnet::get_servers($dom,'library');
- if ($dom =~ /^\w+citest$/) {
- %{$elements{'new'}{'courseinfo'}} = (
- cdescr => 'text',
- concepttest => 'radio',
- );
- $elements{'new'}{'enrollment'}{'timezone'} = 'selectbox';
- if (&show_cloneable()) {
- $elements{'new'}{'courseinfo'}{'clonecrs'} = 'selectbox';
- $elements{'new'}{'courseinfo'}{'clonedom'} = 'hidden';
- $elements{'new'}{'courseinfo'}{'cloneroster'} = 'checkbox';
- }
- }
my $numlib = keys(%servers);
if ($numlib > 1) {
$elements{'new'}{'courseinfo'}{'chome'} = 'selectbox';
} else {
$elements{'new'}{'courseinfo'}{'chome'} = 'hidden';
}
- if ($dom =~ /^\w+citest$/) {
- my %mergedhash = (%{$elements{'new'}{'courseinfo'}},%{$elements{'new'}{'enrollment'}});
- %{$elements{'new'}{'courseinfo'}} = %mergedhash;
- }
my (@codetitles,%cat_titles,%cat_order,@code_order,$lastitem);
&Apache::lonnet::auto_possible_instcodes($dom,\@codetitles,\%cat_titles,
\%cat_order,\@code_order);
@@ -713,6 +637,9 @@ sub onload_action {
} else {
$loaditems{'onload'} = 'javascript:setFormElements(document.requestcrs);';
}
+ if ($state eq 'courseinfo') {
+ $loaditems{'onload'} .= 'javascript:setCloneDisplay(document.requestcrs);';
+ }
}
return \%loaditems;
}
@@ -738,13 +665,11 @@ sub print_main_menu {
}
}
- my $js;
- unless ($dom =~ /^\w+citest$/) {
- $js = <<"END";
+ my $js = <<"END";
function nextPage(formname) {
var crschoice = document.mainmenu_coursetype.crstype.value;
- var actionchoice = document.mainmenu_action.reqaction.value;
+ var actionchoice = document.mainmenu_action.action.value;
if (check_can_request(crschoice,actionchoice) == true) {
if ((actionchoice == 'new') && (crschoice == 'official')) {
nextstate = 'codepick';
@@ -752,7 +677,7 @@ function nextPage(formname) {
$nextstate_setter
}
formname.crstype.value = crschoice;
- formname.reqaction.value = actionchoice;
+ formname.action.value = actionchoice;
formname.state.value= nextstate;
formname.submit();
}
@@ -764,20 +689,20 @@ function check_can_request(crschoice,act
var unofficial = '';
var community = '';
END
- if (ref($can_request) eq 'HASH') {
- foreach my $item (keys(%{$can_request})) {
- $js .= "
- $item = 1;
+ if (ref($can_request) eq 'HASH') {
+ foreach my $item (keys(%{$can_request})) {
+ $js .= "
+ $item = 1;
";
- }
}
- my %lt = &Apache::lonlocal::texthash(
- official => 'You are not permitted to request creation of an official course in this domain.',
- unofficial => 'You are not permitted to request creation of an unofficial course in this domain.',
- community => 'You are not permitted to request creation of a community this domain.',
- all => 'You must choose a specific course type when making a new course request.\\nAll types is not allowed.',
- );
- $js .= < 'You are not permitted to request creation of an official course in this domain.',
+ unofficial => 'You are not permitted to request creation of an unofficial course in this domain.',
+ community => 'You are not permitted to request creation of a community this domain.',
+ all => 'You must choose a specific course type when making a new course request.\\n\"All types\" is not allowed.',
+ );
+ $js .= <{'official'}) || ($can_request->{'unofficial'})) {
@@ -829,41 +753,6 @@ END
$domaintitle = &mt('Course/Community Domain');
}
}
-
- if ($dom =~ /^\w+citest$/) {
- my $formname = 'requestcrs';
- my $nexttext = &mt('Continue');
- $r->print(&header($pagetitle,$js.$jscript,$loaditems).$crumb.
- '
'.&mt('Deployment of a Concept Test requires completion of the following three steps:').'
'.
- '
'.&mt('Creation of a course "container" and setting of access dates').'
'.
- '
'.&mt('Assembly of a valid test from Concept Inventory questions').'
'.
- '
'.&mt('Enrollment of students').'
'.
- '
'.&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' e-mail addresses must be used as their usernames to ensure uniqueness.").'
'.&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) =
@@ -1673,25 +1522,16 @@ 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,$state,$instcode,$dom,$codetitles,$cat_titles,$cat_order,
- $code_order,$invalidcrosslist) =@_;
+ my ($formname,$instcode,$dom,$codetitles,$cat_titles,$cat_order,$code_order,
+ $invalidcrosslist) =@_;
my ($sections,$autoenroll,$access_dates,$output,$hasauto);
my $starttime = time;
- 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 $endtime = time+(6*30*24*60*60); # 6 months from now, approx
+
my %accesstitles = (
'start' => 'Default start access',
'end' => 'Default end access',
@@ -1728,7 +1568,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').'
';
}
my $container = 'Course';
@@ -2590,9 +2689,9 @@ sub print_review {
}
sub dates_from_form {
- my ($startname,$endname,$timezone) = @_;
- my $startdate = &Apache::lonhtmlcommon::get_date_from_form($startname,$timezone);
- my $enddate = &Apache::lonhtmlcommon::get_date_from_form($endname,$timezone);
+ my ($startname,$endname) = @_;
+ my $startdate = &Apache::lonhtmlcommon::get_date_from_form($startname);
+ my $enddate = &Apache::lonhtmlcommon::get_date_from_form($endname);
if ($endname eq 'accessend') {
if (exists($env{'form.no_end_date'}) ) {
$enddate = 0;
@@ -2602,7 +2701,7 @@ sub dates_from_form {
}
sub courseinfo_form {
- my ($dom,$formname,$state,$crstype,$next,$description) = @_;
+ my ($dom,$formname,$crstype,$next,$description) = @_;
my %lt = &Apache::lonlocal::texthash(
official => 'You must provide a (brief) course description.',
community => 'You must provide a (brief) community description.'
@@ -2642,32 +2741,17 @@ function toggleCloning() {
ENDJS
my $title = &mt('Brief Course Description');
- my $desctitle = &mt('Description');
- if ($dom =~ /^\w+citest$/) {
- $title = &mt('Concept Test Course Information');
- $desctitle = &mt('Concept Test Title');
- }
- my $clonetitle = &mt('Copy content and settings from an existing course?');
+ my $clonetitle = &mt('Clone content and settings from an existing course?');
if ($crstype eq 'community') {
$title = &mt('Brief Community Description');
- $clonetitle = &mt('Copy content and settings from an existing community?');
+ $clonetitle = &mt('Clone content and settings from an existing community?');
}
my $output .= $js_validate."\n".&Apache::lonhtmlcommon::start_pick_box().
&Apache::lonhtmlcommon::row_headline().
'