--- loncom/interface/lonrequestcourse.pm 2010/12/05 17:27:00 1.41.2.11 +++ loncom/interface/lonrequestcourse.pm 2010/01/01 23:17:31 1.42 @@ -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.42 2010/01/01 23:17:31 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -128,21 +128,13 @@ 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']); + &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); @@ -151,19 +143,8 @@ sub generate_page { $states{'log'} = ['filter','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 +163,12 @@ 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', ); - 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'; @@ -301,12 +274,9 @@ 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') { - $jscript .= &cloning_javascript(); - } } } @@ -314,7 +284,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 +299,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. @@ -363,11 +329,10 @@ sub generate_page { } else { &print_main_menu($r,\%can_request,\%states,$dom,$jscript,'',$crumb,\%request_domains); } - return; + return OK; } sub mainmenu_javascript { - my ($action) = @_; return <<"END"; function setType(courseForm) { for (var i=0; i 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 +411,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 +442,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 +464,6 @@ sub form_elements { }, courseinfo => { cdescr => 'text', - cloning => 'radio', clonecrs => 'text', clonedom => 'selectbox', datemode => 'radio', @@ -595,28 +499,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); @@ -711,7 +599,7 @@ sub onload_action { if ($state eq 'crstype') { $loaditems{'onload'} = 'javascript:setAction(document.mainmenu_action);javascript:setType(document.mainmenu_coursetype)'; } else { - $loaditems{'onload'} = 'javascript:setFormElements(document.requestcrs);'; + $loaditems{'onload'} = 'javascript:setFormElements(document.requestcrs)'; } } return \%loaditems; @@ -738,13 +626,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 +638,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 +650,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.\\nAll types is not allowed.', + ); + $js .= <{'official'}) || ($can_request->{'unofficial'})) { @@ -829,41 +714,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:').'

    '. - '
  1. '.&mt('Creation of a course "container" and setting of access dates').'
  2. '. - '
  3. '.&mt('Assembly of a valid test from Concept Inventory questions').'
  4. '. - '
  5. '.&mt('Enrollment of students').'
  6. '. - '

'.&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.").'

'. - '
'."\n". - ''."\n". - ''."\n". - ''."\n". - ''."\n". - ''."\n". - '
'. - &Apache::loncommon::end_page()); - return; - } - - if (!$onchange) { - $r->print(' '); - } - unless ((ref($can_request) eq 'HASH') && (keys(%{$can_request}) > 0)) { - $r->print(&Apache::lonhtmlcommon::row_closure(1)."\n". - &Apache::lonhtmlcommon::end_pick_box().''."\n". - &Apache::loncommon::end_page()); - return; - } - my @incdoms; if (ref($request_domains) eq 'HASH') { foreach my $item (keys(%{$request_domains})) { @@ -898,7 +748,7 @@ END my $nexttext = &mt('Next'); $r->print(&Apache::lonhtmlcommon::row_title(&mt('Action')).'
- @@ -936,7 +786,7 @@ END ''."\n". ''."\n". ''."\n". - ''."\n". + ''."\n". ''."\n". '
'); @@ -962,13 +812,8 @@ END if (($action eq 'new') || ($action eq 'view')) { $js .= <print(&header($title,$js.$jscript,$loaditems,$jsextra).$crumb); - return if (($state eq 'chooseitems') || ($state eq 'uploadroster') || - ($state eq 'enrolling')); &print_request_form($r,$action,$state,$page,$states,$dom,$newinstcode, $codechk,$checkedcode,$description,$invalidcrosslist); } elsif ($action eq 'view') { @@ -1035,7 +874,7 @@ END $title = &mt('Pending course/community requests'); } $r->print('

'.$title.'

'."\n".$form."\n". - &print_request_status($dom,$action,$state).'
'); + &print_request_status($dom).''); } elsif ($state eq 'details') { my (@codetitles,%cat_titles,%cat_order,@code_order,$instcode,$code_chk); my $origcnum = $env{'form.cnum'}; @@ -1121,7 +960,7 @@ END } $r->print('

'.&mt('Request Cancellation').'

'."\n".$form."\n". ''."\n". - ''."\n". + ''."\n". ''."\n". ''."\n"); if ($result eq 'ok') { @@ -1404,29 +1243,29 @@ sub print_request_form { &Apache::lonhtmlcommon::end_pick_box().'
'); } else { $next = $states->{$action}[$page+2]; - $r->print(&courseinfo_form($dom,$formname,$state,$crstype,$next)); + $r->print(&courseinfo_form($dom,$formname,$crstype,$next)); } } else { if ($crstype eq 'official') { $next = $states->{$action}[$page+2]; } - $r->print(&courseinfo_form($dom,$formname,$state,$crstype,$next)); + $r->print(&courseinfo_form($dom,$formname,$crstype,$next)); } } elsif ($prev eq 'codepick') { if ($instcode eq '') { $prev = $states->{$action}[$page-2]; } - $r->print(&courseinfo_form($dom,$formname,$state,$crstype,$next,$description)); + $r->print(&courseinfo_form($dom,$formname,$crstype,$next,$description)); } elsif ($state eq 'enrollment') { if ($crstype eq 'official') { &Apache::lonnet::auto_possible_instcodes($dom,\@codetitles,\%cat_titles, \%cat_order,\@code_order); } - $r->print(&print_enrollment_menu($formname,$state,$instcode,$dom,\@codetitles, + $r->print(&print_enrollment_menu($formname,$instcode,$dom,\@codetitles, \%cat_titles,\%cat_order,\@code_order, $invalidcrosslist)); } elsif ($state eq 'personnel') { - $r->print(&print_personnel_menu($dom,$formname,$state,$crstype,$invalidcrosslist)); + $r->print(&print_personnel_menu($dom,$formname,$crstype,$invalidcrosslist)); } elsif ($state eq 'review') { my (%alerts,%rulematch,%inst_results,%curr_rules,%got_rules,%disallowmsg); my $now = time; @@ -1521,13 +1360,13 @@ sub print_request_form { } else { $navtxt{'next'} = &mt('Submit course request'); } - } elsif ($state eq 'process') { + } elsif ($state eq 'process') { if ($crstype eq 'official') { &Apache::lonnet::auto_possible_instcodes($dom,\@codetitles,\%cat_titles, \%cat_order,\@code_order); } - my ($storeresult,$result) = &print_request_outcome($r,$dom,\@codetitles, - \@code_order,$formname); + my ($storeresult,$result) = &print_request_outcome($dom,\@codetitles, + \@code_order); $r->print($result); if (($storeresult eq 'ok') || ($storeresult eq 'created')) { $r->print('

'); @@ -1535,13 +1374,9 @@ sub print_request_form { $r->print(''. &mt('Modify this request').''.(' 'x4)); } - unless ($env{'form.concepttest'}) { - $r->print(''.&mt('Make another request').'

'); - } + $r->print(''.&mt('Make another request').'

'); return; } - } elsif ($state eq 'uploadroster') { - &roster_upload_form($r,$output,$formname); } my @excluded = &get_excluded_elements($dom,$states,$action,$state); if ($state eq 'personnel') { @@ -1576,39 +1411,12 @@ sub print_request_form { if ($state eq 'enrollment') { push(@excluded,'crosslisttotal'); } - if ($state eq 'done') { - $r->print(&done_display()); - } else { - $r->print(&Apache::lonhtmlcommon::echo_form_input(\@excluded)); - &display_navbuttons($r,$dom,$formname,$prev,$navtxt{'prev'},$next, - $navtxt{'next'},$state); - } - $r->print(''); + $r->print(&Apache::lonhtmlcommon::echo_form_input(\@excluded).''); + &display_navbuttons($r,$dom,$formname,$prev,$navtxt{'prev'},$next, + $navtxt{'next'},$state); return; } -sub done_display { - return '

'.&mt('Concept Test creation is complete').'

'. - '

'.&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 +1481,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 +1527,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').'

'. @@ -1739,25 +1538,26 @@ 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', - $hasauto,$dom,%enrolltitles); + $hasauto,%enrolltitles); } } my $access_dates = &date_setting_table($starttime,$endtime,$formname,'access',$hasauto, - $dom,%accesstitles); + %accesstitles); + $output .= &Apache::lonhtmlcommon::start_pick_box(); if ($sections) { $output .= $sections; } @@ -1774,23 +1574,11 @@ sub print_enrollment_menu { } $output .= &Apache::lonhtmlcommon::row_headline('Access'). '

'.$header.'

'. - &Apache::lonhtmlcommon::row_closure(1); - if ($dom =~ /^\w+citest$/) { - my $includeempty = 1; - my $timezone = &Apache::lonlocal::gettimezone(); - $output .= &Apache::lonhtmlcommon::row_title('Time zone'). - &Apache::loncommon::select_timezone('timezone',$timezone, - undef,$includeempty). - &Apache::lonhtmlcommon::row_closure(1); - } - $output .= $access_dates; - } - if ($dom =~ /^\w+citest$/) { - return $output; - } else { - return '
'.&Apache::lonhtmlcommon::start_pick_box().$output. - &Apache::lonhtmlcommon::end_pick_box().'
'; + &Apache::lonhtmlcommon::row_closure(1). + $access_dates } + return '
'.&Apache::lonhtmlcommon::start_pick_box().$output. + &Apache::lonhtmlcommon::end_pick_box().'
'; } sub show_invalid_crosslists { @@ -1852,29 +1640,17 @@ sub inst_section_selector { } sub date_setting_table { - my ($starttime,$endtime,$formname,$prefix,$hasauto,$dom,%datetitles) = @_; + my ($starttime,$endtime,$formname,$prefix,$hasauto,%datetitles) = @_; my ($perpetual,$table); - my $no_hh_mm_ss = 1; - my $hide_timezone; - if (&Apache::loncommon::needs_gci_custom()) { - $no_hh_mm_ss = ''; - if ($dom =~ /^\w+citest$/) { - if ($prefix eq 'access') { - $hide_timezone = 1; - } - } - } my $startform = &Apache::lonhtmlcommon::date_setter($formname,$prefix.'start', - $starttime,'','','',$no_hh_mm_ss,'','','',1,$hide_timezone); + $starttime,'','','',1,'','','',1); my $endform = &Apache::lonhtmlcommon::date_setter($formname,$prefix.'end', - $endtime,'','','',$no_hh_mm_ss,'','','',1,$hide_timezone); + $endtime,'','','',1,'','','',1); my $closure = ''; if ($prefix eq 'access') { - unless (&Apache::loncommon::needs_gci_custom()) { - $perpetual = ' '; - } + $perpetual = ' '; $closure = '1'; } @@ -1903,7 +1679,7 @@ sub date_setting_table { } sub print_personnel_menu { - my ($dom,$formname,$state,$crstype,$invalidcrosslist) = @_; + my ($dom,$formname,$crstype,$invalidcrosslist) = @_; my $output; if ($crstype eq 'official') { if (&Apache::lonnet::auto_run('',$dom)) { @@ -2016,7 +1792,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') { @@ -2045,7 +1821,7 @@ sub current_lc_sections { } sub print_request_status { - my ($dom,$action,$state) = @_; + my ($dom) = @_; my %statusinfo = &Apache::lonnet::dump('courserequests',$env{'user.domain'}, $env{'user.name'},'^status:'.$dom); my ($output,$formname,%queue_by_date); @@ -2088,9 +1864,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"; @@ -2237,7 +2013,7 @@ sub viewdetails_javascript { function nextPage(formname,nextstate) { if (nextstate == "modify") { formname.state.value = "personnel"; - formname.reqaction.value = "new"; + formname.action.value = "new"; } else { formname.state.value = nextstate; } @@ -2394,92 +2170,50 @@ sub print_review { } my %ctxt = &clone_text(); - if ($dom =~ /^\w+citest$/) { - $inst_headers .= ''.&mt('Test Questions').''; - my $concepttest; - if ($env{'form.concepttest'} eq 'defchosen') { - $concepttest = 'Auto-generated'; - } elsif ($env{'form.concepttest'} eq 'editmyown') { - $concepttest = 'Manually selected'; - } elsif ($env{'form.concepttest'} eq 'cloning') { - $concepttest = 'Copied from existing test'; - } - $inst_values .= ''.$concepttest.(' 'x2).''; - } - if (&show_cloneable()) { - $inst_headers .= ''.&mt('Copy From').''; - if ((($env{'form.cloning'}) || - (($dom =~ /^\w+citest$/) && ($env{'form.concepttest'} eq 'cloning'))) && - ($env{'form.clonecrs'} =~ /^$match_name$/) && - ($env{'form.clonedom'} =~ /^$match_domain$/)) { - my $canclone = &Apache::loncoursequeueadmin::can_clone_course($env{'user.name'}, + $inst_headers .= ''.&mt('Clone From').''; + if (($env{'form.clonecrs'} =~ /^$match_name$/) && + ($env{'form.clonedom'} =~ /^$match_domain$/)) { + my $canclone = &Apache::loncoursequeueadmin::can_clone_course($env{'user.name'}, $env{'user.domain'},$env{'form.clonecrs'},$env{'form.clonedom'}, $env{'form.crstype'}); - if ($canclone) { - my %courseenv = &Apache::lonnet::userenvironment($env{'form.clonedom'}, + if ($canclone) { + my %courseenv = &Apache::lonnet::userenvironment($env{'form.clonedom'}, $env{'form.clonecrs'},('description','internal.coursecode')); - if (keys(%courseenv) > 0) { - if ($dom =~ /^\w+citest$/) { - $inst_headers .= ''.$ctxt{'ros'}.''; - } else { - $inst_headers .= ''.$ctxt{'dsh'}.''; - } - $inst_values .= ''.$courseenv{'description'}.' '; - my $cloneinst = $courseenv{'internal.coursecode'}; - if ($cloneinst ne '') { - $inst_values .= $cloneinst.' '.&mt('in').' '.$env{'form.clonedom'}; - } else { - unless ($dom =~ /^\w+citest$/) { - $inst_values .= &mt('from').' '.$env{'form.clonedom'}; - } - } - $inst_values .= (' 'x2).''; - if ($dom =~ /^\w+citest$/) { - if ($env{'form.cloneroster'}) { - $inst_values .= &mt('Yes'); - } else { - $inst_values .= &mt('No'); - } - } else { - if ($env{'form.datemode'} eq 'preserve') { - $inst_values .= $ctxt{'prd'}; - } elsif ($env{'form.datemode'} eq 'shift') { - $inst_values .= &mt('Shift dates by [_1] days',$env{'form.dateshift'}); - } else { - $inst_values .= $ctxt{'ncd'}; - } - } - $inst_values .= ''; - } else { - $inst_values .= ''.&mt('Unknown').''; - } + if (keys(%courseenv) > 0) { + $inst_headers .= ''.$ctxt{'dsh'}.''; + $inst_values .= ''.$courseenv{'description'}.' '; + my $cloneinst = $courseenv{'internal.coursecode'}; + if ($cloneinst ne '') { + $inst_values .= $cloneinst.' '.&mt('in').' '.$env{'form.clonedom'}; + } else { + $inst_values .= &mt('from').' '.$env{'form.clonedom'}; + } + $inst_values .= ''; + if ($env{'form.datemode'} eq 'preserve') { + $inst_values .= $ctxt{'prd'}; + } elsif ($env{'form.datemode'} eq 'shift') { + $inst_values .= &mt('Shift dates by [_1] days',$env{'form.dateshift'}); + } else { + $inst_values .= $ctxt{'ncd'}; + } + $inst_values .= ''; } else { - $inst_values .= ''.&mt('Not permitted'),''; + $inst_values .= ''.&mt('Unknown').''; } - } else { - $inst_values .= ''.&mt('None').''; - } - } - my $tz; - if ($dom =~ /^\w+citest$/) { - if (&Apache::lonlocal::gettimezone($env{'form.timezone'}) ne 'local') { - $tz = $env{'form.timezone'}; - } else { - $tz = &Apache::lonlocal::gettimezone(); - } - $enroll_headers .= ''.&mt('Time Zone').''; + } else { + $inst_values .= ''.&mt('Not permitted'),''; + } + } else { + $inst_values .= ''.&mt('None').''; } $enroll_headers .= ''.&mt('Access Starts').''. ''.&mt('Access Ends').''; - my ($accessstart,$accessend) = &dates_from_form('accessstart','accessend',$tz); - if ($dom =~ /^\w+citest$/) { - $enroll_values .= ''.$tz.''; - } - $enroll_values .= ''.&Apache::lonlocal::locallocaltime($accessstart,$tz).''; + my ($accessstart,$accessend) = &dates_from_form('accessstart','accessend'); + $enroll_values .= ''.&Apache::lonlocal::locallocaltime($accessstart).''; if ($accessend == 0) { $enroll_values .= ''.&mt('No end date').''; } else { - $enroll_values .= ''.&Apache::lonlocal::locallocaltime($accessend,$tz).''; + $enroll_values .= ''.&Apache::lonlocal::locallocaltime($accessend).''; } my $container = 'Course'; @@ -2590,9 +2324,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 +2336,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.' @@ -2619,55 +2353,22 @@ function validateForm() { } nextPage(document.$formname,'$next'); } - -function toggleCloning() { - var willclone; - if (document.$formname.cloning.length > 1) { - for (var i=0; i 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(). + my $output .= $js_validate."\n".'
'.&Apache::lonhtmlcommon::start_pick_box(). &Apache::lonhtmlcommon::row_headline(). '

'.&Apache::loncommon::help_open_topic('Course_Request_Description').' '.$title.'

'. &Apache::lonhtmlcommon::row_closure(1). - &Apache::lonhtmlcommon::row_title($desctitle). - ''; - my $showclone; - if ($dom =~ /^\w+citest$/) { - $showclone = &show_cloneable(); - } else { - $showclone = 1; - } - if ($dom =~ /^\w+citest$/) { - $output .= &Apache::lonhtmlcommon::row_closure(1). - &concepttest_form($showclone,$dom); - } + &Apache::lonhtmlcommon::row_title(&mt('Description')). + ''; my ($home_server_pick,$numlib) = &Apache::loncommon::home_server_form_item($dom,'chome', 'default','hide'); @@ -2676,82 +2377,12 @@ ENDJS &Apache::lonhtmlcommon::row_title(&mt('Home Server for Course')); } $output .= $home_server_pick. - &Apache::lonhtmlcommon::row_closure(); - if ($showclone && $dom !~ /^\w+citest$/) { - $output .= &Apache::lonhtmlcommon::row_headline(). - '

'.&Apache::loncommon::help_open_topic('Course_Request_Clone').' '.$clonetitle. - ''. - '

'. - &Apache::lonhtmlcommon::row_closure(1). - &Apache::lonhtmlcommon::row_headline(). - ''; - } - if ($dom =~ /^\w+citest$/) { - my ($instcode,@codetitles,%cat_titles,%cat_order,@code_order); - my $invalidcrosslist = []; - $output .= &print_enrollment_menu($formname,$state,$instcode,$dom, - \@codetitles,\%cat_titles,\%cat_order, - \@code_order,$invalidcrosslist); - } - $output .= &Apache::lonhtmlcommon::end_pick_box()."\n"; - return $output; -} - -sub concepttest_form { - my ($showclone,$dom) = @_; - my $output = &Apache::lonhtmlcommon::row_title(&mt('Questions included in Concept Test')). - '
'. - ''; - if ($showclone) { - $output .= '
'.&select_oldtest().(' ' x2). - ''. - ''; - } - return $output; -} - -sub select_oldtest { - my $output = ''; + &Apache::lonhtmlcommon::row_closure(). + &Apache::lonhtmlcommon::row_headline(). + '

'.&Apache::loncommon::help_open_topic('Course_Request_Clone').' '.$clonetitle.'

'. + &Apache::lonhtmlcommon::row_closure(1). + &clone_form($dom,$formname,$crstype). + &Apache::lonhtmlcommon::end_pick_box().'
'."\n"; return $output; } @@ -2788,9 +2419,8 @@ sub clone_text { 'dmn' => 'Domain', 'dsh' => 'Date Shift', 'ncd' => 'Do not clone date parameters', - 'prd' => 'Copy date parameters as-is', + 'prd' => 'Clone date parameters as-is', 'shd' => 'Shift date parameters by number of days', - 'ros' => 'Copy Roster', ); } @@ -2977,7 +2607,7 @@ sub display_navbuttons { } sub print_request_outcome { - my ($r,$dom,$codetitles,$code_order,$formname) = @_; + my ($dom,$codetitles,$code_order) = @_; my ($output,$cnum,$now,$req_notifylist,$crstype,$enrollstart,$enrollend, %sections,%crosslistings,%personnel,@baduname,@missingdom,%domconfig,); my $sectotal = $env{'form.sectotal'}; @@ -3014,10 +2644,6 @@ 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'} = ''; - } } } } @@ -3099,7 +2725,7 @@ sub print_request_outcome { push(@baduname,$uname.':'.$udom); } } - my ($accessstart,$accessend) = &dates_from_form('accessstart','accessend',$env{'form.timezone'}); + my ($accessstart,$accessend) = &dates_from_form('accessstart','accessend'); my $autodrops = 0; if ($env{'form.autodrops'}) { $autodrops = $env{'form.autodrops'}; @@ -3117,16 +2743,11 @@ sub print_request_outcome { } my $clonecrs = ''; my $clonedom = ''; - if ((($env{'form.cloning'}) || - (($dom =~ /^\w+citest$/) && ($env{'form.concepttest'} eq 'cloning'))) && - ($env{'form.clonecrs'} =~ /^($match_courseid)$/) && + if (($env{'form.clonecrs'} =~ /^($match_courseid)$/) && ($env{'form.clonedom'} =~ /^($match_domain)$/)) { - if ($dom =~ /^\w+citest$/) { - $env{'form.clonedom'} = $dom; - } my $clonehome = &Apache::lonnet::homeserver($env{'form.clonecrs'}, $env{'form.clonedom'}); - if ($clonehome ne 'no_host') { + if ($clonehome ne 'no_host') { my $canclone = &Apache::loncoursequeueadmin::can_clone_course($env{'user.name'}, $env{'user.domain'},$env{'form.clonecrs'},$env{'form.clonedom'}, @@ -3162,27 +2783,7 @@ sub print_request_outcome { accessend => $accessend, personnel => \%personnel, }; - if ($dom =~ /^\w+citest$/) { - my $template = &get_template($dom); - if ($env{'form.concepttest'} eq 'editmyown') { - $details->{'firstres'} = 'nav'; - } else { - $details->{'firstres'} = 'blank'; - } - if ($env{'form.concepttest'} eq 'cloning') { - if (($clonecrs) && ($clonedom =~ /^\w+citest$/)) { - $details->{'cloneroster'} = $env{'form.cloneroster'}; - } elsif ($template) { - $details->{'clonedom'} = $dom; - $details->{'clonecrs'} = $template; - } - } else { - $details->{'clonedom'} = $dom, - $details->{'clonecrs'} = $template, - } - $details->{'datemode'} = 'delete'; - } - my (@inststatuses,$storeresult,$creationresult,$donedisplay); + my (@inststatuses,$storeresult,$creationresult); my $val = &get_processtype($dom,$crstype,\@inststatuses,\%domconfig); if ($val eq '') { if ($crstype eq 'official') { @@ -3274,78 +2875,7 @@ sub print_request_outcome { } else { $output = '

'.&mt('Your course request has been processed and the course has been created.'); } - if ($dom =~ /^\w+citest$/) { - my $caller = 'requestcrs'; - my $timezone; - if (&Apache::lonlocal::gettimezone($env{'form.timezone'}) ne 'local') { - $timezone = $env{'form.timezone'}; - } else { - $timezone = Apache::lonlocal::gettimezone(); - } - &acquire_cc_role($dom,$cnum,'cc./'.$dom.'/'.$cnum); - my %parmresult = - &store_crsparms($dom,$cnum,$now,$accessstart,$accessend); - &Apache::londocsgci::setdefaults($dom); - my %crsenvhash = ( - suppress_tries => 'yes', - timezone => $timezone, - ); - my $putresult = &Apache::lonnet::put('environment',\%crsenvhash,$dom,$cnum); - if ($env{'form.concepttest'} eq 'cloning') { - &Apache::lonuserstate::readmap($dom.'/'.$cnum); - if (($clonecrs) && ($clonedom =~ /^\w+citest$/)) { - my $cloneid = $clonedom.'/'.$clonecrs; - my %clonedesc = &Apache::lonnet::coursedescription($cloneid,{'one_time' => 1}); - my $oldcdesc = $clonedesc{'description'}; - $output .= '
'.&mt('A concept test has been copied from your existing test: [_1].',''.$oldcdesc.'').'

'; - if ($env{'form.cloneroster'}) { - $output .= '
'.&mt('You requested copying of the old student roster to the new course.'); - if ($logmsg =~ /\Q\0\E/) { - my @logging = split("\0",$logmsg); - if (@logging) { - $output .= '

'.$logging[-1].'

'; - } - } - $output .= '
    '. - '
  • '.&mt('Access starts:').' '. - &Apache::lonlocal::locallocaltime($accessstart,$timezone).'
  • '. - '
  • '.&mt('Access ends:').' '.&Apache::lonlocal::locallocaltime($accessend,$timezone).'
  • '. - '

'; - $r->print($output); - $output = ''; - $donedisplay = 1; - } else { - &roster_upload_form($r,$output,$formname); - $output = ''; - } - } else { - $output .= '

'; - &roster_upload_form($r,$output,$formname); - $output = ''; - } - } elsif ($env{'form.concepttest'} eq 'defchosen') { - $output .= '
'; - my $error = &Apache::londocsgci::store($caller,$dom,$cnum); - if ($error) { - $output .= ''. - &mt('An error occurred saving an auto-generated concept test: [_1].',$error). - ''; - } else { - &Apache::lonuserstate::readmap($dom.'/'.$cnum); - $output .= &mt('A concept test has also been generated.'); - } - $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.').'

'; - $r->print($output); - &Apache::londocsgci::editor($r,'requestcrs',$dom,$cnum); - $output = ''; - } - } else { - $output .= '
'.$role_result.'

'; - } + $output .= '
'.$role_result.'

'; $creationresult = 'created'; } else { $output = ''; @@ -3437,9 +2967,6 @@ sub print_request_outcome { } } if ($creationresult ne '') { - if ($donedisplay) { - $r->print('
'.&done_display()); - } return ($creationresult,$output); } else { return ($storeresult,$output); @@ -3581,138 +3108,6 @@ sub update_requestors_roles { return $output; } -sub acquire_cc_role { - my ($cdom,$cnum,$trolecode,$csec) = @_; - my %coursegroups = &Apache::lonnet::get_active_groups( - $env{'user.domain'},$env{'user.name'},$cdom, $cnum); - my $cgrps = join(':',keys(%coursegroups)); - if ($env{'environment.recentroles'}) { - my %frozen_roles = - &Apache::lonhtmlcommon::get_recent_frozen('roles',$env{'environment.recentrolesn'}); - &Apache::lonhtmlcommon::store_recent('roles',$trolecode,' ', - $frozen_roles{$trolecode}); - } - - &Apache::lonnet::appenv({"request.course.id" => '', - "request.course.fn" => '', - "request.course.uri" => '', - "request.course.sec" => '', - "request.role" => 'cm', - "request.role.adv" => $env{'user.adv'}, - "request.role.domain" => $env{'user.domain'}}); - - &Apache::lonnet::log($env{'user.domain'}, - $env{'user.name'}, - $env{'user.home'}, - "Role ".$trolecode); - - &Apache::lonnet::appenv( - {'request.role' => $trolecode, - 'request.role.domain' => $cdom, - 'request.course.sec' => $csec, - 'request.course.groups' => $cgrps}); - my ($furl,$ferr) = &Apache::lonuserstate::readmap($cdom.'/'.$cnum); - my $tadv; - if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; } - &Apache::lonnet::appenv({'request.role.adv'=>$tadv}); - return; -} - -sub store_crsparms { - my ($cdom,$cnum,$now,$accessstart,$accessend) = @_; - my $topsymb = '___0___uploaded/'.$cdom.'/'.$cnum.'/default.sequence'; - my %crsparms = ( - buttonshide => { - value => 'yes', - type => 'string_yesno', - }, - opendate => { - value => $accessstart, - type => 'date_start', - }, - duedate => { - value => $accessend, - type => 'date_end', - }, - problemstatus => { - value => 'no', - type => 'string_problemstatus', - }, - maxtries => { - value => '1', - type => 'intpos', - }, - discussend => { - value => $now, - type => 'date_end', - }, - discusshide => { - value => 'yes', - type => 'string_yesno', - } - ); - my %parmresult; - foreach my $item (keys(%crsparms)) { - $parmresult{$item} = - &Apache::lonparmset::storeparm_by_symb($topsymb, - '0_'.$item,14,$crsparms{$item}{'value'}, - $crsparms{$item}{'type'},undef,$cdom); - } - return %parmresult; -} - -sub roster_upload_form { - 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 later with the [_1]"Enrollment/Activity"[_2] utility in the management toolbar.','','').'

'. - &mt('Upload roster file now?').' '. - '
'. - '
'. - ''. - '
'. - ''); -} - sub notification_information { my ($disposition,$req_notifylist,$cnum,$now) = @_; my %emails = &Apache::loncommon::getemails(); @@ -4040,25 +3435,5 @@ sub generate_date_items { return; } -sub show_cloneable { - my $showclone; - if (&Apache::loncommon::needs_gci_custom()) { - my %courses = &Apache::loncommon::existing_gcitest_courses('cc'); - my $numcourses = scalar(keys(%courses)); - return $numcourses; - } else { - return 1; - } -} - -sub get_template { - my ($cdom) = @_; - my %template = ( - gcitest => '8v226795a882b4bcagcil1', - slcitest => '8v226795a882b4bcagcil1', - ); - return $template{$cdom}; -} - 1;