--- loncom/interface/lonrequestcourse.pm 2009/09/07 06:30:49 1.30 +++ loncom/interface/lonrequestcourse.pm 2009/09/08 13:05:00 1.31 @@ -1,7 +1,7 @@ # The LearningOnline Network # Request a course # -# $Id: lonrequestcourse.pm,v 1.30 2009/09/07 06:30:49 raeburn Exp $ +# $Id: lonrequestcourse.pm,v 1.31 2009/09/08 13:05:00 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -527,9 +527,9 @@ sub form_elements { ); if ($env{'form.sectotal'} > 0) { for (my $i=0; $i<$env{'form.sectotal'}; $i++) { - $extras{'sec_'.$i} = 'checkbox', - $extras{'secnum_'.$i} = 'text', - $extras{'loncapasec_'.$i} = 'text', + $extras{'sec_'.$i} = 'radio'; + $extras{'secnum_'.$i} = 'text'; + $extras{'loncapasec_'.$i} = 'text'; } } my $crosslisttotal = $env{'form.crosslisttotal'}; @@ -800,8 +800,15 @@ END } if ($action eq 'new') { my $jsextra; - unless (($state eq 'review') || ($state eq 'process')) { + if ($state eq 'courseinfo') { $jsextra = "\n".&Apache::loncommon::coursebrowser_javascript($dom); + } elsif ($state eq 'enrollment') { + if (($env{'form.crstype'} eq 'official') && + (&Apache::lonnet::auto_run('',$dom))) { + $js .= "\n".§ion_check_javascript()."\n".&enrollment_lcsec_js(); + } + } elsif ($state eq 'personnel') { + $js .= "\n".§ion_check_javascript()."\n".&personnel_lcsec_js(); } $r->print(&header('Request a course',$js.$jscript,$loaditems,$jsextra).$crumb); &print_request_form($r,$action,$state,$page,$states,$dom,$newinstcode, @@ -849,8 +856,8 @@ END other => 'Modify Request', next => 'Cancel Request', ); - &display_navbuttons($r,$formname,$prev,$navtxt{'prev'},$next,$navtxt{'next'}, - $state,$other,$navtxt{'other'}); + &display_navbuttons($r,$dom,$formname,$prev,$navtxt{'prev'},$next, + $navtxt{'next'},$state,$other,$navtxt{'other'}); $r->print(''); } elsif ($state eq 'cancel') { my ($result,$output) = &print_cancel_request($dom,$env{'form.origcnum'}); @@ -863,10 +870,11 @@ END next => 'Confirm Cancellation', ); if ($result eq 'ok') { - &display_navbuttons($r,$formname,$prev,$navtxt{'prev'},$next, + &display_navbuttons($r,$dom,$formname,$prev,$navtxt{'prev'},$next, $navtxt{'next'},$state); } else { - &display_navbuttons($r,$formname,$prev,$navtxt{'prev'},undef,'',$state); + &display_navbuttons($r,$dom,$formname,$prev,$navtxt{'prev'},undef, + '',$state); } $r->print(''); } elsif ($state eq 'removal') { @@ -929,6 +937,166 @@ END return; } +sub enrollment_lcsec_js { + my %alerts = §ion_check_alerts(); + my $secname = $alerts{'badsec'}; + my $secnone = $alerts{'reserved'}; + my $output = ' +function validateEnrollSections(formname,nextstate) { + var badsectotal = 0; + var reservedtotal = 0; + var secTest = ""; +'; + for (my $i=0; $i<$env{'form.sectotal'}; $i++) { + $output .= " + var selSec = 0; + for (var j=0; j "You need to change one or more LON-CAPA section names - none is a reserved word in the system, and may not be used.", + badsec => 'You need to change one or more LON-CAPA section names - names may only contain letters or numbers.', + separate => 'Separate multiple sections with a comma.' + ); + return %lt; +} + +sub section_check_javascript { + return <<"END"; +function validsection(field,mult) { + var str = field.value; + var badsec=0; + var reserved=0; + if (window.RegExp) { + var badsecnum=0; + var reservednum=0; + var pattern=/[^a-zA-Z0-9]/; + str = str.replace(/(^\\s*)|(\\s*\$)/gi,""); + str = str.replace(/[ ]{2,}/gi," "); + if (mult == '1') { + var sections = new Array(); + sections = str.split(/\\s*[\\s,;:]\\s*/); + var i; + for (i=0; i 0) { + return 'badsec'; + } + if (reservednum > 0) { + return 'reserved'; + } + } + return; +} +END +} + sub close_popup_form { my $close= &mt('Close Window'); return << "END"; @@ -1168,7 +1336,8 @@ sub print_request_form { push(@excluded,'crosslisttotal'); } $r->print(&Apache::lonhtmlcommon::echo_form_input(\@excluded).''); - &display_navbuttons($r,$formname,$prev,$navtxt{'prev'},$next,$navtxt{'next'},$state); + &display_navbuttons($r,$dom,$formname,$prev,$navtxt{'prev'},$next, + $navtxt{'next'},$state); return; } @@ -1365,14 +1534,18 @@ sub inst_section_selector { &Apache::loncommon::end_data_table_row(); for (my $i=0; $i<@sections; $i++) { my $colflag = $i%2; - my $checked = ' checked="checked"'; + my $secon = ' checked="checked"'; + my $secoff = ''; if ($env{'form.origcnum'}) { - $checked=''; + $secoff = $secon; + $secon=''; } $output .= &Apache::loncommon::start_data_table_row(). - ''. - ''.$sections[$i]. + ''. + (' 'x2).''. + ''.$sections[$i]. ''. ''); if ($prev) { $r->print(''. + 'onclick="javascript:backPage('."document.$formname,'$prev'".')"/>'. (' 'x3)); } elsif ($prevtext) { $r->print('print(' '); } + my $gotnext; if ($state eq 'courseinfo') { $r->print(''); - } elsif ($next) { - $r->print(' - '); + $gotnext = 1; + } elsif ($state eq 'enrollment') { + if (($env{'form.crstype'} eq 'official') && + (&Apache::lonnet::auto_run('',$dom))) { + $r->print(''); + $gotnext = 1; + } + } elsif ($state eq 'personnel') { + if ($env{'form.persontotal'} > 0) { + $r->print(''); + $gotnext = 1; + } + } + unless ($gotnext) { + if ($next) { + $r->print(' + '); + } } $r->print(''); } @@ -2353,20 +2554,27 @@ sub print_request_outcome { @{$personnel{$uname.':'.$udom}{$role}{'usec'}} = (); } else { my @currsec = &Apache::loncommon::get_env_multiple('form.person_'.$i.'_sec'); + my @allsecs; + foreach my $sec (@currsec) { + next unless ($sec =~ /\w/); + next if ($sec =~ /\W/); + next if ($sec eq 'none'); + push(@allsecs,$sec); + } my $newsec = $env{'form.person_'.$i.'_newsec'}; $newsec =~ s/^\s+//; $newsec =~s/\s+$//; my @newsecs = split(/[\s,;]+/,$newsec); foreach my $sec (@newsecs) { next if ($sec =~ /\W/); - next if ($newsec eq 'none'); + next if ($sec eq 'none'); if ($sec ne '') { - unless (grep(/^\Q$sec\E$/,@currsec)) { - push(@currsec,$sec); + unless (grep(/^\Q$sec\E$/,@allsecs)) { + push(@allsecs,$sec); } } } - @{$personnel{$uname.':'.$udom}{$role}{'usec'}} = @currsec; + @{$personnel{$uname.':'.$udom}{$role}{'usec'}} = @allsecs; } } } else {