--- loncom/interface/lonrequestcourse.pm 2010/11/08 21:44:55 1.41.2.8 +++ loncom/interface/lonrequestcourse.pm 2010/03/19 13:23:05 1.48 @@ -1,7 +1,7 @@ # The LearningOnline Network # Request a course # -# $Id: lonrequestcourse.pm,v 1.41.2.8 2010/11/08 21:44:55 raeburn Exp $ +# $Id: lonrequestcourse.pm,v 1.48 2010/03/19 13:23:05 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']); + &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 eq 'gcitest') { - $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'); } } @@ -187,15 +166,8 @@ sub generate_page { details => 'Request Details', cancel => 'Cancel Request', removal => 'Outcome', - chooseitems => 'Saved Test', - uploadroster => 'Upload Roster', - enrolling => 'Completed', - done => 'Completed', + display => 'Request Logs', ); - if ($dom eq 'gcitest') { - $trail{'crstype'} = 'Building a Test'; - $trail{'courseinfo'} = 'Test Information'; - } if (($env{'form.crstype'} eq 'official') && (&Apache::lonnet::auto_run('',$dom))) { $trail{'enrollment'} = 'Enrollment'; @@ -205,7 +177,6 @@ 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'; @@ -301,7 +272,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 +285,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 +300,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. @@ -359,15 +326,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 .= <<ENDJS; + +function backPage(formname,prevstate) { + formname.state.value = prevstate; + formname.submit(); +} + +function setPage(formname) { + formname.page.value = '1'; + return; +} + +ENDJS + &print_request_logs($r,$dom,$jscript,$loaditems,$crumb); + } } 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<courseForm.crstype.length; i++) { @@ -380,11 +363,11 @@ function setType(courseForm) { } function setAction(courseForm) { - for (var i=0; i<courseForm.reqaction.length; i++) { - if (courseForm.reqaction.options[i].value == "$action") { - courseForm.reqaction.options[i].selected = true; + for (var i=0; i<courseForm.action.length; i++) { + if (courseForm.action.options[i].value == "$env{'form.action'}") { + courseForm.action.options[i].selected = true; } else { - courseForm.reqaction.options[i].selected = false; + courseForm.action.options[i].selected = false; } } } @@ -394,7 +377,7 @@ END sub cloning_javascript { return <<"END"; function setCloneDisplay(courseForm) { - if (courseForm.cloning.length > 1) { + if (courseForm.cloning.length > 1) { for (var i=0; i<courseForm.cloning.length; i++) { if (courseForm.cloning[i].checked) { if (courseForm.cloning[i].value == 1) { @@ -411,14 +394,6 @@ sub get_breadcrumbs { my ($dom,$action,$state,$states,$trail) = @_; my ($crumb,$newinstcode,$codechk,$checkedcode,$numtitles,$description); my $page = 0; - my $firstcrumb = 'Pick Action'; - my $crumbtitle = 'Course/Community Requests'; - my $crumbhelp = 'Course_Requests'; - if ($dom eq 'gcitest') { - $firstcrumb = 'Building a Test'; - $crumbtitle = 'Create Concept Test'; - $crumbhelp = 'Concept_Test_Creation'; - } if ((ref($states) eq 'HASH') && (ref($trail) eq 'HASH') && (ref($state))) { if (defined($action)) { my $done = 0; @@ -456,24 +431,11 @@ sub get_breadcrumbs { } } } - my %forms = ( - chooseitems => '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 +445,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 +476,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 +498,7 @@ sub form_elements { }, courseinfo => { cdescr => 'text', - cloning => 'radio', + cloning => 'radio', clonecrs => 'text', clonedom => 'selectbox', datemode => 'radio', @@ -595,27 +534,12 @@ sub form_elements { }, ); my %servers = &Apache::lonnet::get_servers($dom,'library'); - if ($dom eq 'gcitest') { - %{$elements{'new'}{'courseinfo'}} = ( - cdescr => 'text', - concepttest => 'radio', - ); - 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 eq 'gcitest') { - 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); @@ -712,6 +636,9 @@ sub onload_action { } else { $loaditems{'onload'} = 'javascript:setFormElements(document.requestcrs);'; } + if ($state eq 'courseinfo') { + $loaditems{'onload'} .= 'javascript:setCloneDisplay(document.requestcrs);'; + } } return \%loaditems; } @@ -737,13 +664,11 @@ sub print_main_menu { } } - my $js; - unless ($dom eq 'gcitest') { - $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'; @@ -751,7 +676,7 @@ function nextPage(formname) { $nextstate_setter } formname.crstype.value = crschoice; - formname.reqaction.value = actionchoice; + formname.action.value = actionchoice; formname.state.value= nextstate; formname.submit(); } @@ -763,20 +688,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 .= <<END; + } + 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 .= <<END; if (crschoice == 'official') { if (official != 1) { alert("$lt{'official'}"); @@ -784,9 +709,9 @@ END } } else { if (crschoice == 'unofficial') { - if (unofficial != 1) { - alert("$lt{'unofficial'}"); - return false; + if (unofficial != 1) { + alert("$lt{'unofficial'}"); + return false; } } else { if (crschoice == 'community') { @@ -798,14 +723,13 @@ END if (actionchoice == 'new') { alert("$lt{'all'}"); return false; - } + } } } } return true; } END - } my ($pagetitle,$pageinfo,$domaintitle); if (ref($can_request) eq 'HASH') { if (($can_request->{'official'}) || ($can_request->{'unofficial'})) { @@ -828,41 +752,6 @@ END $domaintitle = &mt('Course/Community Domain'); } } - - if ($dom eq 'gcitest') { - my $formname = 'requestcrs'; - my $nexttext = &mt('Continue'); - $r->print(&header($pagetitle,$js.$jscript,$loaditems).$crumb. - '<p>'.&mt('Deployment of a Concept Test requires completion of the following three steps:').'<ol>'. - '<li>'.&mt('Creation of a course "container" and setting of access dates').'</li>'. - '<li>'.&mt('Assembly of a valid test from Concept Inventory questions').'</li>'. - '<li>'.&mt('Enrollment of students').'</li>'. - '</ol></p><p>'.&mt('When assembling a test you may:'). - '<br />'.&mt('(a) have a valid test built automatically by the WebCenter, or').'<br />'.&mt('(b) select the questions to include by combining questions chosen from eleven bins with four mandatory questions, or'). - '<br />'.&mt('(c) copy one of your existing tests (including optional copying of the student roster)').'</p><p>'.&mt('The most efficient way to enroll students is to upload a text file containing usernames and passwords.').'<br />'.&mt("Students' e-mail addresses must be used as their usernames to ensure uniqueness.").'</p><div>'. - '<form name="'.$formname.'" method="post" action="/adm/requestcourse">'."\n". - '<input type="hidden" name="state" value="courseinfo" />'."\n". - '<input type="hidden" name="showdom" value="'.$dom.'" />'."\n". - '<input type="hidden" name="crstype" value="unofficial" />'."\n". - '<input type="hidden" name="reqaction" value="new" />'."\n". - '<input type="button" name="next" value="'.$nexttext. - '" onclick="this.form.submit();" />'."\n". - '</form></div>'. - &Apache::loncommon::end_page()); - return; - } - - if (!$onchange) { - $r->print(' <input type="submit" name="godom" value="'. - &mt('Change').'" />'); - } - unless ((ref($can_request) eq 'HASH') && (keys(%{$can_request}) > 0)) { - $r->print(&Apache::lonhtmlcommon::row_closure(1)."\n". - &Apache::lonhtmlcommon::end_pick_box().'</div>'."\n". - &Apache::loncommon::end_page()); - return; - } - my @incdoms; if (ref($request_domains) eq 'HASH') { foreach my $item (keys(%{$request_domains})) { @@ -897,12 +786,12 @@ END my $nexttext = &mt('Next'); $r->print(&Apache::lonhtmlcommon::row_title(&mt('Action')).' <form name="mainmenu_action" method="post" action=""> -<select size="1" name="reqaction" > +<select size="1" name="action" > <option value="new">'.&mt('New request').'</option> <option value="view">'.&mt('View/Modify/Cancel pending requests').'</option> <option value="log">'.&mt('View request history').'</option> </select></form>'. - &Apache::lonhtmlcommon::row_closure(1). + &Apache::lonhtmlcommon::row_closure(). &Apache::lonhtmlcommon::row_title(&mt('Type')).' <form name="mainmenu_coursetype" method="post" action=""> <select size="1" name="crstype">'); @@ -935,7 +824,7 @@ END '<input type="hidden" name="state" value="crstype" />'."\n". '<input type="hidden" name="showdom" value="'.$dom.'" />'."\n". '<input type="hidden" name="crstype" value="" />'."\n". - '<input type="hidden" name="reqaction" value="" />'."\n". + '<input type="hidden" name="action" value="" />'."\n". '<input type="button" name="next" value="'.$nexttext. '" onclick="javascript:nextPage(document.'.$formname.')" />'."\n". '</form></div>'); @@ -961,13 +850,8 @@ END if (($action eq 'new') || ($action eq 'view')) { $js .= <<END; -function backPage(formname,prevstate,currstate) { +function backPage(formname,prevstate) { formname.state.value = prevstate; - if (currstate == "enrolling") { - if (prevstate == "chooseitems" || prevstate == "uploadroster") { - formname.action = "/adm/createuser"; - } - } formname.submit(); } @@ -984,20 +868,14 @@ END } } elsif ($state eq 'personnel') { $js .= "\n".§ion_check_javascript()."\n".&personnel_lcsec_js(); - } elsif (($state eq 'process') && ($env{'form.concepttest'} eq 'editmyown')) { - $js .= "\n".&Apache::londocsgci::builder_javascript()."\n"; } my $title; if ($env{'form.crstype'} eq 'community') { $title = 'Request a community'; - } elsif (&Apache::loncommon::needs_gci_custom()) { - $title = 'Create a new Concept Test'; } else { $title = 'Request a course'; } $r->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') { @@ -1034,7 +912,7 @@ END $title = &mt('Pending course/community requests'); } $r->print('<h3>'.$title.'</h3><div>'."\n".$form."\n". - &print_request_status($dom,$action,$state).'</form></div>'); + &print_request_status($dom,$action).'</form></div>'); } elsif ($state eq 'details') { my (@codetitles,%cat_titles,%cat_order,@code_order,$instcode,$code_chk); my $origcnum = $env{'form.cnum'}; @@ -1120,7 +998,7 @@ END } $r->print('<h3>'.&mt('Request Cancellation').'</h3><div>'."\n".$form."\n". '<input type="hidden" name="state" value="'.$state.'" />'."\n". - '<input type="hidden" name="reqaction" value="'.$action.'" />'."\n". + '<input type="hidden" name="action" value="'.$action.'" />'."\n". '<input type="hidden" name="showdom" value="'.$dom.'" />'."\n". '<input type="hidden" name="orignum" value="'.$cnum.'" />'."\n"); if ($result eq 'ok') { @@ -1156,8 +1034,6 @@ END &print_review($dom,\@codetitles,\%cat_titles,\%cat_order, \@code_order,$uname,$udom)."\n".'</div>'. &close_popup_form()); - } elsif ($action eq 'log') { - $r->print(&coursereq_log('View request log',$jscript,$loaditems).$crumb); } $r->print(&Apache::loncommon::end_page()); return; @@ -1403,29 +1279,29 @@ sub print_request_form { &Apache::lonhtmlcommon::end_pick_box().'</div>'); } 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; @@ -1504,7 +1380,11 @@ sub print_request_form { if ($env{'form.origcnum'} =~ /^($match_courseid)$/) { $cnum = $env{'form.origcnum'}; } else { - $cnum = &Apache::lonnet::generate_coursenum($dom); + my $gentype = 'Course'; + if ($crstype eq 'community') { + $gentype = 'Community'; + } + $cnum = &Apache::lonnet::generate_coursenum($dom,$gentype); } &Apache::lonnet::auto_possible_instcodes($dom,\@codetitles,\%cat_titles, \%cat_order,\@code_order); @@ -1520,13 +1400,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('<p>'); @@ -1534,13 +1414,9 @@ sub print_request_form { $r->print('<a href="/adm/requestcourse?action=view&state=details&showdom='.$dom.'&cnum='. $env{'form.cnum'}.'">'. &mt('Modify this request').'</a>'.(' 'x4)); } - unless ($env{'form.concepttest'}) { - $r->print('<a href="/adm/requestcourse">'.&mt('Make another request').'</a></p>'); - } + $r->print('<a href="/adm/requestcourse">'.&mt('Make another request').'</a></p>'); return; } - } elsif ($state eq 'uploadroster') { - &roster_upload_form($r,$output,$formname); } my @excluded = &get_excluded_elements($dom,$states,$action,$state); if ($state eq 'personnel') { @@ -1575,39 +1451,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('</form>'); + $r->print(&Apache::lonhtmlcommon::echo_form_input(\@excluded).'</form>'); + &display_navbuttons($r,$dom,$formname,$prev,$navtxt{'prev'},$next, + $navtxt{'next'},$state); return; } -sub done_display { - return '<h3>'.&mt('Concept Test creation is complete').'</h3>'. - '<p>'.&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]', - '<a href="/adm/menu">','</a>','<a href="/adm/navmaps">','</a>','<br />'). - '<dl class="LC_GCI_Menu">'. - '<dt>'.&mt('Concept Test Contents').'</dt>'. - '<dd style="background-image:url(\'/res/adm/pages/nav.png\');">'.&mt('Display the Table of Contents for your Concept Test.').'</dd>'. - '<dt>'.&mt('Assemble Concept Test').'</dt>'. - '<dd style="background-image:url(\'/res/adm/pages/docs.png\');">'.&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.').'</dd></dl>'. - '<dl class="LC_GCI_Menu">'. - '<dt>'.&mt('Enrollment and Student Activity').'</dt>'. - '<dd style="background-image:url(\'/res/adm/pages/cprv.png\');">'.&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.').'</dd>'. - '<dt>'.&mt("What's New?").'</dt>'. - '<dd style="background-image:url(\'/res/adm/pages/new.png\');">'.&mt('View information about changes in your Concept Test course.').'</dd></dl>'. - '<dl class="LC_GCI_Menu">'. - '<dt>'.&mt('Prepare Printable Concept Test').'</dt>'. - '<dd style="background-image:url(\'/res/adm/pages/prnt.png\');">'.&mt('Create a PDF which you can send to a printer to create a hardcopy of the Concept Test.').'</dd>'. - '<dt>'.&mt('Concept Test Statistics').'</dt>'. - '<dd style="background-image:url(\'/res/adm/pages/chrt.png\');">'.&mt('After the closing date of the Concept Test you can view and download statistics for the test, as well as anonymized submission data.').'</dd>'. - '</dl></p>'; -} - sub get_cancreate_status { my ($persondom,$personname,$dom) = @_; my ($rules,$ruleorder) = @@ -1672,25 +1521,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', @@ -1727,7 +1567,7 @@ sub print_enrollment_menu { &Apache::lonhtmlcommon::row_title(&mt('Add another')). '<input name="crosslisttotal" type="hidden" value="'.$crosslisttotal.'" />'. '<input name="addcrosslist" type="checkbox" value="'.$crosslisttotal.'"'. - ' onclick="javascript:nextPage(document.'.$formname.",'".$state. + ' onclick="javascript:nextPage(document.'.$formname.",'".$env{'form.state'}. "'".');" />'.&mt('Add?').&Apache::lonhtmlcommon::row_closure(); $sections .= &Apache::lonhtmlcommon::row_headline. '<h3>'.&mt('Crosslisted courses for auto-enrollment').'</h3>'. @@ -1738,16 +1578,16 @@ sub print_enrollment_menu { $autoenroll = &Apache::lonhtmlcommon::row_title(&Apache::loncommon::help_open_topic('Course_Request_Autoadd').' '.&mt('Add registered students automatically')). '<span class="LC_nobreak"><label>'. - '<input type="radio" name="autoadds" value="1" />'. + '<input type="radio" name="autoadds" value="1">'. &mt('Yes').'</label>'.(' 'x3).'<label>'. - '<input type="radio" name="autoadds" value="0" checked="checked" />'. + '<input type="radio" name="autoadds" value="0" checked="checked">'. &mt('No').'</label></span>'. &Apache::lonhtmlcommon::row_closure(1). &Apache::lonhtmlcommon::row_title(&Apache::loncommon::help_open_topic('Course_Request_Autodrop').' '.&mt('Drop unregistered students automatically')). '<span class="LC_nobreak"><label>'. - '<input type="radio" name="autodrops" value="1" />'. + '<input type="radio" name="autodrops" value="1">'. &mt('Yes').'</label>'.(' 'x3).'<label>'. - '<input type="radio" name="autodrops" value="0" checked="checked" />'. + '<input type="radio" name="autodrops" value="0" checked="checked">'. &mt('No').'</label></span>'. &Apache::lonhtmlcommon::row_closure(1). &date_setting_table($starttime,$endtime,$formname,'enroll', @@ -1757,6 +1597,7 @@ sub print_enrollment_menu { my $access_dates = &date_setting_table($starttime,$endtime,$formname,'access',$hasauto, %accesstitles); + $output .= &Apache::lonhtmlcommon::start_pick_box(); if ($sections) { $output .= $sections; } @@ -1774,14 +1615,10 @@ sub print_enrollment_menu { $output .= &Apache::lonhtmlcommon::row_headline('Access'). '<h3>'.$header.'</h3>'. &Apache::lonhtmlcommon::row_closure(1). - $access_dates; - } - if ($dom eq 'gcitest') { - return $output; - } else { - return '<div>'.&Apache::lonhtmlcommon::start_pick_box().$output. - &Apache::lonhtmlcommon::end_pick_box().'</div>'; + $access_dates } + return '<div>'.&Apache::lonhtmlcommon::start_pick_box().$output. + &Apache::lonhtmlcommon::end_pick_box().'</div>'; } sub show_invalid_crosslists { @@ -1845,21 +1682,15 @@ 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,'','','',$no_hh_mm_ss,'','','',1); + $starttime,'','','',1,'','','',1); my $endform = &Apache::lonhtmlcommon::date_setter($formname,$prefix.'end', - $endtime,'','','',$no_hh_mm_ss,'','','',1); + $endtime,'','','',1,'','','',1); my $closure = ''; if ($prefix eq 'access') { - unless (&Apache::loncommon::needs_gci_custom()) { - $perpetual = ' <span class="LC_nobreak"><label>'. - '<input type="checkbox" name="no_end_date" />'. - &mt('No end date').'</label></span>'; - } + $perpetual = ' <span class="LC_nobreak"><label>'. + '<input type="checkbox" name="no_end_date" />'. + &mt('No end date').'</label></span>'; $closure = '1'; } @@ -1879,16 +1710,16 @@ sub date_setting_table { } $table = &Apache::lonhtmlcommon::row_title(&Apache::loncommon::help_open_topic($help_item{$prefix}{'start'}). - ' '.$datetitles{'start'}).$startform. + ' '.&mt($datetitles{'start'})).$startform. &Apache::lonhtmlcommon::row_closure(1). &Apache::lonhtmlcommon::row_title(&Apache::loncommon::help_open_topic($help_item{$prefix}{'end'}). - ' '.$datetitles{'end'}).$endform.$perpetual. + ' '.&mt($datetitles{'end'})).$endform.$perpetual. &Apache::lonhtmlcommon::row_closure($closure); return $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)) { @@ -2001,7 +1832,7 @@ sub print_personnel_menu { $output .= &Apache::lonhtmlcommon::row_title(&mt('Add another')). '<input name="persontotal" type="hidden" value="'.$persontotal.'" />'. '<input name="addperson" type="checkbox" value="'.$persontotal.'"'. - ' onclick="javascript:nextPage(document.'.$formname.",'".$state. + ' onclick="javascript:nextPage(document.'.$formname.",'".$env{'form.state'}. "'".');" />'.&mt('Add?').&Apache::lonhtmlcommon::row_closure(1). &Apache::lonhtmlcommon::end_pick_box().'</div>'; if ($crstype eq 'community') { @@ -2029,53 +1860,82 @@ sub current_lc_sections { return @currsecs; } -sub print_request_status { - my ($dom,$action,$state) = @_; +sub sorted_request_history { + my ($dom,$action,$after,$before) = @_; my %statusinfo = &Apache::lonnet::dump('courserequests',$env{'user.domain'}, $env{'user.name'},'^status:'.$dom); - my ($output,$formname,%queue_by_date); + my %queue_by_date; my ($types,$typenames) = &Apache::loncommon::course_types(); foreach my $key (keys(%statusinfo)) { - if (($statusinfo{$key} eq 'approval') || ($statusinfo{$key} eq 'pending')) { - (undef,my($cdom,$cnum)) = split(':',$key); - next if ($cdom ne $dom); - my $requestkey = $cdom.'_'.$cnum; - if ($requestkey =~ /^($match_domain)_($match_courseid)$/) { - my %history = &Apache::lonnet::restore($requestkey,'courserequests', - $env{'user.domain'},$env{'user.name'}); - my $entry; - my $timestamp = $history{'reqtime'}; - my $crstype = $history{'crstype'}; - my $disposition = $history{'disposition'}; + if ($action eq 'view') { + next unless (($statusinfo{$key} eq 'approval') || ($statusinfo{$key} eq 'pending')); + } else { + next unless (($env{'form.status'} eq 'any') || + ($env{'form.status'} eq $statusinfo{$key})); + } + (undef,my($cdom,$cnum)) = split(':',$key); + next if ($cdom ne $dom); + my $requestkey = $cdom.'_'.$cnum; + if ($requestkey =~ /^($match_domain)_($match_courseid)$/) { + my %history = &Apache::lonnet::restore($requestkey,'courserequests', + $env{'user.domain'},$env{'user.name'}); + my $entry; + my $reqtime = $history{'reqtime'}; + my $lastupdate = $history{'timestamp'}; + my $crstype = $history{'crstype'}; + my $disposition = $history{'disposition'}; + my $status = $history{'status'}; + if ($action eq 'view') { next if ((exists($history{'status'})) && ($history{'status'} eq 'created')); - next unless (($env{'form.crstype'} eq 'any') || - ($env{'form.crstype'} eq $crstype)); + } else { + next if (($reqtime < $after) || ($reqtime > $before)); + } + next unless (($env{'form.crstype'} eq 'any') || + ($env{'form.crstype'} eq $crstype)); + if ($action eq 'view') { next unless (($disposition eq 'approval') || ($disposition eq 'pending')); - if (ref($history{'details'}) eq 'HASH') { - $entry = $requestkey.':'.$crstype.':'. - &escape($history{'details'}{'cdescr'}); - if ($crstype eq 'official') { - $entry .= ':'.&escape($history{'details'}{'instcode'}); + } + if (ref($history{'details'}) eq 'HASH') { + $entry = $requestkey.':'.$crstype.':'. + &escape($history{'details'}{'cdescr'}); + if ($action eq 'log') { + $entry .= ':'.$lastupdate.':'; + if ($statusinfo{$key} ne '') { + $entry .= $statusinfo{$key}; + } elsif ($status ne '') { + $entry .= $status; + } else { + $entry .= $disposition; } } - if ($entry ne '') { - if (exists($queue_by_date{$timestamp})) { - if (ref($queue_by_date{$timestamp}) eq 'ARRAY') { - push(@{$queue_by_date{$timestamp}},$entry); - } - } else { - @{$queue_by_date{$timestamp}} = ($entry); + if ($crstype eq 'official') { + $entry .= ':'.&escape($history{'details'}{'instcode'}); + } + } + if ($entry ne '') { + if (exists($queue_by_date{$reqtime})) { + if (ref($queue_by_date{$reqtime}) eq 'ARRAY') { + push(@{$queue_by_date{$reqtime}},$entry); } + } else { + @{$queue_by_date{$reqtime}} = ($entry); } } } } - $formname = 'requestcrs'; + return %queue_by_date; +} + +sub print_request_status { + my ($dom,$action) = @_; + my %queue_by_date = &sorted_request_history($dom,$action); my @sortedtimes = sort {$a <=> $b} (keys(%queue_by_date)); - $output = '<input type="hidden" name="reqaction" value="'.$action.'" />'."\n". + my $formname = 'requestcrs'; + my ($types,$typenames) = &Apache::loncommon::course_types(); + my $output = '<input type="hidden" name="action" value="'.$env{'form.action'}.'" />'."\n". - '<input type="hidden" name="state" value="'.$state.'" />'."\n". + '<input type="hidden" name="state" value="'.$env{'form.state'}.'" />'."\n". '<input type="hidden" name="crstype" value="'.$env{'form.crstype'}.'" />'."\n". '<input type="hidden" name="showdom" value="" />'."\n". '<input type="hidden" name="cnum" value="" />'."\n"; @@ -2222,7 +2082,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; } @@ -2253,10 +2113,293 @@ ENDJS } sub print_request_logs { - my ($jscript,$loaditems,$crumb) = @_; + my ($r,$dom,$jscript,$loaditems,$crumb) = @_; + my $title; + if ($env{'form.crstype'} eq 'community') { + $title = 'Community Request Logs'; + } elsif ($env{'form.crstype'} eq 'any') { + $title = 'Course/Community Request Logs'; + } else { + $title = 'Course Request Logs'; + } + $r->print(&header($title,$jscript,$loaditems).$crumb); + my $formname = 'requestcrs'; + $r->print('<form action="/adm/requestcourse" method="post" name="'.$formname.'" onsubmit="javascript:setPage(this);">'."\n". + '<input type="hidden" name="action" value="log" />'."\n". + '<input type="hidden" name="state" value="display" />'."\n"); + # set defaults + my $now = time(); + my $defstart = $now - (7*24*3600); #7 days ago + my %defaults = ( + page => '1', + show => '10', + crstype => 'any', + status => 'any', + requested_before_date => $now, + requested_after_date => $defstart, + ); + my ($types,$typenames) = &Apache::loncommon::course_types(); + my $more_records = 0; + my %curr; + foreach my $item ('show','page','crstype','status') { + $curr{$item} = $env{'form.'.$item}; + } + $curr{'requested_after_date'} = &Apache::lonhtmlcommon::get_date_from_form('requested_after_date'); + $curr{'requested_before_date'} = &Apache::lonhtmlcommon::get_date_from_form('requested_before_date'); + foreach my $key (keys(%defaults)) { + if ($curr{$key} eq '') { + $curr{$key} = $defaults{$key}; + } + } + my ($statuses,$statusnames) = &reqstatus_names($curr{'crstype'}); + $r->print('<input type="hidden" name="page" value="'.$curr{'page'}.'" />'. + &requestlog_display_filter($formname,\%curr)); + my %queue_by_date = &sorted_request_history($dom,$env{'form.action'}, + $curr{'requested_after_date'}, + $curr{'requested_before_date'}); + my @sortedtimes = sort {$a <=> $b} (keys(%queue_by_date)); + my $showntablehdr = 0; + my $tablehdr = &Apache::loncommon::start_data_table(). + &Apache::loncommon::start_data_table_header_row(). + '<th> </th><th>'.&mt('Request Date').'</th>'. + '<th>'.&mt('Description').'</th>'; + if ($curr{'crstype'} eq 'any') { + $tablehdr .= '<th>'.&mt('Course Type').'</th>'; + } + if (($curr{'crstype'} eq 'official') || ($curr{'crstype'} eq 'any')) { + $tablehdr .= '<th>'.&mt('Institutional Code').'</th>'; + } + if ($curr{'status'} eq 'any') { + $tablehdr .= '<th>'.&mt('Status').'</th>'; + } elsif ($curr{'status'} eq 'created') { + $tablehdr .= '<th>'.&mt('Creation Date').'</th>'; + } elsif ($curr{'status'} eq 'cancelled') { + $tablehdr .= '<th>'.&mt('Cancellation Date').'</th>'; + } elsif ($curr{'status'} eq 'rejected') { + $tablehdr .= '<th>'.&mt('Rejection Date').'</th>'; + } + $tablehdr .= &Apache::loncommon::end_data_table_header_row(); + my ($minshown,$maxshown); + $minshown = 1; + my $count = 0; + if ($curr{'show'} ne &mt('all')) { + $maxshown = $curr{'page'} * $curr{'show'}; + if ($curr{'page'} > 1) { + $minshown = 1 + ($curr{'page'} - 1) * $curr{'show'}; + } + } + my $norecords; + if (@sortedtimes > 0) { + foreach my $item (@sortedtimes) { + if ($curr{'show'} ne &mt('all')) { + if ($count >= $curr{'page'} * $curr{'show'}) { + $more_records = 1; + last; + } + } + $count ++; + next if ($count < $minshown); + if (!$showntablehdr) { + $r->print($tablehdr); + $showntablehdr = 1; + } + my $showtime = &Apache::lonlocal::locallocaltime($item); + if (ref($queue_by_date{$item}) eq 'ARRAY') { + foreach my $request (sort(@{$queue_by_date{$item}})) { + my ($key,$crstype,$desc,$timestamp,$status,$instcode) = split(':',$request); + my ($cdom,$cnum) = split('_',$key); + my $output = &Apache::loncommon::start_data_table_row(). + '<td>'.$count.'</td>'. + '<td>'.$showtime.'</td>'. + '<td>'.&unescape($desc).'</td>'; + if ($curr{'crstype'} eq 'any') { + my $typename; + if (ref($typenames) eq 'HASH') { + $typename = &mt($typenames->{$crstype}); + } + if ($typename eq '') { + $typename = &mt('Unknown type'); + } + $output .= '<td>'.$typename.'</td>'; + } + if (($curr{'crstype'} eq 'any') || + ($curr{'crstype'} eq 'official')) { + my $showinstcode; + if ($crstype eq 'official') { + $showinstcode = &unescape($instcode); + } else { + $showinstcode = &mt('Not applicable'); + } + $output .= '<td>'.$showinstcode.'</td>'; + } + if ($curr{'status'} eq 'any') { + my $statusname = &mt('Unknown status'); + if (ref($statusnames) eq 'HASH') { + if ($statusnames->{$status} ne '') { + $statusname = $statusnames->{$status}; + } + } + if (($status eq 'created') || ($status eq 'cancelled') || + ($status eq 'rejected')) { + $statusname .= ' '.&Apache::lonlocal::locallocaltime($timestamp); + } + $output .= '<td>'.$statusname.'</td>'; + } elsif (($status eq 'created') || ($status eq 'cancelled') || + ($status eq 'rejected')) { + $output .= '<td>'.&Apache::lonlocal::locallocaltime($timestamp).'</td>'; + } + $output .= &Apache::loncommon::end_data_table_row(); + $r->print($output); + } + } + } + if ($showntablehdr) { + $r->print(&Apache::loncommon::end_data_table()); + if (($curr{'page'} > 1) || ($more_records)) { + $r->print('<table><tr>'); + if ($curr{'page'} > 1) { + $r->print('<td><a href="javascript:chgPage('."'previous'".');">'.&mt('Previous [_1] changes',$curr{'show'}).'</a></td>'); + } + if ($more_records) { + $r->print('<td><a href="javascript:chgPage('."'next'".');">'.&mt('Next [_1] changes',$curr{'show'}).'</a></td>'); + } + $r->print('</tr></table>'); + $r->print(<<"ENDSCRIPT"); +<script type="text/javascript"> +// <![CDATA[ +function chgPage(caller) { + if (caller == 'previous') { + document.$formname.page.value --; + } + if (caller == 'next') { + document.$formname.page.value ++; + } + document.$formname.submit(); + return; +} +// ]]> +</script> +ENDSCRIPT + } + } else { + $norecords = 1; + } + } else { + $norecords = 1; + } + if ($norecords) { + $r->print('<p class="LC_info">'. + &mt('There are no records to display'). + '</p>'); + } + $r->print('</form>'. + &Apache::loncommon::end_page()); return; } +sub reqstatus_names { + my ($crstype) = @_; + my @statuses = qw(created approval pending rejected cancelled); + my %statusnames = + &Apache::lonlocal::texthash ( + created => 'Course/Community created', + approval => 'Queued pending approval', + pending => 'Queued pending validation', + rejected => 'Request rejected', + cancelled => 'Request cancelled', + ); + if (($crstype eq 'official') || ($crstype eq 'unofficial')) { + $statusnames{'created'} = &mt('Course created'); + } elsif ($crstype eq 'community') { + $statusnames{'created'} = &mt('Community created'); + } + return (\@statuses,\%statusnames); +} + +sub requestlog_display_filter { + my ($formname,$curr) = @_; + my $nolink = 1; + my $output = '<table><tr><td valign="top">'. + '<span class="LC_nobreak"><b>'.&mt('Records/page:').'</b></span><br />'. + &Apache::lonmeta::selectbox('show',$curr->{'show'},undef, + (&mt('all'),5,10,20,50,100,1000,10000)). + '</td><td> </td>'; + my $startform = + &Apache::lonhtmlcommon::date_setter($formname,'requested_after_date', + $curr->{'requested_after_date'},undef, + undef,undef,undef,undef,undef,undef,$nolink); + my $endform = + &Apache::lonhtmlcommon::date_setter($formname,'requested_before_date', + $curr->{'requested_before_date'},undef, + undef,undef,undef,undef,undef,undef,$nolink); + $output .= '<td valign="top"><b>'.&mt('Window during which course/community was requested:').'</b><br />'. + '<table><tr><td>'.&mt('After:'). + '</td><td>'.$startform.'</td></tr>'. + '<tr><td>'.&mt('Before:').'</td>'. + '<td>'.$endform.'</td></tr></table>'. + '</td>'. + '<td> </td>'; + my ($types,$typenames) = &Apache::loncommon::course_types(); + if (ref($types) eq 'ARRAY') { + if (@{$types} > 1) { + $output .= '<td valign="top"><b>'. + &mt('Course Type:').'</b><br /><select name="crstype">'; + my $selstr = ''; + if ($curr->{'crstype'} eq 'any') { + $selstr = ' selected="selected"'; + } + $output .= '<option value="any"'.$selstr.'>'.&mt('All types').'</option>'."\n"; + foreach my $crstype (@{$types}) { + my $selstr = ''; + if ($curr->{'crstype'} eq $crstype) { + $selstr = ' selected="selected"'; + } + my $typename = $crstype; + if (ref($typenames) eq 'HASH') { + if ($typenames->{$crstype} ne '') { + $typename = $typenames->{$crstype}; + } + } + $output .= '<option value="'.$crstype.'"'.$selstr.'>'.$typename.'</option>'."\n"; + } + $output .= '</select></td>'; + } + } + my ($statuses,$statusnames) = &reqstatus_names($curr->{'crstype'}); + if (ref($statuses) eq 'ARRAY') { + if (@{$statuses} > 1) { + $output .= '<td valign="top"><b>'. + &mt('Request Status:').'</b><br /><select name="status">'; + my $selstr = ''; + if ($curr->{'status'} eq 'any') { + $selstr = ' selected="selected"'; + } + $output .= '<option value="any"'.$selstr.'>'.&mt('Any status').'</option>'."\n"; + foreach my $status (@{$statuses}) { + my $selstr = ''; + if ($curr->{'status'} eq $status) { + $selstr = ' selected="selected"'; + } + my $statusname = $status; + if (ref($statusnames) eq 'HASH') { + if ($statusnames->{$status} ne '') { + $statusname = $statusnames->{$status}; + } + } + $output .= '<option value="'.$status.'"'.$selstr.'>'.$statusname.'</option>'."\n"; + } + $output .= '</select></td>'; + } + } + $output .= '</tr></table>'; + + # Update Display button + $output .= '<p>'. + '<input type="submit" value="'.&mt('Update Display').'" />'. + '</p><hr />'; + return $output; +} + sub print_review { my ($dom,$codetitles,$cat_titles,$cat_order,$code_order,$uname,$udom, $disallowed,$disallowmsg) = @_; @@ -2379,71 +2522,42 @@ sub print_review { } my %ctxt = &clone_text(); - if ($dom eq 'gcitest') { - $inst_headers .= '<th>'.&mt('Test Questions').'</th>'; - 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 .= '<td>'.$concepttest.(' 'x2).'</td>'; - } - if (&show_cloneable()) { - $inst_headers .= '<th>'.&mt('Copy From').'</th>'; - if ((($env{'form.cloning'}) || - (($dom eq 'gcitest') && ($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 .= '<th>'.&mt('Clone From').'</th>'; + if (($env{'form.cloning'}) && + ($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 eq 'gcitest') { - $inst_headers .= '<th>'.$ctxt{'ros'}.'</th>'; - } else { - $inst_headers .= '<th>'.$ctxt{'dsh'}.'</th>'; - } - $inst_values .= '<td>'.$courseenv{'description'}.' '; - my $cloneinst = $courseenv{'internal.coursecode'}; - if ($cloneinst ne '') { - $inst_values .= $cloneinst.' '.&mt('in').' '.$env{'form.clonedom'}; - } else { - unless ($dom eq 'gcitest') { - $inst_values .= &mt('from').' '.$env{'form.clonedom'}; - } - } - $inst_values .= (' 'x2).'</td><td>'; - if ($dom eq 'gcitest') { - 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 .= '</td>'; - } else { - $inst_values .= '<td>'.&mt('Unknown').'</td>'; - } + if (keys(%courseenv) > 0) { + $inst_headers .= '<th>'.$ctxt{'dsh'}.'</th>'; + $inst_values .= '<td>'.$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 .= '</td><td>'; + 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 .= '</td>'; } else { - $inst_values .= '<td>'.&mt('Not permitted'),'</td>'; + $inst_values .= '<td>'.&mt('Unknown').'</td>'; } - } else { - $inst_values .= '<td>'.&mt('None').'</td>'; - } + } else { + $inst_values .= '<td>'.&mt('Not permitted'),'</td>'; + } + } else { + $inst_values .= '<td>'.&mt('None').'</td>'; } $enroll_headers .= '<th>'.&mt('Access Starts').'</th>'. '<th>'.&mt('Access Ends').'</th>'; @@ -2575,7 +2689,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.' @@ -2615,32 +2729,17 @@ function toggleCloning() { ENDJS my $title = &mt('Brief Course Description'); - my $desctitle = &mt('Description'); - if ($dom eq 'gcitest') { - $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(). '<h3>'.&Apache::loncommon::help_open_topic('Course_Request_Description').' '.$title.'</h3>'. &Apache::lonhtmlcommon::row_closure(1). - &Apache::lonhtmlcommon::row_title($desctitle). + &Apache::lonhtmlcommon::row_title(&mt('Description')). '<input type="text" size="60" name="cdescr" value="'.$description.'" />'; - my $showclone; - if ($dom eq 'gcitest') { - $showclone = &show_cloneable(); - } else { - $showclone = 1; - } - if ($dom eq 'gcitest') { - $output .= &Apache::lonhtmlcommon::row_closure(1). - &concepttest_form($showclone); - } my ($home_server_pick,$numlib) = &Apache::loncommon::home_server_form_item($dom,'chome', 'default','hide'); @@ -2649,82 +2748,24 @@ ENDJS &Apache::lonhtmlcommon::row_title(&mt('Home Server for Course')); } $output .= $home_server_pick. - &Apache::lonhtmlcommon::row_closure(); - if ($showclone && $dom ne 'gcitest') { - $output .= &Apache::lonhtmlcommon::row_headline(). - '<h3>'.&Apache::loncommon::help_open_topic('Course_Request_Clone').' '.$clonetitle. - '<label><input type="radio" name="cloning" value="1" '. - 'onclick="javascript:toggleCloning()" />'. - &mt('Yes').(' 'x2).'</label><label>'. - '<input type="radio" name="cloning" value="0" checked="checked"'. - 'onclick="javascript:toggleCloning()" />'.&mt('No').'</label>'. - '</h3>'. - &Apache::lonhtmlcommon::row_closure(1). - &Apache::lonhtmlcommon::row_headline(). - '<div id="cloneoptions" style="display: none" >'. - &Apache::lonhtmlcommon::start_pick_box(). - &clone_form($dom,$formname,$crstype). - &Apache::lonhtmlcommon::end_pick_box().'</div>'; - } - if ($dom eq 'gcitest') { - 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) = @_; - my $output = &Apache::lonhtmlcommon::row_title(&mt('Questions included in Concept Test')). - '<label>'. - '<input type="radio" name="concepttest" value="editmyown" checked="checked" /> '. - &mt('Chosen by you from Concept Inventory'). - '</label><br />'. - '<label>'. - '<input type="radio" name="concepttest" value="defchosen" /> '. - &mt('Automatically selected by WebCenter'). - '</label>'; - if ($showclone) { - $output .= '<br /><span class="LC_nobreak"><label>'. - '<input type="radio" name="concepttest" value="cloning" /> '. - &mt('Copied from existing Test: '). - '</label>'.&select_oldtest().(' ' x2). - '<input type="hidden" name="clonedom" value="gcitest" />'. - '<label><input type="checkbox" value="1" name="cloneroster" />'. - &mt('Copy roster').'</label>'; - } - return $output; -} - -sub select_oldtest { - my $output = '<select name="clonecrs"><option value="" selected="selected">'. - '</option>'; - my %courses = &Apache::loncommon::existing_gcitest_courses('cc'); - my %Sortby; - foreach my $course (sort(keys(%courses))) { - next unless (ref($courses{$course}) eq 'HASH'); - my $clean_title = $courses{$course}{'description'}; - $clean_title =~ s/\W+//g; - if ($clean_title eq '') { - $clean_title = $courses{$course}{'description'}; - } - push(@{$Sortby{$clean_title}},$course); - } - my @sorted_courses = sort { lc($a) cmp lc($b) } (keys(%Sortby)); - foreach my $item (@sorted_courses) { - foreach my $course (@{$Sortby{$item}}) { - my ($cdom,$cnum) = split('_',$course); - if (($cdom eq 'gcitest') && (ref($courses{$course}) eq 'HASH')) { - my $cdesc = $courses{$course}{'description'}; - $output .= '<option value="'.$cnum.'">'.$cdesc.'</option>'; - } - } - } - $output .= '</select>'; + &Apache::lonhtmlcommon::row_closure(). + &Apache::lonhtmlcommon::row_headline(). + '<h3>'.&Apache::loncommon::help_open_topic('Course_Request_Clone').' '.$clonetitle. + &Apache::lonhtmlcommon::row_closure(1). + &Apache::lonhtmlcommon::row_title(&mt('Clone?')). + '<label><input type="radio" name="cloning" value="1" '. + 'onclick="javascript:toggleCloning()" />'. + &mt('Yes').(' 'x2).'</label><label>'. + '<input type="radio" name="cloning" value="0" '. + 'onclick="javascript:toggleCloning()" />'.&mt('No').'</label>'. + '</h3>'. + &Apache::lonhtmlcommon::row_closure(1). + &Apache::lonhtmlcommon::row_headline(). + '<div id="cloneoptions" style="display: none" >'. + &Apache::lonhtmlcommon::start_pick_box(). + &clone_form($dom,$formname,$crstype). + &Apache::lonhtmlcommon::end_pick_box().'</div>'. + &Apache::lonhtmlcommon::end_pick_box()."\n"; return $output; } @@ -2761,16 +2802,15 @@ 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', ); } sub coursecode_form { my ($dom,$context,$codetitles,$cat_titles,$cat_order,$num) = @_; my $output; - my %rowtitle = ( + my %rowtitle = &Apache::lonlocal::texthash ( instcode => 'Course Category', crosslist => 'Cross Listed Course', ); @@ -2950,7 +2990,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'}; @@ -2987,10 +3027,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'} = ''; - } } } } @@ -3090,16 +3126,12 @@ sub print_request_outcome { } my $clonecrs = ''; my $clonedom = ''; - if ((($env{'form.cloning'}) || - (($dom eq 'gcitest') && ($env{'form.concepttest'} eq 'cloning'))) && + if (($env{'form.cloning'}) && ($env{'form.clonecrs'} =~ /^($match_courseid)$/) && ($env{'form.clonedom'} =~ /^($match_domain)$/)) { - if ($dom eq 'gcitest') { - $env{'form.clonedom'} = 'gcitest'; - } 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'}, @@ -3135,27 +3167,10 @@ sub print_request_outcome { accessend => $accessend, personnel => \%personnel, }; - if ($dom eq 'gcitest') { - if ($env{'form.concepttest'} eq 'editmyown') { - $details->{'firstres'} = 'nav'; - } else { - $details->{'firstres'} = 'blank'; - } - if ($env{'form.concepttest'} eq 'cloning') { - if (($clonecrs) && ($clonedom eq 'gcitest')) { - $details->{'cloneroster'} = $env{'form.cloneroster'}; - } else { - $details->{'clonedom'} = 'gci'; - $details->{'clonecrs'} = '8v226795a882b4bcagcil1'; - } - } else { - $details->{'clonedom'} = 'gci'; - $details->{'clonecrs'} = '8v226795a882b4bcagcil1'; - } - $details->{'datemode'} = 'delete'; - } - my (@inststatuses,$storeresult,$creationresult,$donedisplay); - my $val = &get_processtype($dom,$crstype,\@inststatuses,\%domconfig); + my (@inststatuses,$storeresult,$creationresult); + my $val = + &Apache::loncoursequeueadmin::get_processtype($env{'user.name'},$env{'user.domain'}, + $env{'user.adv'},$dom,$crstype,\@inststatuses,\%domconfig); if ($val eq '') { if ($crstype eq 'official') { $output = &mt('You are not permitted to request creation of official courses.'); @@ -3246,71 +3261,7 @@ sub print_request_outcome { } else { $output = '<p>'.&mt('Your course request has been processed and the course has been created.'); } - if ($dom eq 'gcitest') { - my $caller = 'requestcrs'; - &acquire_cc_role($dom,$cnum,'cc./'.$dom.'/'.$cnum); - my %parmresult = - &store_crsparms($dom,$cnum,$now,$accessstart,$accessend); - &Apache::londocsgci::setdefaults(); - my %crsenvhash = ( - suppress_tries => 'yes', - ); - my $putresult = &Apache::lonnet::put('environment',\%crsenvhash,$dom,$cnum); - if ($env{'form.concepttest'} eq 'cloning') { - &Apache::lonuserstate::readmap($dom.'/'.$cnum); - if (($clonecrs) && ($clonedom eq 'gcitest')) { - my $cloneid = $clonedom.'/'.$clonecrs; - my %clonedesc = &Apache::lonnet::coursedescription($cloneid,{'one_time' => 1}); - my $oldcdesc = $clonedesc{'description'}; - $output .= '<br />'.&mt('A concept test has been copied from your existing test: [_1].','<b>'.$oldcdesc.'</b>').'</p>'; - if ($env{'form.cloneroster'}) { - $output .= '<br />'.&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 .= '<p>'.$logging[-1].'</p>'; - } - } - $output .= '<ul>'. - '<li>'.&mt('Access starts:').' '. - &Apache::lonlocal::locallocaltime($accessstart).'</li>'. - '<li>'.&mt('Access ends:').' '.&Apache::lonlocal::locallocaltime($accessend).'</li>'. - '</ul><br />'; - $r->print($output); - $output = ''; - $donedisplay = 1; - } else { - &roster_upload_form($r,$output,$formname); - $output = ''; - } - } else { - $output .= '</p>'; - &roster_upload_form($r,$output,$formname); - $output = ''; - } - } elsif ($env{'form.concepttest'} eq 'defchosen') { - $output .= '<br />'; - my $error = &Apache::londocsgci::store($caller,$dom,$cnum); - if ($error) { - $output .= '<span class="LC_error">'. - &mt('An error occurred saving an auto-generated concept test: [_1].',$error). - '</span>'; - } else { - &Apache::lonuserstate::readmap($dom.'/'.$cnum); - $output .= &mt('A concept test has also been generated.'); - } - $output .= '</p>'; - &roster_upload_form($r,$output,$formname); - $output = ''; - } else { - $output .= '</p></form><br />'.&mt('The next step is to chose which questions are to be included in the Concept Test.').'<br /></p>'; - $r->print($output); - &Apache::londocsgci::editor($r,'requestcrs',$dom,$cnum); - $output = ''; - } - } else { - $output .= '<br />'.$role_result.'</p>'; - } + $output .= '<br />'.$role_result.'</p>'; $creationresult = 'created'; } else { $output = '<span class="LC_error">'; @@ -3369,26 +3320,9 @@ sub print_request_outcome { } } } - my ($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 .= '<span class="LC_warning">'.&mt('An error occurred saving a record of the details of your request: [_1].',$storeresult).'</span><br />'; - &Apache::lonnet::logthis("Error saving course request - $requestkey for $env{'user.name'}:$env{'user.domain'} - $storeresult"); - } elsif ($statusresult ne 'ok') { - $output .= '<span class="LC_warning">'.&mt('An error occurred saving a record of the status of your request: [_1].',$statusresult).'</span><br />'; - &Apache::lonnet::logthis("Error saving course request status for $requestkey (for $env{'user.name'}:$env{'user.domain'}) - $statusresult"); - } + ($storeresult,my $updateresult) = + &Apache::loncoursequeueadmin::update_coursereq_status(\%reqhash,$dom, + $cnum,$reqstatus,'request'); if ($modified && $queued && $storeresult eq 'ok') { if ($crstype eq 'community') { $output .= '<p>'.&mt('Your community request has been updated').'</p>'; @@ -3398,13 +3332,13 @@ sub print_request_outcome { $output .= ¬ification_information($disposition,$req_notifylist,$cnum,$now); } if ($validationerror ne '') { - $output .= '<span class="LC_warning">'.&mt('An error occurred validating your request with institutional data sources: [_1].',$validationerror).'</p>'; + $output .= '<p class="LC_warning">'.&mt('An error occurred validating your request with institutional data sources: [_1].',$validationerror).'</p>'; + } + if ($updateresult) { + $output .= $updateresult; } } if ($creationresult ne '') { - if ($donedisplay) { - $r->print('<br />'.&done_display()); - } return ($creationresult,$output); } else { return ($storeresult,$output); @@ -3546,138 +3480,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"); -<script type="text/javascript"> -// <![CDATA[' - -function toggleRosterUpload() { - var willupload; - if (document.$formname.roster.length > 1) { - for (var i=0; i<document.$formname.roster.length; i++) { - if (document.$formname.roster[i].checked) { - willupload = document.$formname.roster[i].value; - } - } - } - if (willupload == 1) { - document.getElementById('rosterupload').style.display="block"; - document.getElementById('norosterupload').style.display="none"; - } else { - document.getElementById('rosterupload').style.display="none"; - document.getElementById('norosterupload').style.display="block"; - } - return; -} -// ]] -</script> - -ENDJS - $r->print('<h3>'.$title.'</h3>'.$output. - '<h4>'.&mt('Course roster file upload').'</h4>'); - $r->print('<p>'.&mt('If you have a text file available containing student e-mail addresses and initial passwords, you may upload it now.').'<br />'. - &mt('You may also enroll students later with the [_1]"Enrollment/Activity"[_2] utility in the management toolbar.','<i>','</i>').'</p>'. - &mt('Upload roster file now?').' '. - '<label><input type="radio" name="roster" value="1" '. - 'onclick="javascript:toggleRosterUpload()" />'. - &mt('Yes').(' 'x2).'</label><label>'. - '<input type="radio" name="roster" value="0" checked="checked"'. - 'onclick="javascript:toggleRosterUpload()" />'.&mt('No').'</label><br />'. - '<div id="norosterupload"><input type="submit" value="'.&mt('Next').'" name="norostersub" />'. - '<input type="hidden" name="reqaction" value="new" />'. - '<input type="hidden" name="state" value="done" /></div></form>'. - '<div id="rosterupload" style="display: none"><form name="studentform" method="post" enctype="multipart/form-data" '. - ' action="/adm/createuser">'."\n"); - &Apache::lonuserutils::print_first_users_upload_form($r,'course','noheader','requestcrs'); - $r->print('<input type="hidden" name="concepttest" value="'.$env{'form.concepttest'}.'" />'. - '</div></form>'); -} - sub notification_information { my ($disposition,$req_notifylist,$cnum,$now) = @_; my %emails = &Apache::loncommon::getemails(); @@ -3709,100 +3511,12 @@ sub notification_information { '</div>'; } else { $output .= '<div class="LC_warning">'. - &mt('Your request status is: [_1].',$disposition). - '</div>' + &mt('Your request status is: [_1].',$disposition). + '</div>'; } return $output; } -sub get_processtype { - my ($dom,$crstype,$inststatuses,$domconfig) = @_; - return unless ((ref($inststatuses) eq 'ARRAY') && (ref($domconfig) eq 'HASH')); - my (%userenv,%settings,$val); - my @options = ('autolimit','validate','approval'); - if ($dom eq $env{'user.domain'}) { - %userenv = - &Apache::lonnet::userenvironment($env{'user.domain'},$env{'user.name'}, - 'requestcourses.'.$crstype,'inststatus'); - if ($userenv{'requestcourses.'.$crstype}) { - $val = $userenv{'requestcourses.'.$crstype}; - @{$inststatuses} = ('_custom_'); - } else { - my ($task,%alltasks); - if (ref($domconfig->{'requestcourses'}) eq 'HASH') { - %settings = %{$domconfig->{'requestcourses'}}; - if (ref($settings{$crstype}) eq 'HASH') { - if (($env{'user.adv'}) && ($settings{$crstype}{'_LC_adv'} ne '')) { - $val = $settings{$crstype}{'_LC_adv'}; - @{$inststatuses} = ('_LC_adv_'); - } else { - if ($userenv{'inststatus'} ne '') { - @{$inststatuses} = split(',',$userenv{'inststatus'}); - } else { - @{$inststatuses} = ('default'); - } - foreach my $status (@{$inststatuses}) { - if (exists($settings{$crstype}{$status})) { - my $value = $settings{$crstype}{$status}; - next unless ($value); - unless (exists($alltasks{$value})) { - if (ref($alltasks{$value}) eq 'ARRAY') { - unless(grep(/^\Q$status\E$/,@{$alltasks{$value}})) { - push(@{$alltasks{$value}},$status); - } - } else { - @{$alltasks{$value}} = ($status); - } - } - } - } - my $maxlimit = 0; - - foreach my $key (sort(keys(%alltasks))) { - if ($key =~ /^autolimit=(\d*)$/) { - if ($1 eq '') { - $val ='autolimit='; - last; - } elsif ($1 > $maxlimit) { - $maxlimit = $1; - } - } - } - if ($maxlimit) { - $val = 'autolimit='.$maxlimit; - } else { - foreach my $option (@options) { - if ($alltasks{$option}) { - $val = $option; - last; - } - } - } - } - } - } - } - } else { - %userenv = &Apache::lonnet::userenvironment($env{'user.domain'}, - $env{'user.name'},'reqcrsotherdom.'.$env{'form.crstype'}); - if ($userenv{'reqcrsotherdom.'.$crstype}) { - my @doms = split(',',$userenv{'reqcrsotherdom.'.$crstype}); - my $optregex = join('|',@options); - foreach my $item (@doms) { - my ($extdom,$extopt) = split(':',$item); - if ($extdom eq $dom) { - if ($extopt =~ /^($optregex)(=?\d*)$/) { - $val = $1.$2; - } - last; - } - } - @{$inststatuses} = ('_external_'); - } - } - return $val; -} - sub check_autolimit { my ($uname,$udom,$dom,$crstype,$limit,$message) = @_; my %crsroles = &Apache::lonnet::get_my_roles($env{'user.name'},$env{'user.domain'}, @@ -4005,16 +3719,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; - } -} - 1;