version 1.29, 2009/09/06 19:09:54
|
version 1.31, 2009/09/08 13:05:00
|
Line 122 use Apache::lonnet;
|
Line 122 use Apache::lonnet;
|
use Apache::loncommon; |
use Apache::loncommon; |
use Apache::lonlocal; |
use Apache::lonlocal; |
use Apache::loncoursequeueadmin; |
use Apache::loncoursequeueadmin; |
|
use Apache::lonuserutils; |
use LONCAPA qw(:DEFAULT :match); |
use LONCAPA qw(:DEFAULT :match); |
|
|
sub handler { |
sub handler { |
Line 262 sub handler {
|
Line 263 sub handler {
|
if (($state eq 'courseinfo') && ($env{'form.clonedom'} eq '')) { |
if (($state eq 'courseinfo') && ($env{'form.clonedom'} eq '')) { |
$env{'form.clonedom'} = $dom; |
$env{'form.clonedom'} = $dom; |
} |
} |
$jscript = &Apache::lonhtmlcommon::set_form_elements($elementsref,\%stored); |
if ($state eq 'crstype') { |
|
$jscript = &mainmenu_javascript(); |
|
} else { |
|
$jscript = &Apache::lonhtmlcommon::set_form_elements($elementsref,\%stored); |
|
} |
} |
} |
|
|
if ($state eq 'personnel') { |
if ($state eq 'personnel') { |
Line 291 sub handler {
|
Line 296 sub handler {
|
} |
} |
} elsif ($action eq 'view') { |
} elsif ($action eq 'view') { |
if ($state eq 'crstype') { |
if ($state eq 'crstype') { |
&print_main_menu($r,\%can_request,\%states,$dom,$jscript,'',$crumb); |
&print_main_menu($r,\%can_request,\%states,$dom,$jscript,$loaditems,$crumb); |
} else { |
} else { |
&request_administration($r,$action,$state,$page,\%states,$dom,$jscript, |
&request_administration($r,$action,$state,$page,\%states,$dom,$jscript, |
$loaditems,$crumb); |
$loaditems,$crumb); |
Line 315 sub handler {
|
Line 320 sub handler {
|
return OK; |
return OK; |
} |
} |
|
|
|
sub mainmenu_javascript { |
|
return <<"END"; |
|
function setType(courseForm) { |
|
for (var i=0; i<courseForm.crstype.length; i++) { |
|
if (courseForm.crstype.options[i].value == "$env{'form.crstype'}") { |
|
courseForm.crstype.options[i].selected = true; |
|
} else { |
|
courseForm.crstype.options[i].selected = false; |
|
} |
|
} |
|
} |
|
|
|
function setAction(courseForm) { |
|
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.action.options[i].selected = false; |
|
} |
|
} |
|
} |
|
END |
|
} |
|
|
sub get_breadcrumbs { |
sub get_breadcrumbs { |
my ($dom,$action,$state,$states,$trail) = @_; |
my ($dom,$action,$state,$states,$trail) = @_; |
my ($crumb,$newinstcode,$codechk,$checkedcode,$numtitles); |
my ($crumb,$newinstcode,$codechk,$checkedcode,$numtitles); |
Line 498 sub form_elements {
|
Line 527 sub form_elements {
|
); |
); |
if ($env{'form.sectotal'} > 0) { |
if ($env{'form.sectotal'} > 0) { |
for (my $i=0; $i<$env{'form.sectotal'}; $i++) { |
for (my $i=0; $i<$env{'form.sectotal'}; $i++) { |
$extras{'sec_'.$i} = 'checkbox', |
$extras{'sec_'.$i} = 'radio'; |
$extras{'secnum_'.$i} = 'text', |
$extras{'secnum_'.$i} = 'text'; |
$extras{'loncapasec_'.$i} = 'text', |
$extras{'loncapasec_'.$i} = 'text'; |
} |
} |
} |
} |
my $crosslisttotal = $env{'form.crosslisttotal'}; |
my $crosslisttotal = $env{'form.crosslisttotal'}; |
Line 555 sub onload_action {
|
Line 584 sub onload_action {
|
my ($action,$state) = @_; |
my ($action,$state) = @_; |
my %loaditems; |
my %loaditems; |
if (($action eq 'new') || ($action eq 'view')) { |
if (($action eq 'new') || ($action eq 'view')) { |
$loaditems{'onload'} = 'javascript:setFormElements(document.requestcrs)'; |
if ($state eq 'crstype') { |
|
$loaditems{'onload'} = 'javascript:setAction(document.mainmenu_action);javascript:setType(document.mainmenu_coursetype)'; |
|
} else { |
|
$loaditems{'onload'} = 'javascript:setFormElements(document.requestcrs)'; |
|
} |
} |
} |
return \%loaditems; |
return \%loaditems; |
} |
} |
Line 767 END
|
Line 800 END
|
} |
} |
if ($action eq 'new') { |
if ($action eq 'new') { |
my $jsextra; |
my $jsextra; |
unless (($state eq 'review') || ($state eq 'process')) { |
if ($state eq 'courseinfo') { |
$jsextra = "\n".&Apache::loncommon::coursebrowser_javascript($dom); |
$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); |
$r->print(&header('Request a course',$js.$jscript,$loaditems,$jsextra).$crumb); |
&print_request_form($r,$action,$state,$page,$states,$dom,$newinstcode, |
&print_request_form($r,$action,$state,$page,$states,$dom,$newinstcode, |
Line 792 END
|
Line 832 END
|
my $form = '<form method="post" name="'.$formname.'" action="/adm/requestcourse" />'; |
my $form = '<form method="post" name="'.$formname.'" action="/adm/requestcourse" />'; |
if ($state eq 'pick_request') { |
if ($state eq 'pick_request') { |
$r->print('<h3>'.&mt('Pending course requests').'</h3><div>'."\n".$form."\n". |
$r->print('<h3>'.&mt('Pending course requests').'</h3><div>'."\n".$form."\n". |
&print_request_status($dom).'</form>'); |
&print_request_status($dom).'</form></div>'); |
} elsif ($state eq 'details') { |
} elsif ($state eq 'details') { |
my (@codetitles,%cat_titles,%cat_order,@code_order,$instcode,$code_chk); |
my (@codetitles,%cat_titles,%cat_order,@code_order,$instcode,$code_chk); |
my $origcnum = $env{'form.cnum'}; |
my $origcnum = $env{'form.cnum'}; |
Line 816 END
|
Line 856 END
|
other => 'Modify Request', |
other => 'Modify Request', |
next => 'Cancel Request', |
next => 'Cancel Request', |
); |
); |
&display_navbuttons($r,$formname,$prev,$navtxt{'prev'},$next,$navtxt{'next'}, |
&display_navbuttons($r,$dom,$formname,$prev,$navtxt{'prev'},$next, |
$state,$other,$navtxt{'other'}); |
$navtxt{'next'},$state,$other,$navtxt{'other'}); |
$r->print('</form>'); |
$r->print('</form>'); |
} elsif ($state eq 'cancel') { |
} elsif ($state eq 'cancel') { |
my ($result,$output) = &print_cancel_request($dom,$env{'form.origcnum'}); |
my ($result,$output) = &print_cancel_request($dom,$env{'form.origcnum'}); |
Line 830 END
|
Line 870 END
|
next => 'Confirm Cancellation', |
next => 'Confirm Cancellation', |
); |
); |
if ($result eq 'ok') { |
if ($result eq 'ok') { |
&display_navbuttons($r,$formname,$prev,$navtxt{'prev'},$next, |
&display_navbuttons($r,$dom,$formname,$prev,$navtxt{'prev'},$next, |
$navtxt{'next'},$state); |
$navtxt{'next'},$state); |
} else { |
} else { |
&display_navbuttons($r,$formname,$prev,$navtxt{'prev'},undef,'',$state); |
&display_navbuttons($r,$dom,$formname,$prev,$navtxt{'prev'},undef, |
|
'',$state); |
} |
} |
$r->print('</form>'); |
$r->print('</form>'); |
} elsif ($state eq 'removal') { |
} elsif ($state eq 'removal') { |
Line 896 END
|
Line 937 END
|
return; |
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<document.requestcrs.sec_".$i.".length; j++) { |
|
if (document.requestcrs.sec_".$i."[j].checked) { |
|
selSec = document.requestcrs.sec_".$i."[j].value; |
|
} |
|
if (selSec == 1) { |
|
secTest = validsection(document.requestcrs.loncapasec_".$i."); |
|
if (secTest == 'badsec') { |
|
badsectotal++; |
|
} |
|
if (secTest == 'reserved') { |
|
reservedtotal++; |
|
} |
|
} |
|
} |
|
"; |
|
} |
|
for (my $i=0; $i<$env{'form.crosslisttotal'}; $i++) { |
|
$output .= " |
|
if (document.requestcrs.crosslist_".$i.".checked) { |
|
secTest = validsection(document.requestcrs.crosslist_".$i."_lcsec); |
|
if (secTest == 'badsec') { |
|
badsectotal++; |
|
} |
|
if (secTest == 'reserved') { |
|
reservedtotal++; |
|
} |
|
} |
|
"; |
|
} |
|
$output .= " |
|
if (badsectotal>0) { |
|
alert('$secname'); |
|
return false; |
|
} |
|
if (reservedtotal>0) { |
|
alert('$secnone'); |
|
return false; |
|
} |
|
formname.state.value= nextstate; |
|
formname.submit(); |
|
return; |
|
} |
|
"; |
|
return $output; |
|
} |
|
|
|
sub personnel_lcsec_js { |
|
my %alerts = §ion_check_alerts(); |
|
my $secname = $alerts{'badsec'}.'\\n'.$alerts{'separate'}; |
|
my $secnone = $alerts{'reserved'}; |
|
my $output = ' |
|
function validatePersonnelSections(formname,nextstate) { |
|
var badsectotal = 0; |
|
var reservedtotal = 0; |
|
var secTest = ""; |
|
'; |
|
for (my $i=0; $i<$env{'form.persontotal'}; $i++) { |
|
$output .= " |
|
if (document.requestcrs.person_".$i."_uname.value != '') { |
|
secTest = validsection(document.requestcrs.person_".$i."_newsec,'1'); |
|
if (secTest == 'badsec') { |
|
badsectotal++; |
|
} |
|
if (secTest == 'reserved') { |
|
reservedtotal++; |
|
} |
|
} |
|
"; |
|
} |
|
$output .= " |
|
if (badsectotal > 0) { |
|
alert('$secname'); |
|
return false; |
|
} else { |
|
if (reservedtotal > 0) { |
|
alert('$secnone'); |
|
return false; |
|
} |
|
} |
|
formname.state.value = nextstate; |
|
formname.submit(); |
|
return; |
|
} |
|
"; |
|
return $output; |
|
} |
|
|
|
sub section_check_alerts { |
|
my %lt = |
|
&Apache::lonlocal::texthash( |
|
reserved => "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<sections.length; i++) { |
|
if ((sections[i] != '') && (sections[i] != undefined) && (sections[i] != null)) { |
|
if (pattern.test(sections[i])) { |
|
badsecnum++; |
|
} else { |
|
if (sections[i] == 'none') { |
|
reservednum++; |
|
} |
|
} |
|
} |
|
} |
|
} else { |
|
if ((str != '') && (str != undefined) && (str != null)) { |
|
if (pattern.test(str)) { |
|
badsecnum++; |
|
} else { |
|
if (str == 'none') { |
|
reservednum++; |
|
} |
|
} |
|
} |
|
} |
|
if (badsecnum > 0) { |
|
return 'badsec'; |
|
} |
|
if (reservednum > 0) { |
|
return 'reserved'; |
|
} |
|
} |
|
return; |
|
} |
|
END |
|
} |
|
|
sub close_popup_form { |
sub close_popup_form { |
my $close= &mt('Close Window'); |
my $close= &mt('Close Window'); |
return << "END"; |
return << "END"; |
Line 934 sub print_request_form {
|
Line 1135 sub print_request_form {
|
); |
); |
$crstype = $env{'form.crstype'}; |
$crstype = $env{'form.crstype'}; |
$r->print('<form name="'.$formname.'" method="post" action="/adm/requestcourse">'); |
$r->print('<form name="'.$formname.'" method="post" action="/adm/requestcourse">'); |
my (@codetitles,%cat_titles,%cat_order,@code_order,$instcode,$code_chk); |
my (@codetitles,%cat_titles,%cat_order,@code_order,$instcode,$code_chk, |
|
@disallowed); |
if ($crstype eq 'official') { |
if ($crstype eq 'official') { |
if ($env{'form.instcode'} ne '') { |
if ($env{'form.instcode'} ne '') { |
$instcode = $env{'form.instcode'}; |
$instcode = $env{'form.instcode'}; |
Line 997 sub print_request_form {
|
Line 1199 sub print_request_form {
|
} elsif ($state eq 'personnel') { |
} elsif ($state eq 'personnel') { |
$r->print(&print_personnel_menu($dom,$formname,$crstype,$invalidcrosslist)); |
$r->print(&print_personnel_menu($dom,$formname,$crstype,$invalidcrosslist)); |
} elsif ($state eq 'review') { |
} elsif ($state eq 'review') { |
|
my (%alerts,%rulematch,%inst_results,%curr_rules,%got_rules,%disallowmsg); |
|
my $now = time; |
|
for (my $i=0; $i<$env{'form.persontotal'}; $i++) { |
|
my $personname = $env{'form.person_'.$i.'_uname'}; |
|
my $persondom = $env{'form.person_'.$i.'_dom'}; |
|
if (($personname =~ /^$match_username$/) && |
|
($persondom =~ /^$match_domain$/)) { |
|
if (&Apache::lonnet::domain($persondom)) { |
|
my $personhome = |
|
&Apache::lonnet::homeserver($personname,$persondom); |
|
if ($personhome eq 'no_host') { |
|
if ($persondom ne $dom) { |
|
my $skipuser = 1; |
|
if ($env{'user.role.dc./'.$persondom.'/'}) { |
|
my ($start,$end) = split('.',$env{'user.role.dc./'.$persondom.'/'}); |
|
if (((!$start) || ($start < $now)) && |
|
((!$end) || ($end > $now))) { |
|
$skipuser = 0; |
|
} |
|
} |
|
if ($skipuser) { |
|
push(@disallowed,$i); |
|
$disallowmsg{$i} = &mt('[_1] was excluded because new users need be from the course domain','<tt>'.$personname.':'.$persondom.'</tt>'); |
|
next; |
|
} |
|
} |
|
if (&get_cancreate_status($persondom,$personname,$dom)) { |
|
my ($allowed,$msg) = |
|
&check_newuser_rules($persondom,$personname, |
|
\%alerts,\%rulematch,\%inst_results, |
|
\%curr_rules,\%got_rules); |
|
if ($allowed) { |
|
if (ref($inst_results{$personname.':'.$persondom}) eq 'HASH') { |
|
if ($inst_results{$personname.':'.$persondom}{'lastname'} ne '') { |
|
$env{'form.person_'.$i.'_lastname'} = $inst_results{$personname.':'.$persondom}{'lastname'}; |
|
} |
|
if ($inst_results{$personname.':'.$persondom}{'firstname'} ne '') { |
|
$env{'form.person_'.$i.'_firstname'} = $inst_results{$personname.':'.$persondom}{'firstname'}; |
|
} |
|
if ($inst_results{$personname.':'.$persondom}{'permanentemail'} ne '') { |
|
$env{'form.person_'.$i.'_emailaddr'} = $inst_results{$personname.':'.$persondom}{'permanentemail'}; |
|
} |
|
} |
|
} else { |
|
push(@disallowed,$i); |
|
$disallowmsg{$i} = &mt('[_1] was excluded because the username violated format rules for the domain','<tt>'.$personname.':'.$persondom.'</tt>'); |
|
} |
|
} else { |
|
push(@disallowed,$i); |
|
$disallowmsg{$i} = &mt('[_1] was excluded because you may not request new users in the domain','<tt>'.$personname.':'.$persondom.'</tt>'); |
|
} |
|
} else { |
|
my %userenv = |
|
&Apache::lonnet::userenvironment($persondom,$personname,'lastname','firstname','permanentemail'); |
|
if ($env{'form.person_'.$i.'_lastname'} eq '') { |
|
$env{'form.person_'.$i.'_lastname'} = $userenv{'lastname'}; |
|
} |
|
if ($env{'form.person_'.$i.'_firstname'} eq '') { |
|
$env{'form.person_'.$i.'_firstname'} = $userenv{'firstname'}; |
|
} |
|
if ($env{'form.person_'.$i.'_emailaddr'} eq '') { |
|
$env{'form.person_'.$i.'_emailaddr'} = $userenv{'permanentemail'}; |
|
} |
|
} |
|
} elsif ($personname ne '') { |
|
push(@disallowed,$i); |
|
$disallowmsg{$i} = &mt('[_1] was excluded because the domain is invalid','<tt>'.$personname.':'.$persondom.'</tt>'); |
|
} |
|
} elsif ($personname ne '') { |
|
push(@disallowed,$i); |
|
$disallowmsg{$i} = &mt('[_1] was excluded because the username or domain is invalid.','<tt>'.$personname.':'.$persondom.'</tt>'); |
|
} |
|
} |
my $cnum; |
my $cnum; |
if ($env{'form.origcnum'} =~ /^($match_courseid)$/) { |
if ($env{'form.origcnum'} =~ /^($match_courseid)$/) { |
$cnum = $env{'form.origcnum'}; |
$cnum = $env{'form.origcnum'}; |
Line 1006 sub print_request_form {
|
Line 1281 sub print_request_form {
|
&Apache::lonnet::auto_possible_instcodes($dom,\@codetitles,\%cat_titles, |
&Apache::lonnet::auto_possible_instcodes($dom,\@codetitles,\%cat_titles, |
\%cat_order,\@code_order); |
\%cat_order,\@code_order); |
$r->print('<h3>'.&mt('Review course request details before submission').'</h3>'. |
$r->print('<h3>'.&mt('Review course request details before submission').'</h3>'. |
&print_review($dom,\@codetitles,\%cat_titles,\%cat_order,\@code_order). |
&print_review($dom,\@codetitles,\%cat_titles,\%cat_order,\@code_order,'','',\@disallowed,\%disallowmsg). |
'<input type="hidden" name="cnum" value="'.$cnum.'" />'); |
'<input type="hidden" name="cnum" value="'.$cnum.'" />'); |
$navtxt{'next'} = &mt('Submit course request'); |
$navtxt{'next'} = &mt('Submit course request'); |
} elsif ($state eq 'process') { |
} elsif ($state eq 'process') { |
Line 1031 sub print_request_form {
|
Line 1306 sub print_request_form {
|
if ($state eq 'personnel') { |
if ($state eq 'personnel') { |
push(@excluded,'persontotal'); |
push(@excluded,'persontotal'); |
} |
} |
|
if ($state eq 'review') { |
|
if (@disallowed > 0) { |
|
my @items = qw(uname dom lastname firstname emailaddr hidedom role newsec); |
|
my @currsecs = ¤t_lc_sections(); |
|
if (@currsecs) { |
|
push(@items,'sec'); |
|
} |
|
my $count = 0; |
|
for (my $i=0; $i<$env{'form.persontotal'}; $i++) { |
|
unless ($env{'form.person_'.$i.'_uname'} eq '') { |
|
if (grep(/^$i$/,@disallowed)) { |
|
foreach my $item (@items) { |
|
$env{'form.person_'.$i.'_'.$item} = ''; |
|
} |
|
} else { |
|
foreach my $item (@items) { |
|
$env{'form.person_'.$count.'_'.$item} = $env{'form.person_'.$i.'_'.$item}; |
|
} |
|
} |
|
} |
|
$count ++; |
|
} |
|
$env{'form.persontotal'} = $count; |
|
|
|
} |
|
} |
if ($state eq 'enrollment') { |
if ($state eq 'enrollment') { |
push(@excluded,'crosslisttotal'); |
push(@excluded,'crosslisttotal'); |
} |
} |
$r->print(&Apache::lonhtmlcommon::echo_form_input(\@excluded).'</form>'); |
$r->print(&Apache::lonhtmlcommon::echo_form_input(\@excluded).'</form>'); |
&display_navbuttons($r,$formname,$prev,$navtxt{'prev'},$next,$navtxt{'next'},$state); |
&display_navbuttons($r,$dom,$formname,$prev,$navtxt{'prev'},$next, |
|
$navtxt{'next'},$state); |
return; |
return; |
} |
} |
|
|
|
sub get_cancreate_status { |
|
my ($persondom,$personname,$dom) = @_; |
|
my ($rules,$ruleorder) = |
|
&Apache::lonnet::inst_userrules($persondom,'username'); |
|
my $usertype = &Apache::lonuserutils::check_usertype($persondom,$personname, |
|
$rules); |
|
return &Apache::lonuserutils::can_create_user($dom,'requestcrs',$usertype); |
|
} |
|
|
|
sub check_newuser_rules { |
|
my ($persondom,$personname,$alerts,$rulematch,$inst_results,$curr_rules, |
|
$got_rules) = @_; |
|
my $allowed = 1; |
|
my $newuser = 1; |
|
my ($checkhash,$userchkmsg); |
|
my $checks = { 'username' => 1 }; |
|
$checkhash->{$personname.':'.$persondom} = { 'newuser' => $newuser }; |
|
&Apache::loncommon::user_rule_check($checkhash,$checks,$alerts,$rulematch, |
|
$inst_results,$curr_rules,$got_rules); |
|
if (ref($alerts->{'username'}) eq 'HASH') { |
|
if (ref($alerts->{'username'}{$persondom}) eq 'HASH') { |
|
my $domdesc = |
|
&Apache::lonnet::domain($persondom,'description'); |
|
if ($alerts->{'username'}{$persondom}{$personname}) { |
|
if (ref($curr_rules->{$persondom}) eq 'HASH') { |
|
$userchkmsg = |
|
&Apache::loncommon::instrule_disallow_msg('username', |
|
$domdesc,1). |
|
&Apache::loncommon::user_rule_formats($persondom, |
|
$domdesc,$curr_rules->{$persondom}{'username'}, |
|
'username'); |
|
} |
|
$allowed = 0; |
|
} |
|
} |
|
} |
|
return ($allowed,$userchkmsg); |
|
} |
|
|
sub get_excluded_elements { |
sub get_excluded_elements { |
my ($dom,$states,$action,$state) = @_; |
my ($dom,$states,$action,$state) = @_; |
my @excluded = ('counter'); |
my @excluded = ('counter'); |
Line 1193 sub inst_section_selector {
|
Line 1534 sub inst_section_selector {
|
&Apache::loncommon::end_data_table_row(); |
&Apache::loncommon::end_data_table_row(); |
for (my $i=0; $i<@sections; $i++) { |
for (my $i=0; $i<@sections; $i++) { |
my $colflag = $i%2; |
my $colflag = $i%2; |
my $checked = ' checked="checked"'; |
my $secon = ' checked="checked"'; |
|
my $secoff = ''; |
if ($env{'form.origcnum'}) { |
if ($env{'form.origcnum'}) { |
$checked=''; |
$secoff = $secon; |
|
$secon=''; |
} |
} |
$output .= &Apache::loncommon::start_data_table_row(). |
$output .= &Apache::loncommon::start_data_table_row(). |
'<td><input type="checkbox" name="sec_'.$i. |
'<td><label><input type="radio" name="sec_'.$i. |
'"'.$checked.' value="1" /></td>'. |
'"'.$secon.' value="1" />'.&mt('Yes').'</label>'. |
'<td>'.$sections[$i]. |
(' 'x2).'<label><input type="radio" name="sec_'.$i. |
|
'"'.$secoff.' value="0" />'.&mt('No').'</label></td>'. |
|
'<td align="center">'.$sections[$i]. |
'<input type="hidden" name="secnum_'.$i.'" value="'. |
'<input type="hidden" name="secnum_'.$i.'" value="'. |
$sections[$i].'" /></td>'. |
$sections[$i].'" /></td>'. |
'<td><input type="text" size="10" name="loncapasec_'.$i. |
'<td><input type="text" size="10" name="loncapasec_'.$i. |
Line 1272 sub print_personnel_menu {
|
Line 1617 sub print_personnel_menu {
|
} |
} |
} |
} |
|
|
my @currsecs; |
my @currsecs = ¤t_lc_sections(); |
if ($env{'form.sectotal'}) { |
|
for (my $i=0; $i<$env{'form.sectotal'}; $i++) { |
|
if (defined($env{'form.loncapasec_'.$i})) { |
|
my $lcsec = $env{'form.loncapasec_'.$i}; |
|
unless (grep(/^\Q$lcsec\E$/,@currsecs)) { |
|
push(@currsecs,$lcsec); |
|
} |
|
} |
|
} |
|
} |
|
|
|
my ($existtitle,$existops,$existmult,$newtitle,$seccolspan); |
my ($existtitle,$existops,$existmult,$newtitle,$seccolspan); |
if (@currsecs) { |
if (@currsecs) { |
Line 1360 sub print_personnel_menu {
|
Line 1695 sub print_personnel_menu {
|
return $output; |
return $output; |
} |
} |
|
|
|
sub current_lc_sections { |
|
my @currsecs; |
|
if ($env{'form.sectotal'}) { |
|
for (my $i=0; $i<$env{'form.sectotal'}; $i++) { |
|
if ($env{'form.sec_'.$i}) { |
|
if (defined($env{'form.loncapasec_'.$i})) { |
|
my $lcsec = $env{'form.loncapasec_'.$i}; |
|
unless (grep(/^\Q$lcsec\E$/,@currsecs)) { |
|
push(@currsecs,$lcsec); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return @currsecs; |
|
} |
|
|
sub print_request_status { |
sub print_request_status { |
my ($dom) = @_; |
my ($dom) = @_; |
my %statusinfo = &Apache::lonnet::dump('courserequests',$env{'user.domain'}, |
my %statusinfo = &Apache::lonnet::dump('courserequests',$env{'user.domain'}, |
Line 1468 sub print_request_status {
|
Line 1820 sub print_request_status {
|
$output .= '<div>'.&mt('You have no matching course requests awaiting approval by a Domain Coordinator or held in a queue pending administrative action at your institution.').'</div>'; |
$output .= '<div>'.&mt('You have no matching course requests awaiting approval by a Domain Coordinator or held in a queue pending administrative action at your institution.').'</div>'; |
} |
} |
$output .= ' |
$output .= ' |
<br /><input type="button" name="prev" value="'.&mt('Back').'" onclick="javascript:backPage(document.'.$formname.",'crstype'".')" /> |
<br /><input type="button" name="prev" value="'.&mt('Back').'" onclick="javascript:backPage(document.'.$formname.",'crstype'".')" />'; |
</form></div>'; |
|
return $output; |
return $output; |
} |
} |
|
|
Line 1575 sub print_request_logs {
|
Line 1926 sub print_request_logs {
|
} |
} |
|
|
sub print_review { |
sub print_review { |
my ($dom,$codetitles,$cat_titles,$cat_order,$code_order,$uname,$udom) = @_; |
my ($dom,$codetitles,$cat_titles,$cat_order,$code_order,$uname,$udom, |
|
$disallowed,$disallowmsg) = @_; |
my ($types,$typename) = &course_types(); |
my ($types,$typename) = &course_types(); |
my ($owner,$ownername,$owneremail); |
my ($owner,$ownername,$owneremail); |
if ($uname eq '' || $udom eq '') { |
if ($uname eq '' || $udom eq '') { |
Line 1753 sub print_review {
|
Line 2105 sub print_review {
|
'<td>'.&mt('None').'</td></tr>'; |
'<td>'.&mt('None').'</td></tr>'; |
for (my $i=0; $i<$env{'form.persontotal'}; $i++) { |
for (my $i=0; $i<$env{'form.persontotal'}; $i++) { |
if ($env{'form.person_'.$i.'_uname'} ne '') { |
if ($env{'form.person_'.$i.'_uname'} ne '') { |
my @allsecs = &Apache::loncommon::get_env_multiple('form.person_'.$i.'_sec'); |
if (ref($disallowed) eq 'ARRAY') { |
|
next if (grep(/^$i$/,@{$disallowed})); |
|
} |
|
my @officialsecs = &Apache::loncommon::get_env_multiple('form.person_'.$i.'_sec'); |
|
my @allsecs; |
|
foreach my $sec (@officialsecs) { |
|
next unless ($sec =~ /\w/); |
|
next if ($sec =~ /\W/); |
|
next if ($sec eq 'none'); |
|
push(@allsecs,$sec); |
|
} |
my $newsec = $env{'form.person_'.$i.'_newsec'}; |
my $newsec = $env{'form.person_'.$i.'_newsec'}; |
$newsec =~ s/^\s+//; |
$newsec =~ s/^\s+//; |
$newsec =~s/\s+$//; |
$newsec =~s/\s+$//; |
my @newsecs = split(/[\s,;]+/,$newsec); |
my @newsecs = split(/\s*[\s,;:]\s*/,$newsec); |
foreach my $sec (@newsecs) { |
foreach my $sec (@newsecs) { |
|
next unless ($sec =~ /\w/); |
next if ($sec =~ /\W/); |
next if ($sec =~ /\W/); |
next if ($newsec eq 'none'); |
next if ($sec eq 'none'); |
if ($sec ne '') { |
if ($sec ne '') { |
unless (grep(/^\Q$sec\E$/,@allsecs)) { |
unless (grep(/^\Q$sec\E$/,@allsecs)) { |
push(@allsecs,$sec); |
push(@allsecs,$sec); |
Line 1787 sub print_review {
|
Line 2150 sub print_review {
|
'<td>'.$showsec.'</td></tr>'; |
'<td>'.$showsec.'</td></tr>'; |
} |
} |
} |
} |
my $output = |
my $output; |
'<div>'.&Apache::lonhtmlcommon::start_pick_box(). |
if (ref($disallowed) eq 'ARRAY') { |
|
if (@{$disallowed} > 0) { |
|
if (ref($disallowmsg) eq 'HASH') { |
|
$output = '<p class="LC_warning">'. |
|
&mt('Not all requested personnel could be included.').'<ul>'; |
|
foreach my $item (@{$disallowed}) { |
|
$output .= '<li>'.$disallowmsg->{$item}.'</li>'; |
|
} |
|
$output .= '</ul></p>'; |
|
} |
|
} |
|
} |
|
$output .= '<div>'.&Apache::lonhtmlcommon::start_pick_box(). |
&Apache::lonhtmlcommon::row_title(&mt('Owner')). |
&Apache::lonhtmlcommon::row_title(&mt('Owner')). |
'<table class="LC_innerpickbox"><tr>'. |
'<table class="LC_innerpickbox"><tr>'. |
'<th>'.&mt('Name').'</th>'. |
'<th>'.&mt('Name').'</th>'. |
Line 2050 sub get_course_dom {
|
Line 2425 sub get_course_dom {
|
} |
} |
|
|
sub display_navbuttons { |
sub display_navbuttons { |
my ($r,$formname,$prev,$prevtext,$next,$nexttext,$state,$other,$othertext) = @_; |
my ($r,$dom,$formname,$prev,$prevtext,$next,$nexttext,$state,$other,$othertext) = @_; |
$r->print('<div class="LC_navbuttons">'); |
$r->print('<div class="LC_navbuttons">'); |
if ($prev) { |
if ($prev) { |
$r->print('<input type="button" name="previous" value = "'.$prevtext.'" '. |
$r->print('<input type="button" name="previous" value = "'.$prevtext.'" '. |
'onclick="javascript:backPage(document.'.$formname.','."'".$prev."'".')"/>'. |
'onclick="javascript:backPage('."document.$formname,'$prev'".')"/>'. |
(' 'x3)); |
(' 'x3)); |
} elsif ($prevtext) { |
} elsif ($prevtext) { |
$r->print('<input type="button" name="previous" value = "'.$prevtext.'" '. |
$r->print('<input type="button" name="previous" value = "'.$prevtext.'" '. |
Line 2062 sub display_navbuttons {
|
Line 2437 sub display_navbuttons {
|
} |
} |
if ($state eq 'details') { |
if ($state eq 'details') { |
$r->print(' <input type="button" name="other" value="'.$othertext.'" '. |
$r->print(' <input type="button" name="other" value="'.$othertext.'" '. |
'onclick="javascript:nextPage(document.'.$formname.','."'".$other."'". |
'onclick="javascript:nextPage('."document.$formname,'$other'". |
')" />'); |
')" />'); |
} |
} |
|
my $gotnext; |
if ($state eq 'courseinfo') { |
if ($state eq 'courseinfo') { |
$r->print('<input type="button" name="next" value="'.$nexttext.'" '. |
$r->print('<input type="button" name="next" value="'.$nexttext.'" '. |
'onclick="javascript:validateForm();" />'); |
'onclick="javascript:validateForm();" />'); |
} elsif ($next) { |
$gotnext = 1; |
$r->print(' |
} elsif ($state eq 'enrollment') { |
<input type="button" name="next" value="'.$nexttext.'" '. |
if (($env{'form.crstype'} eq 'official') && |
'onclick="javascript:nextPage(document.'.$formname.','."'".$next."'".')" />'); |
(&Apache::lonnet::auto_run('',$dom))) { |
|
$r->print('<input type="button" name="next" value="'.$nexttext.'" '. |
|
'onclick="javascript:validateEnrollSections('."document.$formname,'$next'".');" />'); |
|
$gotnext = 1; |
|
} |
|
} elsif ($state eq 'personnel') { |
|
if ($env{'form.persontotal'} > 0) { |
|
$r->print('<input type="button" name="next" value="'.$nexttext.'" '. |
|
'onclick="javascript:validatePersonnelSections('."document.$formname,'$next'".');" />'); |
|
$gotnext = 1; |
|
} |
|
} |
|
unless ($gotnext) { |
|
if ($next) { |
|
$r->print(' |
|
<input type="button" name="next" value="'.$nexttext.'" '. |
|
'onclick="javascript:nextPage('."document.$formname,'$next'".')" />'); |
|
} |
} |
} |
$r->print('</div>'); |
$r->print('</div>'); |
} |
} |
Line 2161 sub print_request_outcome {
|
Line 2554 sub print_request_outcome {
|
@{$personnel{$uname.':'.$udom}{$role}{'usec'}} = (); |
@{$personnel{$uname.':'.$udom}{$role}{'usec'}} = (); |
} else { |
} else { |
my @currsec = &Apache::loncommon::get_env_multiple('form.person_'.$i.'_sec'); |
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'}; |
my $newsec = $env{'form.person_'.$i.'_newsec'}; |
$newsec =~ s/^\s+//; |
$newsec =~ s/^\s+//; |
$newsec =~s/\s+$//; |
$newsec =~s/\s+$//; |
my @newsecs = split(/[\s,;]+/,$newsec); |
my @newsecs = split(/[\s,;]+/,$newsec); |
foreach my $sec (@newsecs) { |
foreach my $sec (@newsecs) { |
next if ($sec =~ /\W/); |
next if ($sec =~ /\W/); |
next if ($newsec eq 'none'); |
next if ($sec eq 'none'); |
if ($sec ne '') { |
if ($sec ne '') { |
unless (grep(/^\Q$sec\E$/,@currsec)) { |
unless (grep(/^\Q$sec\E$/,@allsecs)) { |
push(@currsec,$sec); |
push(@allsecs,$sec); |
} |
} |
} |
} |
} |
} |
@{$personnel{$uname.':'.$udom}{$role}{'usec'}} = @currsec; |
@{$personnel{$uname.':'.$udom}{$role}{'usec'}} = @allsecs; |
} |
} |
} |
} |
} else { |
} else { |