version 1.22, 2007/12/22 00:39:52
|
version 1.27, 2007/12/22 17:33:26
|
Line 738 sub print_upload_manager_footer {
|
Line 738 sub print_upload_manager_footer {
|
} |
} |
if ($context eq 'author') { |
if ($context eq 'author') { |
$Str .= '<h3>'.&mt('Default role')."</h3>\n". |
$Str .= '<h3>'.&mt('Default role')."</h3>\n". |
&mt('Choose the role to assign to users without one specified in the uploaded file'); |
&mt('Choose the role to assign to users without a value specified in the uploaded file'); |
} elsif ($context eq 'course') { |
} elsif ($context eq 'course') { |
$Str .= '<h3>'.&mt('Default role and section')."</h3>\n". |
$Str .= '<h3>'.&mt('Default role and section')."</h3>\n". |
&mt('Choose the role and/or section to assign to users without one specified in the uploaded file'); |
&mt('Choose the role and/or section(s) to assign to users without values specified in the uploaded file'); |
} else { |
} else { |
$Str .= '<br /><br /><b>'.&mt('Default role and/or section')."</b><br />\n". |
$Str .= '<br /><br /><b>'.&mt('Default role and/or section(s)')."</b><br />\n". |
&mt('Role and/or section for users without one in the uploaded file.'); |
&mt('Role and/or section(s) for users without values specified in the uploaded file.'); |
} |
} |
$Str .= '<br />'; |
$Str .= '<br />'; |
if (($context eq 'domain') || ($context eq 'author')) { |
if (($context eq 'domain') || ($context eq 'author')) { |
Line 786 sub forceid_change {
|
Line 786 sub forceid_change {
|
"<p>\n".'<label><input type="checkbox" name="forceid" value="yes">'. |
"<p>\n".'<label><input type="checkbox" name="forceid" value="yes">'. |
&mt('Disable ID/Student Number Safeguard and Force Change '. |
&mt('Disable ID/Student Number Safeguard and Force Change '. |
'of Conflicting IDs').'</label><br />'."\n". |
'of Conflicting IDs').'</label><br />'."\n". |
&mt('(only do if you know what you are doing.)')."</br><br />\n"; |
&mt('(only do if you know what you are doing.)')."\n"; |
if ($context eq 'domain') { |
if ($context eq 'domain') { |
$output .= '<label><input type="checkbox" name="recurseid"'. |
$output .= '<br /><label><input type="checkbox" name="recurseid"'. |
' value="yes">'. |
' value="yes">'. |
&mt('Update ID/Student Number in courses in which user is Active/Future student,<br />(if forcing change).'). |
&mt('Update ID/Student Number in courses in which user is Active/Future student,<br />(if forcing change).'). |
'</label></p>'."\n"; |
'</label>'."\n"; |
} |
} |
|
$output .= '</p>'; |
return $output; |
return $output; |
} |
} |
|
|
Line 962 sub date_setting_table {
|
Line 963 sub date_setting_table {
|
($env{'form.action'} eq 'upload')) { |
($env{'form.action'} eq 'upload')) { |
if ($env{'request.course.sec'} eq '') { |
if ($env{'request.course.sec'} eq '') { |
$dateDefault = '<span class="LC_nobreak">'. |
$dateDefault = '<span class="LC_nobreak">'. |
'<label><input type="checkbox" name="makedatesdefault" /> '. |
'<label><input type="checkbox" name="makedatesdefault" value="1" /> '. |
&mt('make these dates the default access dates for future student enrollment'). |
&mt('make these dates the default access dates for future student enrollment'). |
'</label></span>'; |
'</label></span>'; |
} |
} |
Line 1001 sub make_dates_default {
|
Line 1002 sub make_dates_default {
|
{'default_enrollment_start_date'=>$startdate, |
{'default_enrollment_start_date'=>$startdate, |
'default_enrollment_end_date' =>$enddate},$cdom,$cnum); |
'default_enrollment_end_date' =>$enddate},$cdom,$cnum); |
if ($put_result eq 'ok') { |
if ($put_result eq 'ok') { |
$result .= &mt('Set default start and end dates for course'). |
$result .= &mt('Set default start and end access dates for course.'). |
'<br />'."\n"; |
'<br />'."\n"; |
# |
# |
# Refresh the course environment |
# Refresh the course environment |
&Apache::lonnet::coursedescription($env{'request.course.id'}, |
&Apache::lonnet::coursedescription($env{'request.course.id'}, |
{'freshen_cache' => 1}); |
{'freshen_cache' => 1}); |
} else { |
} else { |
$result .= &mt('Unable to set default dates for course').":".$put_result. |
$result .= &mt('Unable to set default access dates for course.').":".$put_result. |
'<br />'; |
'<br />'; |
} |
} |
} |
} |
Line 1289 sub print_userlist {
|
Line 1290 sub print_userlist {
|
$r->print('<label>'.&mt('Role: [_1]',$role_select).'</label>'); |
$r->print('<label>'.&mt('Role: [_1]',$role_select).'</label>'); |
} |
} |
if (!(($context eq 'domain') && ($env{'form.roletype'} eq 'course'))) { |
if (!(($context eq 'domain') && ($env{'form.roletype'} eq 'course'))) { |
$r->print(&list_submit_button(&mt('Update Display'))."\n</p>\n"); |
$r->print(' '.&list_submit_button(&mt('Update Display')). |
|
"\n</p>\n"); |
} |
} |
my ($indexhash,$keylist) = &make_keylist_array(); |
my ($indexhash,$keylist) = &make_keylist_array(); |
my (%userlist,%userinfo); |
my (%userlist,%userinfo); |
Line 1479 sub gather_userinfo {
|
Line 1481 sub gather_userinfo {
|
($userdata{'username'},$userdata{'domain'},$userdata{'role'}) = |
($userdata{'username'},$userdata{'domain'},$userdata{'role'}) = |
split(/:/,$item); |
split(/:/,$item); |
($userdata{'start'},$userdata{'end'})=split(/:/,$rolehash->{$item}); |
($userdata{'start'},$userdata{'end'})=split(/:/,$rolehash->{$item}); |
&build_user_record(\%userdata,$userinfo,$indexhash,$item,$userlist); |
&build_user_record($context,\%userdata,$userinfo,$indexhash, |
|
$item,$userlist); |
} elsif ($context eq 'course') { |
} elsif ($context eq 'course') { |
my $viewablesec = &viewable_section($permission); |
my $viewablesec = &viewable_section($permission); |
($userdata{'username'},$userdata{'domain'},$userdata{'role'}, |
($userdata{'username'},$userdata{'domain'},$userdata{'role'}, |
Line 1488 sub gather_userinfo {
|
Line 1491 sub gather_userinfo {
|
if (($viewablesec ne '') && ($userdata{'section'} ne '')) { |
if (($viewablesec ne '') && ($userdata{'section'} ne '')) { |
next if ($viewablesec ne $userdata{'section'}); |
next if ($viewablesec ne $userdata{'section'}); |
} |
} |
&build_user_record(\%userdata,$userinfo,$indexhash,$item,$userlist); |
&build_user_record($context,\%userdata,$userinfo,$indexhash, |
|
$item,$userlist); |
} elsif ($context eq 'domain') { |
} elsif ($context eq 'domain') { |
if ($env{'form.roletype'} eq 'domain') { |
if ($env{'form.roletype'} eq 'domain') { |
($userdata{'role'},$userdata{'username'},$userdata{'domain'}) = |
($userdata{'role'},$userdata{'username'},$userdata{'domain'}) = |
split(/:/,$item); |
split(/:/,$item); |
($userdata{'end'},$userdata{'start'})=split(/:/,$rolehash->{$item}); |
($userdata{'end'},$userdata{'start'})=split(/:/,$rolehash->{$item}); |
&build_user_record(\%userdata,$userinfo,$indexhash,$item,$userlist); |
&build_user_record($context,\%userdata,$userinfo,$indexhash, |
|
$item,$userlist); |
} elsif ($env{'form.roletype'} eq 'author') { |
} elsif ($env{'form.roletype'} eq 'author') { |
if (ref($rolehash->{$item}) eq 'HASH') { |
if (ref($rolehash->{$item}) eq 'HASH') { |
$userdata{'extent'} = $item; |
$userdata{'extent'} = $item; |
Line 1503 sub gather_userinfo {
|
Line 1508 sub gather_userinfo {
|
($userdata{'start'},$userdata{'end'}) = |
($userdata{'start'},$userdata{'end'}) = |
split(/:/,$rolehash->{$item}{$key}); |
split(/:/,$rolehash->{$item}{$key}); |
my $uniqid = $key.':'.$item; |
my $uniqid = $key.':'.$item; |
&build_user_record(\%userdata,$userinfo,$indexhash,$uniqid,$userlist); |
&build_user_record($context,\%userdata,$userinfo, |
|
$indexhash,$uniqid,$userlist); |
} |
} |
} |
} |
} elsif ($env{'form.roletype'} eq 'course') { |
} elsif ($env{'form.roletype'} eq 'course') { |
Line 1518 sub gather_userinfo {
|
Line 1524 sub gather_userinfo {
|
my $space = ', '; |
my $space = ', '; |
if ($format eq 'html' || $format eq 'view') { |
if ($format eq 'html' || $format eq 'view') { |
$spanstart = '<span class="LC_nobreak">'; |
$spanstart = '<span class="LC_nobreak">'; |
if ($permission->{'cusr'}) { |
# FIXME: actions on courses disabled for now |
if ($numcids > 1) { |
# if ($permission->{'cusr'}) { |
$spanstart .= '<input type="radio" name="'.$item.'" value="'.$cid.'" />'; |
# if ($numcids > 1) { |
} else { |
# $spanstart .= '<input type="radio" name="'.$item.'" value="'.$cid.'" /> '; |
$spanstart .= '<input type="hidden" name="'.$item.'" value="'.$cid.'" />'; |
# } else { |
} |
# $spanstart .= '<input type="hidden" name="'.$item.'" value="'.$cid.'" /> '; |
} |
# } |
|
# } |
$spanend = '</span><br />'; |
$spanend = '</span><br />'; |
$space = ', '; |
$space = ', '; |
} |
} |
Line 1532 sub gather_userinfo {
|
Line 1539 sub gather_userinfo {
|
$rolehash->{$item}{$cid}{'desc'}.$space; |
$rolehash->{$item}{$cid}{'desc'}.$space; |
if (ref($rolehash->{$item}{$cid}{'secs'}) eq 'HASH') { |
if (ref($rolehash->{$item}{$cid}{'secs'}) eq 'HASH') { |
foreach my $sec (sort(keys(%{$rolehash->{$item}{$cid}{'secs'}}))) { |
foreach my $sec (sort(keys(%{$rolehash->{$item}{$cid}{'secs'}}))) { |
$userdata{'extent'} .= $sec.$space.$rolehash->{$item}{$cid}{'secs'}{$sec}.$spanend; |
if (($env{'form.Status'} eq 'Any') || |
|
($env{'form.Status'} eq $rolehash->{$item}{$cid}{'secs'}{$sec})) { |
|
$userdata{'extent'} .= $sec.$space.$rolehash->{$item}{$cid}{'secs'}{$sec}.$spanend; |
|
$userdata{'status'} = $rolehash->{$item}{$cid}{'secs'}{$sec}; |
|
} |
} |
} |
} |
} |
} |
} |
} |
} |
} |
} |
&build_user_record(\%userdata,$userinfo,$indexhash,$item,$userlist); |
if ($userdata{'status'} ne '') { |
|
&build_user_record($context,\%userdata,$userinfo, |
|
$indexhash,$item,$userlist); |
|
} |
} |
} |
} |
} |
} |
} |
Line 1546 sub gather_userinfo {
|
Line 1560 sub gather_userinfo {
|
} |
} |
|
|
sub build_user_record { |
sub build_user_record { |
my ($userdata,$userinfo,$indexhash,$record_key,$userlist) = @_; |
my ($context,$userdata,$userinfo,$indexhash,$record_key,$userlist) = @_; |
next if ($userdata->{'start'} eq '-1' && $userdata->{'end'} eq '-1'); |
next if ($userdata->{'start'} eq '-1' && $userdata->{'end'} eq '-1'); |
&process_date_info($userdata); |
if (!(($context eq 'domain') && ($env{'form.roletype'} eq 'course'))) { |
|
&process_date_info($userdata); |
|
} |
my $username = $userdata->{'username'}; |
my $username = $userdata->{'username'}; |
my $domain = $userdata->{'domain'}; |
my $domain = $userdata->{'domain'}; |
if (ref($userinfo->{$username.':'.$domain}) eq 'HASH') { |
if (ref($userinfo->{$username.':'.$domain}) eq 'HASH') { |
$userdata->{'fullname'} = |
$userdata->{'fullname'} = $userinfo->{$username.':'.$domain}{'fullname'}; |
$userinfo->{$username.':'.$domain}{'fullname'}; |
|
$userdata->{'id'} = $userinfo->{$username.':'.$domain}{'id'}; |
$userdata->{'id'} = $userinfo->{$username.':'.$domain}{'id'}; |
} else { |
} else { |
&aggregate_user_info($domain,$username,$userinfo); |
&aggregate_user_info($domain,$username,$userinfo); |
Line 1843 END
|
Line 1858 END
|
if ($mode ne 'autoenroll') { |
if ($mode ne 'autoenroll') { |
my $check_uncheck_js = &Apache::loncommon::check_uncheck_jscript(); |
my $check_uncheck_js = &Apache::loncommon::check_uncheck_jscript(); |
my $alert = &mt("You must select at least one user by checking a user's 'Select' checkbox"); |
my $alert = &mt("You must select at least one user by checking a user's 'Select' checkbox"); |
my $singconfirm = &mt(' for a single user'); |
my $singconfirm = &mt(' for a single user?'); |
my $multconfirm = &mt(' for multiple users'); |
my $multconfirm = &mt(' for multiple users?'); |
my $date_sec_selector = &date_section_javascript($context,$setting,$statusmode); |
my $date_sec_selector = &date_section_javascript($context,$setting,$statusmode); |
$r->print(<<END); |
$r->print(<<END); |
|
|
Line 1972 END
|
Line 1987 END
|
my $results_description; |
my $results_description; |
if ($mode ne 'autoenroll') { |
if ($mode ne 'autoenroll') { |
$results_description = &results_header_row($rolefilter,$statusmode, |
$results_description = &results_header_row($rolefilter,$statusmode, |
$context,$permission); |
$context,$permission,$mode); |
$r->print('<b>'.$results_description.'</b><br />'); |
$r->print('<b>'.$results_description.'</b><br />'); |
} |
} |
my ($output,$actionselect); |
my ($output,$actionselect,%canchange,%canchangesec); |
if ($mode eq 'html' || $mode eq 'view' || $mode eq 'autoenroll') { |
if ($mode eq 'html' || $mode eq 'view' || $mode eq 'autoenroll') { |
if ($mode ne 'autoenroll') { |
if ($mode ne 'autoenroll') { |
if ($permission->{'cusr'}) { |
if ($permission->{'cusr'}) { |
Line 2014 $lt{'ac'}: $actionselect <input typ
|
Line 2029 $lt{'ac'}: $actionselect <input typ
|
<p><input type="button" value="$lt{'ca'}" onclick="javascript:checkAll(document.studentform.actionlist)" /> |
<p><input type="button" value="$lt{'ca'}" onclick="javascript:checkAll(document.studentform.actionlist)" /> |
<input type="button" value="$lt{'ua'}" onclick="javascript:uncheckAll(document.studentform.actionlist)" /> |
<input type="button" value="$lt{'ua'}" onclick="javascript:uncheckAll(document.studentform.actionlist)" /> |
END |
END |
|
my @allroles; |
|
if ($env{'form.showrole'} eq 'Any') { |
|
my $custom = 1; |
|
if ($context eq 'domain') { |
|
@allroles = &roles_by_context($setting,$custom); |
|
} else { |
|
@allroles = &roles_by_context($context,$custom); |
|
} |
|
} else { |
|
@allroles = ($env{'form.showrole'}); |
|
} |
|
foreach my $role (@allroles) { |
|
if ($context eq 'domain') { |
|
if ($setting eq 'domain') { |
|
if (&Apache::lonnet::allowed('c'.$role, |
|
$env{'request.role.domain'})) { |
|
$canchange{$role} = 1; |
|
} |
|
} |
|
} elsif ($context eq 'author') { |
|
if (&Apache::lonnet::allowed('c'.$role, |
|
$env{'user.domain'}.'/'.$env{'user.name'})) { |
|
$canchange{$role} = 1; |
|
} |
|
} elsif ($context eq 'course') { |
|
if (&Apache::lonnet::allowed('c'.$role,$env{'request.course.id'})) { |
|
$canchange{$role} = 1; |
|
} elsif ($env{'request.course.sec'} ne '') { |
|
if (&Apache::lonnet::allowed('c'.$role,$env{'request.course.id'}.'/'.$env{'request.course.sec'})) { |
|
$canchangesec{$role} = $env{'request.course.sec'}; |
|
} |
|
} |
|
} |
|
} |
} |
} |
} |
} |
$output .= "\n<p>\n". |
$output .= "\n<p>\n". |
Line 2227 END
|
Line 2276 END
|
$r->print("<td>$rowcount</td>\n"); |
$r->print("<td>$rowcount</td>\n"); |
$checkval; |
$checkval; |
if ($actionselect) { |
if ($actionselect) { |
$checkval = $user; |
my $showcheckbox; |
if ($context eq 'course') { |
if ($role =~ /^cr\//) { |
if ($role eq 'st') { |
$showcheckbox = $canchange{'cr'}; |
$checkval .= ':st'; |
} else { |
|
$showcheckbox = $canchange{$role}; |
|
} |
|
if (!$showcheckbox) { |
|
if ($context eq 'course') { |
|
if ($canchangesec{$role} ne '') { |
|
if ($canchangesec{$role} eq $in{'section'}) { |
|
$showcheckbox = 1; |
|
} |
|
} |
} |
} |
$checkval .= ':'.$in{'section'}; |
} |
if ($role eq 'st') { |
if ($showcheckbox) { |
$checkval .= ':'.$in{'type'}.':'.$in{'lockedtype'}; |
$checkval = $user; |
|
if ($context eq 'course') { |
|
if ($role eq 'st') { |
|
$checkval .= ':st'; |
|
} |
|
$checkval .= ':'.$in{'section'}; |
|
if ($role eq 'st') { |
|
$checkval .= ':'.$in{'type'}.':'. |
|
$in{'lockedtype'}; |
|
} |
} |
} |
|
$r->print('<td><input type="checkbox" name="'. |
|
'actionlist" value="'.$checkval.'"></td>'); |
|
} else { |
|
$r->print('<td> </td>'); |
} |
} |
$r->print('<td><input type="checkbox" name="actionlist" value="'. |
|
$checkval.'"></td>'); |
|
} |
} |
} |
} |
foreach my $item (@cols) { |
foreach my $item (@cols) { |
Line 2367 sub select_actions {
|
Line 2436 sub select_actions {
|
chgsec => "Change section associated with user roles", |
chgsec => "Change section associated with user roles", |
); |
); |
my ($output,$options,%choices); |
my ($output,$options,%choices); |
|
# FIXME Disable actions for now for roletype=course in domain context |
|
if ($context eq 'domain' && $setting eq 'course') { |
|
return; |
|
} |
|
if ($context eq 'course') { |
|
if ($env{'form.showrole'} ne 'Any') { |
|
if (!&Apache::lonnet::allowed('c'.$env{'form.showrole'}, |
|
$env{'request.course.id'})) { |
|
if ($env{'request.course.sec'} eq '') { |
|
return; |
|
} else { |
|
if (!&Apache::lonnet::allowed('c'.$env{'form.showrole'},$env{'request.course.id'}.'/'.$env{'request.course.sec'})) { |
|
return; |
|
} |
|
} |
|
} |
|
} |
|
} |
if ($statusmode eq 'Any') { |
if ($statusmode eq 'Any') { |
$options .= ' |
$options .= ' |
<option value="chgdates">'.$lt{'chgdates'}.'</option>'; |
<option value="chgdates">'.$lt{'chgdates'}.'</option>'; |
Line 2393 sub select_actions {
|
Line 2480 sub select_actions {
|
<option value="delete">'.$lt{'delete'}.'</option>'; |
<option value="delete">'.$lt{'delete'}.'</option>'; |
} |
} |
if (($context eq 'course') || ($context eq 'domain' && $setting eq 'course')) { |
if (($context eq 'course') || ($context eq 'domain' && $setting eq 'course')) { |
if ($statusmode ne 'Expired') { |
if (($statusmode ne 'Expired') && ($env{'request.course.sec'} eq '')) { |
$options .= ' |
$options .= ' |
<option value="chgsec">'.$lt{'chgsec'}.'</option>'; |
<option value="chgsec">'.$lt{'chgsec'}.'</option>'; |
$choices{'sections'} = 1; |
$choices{'sections'} = 1; |
Line 2500 END
|
Line 2587 END
|
if (($env{'form.bulkaction'} eq 'reenable') || |
if (($env{'form.bulkaction'} eq 'reenable') || |
($env{'form.bulkaction'} eq 'activate') || |
($env{'form.bulkaction'} eq 'activate') || |
($env{'form.bulkaction'} eq 'chgdates')) { |
($env{'form.bulkaction'} eq 'chgdates')) { |
$output .= <<"END"; |
if ($env{'request.course.sec'} eq '') { |
|
$output .= <<"END"; |
|
|
if (formname.makedatesdefault.checked == true) { |
if (formname.makedatesdefault.checked == true) { |
opener.document.$callingform.makedatesdefault.value = 1; |
opener.document.$callingform.makedatesdefault.value = 1; |
Line 2510 END
|
Line 2598 END
|
} |
} |
|
|
END |
END |
|
} |
} |
} |
} |
} |
$output .= <<"END"; |
$output .= <<"END"; |
Line 2559 END
|
Line 2648 END
|
$date_items; |
$date_items; |
if ($context eq 'course' && $env{'form.bulkaction'} eq 'chgsec') { |
if ($context eq 'course' && $env{'form.bulkaction'} eq 'chgsec') { |
my ($cnum,$cdom) = &get_course_identity(); |
my ($cnum,$cdom) = &get_course_identity(); |
my %sections_count = |
|
&Apache::loncommon::get_sections($cdom,$cnum); |
|
my $info; |
my $info; |
if ($env{'form.showrole'} eq 'st') { |
if ($env{'form.showrole'} eq 'st') { |
$output .= '<p>'.$lt{'fors'}.'</p>'; |
$output .= '<p>'.$lt{'fors'}.'</p>'; |
} elsif ($env{'form.shorole'} eq 'Any') { |
} elsif ($env{'form.showrole'} eq 'Any') { |
$output .= '<p>'.$lt{'fors'}.'</p>'. |
$output .= '<p>'.$lt{'fors'}.'</p>'. |
'<p>'.$lt{'forn'}.' '; |
'<p>'.$lt{'forn'}.' '; |
$info = $lt{'reta'}; |
$info = $lt{'reta'}; |
Line 2585 END
|
Line 2672 END
|
} else { |
} else { |
$info = '<input type="hidden" name="retainsec" value="0" />'; |
$info = '<input type="hidden" name="retainsec" value="0" />'; |
} |
} |
my $sections_select .= &course_sections(\%sections_count,$env{'form.showrole'}); |
|
my $rowtitle = &mt('New section to assign'); |
my $rowtitle = &mt('New section to assign'); |
my $secbox = §ion_picker($cdom,$cnum,$env{'form.showrole'},$rowtitle,$permission,$context); |
my $secbox = §ion_picker($cdom,$cnum,$env{'form.showrole'},$rowtitle,$permission,$context); |
$output .= $info.$secbox; |
$output .= $info.$secbox; |
Line 2628 sub section_picker {
|
Line 2714 sub section_picker {
|
} |
} |
|
|
sub results_header_row { |
sub results_header_row { |
my ($rolefilter,$statusmode,$context,$permission) = @_; |
my ($rolefilter,$statusmode,$context,$permission,$mode) = @_; |
my ($description,$showfilter); |
my ($description,$showfilter); |
if ($rolefilter ne 'Any') { |
if ($rolefilter ne 'Any') { |
$showfilter = $rolefilter; |
$showfilter = $rolefilter; |
} |
} |
if ($context eq 'course') { |
if ($context eq 'course') { |
$description = &mt('Course - ').$env{'course.'.$env{'request.course.id'}.'.description'}.': '; |
if ($mode eq 'csv' || $mode eq 'excel') { |
|
$description = &mt('Course - ').$env{'course.'.$env{'request.course.id'}.'.description'}.': '; |
|
} |
if ($statusmode eq 'Expired') { |
if ($statusmode eq 'Expired') { |
$description .= &mt('Users in course with expired [_1] roles',$showfilter); |
$description .= &mt('Users in course with expired [_1] roles',$showfilter); |
} elsif ($statusmode eq 'Future') { |
} elsif ($statusmode eq 'Future') { |
Line 2648 sub results_header_row {
|
Line 2736 sub results_header_row {
|
$description .= &mt('All users in course with [_1] roles',$rolefilter); |
$description .= &mt('All users in course with [_1] roles',$rolefilter); |
} |
} |
} |
} |
if (exists($permission->{'view_section'})) { |
my $viewablesec = &viewable_section($permission); |
|
if ($viewablesec ne '') { |
if ($env{'form.showrole'} eq 'st') { |
if ($env{'form.showrole'} eq 'st') { |
$description .= ' '.&mt('(section [_1] only)',$permission->{'view_section'}); |
$description .= ' '.&mt('(section [_1] only)',$viewablesec); |
} elsif ($env{'form.showrole'} eq 'any') { |
} elsif ($env{'form.showrole'} ne 'cc') { |
$description .= ' '.&mt('(section [_1] only)',$permission->{'view_section'}); |
$description .= ' '.&mt('(only users affiliated with no section or section [_1])',$viewablesec); |
} |
} |
} |
} |
} elsif ($context eq 'author') { |
} elsif ($context eq 'author') { |
Line 2974 sub upfile_drop_add {
|
Line 3063 sub upfile_drop_add {
|
# |
# |
my ($startdate,$enddate) = &get_dates_from_form(); |
my ($startdate,$enddate) = &get_dates_from_form(); |
if ($env{'form.makedatesdefault'}) { |
if ($env{'form.makedatesdefault'}) { |
$r->print(&make_dates_default($startdate,$enddate)); |
$r->print(&make_dates_default($startdate,$enddate,$context)); |
} |
} |
# Determine domain and desired host (home server) |
# Determine domain and desired host (home server) |
my $domain=$env{'request.role.domain'}; |
my $domain=$env{'request.role.domain'}; |
Line 3027 sub upfile_drop_add {
|
Line 3116 sub upfile_drop_add {
|
$defaultrole = $env{'form.defaultrole'}; |
$defaultrole = $env{'form.defaultrole'}; |
} elsif ($setting eq 'course') { |
} elsif ($setting eq 'course') { |
$defaultrole = $env{'form.courserole'}; |
$defaultrole = $env{'form.courserole'}; |
|
$defaultsec = $env{'form.sections'}; |
} |
} |
} elsif ($context eq 'author') { |
} elsif ($context eq 'author') { |
$defaultrole = $env{'form.defaultrole'}; |
$defaultrole = $env{'form.defaultrole'}; |
} |
} elsif ($context eq 'course') { |
if ($context eq 'domain' && $setting eq 'course') { |
$defaultrole = $env{'form.defaultrole'}; |
if ($env{'form.newsec'} ne '') { |
$defaultsec = $env{'form.sections'}; |
$defaultsec = $env{'form.newsec'}; |
|
} elsif ($env{'form.defaultsec'} ne '') { |
|
$defaultsec = $env{'form.defaultsec'} |
|
} |
|
} |
} |
if ($env{'request.course.id'} ne '') { |
if ($env{'request.course.id'} ne '') { |
$cid = $env{'request.course.id'}; |
$cid = $env{'request.course.id'}; |
} elsif ($env{'form.defaultdomain'} ne '' && $env{'form.defaultcourse'} ne '') { |
} elsif ($setting eq 'course') { |
$cid = $env{'form.defaultdomain'}.'_'. |
if (&Apache::lonnet::is_course($env{'form.dcdomain'},$env{'form.dccourse'})) { |
$env{'form.defaultcourse'}; |
$cid = $env{'form.dcdomain'}.'_'.$env{'form.dccourse'}; |
|
} |
|
} |
|
# Check to see if user information can be changed |
|
my @userinfo = ('firstname','middlename','lastname','generation', |
|
'permanentemail','id'); |
|
my %canmodify; |
|
if (&Apache::lonnet::allowed('mau',$domain)) { |
|
foreach my $field (@userinfo) { |
|
$canmodify{$field} = 1; |
|
} |
|
} |
|
my (%userlist,%modifiable_fields,@poss_roles); |
|
my $secidx = &Apache::loncoursedata::CL_SECTION(); |
|
my @courseroles = &roles_by_context('course',1); |
|
if (!&Apache::lonnet::allowed('mau',$domain)) { |
|
if ($context eq 'course' || $context eq 'author') { |
|
@poss_roles = &curr_role_permissions($context); |
|
my @statuses = ('active','future'); |
|
my ($indexhash,$keylist) = &make_keylist_array(); |
|
my %info; |
|
foreach my $role (@poss_roles) { |
|
%{$modifiable_fields{$role}} = &can_modify_userinfo($context,$domain, |
|
\@userinfo,[$role]); |
|
} |
|
if ($context eq 'course') { |
|
my ($cnum,$cdom) = &get_course_identity(); |
|
my $roster = &Apache::loncoursedata::get_classlist(); |
|
%userlist = %{$roster}; |
|
my %advrolehash = &Apache::lonnet::get_my_roles($cnum,$cdom,undef, |
|
\@statuses,\@poss_roles); |
|
&gather_userinfo($context,'view',\%userlist,$indexhash,\%info, |
|
\%advrolehash,$permission); |
|
} elsif ($context eq 'author') { |
|
my %cstr_roles = &Apache::lonnet::get_my_roles(undef,undef,undef, |
|
\@statuses,\@poss_roles); |
|
&gather_userinfo($context,'view',\%userlist,$indexhash,\%info, |
|
\%cstr_roles,$permission); |
|
|
|
} |
|
} |
} |
} |
if ( $domain eq &LONCAPA::clean_domain($domain) |
if ( $domain eq &LONCAPA::clean_domain($domain) |
&& ($amode ne '')) { |
&& ($amode ne '')) { |
Line 3063 sub upfile_drop_add {
|
Line 3189 sub upfile_drop_add {
|
); |
); |
my $flushc=0; |
my $flushc=0; |
my %student=(); |
my %student=(); |
my %curr_groups; |
my (%curr_groups,@sections,@cleansec,@secs,$defaultwarn,$groupwarn); |
my %userchg; |
my %userchg; |
if ($context eq 'course') { |
if ($context eq 'course' || $setting eq 'course') { |
# Get information about course groups |
if ($context eq 'course') { |
%curr_groups = &Apache::longroup::coursegroups(); |
# Get information about course groups |
|
%curr_groups = &Apache::longroup::coursegroups(); |
|
} elsif ($setting eq 'course') { |
|
if ($cid) { |
|
%curr_groups = |
|
&Apache::longroup::coursegroups($env{'form.dcdomain'}, |
|
$env{'form.dccourse'}); |
|
} |
|
} |
|
# determine section number |
|
if ($defaultsec =~ /,/) { |
|
push(@sections,split(/,/,$defaultsec)); |
|
} else { |
|
push(@sections,$defaultsec); |
|
} |
|
# remove non alphanumeric values from section |
|
foreach my $item (@sections) { |
|
$item =~ s/\W//g; |
|
if ($item eq "none" || $item eq 'all') { |
|
$defaultwarn = &mt('Default section name [_1] could not be used as it is a reserved word.',$item); |
|
} elsif ($item ne '' && exists($curr_groups{$item})) { |
|
$groupwarn = &mt('Default section name "[_1]" is the name of a course group. Section names and group names must be distinct.',$item); |
|
} elsif ($item ne '') { |
|
push(@cleansec,$item); |
|
} |
|
} |
|
if ($defaultwarn) { |
|
$r->print($defaultwarn.'<br />'); |
|
} |
|
if ($groupwarn) { |
|
$r->print($groupwarn.'<br />'); |
|
} |
} |
} |
my (%curr_rules,%got_rules,%alerts); |
my (%curr_rules,%got_rules,%alerts); |
|
my %customroles = &my_custom_roles(); |
|
my ($custom_ok,@permitted_roles) = |
|
&roles_on_upload($context,%customroles); |
# Get new users list |
# Get new users list |
foreach (@userdata) { |
foreach my $line (@userdata) { |
my %entries=&Apache::loncommon::record_sep($_); |
my %entries=&Apache::loncommon::record_sep($line); |
# Determine user name |
# Determine user name |
unless (($entries{$fields{'username'}} eq '') || |
unless (($entries{$fields{'username'}} eq '') || |
(!defined($entries{$fields{'username'}}))) { |
(!defined($entries{$fields{'username'}}))) { |
Line 3100 sub upfile_drop_add {
|
Line 3260 sub upfile_drop_add {
|
&mt('<b>[_1]</b>: Unacceptable username for user [_2] [_3] [_4] [_5]', |
&mt('<b>[_1]</b>: Unacceptable username for user [_2] [_3] [_4] [_5]', |
$entries{$fields{'username'}},$fname,$mname,$lname,$gen). |
$entries{$fields{'username'}},$fname,$mname,$lname,$gen). |
'</b>'); |
'</b>'); |
|
next; |
} else { |
} else { |
my $username = $entries{$fields{'username'}}; |
my $username = $entries{$fields{'username'}}; |
my $sec; |
if (defined($fields{'sec'})) { |
if ($context eq 'course' || $setting eq 'course') { |
if (defined($entries{$fields{'sec'}})) { |
# determine section number |
my $item = $entries{$fields{'sec'}}; |
if (defined($fields{'sec'})) { |
$item =~ s/(\s+$|^\s+)//g; |
if (defined($entries{$fields{'sec'}})) { |
if ($item eq "none" || $item eq 'all') { |
$sec=$entries{$fields{'sec'}}; |
$r->print('<br />'.&mt('<b>[_1]</b>: Unable to enroll user [_2] [_3] [_4] [_5] in a section named "[_6]" - this is a reserved word.',$username,$fname,$mname,$lname,$gen,$item)); |
|
next; |
|
} elsif (exists($curr_groups{$item})) { |
|
$r->print('<br />'.&mt('<b>[_1]</b>: Unable to enroll user [_2] [_3] [_4] [_5] in a section named "[_6]" - this is a course group.',$username,$fname,$mname,$lname,$gen,$item).' '.&mt('Section names and group names must be distinct.')); |
|
next; |
|
} else { |
|
push(@secs,$item); |
} |
} |
} else { |
|
$sec = $defaultsec; |
|
} |
} |
# remove non alphanumeric values from section |
} |
$sec =~ s/\W//g; |
if ($env{'request.course.sec'} ne '') { |
if ($sec eq "none" || $sec eq 'all') { |
@secs = ($env{'request.course.sec'}); |
$r->print('<br />'. |
if (ref($userlist{$username.':'.$domain}) eq 'ARRAY') { |
&mt('<b>[_1]</b>: Unable to enroll: section name "[_2]" for user [_3] [_4] [_5] [_6] is a reserved word.', |
my $currsec = $userlist{$username.':'.$domain}[$secidx]; |
$username,$sec,$fname,$mname,$lname,$gen)); |
if ($currsec ne $env{'request.course.sec'}) { |
next; |
$r->print('<br />'.&mt('<b>[_1]</b>: Unable to enroll user [_2] [_3] [_4] [_5] in a section named "[_6]".',$username,$fname,$mname,$lname,$gen,$secs[0]).'<br />'); |
} elsif (($sec ne '') && (exists($curr_groups{$sec}))) { |
if ($currsec eq '') { |
$r->print('<br />'. |
$r->print(&mt('This user already has an active/future student role in the course, unaffiliated to any section.')); |
&mt('<b>[_1]</b>: Unable to enroll: section name "[_2]" for user [_3] [_4] [_5] [_6] is a course group. Section names and group names must be distinct.', |
|
$username,$sec,$fname,$mname,$lname,$gen)); |
} else { |
next; |
$r->print(&mt('This user already has an active/future role in section "[_1]" of the course.',$currsec)); |
|
} |
|
$r->print('<br />'.&mt('Although your current role has privileges to add students to section "[_1]", you do not have privileges to modify existing enrollments in other sections.',$secs[0]).'<br />'); |
|
next; |
|
} |
|
} |
|
} elsif ($context eq 'course' || $setting eq 'course') { |
|
if (@secs == 0) { |
|
@secs = @cleansec; |
} |
} |
} |
} |
# determine id number |
# determine id number |
Line 3152 sub upfile_drop_add {
|
Line 3325 sub upfile_drop_add {
|
my $role = ''; |
my $role = ''; |
if (defined($fields{'role'})) { |
if (defined($fields{'role'})) { |
if ($entries{$fields{'role'}}) { |
if ($entries{$fields{'role'}}) { |
my @poss_roles = |
if (grep(/^\Q$entries{$fields{'role'}}\E$/,@permitted_roles)) { |
&curr_role_permissions($context,$setting); |
|
if (grep(/^\Q$entries{$fields{'role'}}\E/,@poss_roles)) { |
|
$role=$entries{$fields{'role'}}; |
$role=$entries{$fields{'role'}}; |
} else { |
$role =~ s/(\s+$|^\s+)//g; |
my $rolestr = join(', ',@poss_roles); |
} |
|
if ($custom_ok) { |
|
if ($customroles{$role}) { |
|
$role = 'cr_'.$env{'user.domain'}.'_'.$env{'user.name'}.'_'.$entries{$fields{'role'}}; |
|
} |
|
} |
|
if ($role eq '') { |
|
my $rolestr = join(', ',@permitted_roles); |
$r->print('<br />'. |
$r->print('<br />'. |
&mt('<b>[_1]</b>: You do not have permission to add the requested role [_2] for the user.',$entries{$fields{'username'}},$entries{$fields{'role'}}).'<br />'.&mt('Allowable role(s) is/are: [_1].',$rolestr)."\n"); |
&mt('<b>[_1]</b>: You do not have permission to add the requested role [_2] for the user.',$entries{$fields{'username'}},$entries{$fields{'role'}}).'<br />'.&mt('Allowable role(s) is/are: [_1].',$rolestr)."\n"); |
next; |
next; |
Line 3169 sub upfile_drop_add {
|
Line 3347 sub upfile_drop_add {
|
} |
} |
# Clean up whitespace |
# Clean up whitespace |
foreach (\$domain,\$username,\$id,\$fname,\$mname, |
foreach (\$domain,\$username,\$id,\$fname,\$mname, |
\$lname,\$gen,\$sec,\$role) { |
\$lname,\$gen) { |
$$_ =~ s/(\s+$|^\s+)//g; |
$$_ =~ s/(\s+$|^\s+)//g; |
} |
} |
# check against rules |
# check against rules |
Line 3192 sub upfile_drop_add {
|
Line 3370 sub upfile_drop_add {
|
} |
} |
} |
} |
} else { |
} else { |
# FIXME check if user info can be updated. |
if ($context eq 'course' || $context eq 'author') { |
|
if ($role eq '') { |
|
my @checkroles; |
|
foreach my $role (@poss_roles) { |
|
my $endkey; |
|
if ($role ne 'st') { |
|
$endkey = ':'.$role; |
|
} |
|
if (exists($userlist{$username.':'.$domain.$endkey})) { |
|
if (!grep(/^\Q$role\E$/,@checkroles)) { |
|
push(@checkroles,$role); |
|
} |
|
} |
|
} |
|
if (@checkroles > 0) { |
|
%canmodify = &can_modify_userinfo($context,$domain,\@userinfo,\@checkroles); |
|
} |
|
} elsif (ref($modifiable_fields{$role}) eq 'HASH') { |
|
%canmodify = %{$modifiable_fields{$role}}; |
|
} |
|
} |
|
my @newinfo = (\$fname,\$mname,\$lname,\$gen,\$email,\$id); |
|
for (my $i=0; $i<@userinfo; $i++) { |
|
if (${$newinfo[$i]} ne '') { |
|
if (!$canmodify{$userinfo[$i]}) { |
|
${$newinfo[$i]} = ''; |
|
} |
|
} |
|
} |
} |
} |
if ($id ne '') { |
if ($id ne '') { |
if (!$newuser) { |
if (!$newuser) { |
Line 3217 sub upfile_drop_add {
|
Line 3423 sub upfile_drop_add {
|
} |
} |
} |
} |
if ($password || $env{'form.login'} eq 'loc') { |
if ($password || $env{'form.login'} eq 'loc') { |
my ($userresult,$authresult,$roleresult); |
my $multiple = 0; |
|
my ($userresult,$authresult,$roleresult,$idresult); |
|
my (%userres,%authres,%roleres,%idres); |
if ($role eq 'st') { |
if ($role eq 'st') { |
&modifystudent($domain,$username,$cid,$sec, |
my $sec; |
$desiredhost); |
if ($cid) { |
$roleresult = |
if (@secs > 0) { |
&Apache::lonnet::modifystudent |
$sec = $secs[0]; |
($domain,$username,$id,$amode,$password, |
} |
$fname,$mname,$lname,$gen,$sec,$enddate, |
&modifystudent($domain,$username,$cid,$sec, |
$startdate,$env{'form.forceid'}, |
$desiredhost); |
$desiredhost,$email); |
$roleresult = |
|
&Apache::lonnet::modifystudent |
|
($domain,$username,$id,$amode,$password, |
|
$fname,$mname,$lname,$gen,$sec,$enddate, |
|
$startdate,$env{'form.forceid'}, |
|
$desiredhost,$email,'manual','',$cid); |
|
$userresult = $roleresult; |
|
} |
} else { |
} else { |
($userresult,$authresult,$roleresult) = |
if (($context eq 'course') || |
&modifyuserrole($context,$setting, |
(grep(/^\Q$role\E$/,@courseroles))) { |
$changeauth,$cid,$domain,$username, |
if (!$cid) { |
$id,$amode,$password,$fname, |
next; |
$mname,$lname,$gen,$sec, |
} |
$env{'form.forceid'},$desiredhost, |
} |
$email,$role,$enddate,$startdate,$checkid); |
my $singlesec; |
} |
if ((grep(/^\Q$role\E$/,@courseroles)) && ($role ne 'cc')) { |
$flushc = |
if (@secs > 1) { |
&user_change_result($r,$userresult,$authresult, |
$multiple = 1; |
$roleresult,\%counts,$flushc, |
foreach my $sec (@secs) { |
$username,%userchg); |
($userres{$sec},$authres{$sec},$roleres{$sec},$idres{$sec}) = |
|
&modifyuserrole($context,$setting, |
|
$changeauth,$cid,$domain,$username, |
|
$id,$amode,$password,$fname, |
|
$mname,$lname,$gen,$sec, |
|
$env{'form.forceid'},$desiredhost, |
|
$email,$role,$enddate,$startdate,$checkid); |
|
} |
|
} elsif (@secs > 0) { |
|
$singlesec = $secs[0]; |
|
} |
|
} |
|
if (!$multiple) { |
|
($userresult,$authresult,$roleresult) = |
|
&modifyuserrole($context,$setting, |
|
$changeauth,$cid,$domain,$username, |
|
$id,$amode,$password,$fname, |
|
$mname,$lname,$gen,$singlesec, |
|
$env{'form.forceid'},$desiredhost, |
|
$email,$role,$enddate,$startdate,$checkid); |
|
} |
|
} |
|
if ($multiple) { |
|
foreach my $sec (sort(keys(%userres))) { |
|
$flushc = |
|
&user_change_result($r,$userres{$sec},$authres{$sec}, |
|
$roleres{$sec},$idres{$sec},\%counts,$flushc, |
|
$username,\%userchg); |
|
|
|
} |
|
} else { |
|
$flushc = |
|
&user_change_result($r,$userresult,$authresult, |
|
$roleresult,\%counts,$flushc, |
|
$username,%userchg); |
|
} |
} else { |
} else { |
if ($context eq 'course') { |
if ($context eq 'course') { |
$r->print('<br />'. |
$r->print('<br />'. |
Line 4029 sub authorpriv {
|
Line 4279 sub authorpriv {
|
|| (&Apache::lonnet::allowed('caa',$audom.'/'.$auname))) { return ''; } return 1; |
|| (&Apache::lonnet::allowed('caa',$audom.'/'.$auname))) { return ''; } return 1; |
} |
} |
|
|
|
sub roles_on_upload { |
|
my ($context,%customroles) = @_; |
|
my (@possible_roles,@permitted_roles); |
|
if ($context eq 'domain') { |
|
@possible_roles = &curr_role_permissions($context,undef,1); |
|
push(@possible_roles,&curr_role_permissions($context,'course',1)); |
|
} else { |
|
@possible_roles = &curr_role_permissions($context,undef,1); |
|
} |
|
my $custom_ok = 0; |
|
foreach my $role (@possible_roles) { |
|
if ($role eq 'cr') { |
|
$custom_ok = 1; |
|
push(@permitted_roles,keys(%customroles)); |
|
} else { |
|
push(@permitted_roles,$role); |
|
} |
|
} |
|
return ($custom_ok,@permitted_roles); |
|
} |
|
|
sub get_course_identity { |
sub get_course_identity { |
my ($cid) = @_; |
my ($cid) = @_; |
my ($cnum,$cdom,$cdesc); |
my ($cnum,$cdom,$cdesc); |