version 1.84, 2004/07/03 20:45:23
|
version 1.90, 2004/12/02 21:32:51
|
Line 174 sub print_user_modification_page {
|
Line 174 sub print_user_modification_page {
|
my $ccuname=$ENV{'form.ccuname'}; |
my $ccuname=$ENV{'form.ccuname'}; |
my $ccdomain=$ENV{'form.ccdomain'}; |
my $ccdomain=$ENV{'form.ccdomain'}; |
|
|
$ccuname=~s/\W//gs; |
$ccuname=~s/[\W|_]//gs; |
$ccdomain=~s/\W//gs; |
$ccdomain=~s/[\W|_]//gs; |
|
|
unless (($ccuname) && ($ccdomain)) { |
unless (($ccuname) && ($ccdomain)) { |
&print_username_entry_form($r); |
&print_username_entry_form($r); |
Line 197 sub print_user_modification_page {
|
Line 197 sub print_user_modification_page {
|
$ccuname=~s/\W//g; |
$ccuname=~s/\W//g; |
$ccdomain=~s/\W//g; |
$ccdomain=~s/\W//g; |
my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition(); |
my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition(); |
|
my $dc_setcourse_code = ''; |
|
my $loaditem; |
|
if ($ENV{'request.role'} =~ m-^dc\./(\w+)/$-) { |
|
my $dcdom = $1; |
|
$loaditem = qq|OnLoad="document.cu.coursedesc.value=''"|; |
|
$dc_setcourse_code = <<"ENDSCRIPT"; |
|
function setCourse() { |
|
var course = document.cu.dccourse.value; |
|
if (course != "") { |
|
if (document.cu.dcdomain.value != document.cu.origdom.value) { |
|
alert("You must select a course in the current domain"); |
|
return; |
|
} |
|
var userrole = document.cu.role.options[document.cu.role.selectedIndex].value |
|
var section; |
|
var numsections = 0; |
|
for (var i=0; i<document.cu.currsec.length; i++) { |
|
if (document.cu.currsec.options[i].selected == true ) { |
|
if (document.cu.currsec.options[i].value != "" && document.cu.currsec.options[i].value != null) { |
|
if (numsections == 0) { |
|
section = document.cu.currsec.options[i].value |
|
numsections = 1; |
|
} |
|
else { |
|
section = section + "," + document.cu.currsec.options[i].value |
|
numsections ++; |
|
} |
|
} |
|
} |
|
} |
|
if (document.cu.newsec.value != "" && document.cu.newsec.value != null) { |
|
if (numsections == 0) { |
|
section = document.cu.newsec.value |
|
} |
|
else { |
|
section = section + "," + document.cu.newsec.value |
|
} |
|
var numsplit = document.cu.newsec.value.split(/,/g); |
|
numsections = numsections + numsplit.length; |
|
} |
|
if ((userrole == 'st') && (numsections > 1)) { |
|
alert("In each course, each user may only have one student role at a time. You had selected "+numsections+" sections.\\nPlease modify your selections so they include no more than one section.") |
|
return; |
|
} |
|
if ((userrole == 'cc') && (numsections > 0)) { |
|
alert("Section designations do not apply to Course Coordinator roles.\\nA course coordinator role will be added with access to all sections."); |
|
section = ""; |
|
} |
|
var numcourse = getIndex(document.cu.dccourse); |
|
if (numcourse == "-1") { |
|
alert("There was a problem with your course selection"); |
|
return |
|
} |
|
else { |
|
var coursename = "_$dcdom"+"_"+course+"_"+userrole |
|
document.cu.elements[numcourse].name = "act"+coursename |
|
document.cu.elements[numcourse+4].name = "sec"+coursename |
|
document.cu.elements[numcourse+4].value = section |
|
document.cu.elements[numcourse+5].name = "start"+coursename |
|
document.cu.elements[numcourse+6].name = "end"+coursename |
|
} |
|
} |
|
document.cu.submit(); |
|
} |
|
|
|
function getIndex(caller) { |
|
for (var i=0;i<document.cu.elements.length;i++) { |
|
if (document.cu.elements[i] == caller) { |
|
return i; |
|
} |
|
} |
|
return -1; |
|
} |
|
ENDSCRIPT |
|
} |
my $dochead =<<"ENDDOCHEAD"; |
my $dochead =<<"ENDDOCHEAD"; |
<html> |
<html> |
<head> |
<head> |
Line 210 sub print_user_modification_page {
|
Line 285 sub print_user_modification_page {
|
} |
} |
|
|
$pjump_def |
$pjump_def |
|
$dc_setcourse_code |
|
|
function dateset() { |
function dateset() { |
eval("document.cu."+document.cu.pres_marker.value+ |
eval("document.cu."+document.cu.pres_marker.value+ |
Line 217 sub print_user_modification_page {
|
Line 293 sub print_user_modification_page {
|
pclose(); |
pclose(); |
} |
} |
|
|
|
function setSections() { |
|
var re1 = /^currsec_/; |
|
for (var i=0;i<document.cu.elements.length;i++) { |
|
var str = document.cu.elements[i].name; |
|
var checkcurr = str.match(re1); |
|
if (checkcurr != null) { |
|
var re2 = /^currsec_[a-zA-Z0-9]+_[a-zA-Z0-9]+_(\\w+)\$/; |
|
if (document.cu.elements[i-1].checked == true) { |
|
var re2 = /^currsec_[a-zA-Z0-9]+_[a-zA-Z0-9]+_(\\w+)\$/; |
|
match = re2.exec(str); |
|
var role = match[1]; |
|
if (role == 'cc') { |
|
alert("Section designations do not apply to Course Coordinator roles.\\nA course coordinator role will be added with access to all sections."); |
|
} |
|
else { |
|
var sections = ''; |
|
var numsec = 0; |
|
var sections; |
|
for (var j=0; j<document.cu.elements[i].length; j++) { |
|
if (document.cu.elements[i].options[j].selected == true ) { |
|
if (document.cu.elements[i].options[j].value != "") { |
|
if (numsec == 0) { |
|
if (document.cu.elements[i].options[j].value != "") { |
|
sections = document.cu.elements[i].options[j].value; |
|
numsec ++; |
|
} |
|
} |
|
else { |
|
sections = sections + "," + document.cu.elements[i].options[j].value |
|
numsec ++; |
|
} |
|
} |
|
} |
|
} |
|
if (numsec > 0) { |
|
if (document.cu.elements[i+1].value != "" && document.cu.elements[i+1].value != null) { |
|
sections = sections + "," + document.cu.elements[i+1].value; |
|
} |
|
} |
|
else { |
|
sections = document.cu.elements[i+1].value; |
|
} |
|
var newsecs = document.cu.elements[i+1].value; |
|
if (newsecs != null && newsecs != "") { |
|
var numsplit = newsecs.split(/,/g); |
|
numsec = numsec + numsplit.length; |
|
} |
|
if ((role == 'st') && (numsec > 1)) { |
|
alert("In each course, each user may only have one student role at a time. You had selected "+numsec+" sections.\\nPlease modify your selections so they include no more than one section.") |
|
return; |
|
} |
|
else { |
|
document.cu.elements[i+2].value = sections; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
document.cu.submit(); |
|
} |
</script> |
</script> |
</head> |
</head> |
ENDDOCHEAD |
ENDDOCHEAD |
$r->print(&Apache::loncommon::bodytag( |
$r->print(&Apache::loncommon::bodytag( |
'Create Users, Change User Privileges')); |
'Create Users, Change User Privileges',undef,$loaditem)); |
my $forminfo =<<"ENDFORMINFO"; |
my $forminfo =<<"ENDFORMINFO"; |
<form action="/adm/createuser" method="post" name="cu"> |
<form action="/adm/createuser" method="post" name="cu"> |
<input type="hidden" name="phase" value="update_user_data"> |
<input type="hidden" name="phase" value="update_user_data"> |
Line 348 END
|
Line 484 END
|
'sta' => "Start", |
'sta' => "Start", |
'end' => "End" |
'end' => "End" |
); |
); |
$r->print(<<END); |
my (%roletext,%sortrole,%roleclass,%rolepriv); |
<hr /> |
|
<h3>$lt{'rer'}</h3> |
|
<table> |
|
<tr><th>$lt{'rev'}</th><th>$lt{'ren'}</th><th>$lt{'del'}</th><th>$lt{'rol'}</th><th>$lt{'ext'}</th><th>$lt{'sta'}</th><th>$lt{'end'}</th> |
|
END |
|
my (%roletext,%sortrole,%roleclass); |
|
foreach my $area (sort { my $a1=join('_',(split('_',$a))[1,0]); |
foreach my $area (sort { my $a1=join('_',(split('_',$a))[1,0]); |
my $b1=join('_',(split('_',$b))[1,0]); |
my $b1=join('_',(split('_',$b))[1,0]); |
return $a1 cmp $b1; |
return $a1 cmp $b1; |
Line 389 END
|
Line 519 END
|
$sortkey.="\0".$coursedata{'description'}; |
$sortkey.="\0".$coursedata{'description'}; |
} else { |
} else { |
$carea=&mt('Unavailable course').': '.$area; |
$carea=&mt('Unavailable course').': '.$area; |
$sortkey.="\0".&mt('Unavailable course'); |
$sortkey.="\0".&mt('Unavailable course').': '.$area; |
} |
} |
$inccourses{$1.'_'.$2}=1; |
$inccourses{$1.'_'.$2}=1; |
if ((&Apache::lonnet::allowed('c'.$role_code,$1.'/'.$2)) || |
if ((&Apache::lonnet::allowed('c'.$role_code,$1.'/'.$2)) || |
Line 413 END
|
Line 543 END
|
$bgcol=substr($bgcol.$bgcol.$bgcol.'ffffff',2,6); |
$bgcol=substr($bgcol.$bgcol.$bgcol.'ffffff',2,6); |
if ($area=~/^\/(\w+)\/(\d\w+)\/(\w+)/) { |
if ($area=~/^\/(\w+)\/(\d\w+)\/(\w+)/) { |
$carea.='<br>Section/Group: '.$3; |
$carea.='<br>Section/Group: '.$3; |
|
$sortkey.="\0$3"; |
} |
} |
$area=$carea; |
$area=$carea; |
} else { |
} else { |
Line 492 END
|
Line 623 END
|
$sortrole{$sortkey}=$envkey; |
$sortrole{$sortkey}=$envkey; |
$roletext{$envkey}=$row; |
$roletext{$envkey}=$row; |
$roleclass{$envkey}=$class; |
$roleclass{$envkey}=$class; |
|
$rolepriv{$envkey}=$allowed; |
#$r->print($row); |
#$r->print($row); |
} # end of foreach (table building loop) |
} # end of foreach (table building loop) |
|
my $rolesdisplay = 0; |
|
my %output = (); |
foreach my $type ('Construction Space','Course','Domain','System','Unknown') { |
foreach my $type ('Construction Space','Course','Domain','System','Unknown') { |
my $output; |
$output{$type} = ''; |
foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) { |
foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) { |
if ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/) { |
if ( ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/ ) && ($rolepriv{$sortrole{$which}}) ) { |
$output.=$roletext{$sortrole{$which}}; |
$output{$type}.=$roletext{$sortrole{$which}}; |
} |
} |
} |
} |
if (defined($output)) { |
unless($output{$type} eq '') { |
$r->print("<tr bgcolor='#BBffBB'>". |
$output{$type} = "<tr bgcolor='#BBffBB'>". |
"<td align='center' colspan='7'>".&mt($type)."</td>"); |
"<td align='center' colspan='7'>".&mt($type)."</td>". |
|
$output{$type}; |
|
$rolesdisplay = 1; |
} |
} |
$r->print($output); |
|
} |
} |
$r->print('</table>'); |
if ($rolesdisplay == 1) { |
|
$r->print(<<END); |
|
<hr /> |
|
<h3>$lt{'rer'}</h3> |
|
<table> |
|
<tr><th>$lt{'rev'}</th><th>$lt{'ren'}</th><th>$lt{'del'}</th><th>$lt{'rol'}</th><th>$lt{'e |
|
xt'}</th><th>$lt{'sta'}</th><th>$lt{'end'}</th> |
|
END |
|
foreach my $type ('Construction Space','Course','Domain','System','Unknown') { |
|
if ($output{$type}) { |
|
$r->print($output{$type}."\n"); |
|
} |
|
} |
|
$r->print('</table>'); |
|
} |
} # End of unless |
} # End of unless |
my $currentauth=&Apache::lonnet::queryauthenticate($ccuname,$ccdomain); |
my $currentauth=&Apache::lonnet::queryauthenticate($ccuname,$ccdomain); |
if ($currentauth=~/^krb(4|5):/) { |
if ($currentauth=~/^krb(4|5):/) { |
Line 649 ENDCOAUTH
|
Line 798 ENDCOAUTH
|
# |
# |
# Domain level |
# Domain level |
# |
# |
$r->print('<h4>'.&mt('Domain Level').'</h4>'. |
my $num_domain_level = 0; |
|
my $domaintext = |
|
'<h4>'.&mt('Domain Level').'</h4>'. |
'<table border=2><tr><th>'.&mt('Activate').'</th><th>'.&mt('Role').'</th><th>'.&mt('Extent').'</th>'. |
'<table border=2><tr><th>'.&mt('Activate').'</th><th>'.&mt('Role').'</th><th>'.&mt('Extent').'</th>'. |
'<th>'.&mt('Start').'</th><th>'.&mt('End').'</th></tr>'); |
'<th>'.&mt('Start').'</th><th>'.&mt('End').'</th></tr>'; |
foreach ( sort( keys(%incdomains))) { |
foreach ( sort( keys(%incdomains))) { |
my $thisdomain=$_; |
my $thisdomain=$_; |
foreach ('dc','li','dg','au','sc') { |
foreach ('dc','li','dg','au','sc') { |
Line 661 ENDCOAUTH
|
Line 812 ENDCOAUTH
|
'ssd' => "Set Start Date", |
'ssd' => "Set Start Date", |
'sed' => "Set End Date" |
'sed' => "Set End Date" |
); |
); |
$r->print(<<ENDDROW); |
$num_domain_level ++; |
|
$domaintext .= <<"ENDDROW"; |
<tr> |
<tr> |
<td><input type=checkbox name="act_$thisdomain\_$_"></td> |
<td><input type=checkbox name="act_$thisdomain\_$_"></td> |
<td>$plrole</td> |
<td>$plrole</td> |
Line 677 ENDDROW
|
Line 829 ENDDROW
|
} |
} |
} |
} |
} |
} |
$r->print('</table>'); |
$domaintext.='</table>'; |
|
if ($num_domain_level > 0) { |
|
$r->print($domaintext); |
|
} |
# |
# |
# Course level |
# Course level |
# |
# |
$r->print(&course_level_table(%inccourses)); |
my $num_sections; |
$r->print("<hr /><input type=submit value=\"".&mt('Modify User')."\">\n"); |
|
|
if ($ENV{'request.role'} =~ m-^dc\./(\w+)/$-) { |
|
$r->print(&course_level_dc($1)); |
|
$r->print('<hr /><input type="button" value="'.&mt('Modify User').'" onClick="setCourse()">'."\n"); |
|
} else { |
|
$r->print(&course_level_table(%inccourses)); |
|
$r->print('<hr /><input type="button" value="'.&mt('Modify User').'" onClick="setSections()">'."\n"); |
|
} |
$r->print("</form></body></html>"); |
$r->print("</form></body></html>"); |
} |
} |
|
|
Line 963 END
|
Line 1125 END
|
} |
} |
} elsif ($_=~/^form\.ren/) { |
} elsif ($_=~/^form\.ren/) { |
if ($_=~/^form\.ren\:([^\_]+)\_([^\_]+)$/) { |
if ($_=~/^form\.ren\:([^\_]+)\_([^\_]+)$/) { |
my $result=&Apache::lonnet::assignrole($ENV{'form.ccdomain'}, |
my $url = $1; |
$ENV{'form.ccuname'},$1,$2,0,$now); |
my $role = $2; |
$r->print(&mt('Re-Enabling [_1] in [_2]: [_3]', |
my $logmsg; |
$2,$1,$result).'<br />'); |
my $output; |
if ($2 eq 'st') { |
if ($role eq 'st') { |
$1=~/^\/(\w+)\/(\w+)/; |
if ($url =~ m-^/(\w+)/(\w+)/?(\w*)$-) { |
my $cid=$1.'_'.$2; |
my $result = &commit_studentrole(\$logmsg,$url,$role,$now,0,$1,$2,$3); |
$r->print(&mt('Add to classlist').': <b>'. |
if (($result =~ /^error/) || ($result eq 'not_in_class') || ($result eq 'unknown_course')) { |
&Apache::lonnet::critical( |
$output = "Error: $result\n"; |
'put:'.$ENV{'course.'.$cid.'.domain'}.':'. |
} else { |
$ENV{'course.'.$cid.'.num'}.':classlist:'. |
$output = &mt('Assigning').' '.$role.' in '.$url. |
&Apache::lonnet::escape( |
&mt('starting').' '.localtime($now). |
$ENV{'form.ccuname'}.':'. |
': <br />'.$logmsg.'<br />'. |
$ENV{'form.ccdomain'} ).'='. |
&mt('Add to classlist').': <b>ok</b><br />'; |
&Apache::lonnet::escape(':'.$now), |
} |
$ENV{'course.'.$cid.'.home'}) |
} |
.'</b><br>'); |
} else { |
|
my $result=&Apache::lonnet::assignrole($ENV{'form.ccdomain'}, |
|
$ENV{'form.ccuname'},$url,$role,0,$now); |
|
$output = &mt('Re-Enabling [_1] in [_2]: [_3]', |
|
$role,$url,$result).'<br />'; |
} |
} |
|
$r->print($output); |
} |
} |
} elsif ($_=~/^form\.act/) { |
} elsif ($_=~/^form\.act/) { |
if ($_=~/^form\.act\_([^\_]+)\_([^\_]+)\_cr_cr_([^\_]+)_(\w+)_([^\_]+)$/) { |
if ($_=~/^form\.act\_([^\_]+)\_([^\_]+)\_cr_cr_([^\_]+)_(\w+)_([^\_]+)$/) { |
Line 988 END
|
Line 1155 END
|
my ($one,$two,$three,$four,$five)=($1,$2,$3,$4,$5); |
my ($one,$two,$three,$four,$five)=($1,$2,$3,$4,$5); |
my $url='/'.$one.'/'.$two; |
my $url='/'.$one.'/'.$two; |
my $full=$one.'_'.$two.'_cr_cr_'.$three.'_'.$four.'_'.$five; |
my $full=$one.'_'.$two.'_cr_cr_'.$three.'_'.$four.'_'.$five; |
$ENV{'form.sec_'.$full}=~s/\W//g; |
|
if ($ENV{'form.sec_'.$full}) { |
|
$url.='/'.$ENV{'form.sec_'.$full}; |
|
} |
|
|
|
my $start = ( $ENV{'form.start_'.$full} ? |
my $start = ( $ENV{'form.start_'.$full} ? |
$ENV{'form.start_'.$full} : |
$ENV{'form.start_'.$full} : |
$now ); |
$now ); |
my $end = ( $ENV{'form.end_'.$full} ? |
my $end = ( $ENV{'form.end_'.$full} ? |
$ENV{'form.end_'.$full} : |
$ENV{'form.end_'.$full} : |
0 ); |
0 ); |
|
|
$r->print(&mt('Assigning custom role').' "'.$five.'" by '.$four.'@'.$three.' in '.$url. |
# split multiple sections |
($start?', '.&mt('starting').' '.localtime($start):''). |
my %sections = (); |
($end?', ending '.localtime($end):'').': <b>'. |
my $num_sections = &build_roles($ENV{'form.sec_'.$full},\%sections,$5); |
&Apache::lonnet::assigncustomrole( |
if ($num_sections == 0) { |
$ENV{'form.ccdomain'},$ENV{'form.ccuname'},$url,$three,$four,$five,$end,$start). |
$r->print(&commit_customrole($url,$three,$four,$five,$start,$end)); |
'</b><br>'); |
} else { |
|
foreach (sort {$a cmp $b} keys %sections) { |
|
my $securl = $url.'/'.$_; |
|
$r->print(&commit_customrole($securl,$three,$four,$five,$start,$end)); |
|
} |
|
} |
} elsif ($_=~/^form\.act\_([^\_]+)\_([^\_]+)\_([^\_]+)$/) { |
} elsif ($_=~/^form\.act\_([^\_]+)\_([^\_]+)\_([^\_]+)$/) { |
# Activate roles for sections with 3 id numbers |
# Activate roles for sections with 3 id numbers |
# set start, end times, and the url for the class |
# set start, end times, and the url for the class |
Line 1017 END
|
Line 1185 END
|
$ENV{'form.end_'.$one.'_'.$two.'_'.$three} : |
$ENV{'form.end_'.$one.'_'.$two.'_'.$three} : |
0 ); |
0 ); |
my $url='/'.$one.'/'.$two; |
my $url='/'.$one.'/'.$two; |
$ENV{'form.sec_'.$one.'_'.$two.'_'.$three}=~s/\W//g; |
my $type = 'three'; |
if ($ENV{'form.sec_'.$one.'_'.$two.'_'.$three}) { |
# split multiple sections |
$url.='/'.$ENV{'form.sec_'.$one.'_'.$two.'_'.$three}; |
my %sections = (); |
} |
my $num_sections = &build_roles($ENV{'form.sec_'.$one.'_'.$two.'_'.$three},\%sections,$three); |
# Assign the role and report it |
if ($num_sections == 0) { |
$r->print(&mt('Assigning').' '.$three.' in '.$url. |
$r->print(&commit_standardrole($url,$three,$start,$end,$one,$two,'')); |
($start?', '.&mt('starting').' '.localtime($start):''). |
} else { |
($end?', '.&mt('ending').' '.localtime($end):'').': <b>'. |
my $emptysec = 0; |
&Apache::lonnet::assignrole( |
foreach my $sec (sort {$a cmp $b} keys %sections) { |
$ENV{'form.ccdomain'},$ENV{'form.ccuname'}, |
$sec =~ s/\W//g; |
$url,$three,$end,$start). |
if ($sec ne '') { |
'</b><br>'); |
my $securl = $url.'/'.$sec; |
# Handle students differently |
$r->print(&commit_standardrole($securl,$three,$start,$end,$one,$two,$sec)); |
if ($three eq 'st') { |
} else { |
$url=~/^\/(\w+)\/(\w+)/; |
$emptysec = 1; |
my $cid=$one.'_'.$two; |
} |
$r->print(&mt('Add to classlist').': <b>'. |
} |
&Apache::lonnet::critical( |
if ($emptysec) { |
'put:'.$ENV{'course.'.$cid.'.domain'}.':'. |
$r->print(&commit_standardrole($url,$three,$start,$end,$one,$two,'')); |
$ENV{'course.'.$cid.'.num'}.':classlist:'. |
} |
&Apache::lonnet::escape( |
} |
$ENV{'form.ccuname'}.':'. |
|
$ENV{'form.ccdomain'} ).'='. |
|
&Apache::lonnet::escape($end.':'.$start), |
|
$ENV{'course.'.$cid.'.home'}) |
|
.'</b><br>'); |
|
} |
|
} elsif ($_=~/^form\.act\_([^\_]+)\_([^\_]+)$/) { |
} elsif ($_=~/^form\.act\_([^\_]+)\_([^\_]+)$/) { |
# Activate roles for sections with two id numbers |
# Activate roles for sections with two id numbers |
# set start, end times, and the url for the class |
# set start, end times, and the url for the class |
Line 1054 END
|
Line 1216 END
|
$ENV{'form.end_'.$1.'_'.$2} : |
$ENV{'form.end_'.$1.'_'.$2} : |
0 ); |
0 ); |
my $url='/'.$1.'/'; |
my $url='/'.$1.'/'; |
|
# split multiple sections |
|
my %sections = (); |
|
my $num_sections = &build_roles($ENV{'form.sec_'.$1.'_'.$2},\%sections,$2); |
|
if ($num_sections == 0) { |
|
$r->print(&commit_standardrole($url,$2,$start,$end,$1,undef,'')); |
|
} else { |
|
my $emptysec = 0; |
|
foreach my $sec (sort {$a cmp $b} keys %sections) { |
|
if ($sec ne '') { |
|
my $securl = $url.'/'.$sec; |
|
$r->print(&commit_standardrole($securl,$2,$start,$end,$1,undef,$sec)); |
|
} else { |
|
$emptysec = 1; |
|
} |
|
} |
|
if ($emptysec) { |
|
$r->print(&commit_standardrole($url,$2,$start,$end,$1,undef,'')); |
|
} |
|
} |
# Assign the role and report it. |
# Assign the role and report it. |
$r->print(&mt('Assigning').' '.$2.' in '.$url.': '. |
$r->print(&mt('Assigning').' '.$2.' in '.$url.': '. |
($start?', '.&mt('starting').' '.localtime($start):''). |
($start?', '.&mt('starting').' '.localtime($start):''). |
Line 1072 END
|
Line 1253 END
|
$r->print('</body></html>'); |
$r->print('</body></html>'); |
} |
} |
|
|
|
sub commit_customrole { |
|
my ($url,$three,$four,$five,$end,$start) = @_; |
|
my $output = &mt('Assigning custom role').' "'.$five.'" by '.$four.'@'.$three.' in '.$url. |
|
($start?', '.&mt('starting').' '.localtime($start):''). |
|
($end?', ending '.localtime($end):'').': <b>'. |
|
&Apache::lonnet::assigncustomrole( |
|
$ENV{'form.ccdomain'},$ENV{'form.ccuname'},$url,$three,$four,$five,$end,$start). |
|
'</b><br>'; |
|
return $output; |
|
} |
|
|
|
sub commit_standardrole { |
|
my ($url,$three,$start,$end,$one,$two,$sec) = @_; |
|
my $output; |
|
my $logmsg; |
|
if ($three eq 'st') { |
|
my $result = &commit_studentrole(\$logmsg,$url,$three,$start,$end,$one,$two,$sec); |
|
if (($result =~ /^error/) || ($result eq 'not_in_class') || ($result eq 'unknown_course')) { |
|
$output = "Error: $result\n"; |
|
} else { |
|
$output = &mt('Assigning').' '.$three.' in '.$url. |
|
($start?', '.&mt('starting').' '.localtime($start):''). |
|
($end?', '.&mt('ending').' '.localtime($end):''). |
|
': <b>'.$result.'</b><br />'. |
|
&mt('Add to classlist').': <b>ok</b><br />'; |
|
} |
|
} else { |
|
$output = (&mt('Assigning').' '.$three.' in '.$url. |
|
($start?', '.&mt('starting').' '.localtime($start):''). |
|
($end?', '.&mt('ending').' '.localtime($end):'').': <b>'. |
|
&Apache::lonnet::assignrole( |
|
$ENV{'form.ccdomain'},$ENV{'form.ccuname'}, |
|
$url,$three,$end,$start). |
|
'</b><br>'); |
|
} |
|
return $output; |
|
} |
|
|
|
sub commit_studentrole { |
|
my ($logmsg,$url,$three,$start,$end,$one,$two,$sec) = @_; |
|
my $udom = $ENV{'form.ccdomain'}; |
|
my $uname = $ENV{'form.ccuname'}; |
|
my $linefeed = '<br />'."\n"; |
|
my $result; |
|
if (defined($one) && defined($two)) { |
|
my $cid=$one.'_'.$two; |
|
my $oldsec=&Apache::lonnet::getsection($udom,$uname,$cid); |
|
my $secchange = 0; |
|
my $expire_role_result; |
|
my $modify_section_result; |
|
unless ($oldsec eq '-1') { |
|
unless ($sec eq $oldsec) { |
|
$secchange = 1; |
|
my $uurl='/'.$cid; |
|
$uurl=~s/\_/\//g; |
|
if ($oldsec) { |
|
$uurl.='/'.$oldsec; |
|
} |
|
$expire_role_result = &Apache::lonnet::assignrole($udom,$uname,$uurl,'st',time); |
|
$result = $expire_role_result; |
|
} |
|
} |
|
if (($expire_role_result eq 'ok') || ($secchange == 0)) { |
|
$modify_section_result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,'','',$cid); |
|
if ($modify_section_result =~ /^ok/) { |
|
if ($secchange == 1) { |
|
$$logmsg .= "Section for $uname switched from old section: $oldsec to new section: $sec".$linefeed; |
|
} elsif ($oldsec eq '-1') { |
|
$$logmsg .= "New student role for $uname in section $sec in course $cid".$linefeed; |
|
} else { |
|
$$logmsg .= "Student $uname assigned to unchanged section $sec in course $cid".$linefeed; |
|
} |
|
} else { |
|
$$logmsg .= "Error when attempting section change for $uname from old section $oldsec to new section: $sec in course $cid -error: $modify_section_result".$linefeed; |
|
} |
|
$result = $modify_section_result; |
|
} elsif ($secchange == 1) { |
|
$$logmsg .= "Error when attempting to expire role for $uname in old section $oldsec in course $cid -error: $expire_role_result".$linefeed; |
|
} |
|
} else { |
|
$$logmsg .= "Incomplete course id defined. Addition of user $uname from domain $udom to course $one\_$two, section $sec not completed.$linefeed"; |
|
$result = "Error: incomplete course id\n"; |
|
} |
|
return $result; |
|
} |
|
|
|
sub build_roles { |
|
my ($sectionstr,$sections,$role) = @_; |
|
my $num_sections = 0; |
|
if ($sectionstr=~ /,/) { |
|
my @secnums = split/,/,$sectionstr; |
|
if ($role eq 'st') { |
|
$secnums[0] =~ s/\W//g; |
|
$$sections{$secnums[0]} = 1; |
|
$num_sections = 1; |
|
} else { |
|
foreach my $sec (@secnums) { |
|
$sec =~ ~s/\W//g; |
|
unless ($sec eq "") { |
|
if (exists($$sections{$sec})) { |
|
$$sections{$sec} ++; |
|
} else { |
|
$$sections{$sec} = 1; |
|
$num_sections ++; |
|
} |
|
} |
|
} |
|
} |
|
} else { |
|
$sectionstr=~s/\W//g; |
|
unless ($sectionstr eq '') { |
|
$$sections{$sectionstr} = 1; |
|
$num_sections ++; |
|
} |
|
} |
|
|
|
return $num_sections; |
|
} |
|
|
# ========================================================== Custom Role Editor |
# ========================================================== Custom Role Editor |
|
|
sub custom_role_editor { |
sub custom_role_editor { |
Line 1280 sub handler {
|
Line 1580 sub handler {
|
|
|
#-------------------------------------------------- functions for &phase_two |
#-------------------------------------------------- functions for &phase_two |
sub course_level_table { |
sub course_level_table { |
my %inccourses = @_; |
my (%inccourses) = @_; |
my $table = ''; |
my $table = ''; |
# Custom Roles? |
# Custom Roles? |
|
|
my %customroles=&my_custom_roles(); |
my %customroles=&my_custom_roles(); |
|
my %lt=&Apache::lonlocal::texthash( |
|
'exs' => "Existing sections", |
|
'new' => "Define new section", |
|
'ssd' => "Set Start Date", |
|
'sed' => "Set End Date", |
|
'crl' => "Course Level", |
|
'act' => "Activate", |
|
'rol' => "Role", |
|
'ext' => "Extent", |
|
'grs' => "Group/Section", |
|
'sta' => "Start", |
|
'end' => "End" |
|
); |
|
|
foreach (sort( keys(%inccourses))) { |
foreach (sort( keys(%inccourses))) { |
my $thiscourse=$_; |
my $thiscourse=$_; |
Line 1296 sub course_level_table {
|
Line 1609 sub course_level_table {
|
my $bgcol=$thiscourse; |
my $bgcol=$thiscourse; |
$bgcol=~s/[^7-9a-e]//g; |
$bgcol=~s/[^7-9a-e]//g; |
$bgcol=substr($bgcol.$bgcol.$bgcol.'ffffff',2,6); |
$bgcol=substr($bgcol.$bgcol.$bgcol.'ffffff',2,6); |
my ($domain)=split(/\//,$thiscourse); |
my ($domain,$cnum)=split(/\//,$thiscourse); |
|
my %sections_count = (); |
|
my $num_sections = &Apache::loncommon::get_sections($domain,$cnum,\%sections_count); |
foreach ('st','ta','ep','ad','in','cc') { |
foreach ('st','ta','ep','ad','in','cc') { |
if (&Apache::lonnet::allowed('c'.$_,$thiscourse)) { |
if (&Apache::lonnet::allowed('c'.$_,$thiscourse)) { |
my $plrole=&Apache::lonnet::plaintext($_); |
my $plrole=&Apache::lonnet::plaintext($_); |
Line 1307 sub course_level_table {
|
Line 1622 sub course_level_table {
|
<td>$area<br />Domain: $domain</td> |
<td>$area<br />Domain: $domain</td> |
ENDEXTENT |
ENDEXTENT |
if ($_ ne 'cc') { |
if ($_ ne 'cc') { |
$table .= <<ENDSECTION; |
if ($num_sections > 0) { |
<td><input type="text" size="5" name="sec_$protectedcourse\_$_"></td> |
my $currsec = &course_sections($num_sections,\%sections_count,$protectedcourse.'_'.$_); |
ENDSECTION |
$table .= |
|
'<td><table border="0" cellspacing="0" cellpadding="0">'. |
|
'<tr><td valign="top">'.$lt{'exs'}.'<br />'. |
|
$currsec.'</td>'. |
|
'<td> </td>'. |
|
'<td valign="top"> '.$lt{'new'}.'<br />'. |
|
'<input type="text" name="newsec_'.$protectedcourse.'_'.$_.'" value="" /></td>'. |
|
'<input type="hidden" '. |
|
'name="sec_'.$protectedcourse.'_'.$_.'"></td>'. |
|
'</tr></table></td>'; |
|
} else { |
|
$table .= '<td><input type="text" size="10" '. |
|
'name="sec_'.$protectedcourse.'_'.$_.'"></td>'; |
|
} |
} else { |
} else { |
$table .= <<ENDSECTION; |
$table .= '<td> </td>'; |
<td> </td> |
|
ENDSECTION |
|
} |
} |
my %lt=&Apache::lonlocal::texthash( |
|
'ssd' => "Set Start Date", |
|
'sed' => "Set End Date" |
|
); |
|
$table .= <<ENDTIMEENTRY; |
$table .= <<ENDTIMEENTRY; |
<td><input type=hidden name="start_$protectedcourse\_$_" value=''> |
<td><input type=hidden name="start_$protectedcourse\_$_" value=''> |
<a href= |
<a href= |
Line 1335 ENDTIMEENTRY
|
Line 1657 ENDTIMEENTRY
|
my $plrole=$_; |
my $plrole=$_; |
my $customrole=$protectedcourse.'_cr_cr_'.$ENV{'user.domain'}. |
my $customrole=$protectedcourse.'_cr_cr_'.$ENV{'user.domain'}. |
'_'.$ENV{'user.name'}.'_'.$plrole; |
'_'.$ENV{'user.name'}.'_'.$plrole; |
my %lt=&Apache::lonlocal::texthash( |
$table .= <<END; |
'ssd' => "Set Start Date", |
|
'sed' => "Set End Date" |
|
); |
|
$table .= <<ENDENTRY; |
|
<tr bgcolor="#$bgcol"> |
<tr bgcolor="#$bgcol"> |
<td><input type="checkbox" name="act_$customrole"></td> |
<td><input type="checkbox" name="act_$customrole"></td> |
<td>$plrole</td> |
<td>$plrole</td> |
<td>$area</td> |
<td>$area</td> |
<td><input type="text" size="5" name="sec_$customrole"></td> |
END |
|
if ($num_sections > 0) { |
|
my $currsec = &course_sections($num_sections,\%sections_count,$customrole); |
|
$table.= |
|
'<td><table border="0" cellspacing="0" cellpadding="0">'. |
|
'<tr><td valign="top">'.$lt{'exs'}.'<br />'. |
|
$currsec.'</td>'. |
|
'<td> </td>'. |
|
'<td valign="top"> '.$lt{'new'}.'<br />'. |
|
'<input type="text" name="newsec_'.$customrole.'" value="" /></td>'. |
|
'<input type="hidden" '. |
|
'name="sec_'.$customrole.'"></td>'. |
|
'</tr></table></td>'; |
|
} else { |
|
$table .= '<td><input type="text" size="10" '. |
|
'name="sec_'.$customrole.'"></td>'; |
|
} |
|
$table .= <<ENDENTRY; |
<td><input type=hidden name="start_$customrole" value=''> |
<td><input type=hidden name="start_$customrole" value=''> |
<a href= |
<a href= |
"javascript:pjump('date_start','Start Date $plrole',document.cu.start_$customrole.value,'start_$customrole','cu.pres','dateset')">$lt{'ssd'}</a></td> |
"javascript:pjump('date_start','Start Date $plrole',document.cu.start_$customrole.value,'start_$customrole','cu.pres','dateset')">$lt{'ssd'}</a></td> |
Line 1357 ENDENTRY
|
Line 1692 ENDENTRY
|
} |
} |
return '' if ($table eq ''); # return nothing if there is nothing |
return '' if ($table eq ''); # return nothing if there is nothing |
# in the table |
# in the table |
my %lt=&Apache::lonlocal::texthash( |
|
'crl' => "Course Level", |
|
'act' => "Activate", |
|
'rol' => "Role", |
|
'ext' => "Extent", |
|
'grs' => "Group/Section", |
|
'sta' => "Start", |
|
'end' => "End" |
|
); |
|
my $result = <<ENDTABLE; |
my $result = <<ENDTABLE; |
<h4>$lt{'crl'}</h4> |
<h4>$lt{'crl'}</h4> |
<table border=2><tr><th>$lt{'act'}</th><th>$lt{'rol'}</th><th>$lt{'ext'}</th> |
<table border=2><tr><th>$lt{'act'}</th><th>$lt{'rol'}</th><th>$lt{'ext'}</th> |
Line 1375 $table
|
Line 1701 $table
|
ENDTABLE |
ENDTABLE |
return $result; |
return $result; |
} |
} |
|
|
|
sub course_sections { |
|
my ($num_sections,$sections_count,$role) = @_; |
|
my $output = ''; |
|
my @sections = (sort {$a <=> $b} keys %{$sections_count}); |
|
$output = '<select name="currsec_'.$role.'" '; |
|
my $multiple = 4; |
|
if ($num_sections <4) { $multiple = $num_sections; } |
|
$output .= '"multiple size="'.$multiple.'" >'."\n"; |
|
foreach (@sections) { |
|
$output .= '<option value="'.$_.'" />'.$_."\n"; |
|
} |
|
$output .= '</select>'; |
|
return $output; |
|
} |
|
|
|
sub course_level_dc { |
|
my ($dcdom) = @_; |
|
my %customroles=&my_custom_roles(); |
|
my $hiddenitems = '<input type="hidden" name="dcdomain" value="'.$dcdom.'" />'. |
|
'<input type="hidden" name="origdom" value="'.$dcdom.'" />'. |
|
'<input type="hidden" name="dccourse" value="" />'; |
|
my $courseform='<b>'.&Apache::loncommon::selectcourse_link |
|
('cu','dccourse','dcdomain','coursedesc').'</b>'; |
|
|
|
my $cb_jscript = &Apache::loncommon::coursebrowser_javascript($dcdom,$dcdom); |
|
my %lt=&Apache::lonlocal::texthash( |
|
'crl' => "Course Level", |
|
'crt' => "Course Title", |
|
'rol' => "Role", |
|
'grs' => "Group/Section", |
|
'exs' => "Existing sections", |
|
'new' => "Define new section", |
|
'sta' => "Start", |
|
'end' => "End", |
|
'ssd' => "Set Start Date", |
|
'sed' => "Set End Date" |
|
); |
|
my $header = '<h4>'.$lt{'crl'}.'</h4>'. |
|
'<table border="2"><tr><th>'.$courseform.'</th><th>'.$lt{'rol'}.'</th><th>'.$lt{'grs'}.'</th><th>'.$lt{'sta'}.'</th><th>'.$lt{'end'}.'</th></tr>'; |
|
my $otheritems = '<tr><td><input type="text" name="coursedesc" value="" onFocus="this.blur();opencrsbrowser('."'".'cu'."'".','."'".'dccourse'."'".','."'".'dcdomain'."'".','."'".'coursedesc'."',''".')" /></td>'. |
|
'<td><select name="role">'."\n"; |
|
foreach ('st','ta','ep','ad','in','cc') { |
|
my $plrole=&Apache::lonnet::plaintext($_); |
|
$otheritems .= ' <option value="'.$_.'">'.$plrole; |
|
} |
|
if ( keys %customroles > 0) { |
|
foreach (sort keys %customroles) { |
|
my $custrole='cr_cr_'.$ENV{'user.domain'}. |
|
'_'.$ENV{'user.name'}.'_'.$_; |
|
$otheritems .= ' <option value="'.$custrole.'">'.$_; |
|
} |
|
} |
|
$otheritems .= '</select></td><td>'. |
|
'<table border="0" cellspacing="0" cellpadding="0">'. |
|
'<tr><td valign="top"><b>'.$lt{'exs'}.'</b><br /><select name="currsec">'. |
|
' <option value=""><--'.&mt('Pick course first').'</select></td>'. |
|
'<td> </td>'. |
|
'<td valign="top"> <b>'.$lt{'new'}.'</b><br />'. |
|
'<input type="text" name="newsec" value="" /></td>'. |
|
'</tr></table></td>'; |
|
$otheritems .= <<ENDTIMEENTRY; |
|
<td><input type=hidden name="start" value=''> |
|
<a href= |
|
"javascript:pjump('date_start','Start Date',document.cu.start.value,'start','cu.pres','dateset')">$lt{'ssd'}</a></td> |
|
<td><input type=hidden name="end" value=''> |
|
<a href= |
|
"javascript:pjump('date_end','End Date',document.cu.end.value,'end','cu.pres','dateset')">$lt{'sed'}</a></td> |
|
ENDTIMEENTRY |
|
$otheritems .= "</tr></table>\n"; |
|
return $cb_jscript.$header.$hiddenitems.$otheritems; |
|
} |
|
|
#---------------------------------------------- end functions for &phase_two |
#---------------------------------------------- end functions for &phase_two |
|
|
#--------------------------------- functions for &phase_two and &phase_three |
#--------------------------------- functions for &phase_two and &phase_three |