version 1.23, 2007/12/22 00:47:25
|
version 1.45, 2008/01/06 04:27:25
|
Line 76 sub modifystudent {
|
Line 76 sub modifystudent {
|
} |
} |
} |
} |
if ($result eq '') { |
if ($result eq '') { |
$result = 'Unable to find section for this student'; |
$result = &mt('Unable to find section for this student'); |
} else { |
} else { |
$result =~ s/(ok:)+/ok/g; |
$result =~ s/(ok:)+/ok/g; |
} |
} |
Line 304 sub print_upload_manager_header {
|
Line 304 sub print_upload_manager_header {
|
my $javascript_validations = |
my $javascript_validations = |
&javascript_validations('upload',$krbdefdom,$password_choice,undef, |
&javascript_validations('upload',$krbdefdom,$password_choice,undef, |
$env{'request.role.domain'},$context, |
$env{'request.role.domain'},$context, |
$permission,$groupslist); |
$groupslist); |
my $checked=(($env{'form.noFirstLine'})?' checked="checked" ':''); |
my $checked=(($env{'form.noFirstLine'})?' checked="checked" ':''); |
$r->print(&mt('Total number of records found in file: <b>[_1]</b>.',$distotal). |
$r->print(&mt('Total number of records found in file: <b>[_1]</b>.',$distotal). |
"<br />\n"); |
"<br />\n"); |
Line 332 sub print_upload_manager_header {
|
Line 332 sub print_upload_manager_header {
|
############################################################### |
############################################################### |
sub javascript_validations { |
sub javascript_validations { |
my ($mode,$krbdefdom,$curr_authtype,$curr_authfield,$domain, |
my ($mode,$krbdefdom,$curr_authtype,$curr_authfield,$domain, |
$context,$permission,$groupslist)=@_; |
$context,$groupslist)=@_; |
|
|
my %param = ( |
my %param = ( |
kerb_def_dom => $krbdefdom, |
kerb_def_dom => $krbdefdom, |
curr_authtype => $curr_authtype, |
curr_authtype => $curr_authtype, |
); |
); |
if ($mode eq 'createuser') { |
if ($mode eq 'upload') { |
$param{'formname'} = 'cu'; |
|
} elsif ($mode eq 'upload') { |
|
$param{'formname'} = 'studentform'; |
$param{'formname'} = 'studentform'; |
} elsif ($mode eq 'singlestudent') { |
|
$param{'formname'} = 'cu'; |
|
} elsif ($mode eq 'createcourse') { |
} elsif ($mode eq 'createcourse') { |
$param{'formname'} = 'ccrs'; |
$param{'formname'} = 'ccrs'; |
} elsif ($mode eq 'modifycourse') { |
} elsif ($mode eq 'modifycourse') { |
Line 367 sub javascript_validations {
|
Line 362 sub javascript_validations {
|
} |
} |
} elsif ($context eq 'domain') { |
} elsif ($context eq 'domain') { |
$setsection_call = 'setCourse()'; |
$setsection_call = 'setCourse()'; |
$setsections_js = &dc_setcourse_js($param{'formname'},$mode); |
$setsections_js = &dc_setcourse_js($param{'formname'},$mode,$context); |
} |
} |
$finish = " var checkSec = $setsection_call\n". |
$finish = " var checkSec = $setsection_call\n". |
" if (checkSec == 'ok') {\n". |
" if (checkSec == 'ok') {\n". |
Line 389 sub javascript_validations {
|
Line 384 sub javascript_validations {
|
role => 'The optional role field was not specified.', |
role => 'The optional role field was not specified.', |
continue => 'Continue adding users?', |
continue => 'Continue adding users?', |
); |
); |
|
my $function_name = <<"END"; |
my $function_name =(<<END); |
|
$setsections_js |
$setsections_js |
|
|
function verify_message (vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail) { |
function verify_message (vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail) { |
Line 456 END
|
Line 450 END
|
foundatype=1; |
foundatype=1; |
if (current.argfield == null || current.argfield == '') { |
if (current.argfield == null || current.argfield == '') { |
var alertmsg = ''; |
var alertmsg = ''; |
switch (current.value) { |
switch (current.radiovalue) { |
case 'krb': |
case 'krb': |
alertmsg = '$alert{'krb'}'; |
alertmsg = '$alert{'krb'}'; |
break; |
break; |
Line 521 END
|
Line 515 END
|
} |
} |
END |
END |
} |
} |
my $result = $function_name; |
my $result = $function_name.$auth_checks.$optional_checks."\n". |
if ( ($mode eq 'upload') || ($mode eq 'createcourse') || ($mode eq 'modifycourse') ) { |
$section_checks.$authheader; |
$result .= $auth_checks; |
|
} |
|
$result .= $optional_checks."\n".$section_checks; |
|
if ( ($mode eq 'upload') || ($mode eq 'createcourse') || ($mode eq 'modifycourse') ) { |
|
$result .= $authheader; |
|
} |
|
return $result; |
return $result; |
} |
} |
############################################################### |
############################################################### |
Line 738 sub print_upload_manager_footer {
|
Line 726 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 761 sub print_upload_manager_footer {
|
Line 749 sub print_upload_manager_footer {
|
$permission,$context,'upload'); |
$permission,$context,'upload'); |
$Str .= $secbox."<h3>".&mt('Full Update')."</h3>\n". |
$Str .= $secbox."<h3>".&mt('Full Update')."</h3>\n". |
'<p><label><input type="checkbox" name="fullup" value="yes">'. |
'<p><label><input type="checkbox" name="fullup" value="yes">'. |
' '.&mt('Display students with current/future access, who are not in the uploaded file.').'<br />'.&mt('Students selected from this list can be dropped.'); |
' '.&mt('Display students with current/future access who are not in the uploaded file.').'</label><br />'.&mt('Students selected from this list can be dropped.').'</p>'."\n"; |
"</label></p>\n"; |
|
} |
} |
if ($context eq 'course' || $context eq 'domain') { |
if ($context eq 'course' || $context eq 'domain') { |
$Str .= &forceid_change($context); |
$Str .= &forceid_change($context); |
Line 786 sub forceid_change {
|
Line 773 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 950 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 989 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 1263 sub print_userlist {
|
Line 1251 sub print_userlist {
|
if ($env{'form.showrole'} eq 'Any') { |
if ($env{'form.showrole'} eq 'Any') { |
$roleselected = ' selected="selected" '; |
$roleselected = ' selected="selected" '; |
} |
} |
my $role_select; |
my ($role_select,$cnum,$cdom); |
if ($context eq 'domain') { |
if ($context eq 'domain') { |
$role_select = &domain_roles_select(); |
$role_select = &domain_roles_select(); |
$r->print('<label>'.&mt('Role Type: [_1]',$role_select).'</label>'); |
$r->print('<label>'.&mt('Role Type: [_1]',$role_select).'</label>'); |
Line 1287 sub print_userlist {
|
Line 1275 sub print_userlist {
|
} |
} |
$role_select .= '</select>'; |
$role_select .= '</select>'; |
$r->print('<label>'.&mt('Role: [_1]',$role_select).'</label>'); |
$r->print('<label>'.&mt('Role: [_1]',$role_select).'</label>'); |
|
if ($context eq 'course') { |
|
($cnum,$cdom) = &get_course_identity(); |
|
$r->print(§ion_group_filter($cnum,$cdom)); |
|
} |
} |
} |
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 1305 sub print_userlist {
|
Line 1298 sub print_userlist {
|
&Apache::lonhtmlcommon::row_closure(1). |
&Apache::lonhtmlcommon::row_closure(1). |
&Apache::lonhtmlcommon::end_pick_box().'</p>'. |
&Apache::lonhtmlcommon::end_pick_box().'</p>'. |
'<p>'.&list_submit_button(&mt('Update Display')). |
'<p>'.&list_submit_button(&mt('Update Display')). |
"\n</p>\n"); |
"\n".'</p><span class="LC_warning">'.&mt('Warning: data retrieval for multiple courses can take considerable time, as this operation is not currently optimized.').'</span>'."\n"); |
if ($env{'form.coursepick'}) { |
if ($env{'form.coursepick'}) { |
$r->print('<hr />'.&mt('Searching').' ...<br /> <br />'); |
$r->print('<hr />'.&mt('Searching').' ...<br /> <br />'); |
} |
} |
Line 1314 sub print_userlist {
|
Line 1307 sub print_userlist {
|
} |
} |
$r->rflush(); |
$r->rflush(); |
if ($context eq 'course') { |
if ($context eq 'course') { |
my $classlist = &Apache::loncoursedata::get_classlist(); |
if ($env{'form.showrole'} eq 'st' || ($env{'form.showrole'} eq 'Any') { |
my $secidx = &Apache::loncoursedata::CL_SECTION(); |
my $classlist = &Apache::loncoursedata::get_classlist(); |
my $viewablesec = &viewable_section($permission); |
%userlist = %{$classlist}; |
foreach my $student (keys(%{$classlist})) { |
} |
my $section = $classlist->{$student}[$secidx]; |
if ($env{'form.showrole'} ne 'st') { |
if ($viewablesec ne '') { |
my $showroles; |
if ($section ne $viewablesec) { |
if ($env{'form.showrole'} ne 'Any') { |
next; |
$showroles = [$env{'form.showrole'}]; |
} else { |
|
$userlist{$student} = $classlist->{$student}; |
|
} |
|
} else { |
} else { |
$userlist{$student} = $classlist->{$student}; |
$showroles = undef; |
} |
} |
|
my $withsec = 1; |
|
my $hidepriv = 1; |
|
my %advrolehash = &Apache::lonnet::get_my_roles($cnum,$cdom,undef, |
|
\@statuses,$showroles,undef,$withsec,$hidepriv); |
|
&gather_userinfo($context,$format,\%userlist,$indexhash,\%userinfo, |
|
\%advrolehash,$permission); |
} |
} |
my $cid = $env{'request.course.id'}; |
|
my ($cnum,$cdom) = &get_course_identity($cid); |
|
my $showroles; |
|
if ($env{'form.showrole'} ne 'Any') { |
|
$showroles = [$env{'form.showrole'}]; |
|
} else { |
|
$showroles = undef; |
|
} |
|
my $withsec = 1; |
|
my %advrolehash = &Apache::lonnet::get_my_roles($cnum,$cdom,undef, |
|
\@statuses,$showroles,undef,$withsec); |
|
&gather_userinfo($context,$format,\%userlist,$indexhash,\%userinfo, |
|
\%advrolehash,$permission); |
|
} else { |
} else { |
my (%cstr_roles,%dom_roles); |
my (%cstr_roles,%dom_roles); |
if ($context eq 'author') { |
if ($context eq 'author') { |
Line 1390 sub print_userlist {
|
Line 1373 sub print_userlist {
|
} elsif ($env{'form.roletype'} eq 'course') { |
} elsif ($env{'form.roletype'} eq 'course') { |
if ($env{'form.coursepick'}) { |
if ($env{'form.coursepick'}) { |
my %courses = &process_coursepick(); |
my %courses = &process_coursepick(); |
my %allusers; |
my %allusers; |
|
my $hidepriv = 1; |
foreach my $cid (keys(%courses)) { |
foreach my $cid (keys(%courses)) { |
my ($cnum,$cdom,$cdesc) = &get_course_identity($cid); |
my ($cnum,$cdom,$cdesc) = &get_course_identity($cid); |
next if ($cnum eq '' || $cdom eq ''); |
next if ($cnum eq '' || $cdom eq ''); |
Line 1408 sub print_userlist {
|
Line 1392 sub print_userlist {
|
foreach my $type (@statuses) { |
foreach my $type (@statuses) { |
$access{$type} = $type; |
$access{$type} = $type; |
} |
} |
&Apache::loncommon::get_course_users($cdom,$cnum,\%access,\@roles,\@sections,\%users,\%userdata,\%statushash); |
&Apache::loncommon::get_course_users($cdom,$cnum,\%access,\@roles,\@sections,\%users,\%userdata,\%statushash,$hidepriv); |
foreach my $user (keys(%userdata)) { |
foreach my $user (keys(%userdata)) { |
next if (ref($userinfo{$user}) eq 'HASH'); |
next if (ref($userinfo{$user}) eq 'HASH'); |
foreach my $item ('fullname','id') { |
foreach my $item ('fullname','id') { |
Line 1466 sub print_userlist {
|
Line 1450 sub print_userlist {
|
$env{'form.phase'}.'" /></form>'); |
$env{'form.phase'}.'" /></form>'); |
} |
} |
|
|
|
sub section_group_filter { |
|
my ($cnum,$cdom) = @_; |
|
my @filters; |
|
if ($env{'request.course.sec'} eq '') { |
|
@filters = ('sec'); |
|
} |
|
push(@filters,'grp'); |
|
my %name = ( |
|
sec => 'secfilter', |
|
grp => 'grpfilter', |
|
); |
|
my %title = &Apache::lonlocal::texthash ( |
|
sec => 'Section(s)', |
|
grp => 'Group(s)', |
|
all => 'all', |
|
none => 'none', |
|
); |
|
my ($output,@options); |
|
foreach my $item (@filters) { |
|
my $markup; |
|
if ($env{'form.'.$name{$item}} eq '') { |
|
$env{'form.'.$name{$item}} = 'all'; |
|
} |
|
if ($item eq 'sec') { |
|
if ($env{'form.showrole'} eq 'cc') { |
|
$env{'form.'.$name{$item}} = 'none'; |
|
} |
|
my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum); |
|
@options = sort(keys(%sections_count)); |
|
} elsif ($item eq 'grp') { |
|
my %curr_groups = &Apache::longroup::coursegroups(); |
|
@options = sort(keys(%curr_groups)); |
|
} |
|
if (@options > 0) { |
|
my $currsel; |
|
$markup = '<select name="'.$name{$item}.'" />'."\n"; |
|
foreach my $option ('all','none',@options) { |
|
$currsel = ''; |
|
if ($env{'form.'.$name{$item}} eq $option) { |
|
$currsel = ' selected="selected" '; |
|
} |
|
$markup .= ' <option value="'.$option.'"'.$currsel.'>'; |
|
if (($option eq 'all') || ($option eq 'none')) { |
|
$markup .= $title{$option}; |
|
} else { |
|
$markup .= $option; |
|
} |
|
$markup .= '</option>'."\n"; |
|
} |
|
$markup .= '</select>'."\n"; |
|
$output .= (' 'x3).'<label>'.$title{$item}.': '.$markup.'</label>'; |
|
} |
|
} |
|
return $output; |
|
} |
|
|
sub list_submit_button { |
sub list_submit_button { |
my ($text) = @_; |
my ($text) = @_; |
return '<input type="button" name="updatedisplay" value="'.$text.'" onclick="javascript:display_update()" />'; |
return '<input type="button" name="updatedisplay" value="'.$text.'" onclick="javascript:display_update()" />'; |
Line 1479 sub gather_userinfo {
|
Line 1519 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 1529 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 1546 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 1521 sub gather_userinfo {
|
Line 1565 sub gather_userinfo {
|
# FIXME: actions on courses disabled for now |
# FIXME: actions on courses disabled for now |
# if ($permission->{'cusr'}) { |
# if ($permission->{'cusr'}) { |
# if ($numcids > 1) { |
# if ($numcids > 1) { |
# $spanstart .= '<input type="radio" name="'.$item.'" value="'.$cid.'" />'; |
# $spanstart .= '<input type="radio" name="'.$item.'" value="'.$cid.'" /> '; |
# } else { |
# } else { |
# $spanstart .= '<input type="hidden" name="'.$item.'" value="'.$cid.'" />'; |
# $spanstart .= '<input type="hidden" name="'.$item.'" value="'.$cid.'" /> '; |
# } |
# } |
# } |
# } |
$spanend = '</span><br />'; |
$spanend = '</span><br />'; |
Line 1533 sub gather_userinfo {
|
Line 1577 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 1547 sub gather_userinfo {
|
Line 1598 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 1738 sub make_keylist_array {
|
Line 1790 sub make_keylist_array {
|
$index->{'email'} = &Apache::loncoursedata::CL_PERMANENTEMAIL(); |
$index->{'email'} = &Apache::loncoursedata::CL_PERMANENTEMAIL(); |
$index->{'role'} = &Apache::loncoursedata::CL_ROLE(); |
$index->{'role'} = &Apache::loncoursedata::CL_ROLE(); |
$index->{'extent'} = &Apache::loncoursedata::CL_EXTENT(); |
$index->{'extent'} = &Apache::loncoursedata::CL_EXTENT(); |
|
$index->{'photo'} = &Apache::loncoursedata::CL_PHOTO(); |
foreach my $key (keys(%{$index})) { |
foreach my $key (keys(%{$index})) { |
$keylist->[$index->{$key}] = $key; |
$keylist->[$index->{$key}] = $key; |
} |
} |
Line 1844 END
|
Line 1897 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); |
|
my %lt = &Apache::lonlocal::texthash( |
|
acwi => 'Access will be set to start immediately', |
|
asyo => 'as you did not select an end date in the pop-up window', |
|
accw => 'Access will be set to continue indefinitely', |
|
asyd => 'as you did not select an end date in the pop-up window', |
|
sewi => "Sections will be switched to 'No section'", |
|
ayes => "as you either selected the 'No section' option", |
|
oryo => 'or you did not select a section in the pop-up window', |
|
arol => 'A role with no section will be added', |
|
swbs => 'Sections will be switched to:', |
|
rwba => 'Roles will be added for section(s):', |
|
); |
$r->print(<<END); |
$r->print(<<END); |
|
|
<script type="text/javascript" language="Javascript"> |
<script type="text/javascript" language="Javascript"> |
Line 1872 function verify_action (field) {
|
Line 1937 function verify_action (field) {
|
} |
} |
else { |
else { |
var message = document.studentform.bulkaction[document.studentform.bulkaction.selectedIndex].text; |
var message = document.studentform.bulkaction[document.studentform.bulkaction.selectedIndex].text; |
|
var choice = document.studentform.bulkaction[document.studentform.bulkaction.selectedIndex].value; |
if (numchecked == 1) { |
if (numchecked == 1) { |
message += singconf; |
message += singconf; |
} |
} |
else { |
else { |
message += multconf; |
message += multconf; |
} |
} |
|
if (choice == 'chgdates' || choice == 'reenable' || choice == 'activate') { |
|
var datemsg = ''; |
|
if ((document.studentform.startdate_month.value == '') && |
|
(document.studentform.startdate_day.value == '') && |
|
(document.studentform.startdate_year.value == '')) { |
|
datemsg = "\\n$lt{'acwi'},\\n$lt{'asyo'}.\\n"; |
|
} |
|
if ((document.studentform.enddate_month.value == '') && |
|
(document.studentform.enddate_day.value == '') && |
|
(document.studentform.enddate_year.value == '')) { |
|
datemsg += "\\n$lt{'accw'},\\n$lt{'asyd'}.\\n"; |
|
} |
|
if (datemsg != '') { |
|
message += "\\n"+datemsg; |
|
} |
|
} |
|
if (choice == 'chgsec') { |
|
var rolefilter = document.studentform.showrole.options[document.studentform.showrole.selectedIndex].value; |
|
var retained = document.studentform.retainsec.value; |
|
var secshow = document.studentform.newsecs.value; |
|
if (secshow == '') { |
|
if (rolefilter == 'st' || retained == 0 || retained == "") { |
|
message += "\\n\\n$lt{'sewi'},\\n$lt{'ayes'},\\n$lt{'oryo'}.\\n"; |
|
} else { |
|
message += "\\n\\n$lt{'arol'}\\n$lt{'ayes'},\\n$lt{'oryo'}.\\n"; |
|
} |
|
} else { |
|
if (rolefilter == 'st' || retained == 0 || retained == "") { |
|
message += "\\n\\n$lt{'swbs'} "+secshow+".\\n"; |
|
} else { |
|
message += "\\n\\n$lt{'rwba'} "+secshow+".\\n"; |
|
} |
|
} |
|
} |
if (confirm(message)) { |
if (confirm(message)) { |
document.studentform.phase.value = 'bulkchange'; |
document.studentform.phase.value = 'bulkchange'; |
document.studentform.submit(); |
document.studentform.submit(); |
Line 1928 END
|
Line 2028 END
|
'clicker' => "clicker id", |
'clicker' => "clicker id", |
'photo' => "photo", |
'photo' => "photo", |
'extent' => "extent", |
'extent' => "extent", |
|
'go' => "go", |
'pr' => "Proceed", |
'pr' => "Proceed", |
'ca' => "check all", |
'ca' => "check all", |
'ua' => "uncheck all", |
'ua' => "uncheck all", |
Line 1973 END
|
Line 2074 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 2010 END
|
Line 2111 END
|
$output .= &mt("Click on a username to view the user's personal page.").'<br />'; |
$output .= &mt("Click on a username to view the user's personal page.").'<br />'; |
} |
} |
if ($actionselect) { |
if ($actionselect) { |
$output .= <<"END"; |
$output .= <<"END"; |
$lt{'ac'}: $actionselect <input type="button" value="$lt{'pr'}" onclick="javascript:verify_action(document.studentform.actionlist)" /></p> |
$lt{'ac'}: $actionselect <input type="button" value="$lt{'go'}" onclick="javascript:opendatebrowser(this.form,'studentform','go')" /></p> |
<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)" /><br /><br /><input type="button" value="$lt{'pr'}" onclick="javascript:verify_action(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 ($setting eq 'author') { |
|
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 2110 END
|
Line 2250 END
|
$index{$idx} = $i++; |
$index{$idx} = $i++; |
} |
} |
my $usercount = 0; |
my $usercount = 0; |
|
my ($secfilter,$grpfilter); |
|
if ($context eq 'course') { |
|
$secfilter = $env{'form.secfilter'}; |
|
$grpfilter = $env{'form.grpfilter'}; |
|
if ($secfilter eq '') { |
|
$secfilter = 'all'; |
|
} |
|
if ($grpfilter eq '') { |
|
$grpfilter = 'all'; |
|
} |
|
} |
# Get groups, role, permanent e-mail so we can sort on them if |
# Get groups, role, permanent e-mail so we can sort on them if |
# necessary. |
# necessary. |
foreach my $user (keys(%{$userlist})) { |
foreach my $user (keys(%{$userlist})) { |
|
if ($user eq '' ) { |
|
delete($userlist->{$user}); |
|
next; |
|
} |
if ($context eq 'domain' && $user eq $env{'request.role.domain'}.'-domainconfig:'.$env{'request.role.domain'}) { |
if ($context eq 'domain' && $user eq $env{'request.role.domain'}.'-domainconfig:'.$env{'request.role.domain'}) { |
delete($userlist->{$user}); |
delete($userlist->{$user}); |
next; |
next; |
Line 2147 END
|
Line 2302 END
|
delete($userlist->{$user}); |
delete($userlist->{$user}); |
next; |
next; |
} |
} |
if (ref($classgroups) eq 'HASH') { |
if ($context eq 'course') { |
$groups = $classgroups->{$user}; |
my @ac_groups; |
} |
if (ref($classgroups) eq 'HASH') { |
if (ref($groups->{active}) eq 'HASH') { |
$groups = $classgroups->{$user}; |
$userlist->{$user}->[$index{'groups'}] = join(', ',keys(%{$groups->{'active'}})); |
} |
|
if (ref($groups->{'active'}) eq 'HASH') { |
|
@ac_groups = keys(%{$groups->{'active'}}); |
|
$userlist->{$user}->[$index{'groups'}] = join(', ',@ac_groups); |
|
} |
|
if ($mode ne 'autoenroll') { |
|
my $section = $userlist->{$user}->[$index{'section'}]; |
|
if (($env{'request.course.sec'} ne '') && |
|
($section ne $env{'request.course.sec'})) { |
|
if ($role eq 'st') { |
|
delete($userlist->{$user}); |
|
next; |
|
} |
|
} |
|
if ($secfilter eq 'none') { |
|
if ($section ne '') { |
|
delete($userlist->{$user}); |
|
next; |
|
} |
|
} elsif ($secfilter ne 'all') { |
|
if ($section ne $secfilter) { |
|
delete($userlist->{$user}); |
|
next; |
|
} |
|
} |
|
if ($grpfilter eq 'none') { |
|
if (@ac_groups > 0) { |
|
delete($userlist->{$user}); |
|
next; |
|
} |
|
} elsif ($grpfilter ne 'all') { |
|
if (!grep(/^\Q$grpfilter\E$/,@ac_groups)) { |
|
delete($userlist->{$user}); |
|
next; |
|
} |
|
} |
|
if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) { |
|
if (($displayphotos eq 'on') && ($role eq 'st')) { |
|
$userlist->{$user}->[$index{'photo'}] = |
|
&Apache::lonnet::retrievestudentphoto($udom,$uname, |
|
'gif','thumbnail'); |
|
} |
|
} |
|
} |
} |
} |
my %emails = &Apache::loncommon::getemails($uname,$udom); |
my %emails = &Apache::loncommon::getemails($uname,$udom); |
if ($emails{'permanentemail'} =~ /\S/) { |
if ($emails{'permanentemail'} =~ /\S/) { |
Line 2226 END
|
Line 2424 END
|
$r->print("<td>$cellentry</td>\n"); |
$r->print("<td>$cellentry</td>\n"); |
} else { |
} else { |
$r->print("<td>$rowcount</td>\n"); |
$r->print("<td>$rowcount</td>\n"); |
$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 2263 END
|
Line 2480 END
|
$r->print(' <td> </td> '); |
$r->print(' <td> </td> '); |
} |
} |
if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) { |
if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) { |
if ($displayphotos eq 'on' && $sdata->[$index{'role'}] eq 'st') { |
if ($displayphotos eq 'on' && $role eq 'st' && $in{'photo'} ne '') { |
my $imgurl = |
$r->print(' <td align="right"><a href="javascript:photowindow('."'".&Apache::lonnet::studentphoto($in{'domain'},$in{'username'},'jpg')."'".')"><img src="'.$in{'photo'}.'" border="1"></a></td>'); |
&Apache::lonnet::retrievestudentphoto($in{'domain'},$in{'username'}, |
|
'gif','thumbnail'); |
|
$r->print(' <td align="right"><a href="javascript:photowindow('."'".&Apache::lonnet::studentphoto($in{'domain'},$in{'username'},'jpg')."'".')"><img src="'.$imgurl.'" border="1"></a></td>'); |
|
} else { |
} else { |
$r->print(' <td> </td> '); |
$r->print(' <td> </td> '); |
} |
} |
Line 2372 sub select_actions {
|
Line 2586 sub select_actions {
|
if ($context eq 'domain' && $setting eq 'course') { |
if ($context eq 'domain' && $setting eq 'course') { |
return; |
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 2398 sub select_actions {
|
Line 2626 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; |
} |
} |
} |
} |
if ($options) { |
if ($options) { |
$output = '<select name="bulkaction" onchange="javascript:opendatebrowser(this.form,'."'studentform'".')" />'."\n". |
$output = '<select name="bulkaction" onchange="javascript:opendatebrowser(this.form,'."'studentform','change'".')" />'."\n". |
'<option value="" selected="selected">'. |
'<option value="" selected="selected">'. |
&mt('Please select').'</option>'."\n".$options."\n".'</select>'; |
&mt('Please select').'</option>'."\n".$options."\n".'</select>'; |
if ($choices{'dates'}) { |
if ($choices{'dates'}) { |
Line 2442 sub date_section_javascript {
|
Line 2670 sub date_section_javascript {
|
} else { |
} else { |
$title = &mt('Date selector'); |
$title = &mt('Date selector'); |
} |
} |
|
my %nopopup = &Apache::lonlocal::texthash ( |
|
revoke => "Check the boxes for any users for whom roles are to be revoked, and click 'Proceed'", |
|
delete => "Check the boxes for any users for whom roles are to be deleted, and click 'Proceed'", |
|
none => "Choose an action to take for selected users", |
|
); |
my $output = ' |
my $output = ' |
<script type="text/javascript"> |
<script type="text/javascript"> |
var stdeditbrowser;'."\n"; |
var stdeditbrowser;'."\n"; |
$output .= <<"ENDONE"; |
$output .= <<"ENDONE"; |
function opendatebrowser(callingform,formname) { |
function opendatebrowser(callingform,formname,calledby) { |
var bulkaction = callingform.bulkaction.options[callingform.bulkaction.selectedIndex].value; |
var bulkaction = callingform.bulkaction.options[callingform.bulkaction.selectedIndex].value; |
if (bulkaction == 'revoke' || bulkaction == 'delete' || bulkaction == '') { |
if (bulkaction == 'revoke' || bulkaction == 'delete' || bulkaction == '') { |
|
if (calledby == 'go') { |
|
if (bulkaction == 'revoke') { |
|
alert("$nopopup{'revoke'}"); |
|
} |
|
if (bulkaction == 'delete') { |
|
alert("$nopopup{'delete'}"); |
|
} |
|
if (bulkaction == '') { |
|
alert("$nopopup{'none'}"); |
|
} |
|
} |
return; |
return; |
} |
} |
var url = '/adm/createuser?'; |
var url = '/adm/createuser?'; |
Line 2492 function saveselections(formname) {
|
Line 2736 function saveselections(formname) {
|
END |
END |
if ($env{'form.bulkaction'} eq 'chgsec') { |
if ($env{'form.bulkaction'} eq 'chgsec') { |
$output .= <<"END"; |
$output .= <<"END"; |
opener.document.$callingform.retainsec.value = formname.retainsec.value; |
if (formname.retainsec.length > 1) { |
|
for (var i=0; i<formname.retainsec.length; i++) { |
|
if (formname.retainsec[i].checked == true) { |
|
opener.document.$callingform.retainsec.value = formname.retainsec[i].value; |
|
} |
|
} |
|
} else { |
|
opener.document.$callingform.retainsec.value = formname.retainsec.value; |
|
} |
setSections(formname); |
setSections(formname); |
if (seccheck == 'ok') { |
if (seccheck == 'ok') { |
opener.document.$callingform.newsecs.value = formname.sections.value; |
opener.document.$callingform.newsecs.value = formname.sections.value; |
Line 2505 END
|
Line 2757 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 2515 END
|
Line 2768 END
|
} |
} |
|
|
END |
END |
|
} |
} |
} |
} |
} |
$output .= <<"END"; |
$output .= <<"END"; |
Line 2564 END
|
Line 2818 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 2590 END
|
Line 2842 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 2633 sub section_picker {
|
Line 2884 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 2653 sub results_header_row {
|
Line 2906 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 $constraint; |
|
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'}); |
$constraint = &mt('only users in section "[_1]"',$viewablesec); |
} elsif ($env{'form.showrole'} eq 'any') { |
} elsif ($env{'form.showrole'} ne 'cc') { |
$description .= ' '.&mt('(section [_1] only)',$permission->{'view_section'}); |
$constraint = &mt('only users affiliated with no section or section "[_1]"',$viewablesec); |
|
} |
|
if (($env{'form.grpfilter'} ne 'all') && ($env{'form.grpfilter'} ne '')) { |
|
if ($env{'form.grpfilter'} eq 'none') { |
|
$constraint .= &mt(' and not in any group'); |
|
} else { |
|
$constraint .= &mt(' and members of group: "[_1]"',$env{'form.grpfilter'}); |
|
} |
|
} |
|
} else { |
|
if (($env{'form.secfilter'} ne 'all') && ($env{'form.secfilter'} ne '')) { |
|
if ($env{'form.secfilter'} eq 'none') { |
|
$constraint = &mt('only users affiliated with no section'); |
|
} else { |
|
$constraint = &mt('only users affiliated with section "[_1]"',$env{'form.secfilter'}); |
|
} |
|
} |
|
if (($env{'form.grpfilter'} ne 'all') && ($env{'form.grpfilter'} ne '')) { |
|
if ($env{'form.grpfilter'} eq 'none') { |
|
if ($constraint eq '') { |
|
$constraint = &mt('only users not in any group'); |
|
} else { |
|
$constraint .= &mt(' and also not in any group'); |
|
} |
|
} else { |
|
if ($constraint eq '') { |
|
$constraint = &mt('only members of group: "[_1]"',$env{'form.grpfilter'}); |
|
} else { |
|
$constraint .= &mt(' and also members of group: "[_1]"'.$env{'form.grpfilter'}); |
|
} |
|
} |
} |
} |
} |
} |
|
if ($constraint ne '') { |
|
$description .= ' ('.$constraint.')'; |
|
} |
} elsif ($context eq 'author') { |
} elsif ($context eq 'author') { |
$description = |
$description = |
&mt('Author space for <span class="LC_cusr_emph">[_1]</span>', |
&mt('Author space for <span class="LC_cusr_emph">[_1]</span>', |
Line 2757 sub viewable_section {
|
Line 3045 sub viewable_section {
|
################################################# |
################################################# |
################################################# |
################################################# |
sub show_drop_list { |
sub show_drop_list { |
my ($r,$classlist,$keylist,$nosort,$permission)=@_; |
my ($r,$classlist,$nosort,$permission) = @_; |
my $cid=$env{'request.course.id'}; |
my $cid = $env{'request.course.id'}; |
my ($cnum,$cdom) = &get_course_identity($cid); |
my ($cnum,$cdom) = &get_course_identity($cid); |
if (! exists($env{'form.sortby'})) { |
if (! exists($env{'form.sortby'})) { |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
Line 2768 sub show_drop_list {
|
Line 3056 sub show_drop_list {
|
if ($sortby !~ /^(username|domain|section|groups|fullname|id|start|end)$/) { |
if ($sortby !~ /^(username|domain|section|groups|fullname|id|start|end)$/) { |
$sortby = 'username'; |
$sortby = 'username'; |
} |
} |
my ($classgroups) = &Apache::loncoursedata::get_group_memberships( |
|
$classlist,$keylist,$cdom,$cnum); |
|
# |
|
my $action = "drop"; |
my $action = "drop"; |
my $check_uncheck_js = &Apache::loncommon::check_uncheck_jscript(); |
my $check_uncheck_js = &Apache::loncommon::check_uncheck_jscript(); |
$r->print(<<END); |
$r->print(<<END); |
Line 2783 $check_uncheck_js
|
Line 3068 $check_uncheck_js
|
<p> |
<p> |
<input type="hidden" name="phase" value="four"> |
<input type="hidden" name="phase" value="four"> |
END |
END |
|
my ($indexhash,$keylist) = &make_keylist_array(); |
my %lt=&Apache::lonlocal::texthash('usrn' => "username", |
my $studentcount = 0; |
'dom' => "domain", |
if (ref($classlist) eq 'HASH') { |
'sn' => "student name", |
foreach my $student (keys(%{$classlist})) { |
'sec' => "section", |
my $sdata = $classlist->{$student}; |
'start' => "start date", |
my $status = $sdata->[$indexhash->{'status'}]; |
'end' => "end date", |
my $section = $sdata->[$indexhash->{'section'}]; |
'groups' => "active groups", |
if ($status ne 'Active') { |
); |
delete($classlist->{$student}); |
|
next; |
|
} |
|
if ($env{'request.course.sec'} ne '') { |
|
if ($section ne $env{'request.course.sec'}) { |
|
delete($classlist->{$student}); |
|
next; |
|
} |
|
} |
|
$studentcount ++; |
|
} |
|
} |
|
if (!$studentcount) { |
|
$r->print(&mt('There are no students to drop.')); |
|
return; |
|
} |
|
my ($classgroups) = &Apache::loncoursedata::get_group_memberships( |
|
$classlist,$keylist,$cdom,$cnum); |
|
my %lt=&Apache::lonlocal::texthash('usrn' => "username", |
|
'dom' => "domain", |
|
'sn' => "student name", |
|
'sec' => "section", |
|
'start' => "start date", |
|
'end' => "end date", |
|
'groups' => "active groups", |
|
); |
if ($nosort) { |
if ($nosort) { |
$r->print(&Apache::loncommon::start_data_table(). |
$r->print(&Apache::loncommon::start_data_table(). |
&Apache::loncommon::start_data_table_header_row()); |
&Apache::loncommon::start_data_table_header_row()); |
Line 2834 END
|
Line 3144 END
|
} |
} |
# |
# |
# Sort the students |
# Sort the students |
my %index; |
my $index = $indexhash->{$sortby}; |
my $i; |
my $second = $indexhash->{'username'}; |
foreach (@$keylist) { |
my $third = $indexhash->{'domain'}; |
$index{$_} = $i++; |
|
} |
|
$index{'groups'} = scalar(@$keylist); |
|
my $index = $index{$sortby}; |
|
my $second = $index{'username'}; |
|
my $third = $index{'domain'}; |
|
my @Sorted_Students = sort { |
my @Sorted_Students = sort { |
lc($classlist->{$a}->[$index]) cmp lc($classlist->{$b}->[$index]) |
lc($classlist->{$a}->[$index]) cmp lc($classlist->{$b}->[$index]) |
|| |
|| |
lc($classlist->{$a}->[$second]) cmp lc($classlist->{$b}->[$second]) |
lc($classlist->{$a}->[$second]) cmp lc($classlist->{$b}->[$second]) |
|| |
|| |
lc($classlist->{$a}->[$third]) cmp lc($classlist->{$b}->[$third]) |
lc($classlist->{$a}->[$third]) cmp lc($classlist->{$b}->[$third]) |
} (keys(%$classlist)); |
} (keys(%{$classlist})); |
foreach my $student (@Sorted_Students) { |
foreach my $student (@Sorted_Students) { |
my $error; |
my $error; |
my $sdata = $classlist->{$student}; |
my $sdata = $classlist->{$student}; |
my $username = $sdata->[$index{'username'}]; |
my $username = $sdata->[$indexhash->{'username'}]; |
my $domain = $sdata->[$index{'domain'}]; |
my $domain = $sdata->[$indexhash->{'domain'}]; |
my $section = $sdata->[$index{'section'}]; |
my $section = $sdata->[$indexhash->{'section'}]; |
my $name = $sdata->[$index{'fullname'}]; |
my $name = $sdata->[$indexhash->{'fullname'}]; |
my $id = $sdata->[$index{'id'}]; |
my $id = $sdata->[$indexhash->{'id'}]; |
my $start = $sdata->[$index{'start'}]; |
my $start = $sdata->[$indexhash->{'start'}]; |
my $end = $sdata->[$index{'end'}]; |
my $end = $sdata->[$indexhash->{'end'}]; |
my $groups = $classgroups->{$student}; |
my $groups = $classgroups->{$student}; |
my $active_groups; |
my $active_groups; |
if (ref($groups->{active}) eq 'HASH') { |
if (ref($groups->{active}) eq 'HASH') { |
Line 2875 END
|
Line 3179 END
|
} else { |
} else { |
$end = &Apache::lonlocal::locallocaltime($end); |
$end = &Apache::lonlocal::locallocaltime($end); |
} |
} |
my $status = $sdata->[$index{'status'}]; |
|
next if ($status ne 'Active'); |
|
if ($env{'request.course.sec'} ne '') { |
|
if ($section ne $env{'request.course.sec'}) { |
|
next; |
|
} |
|
} |
|
my $studentkey = $student.':'.$section; |
my $studentkey = $student.':'.$section; |
my $startitem = '<input type="hidden" name="'.$studentkey.'_start" value="'.$sdata->[$index{'start'}].'" />'; |
my $startitem = '<input type="hidden" name="'.$studentkey.'_start" value="'.$sdata->[$indexhash->{'start'}].'" />'; |
# |
# |
$r->print(&Apache::loncommon::start_data_table_row()); |
$r->print(&Apache::loncommon::start_data_table_row()); |
$r->print(<<"END"); |
$r->print(<<"END"); |
<td><input type="checkbox" name="droplist" value="$student"></td> |
<td><input type="checkbox" name="droplist" value="$studentkey"></td> |
<td>$username</td> |
<td>$username</td> |
<td>$domain</td> |
<td>$domain</td> |
<td>$id</td> |
<td>$id</td> |
<td>$name</td> |
<td>$name</td> |
<td>$section</td> |
<td>$section</td> |
<td>$start</td> |
<td>$start $startitem</td> |
<td>$end</td> |
<td>$end</td> |
<td>$active_groups</td> |
<td>$active_groups</td> |
END |
END |
Line 2901 END
|
Line 3198 END
|
} |
} |
$r->print(&Apache::loncommon::end_data_table().'<br />'); |
$r->print(&Apache::loncommon::end_data_table().'<br />'); |
%lt=&Apache::lonlocal::texthash( |
%lt=&Apache::lonlocal::texthash( |
'dp' => "Expire Users' Roles", |
'dp' => "Drop Students", |
'ca' => "check all", |
'ca' => "check all", |
'ua' => "uncheck all", |
'ua' => "uncheck all", |
); |
); |
Line 2958 sub upfile_drop_add {
|
Line 3255 sub upfile_drop_add {
|
$fields{$env{'form.f'.$i}}=$keyfields[$i]; |
$fields{$env{'form.f'.$i}}=$keyfields[$i]; |
} |
} |
} |
} |
|
if ($env{'form.fullup'} ne 'yes') { |
|
$r->print('<form name="studentform" method="post" action="/adm/createuser">'."\n". |
|
'<input type="hidden" name="action" value="'.$env{'form.action'}.'" />'); |
|
} |
# |
# |
# Store the field choices away |
# Store the field choices away |
foreach my $field (qw/username names |
foreach my $field (qw/username names |
Line 2979 sub upfile_drop_add {
|
Line 3280 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 3032 sub upfile_drop_add {
|
Line 3333 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 3068 sub upfile_drop_add {
|
Line 3406 sub upfile_drop_add {
|
); |
); |
my $flushc=0; |
my $flushc=0; |
my %student=(); |
my %student=(); |
my %curr_groups; |
my (%curr_groups,@sections,@cleansec,$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 @permitted_roles = &roles_on_upload($context,$setting,%customroles); |
# Get new users list |
# Get new users list |
foreach (@userdata) { |
foreach my $line (@userdata) { |
my %entries=&Apache::loncommon::record_sep($_); |
my @secs; |
|
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 3105 sub upfile_drop_add {
|
Line 3477 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 |
$entries{$fields{'sec'}} =~ s/\W//g; |
if (defined($fields{'sec'})) { |
my $item = $entries{$fields{'sec'}}; |
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 3157 sub upfile_drop_add {
|
Line 3542 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 = |
$entries{$fields{'role'}} =~ s/(\s+$|^\s+)//g; |
&curr_role_permissions($context,$setting); |
if ($entries{$fields{'role'}} ne '') { |
if (grep(/^\Q$entries{$fields{'role'}}\E/,@poss_roles)) { |
if (grep(/^\Q$entries{$fields{'role'}}\E$/,@permitted_roles)) { |
$role=$entries{$fields{'role'}}; |
$role = $entries{$fields{'role'}}; |
} else { |
} |
my $rolestr = join(', ',@poss_roles); |
} |
|
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 3174 sub upfile_drop_add {
|
Line 3561 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 3197 sub upfile_drop_add {
|
Line 3584 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 3222 sub upfile_drop_add {
|
Line 3637 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); |
|
my $singlesec = ''; |
if ($role eq 'st') { |
if ($role eq 'st') { |
|
my $sec; |
|
if (@secs > 0) { |
|
$sec = $secs[0]; |
|
} |
&modifystudent($domain,$username,$cid,$sec, |
&modifystudent($domain,$username,$cid,$sec, |
$desiredhost); |
$desiredhost); |
$roleresult = |
$roleresult = |
&Apache::lonnet::modifystudent |
&Apache::lonnet::modifystudent |
($domain,$username,$id,$amode,$password, |
($domain,$username,$id,$amode,$password, |
$fname,$mname,$lname,$gen,$sec,$enddate, |
$fname,$mname,$lname,$gen,$sec,$enddate, |
$startdate,$env{'form.forceid'}, |
$startdate,$env{'form.forceid'}, |
$desiredhost,$email); |
$desiredhost,$email,'manual','',$cid); |
|
$userresult = $roleresult; |
|
} else { |
|
if ($role ne '') { |
|
if ($context eq 'course' || $setting eq 'course') { |
|
if ($customroles{$role}) { |
|
$role = 'cr_'.$env{'user.domain'}.'_'. |
|
$env{'user.name'}.'_'.$role; |
|
} |
|
if ($role ne 'cc') { |
|
if (@secs > 1) { |
|
$multiple = 1; |
|
foreach my $sec (@secs) { |
|
($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,$idresult) = |
|
&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 { |
} else { |
($userresult,$authresult,$roleresult) = |
$flushc = |
&modifyuserrole($context,$setting, |
&user_change_result($r,$userresult,$authresult, |
$changeauth,$cid,$domain,$username, |
$roleresult,$idresult,\%counts,$flushc, |
$id,$amode,$password,$fname, |
$username,\%userchg); |
$mname,$lname,$gen,$sec, |
|
$env{'form.forceid'},$desiredhost, |
|
$email,$role,$enddate,$startdate,$checkid); |
|
} |
} |
$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 3265 sub upfile_drop_add {
|
Line 3725 sub upfile_drop_add {
|
} # end of foreach (@userdata) |
} # end of foreach (@userdata) |
# Flush the course logs so reverse user roles immediately updated |
# Flush the course logs so reverse user roles immediately updated |
&Apache::lonnet::flushcourselogs(); |
&Apache::lonnet::flushcourselogs(); |
$r->print("</p>\n<p>\n".&mt('Processed [_1] user(s).',$counts{'user'}). |
$r->print("</p>\n<p>\n".&mt('Processed [quant,_1,user].',$counts{'user'}). |
"</p>\n"); |
"</p>\n"); |
if ($counts{'role'} > 0) { |
if ($counts{'role'} > 0) { |
$r->print("<p>\n". |
$r->print("<p>\n". |
&mt('Roles added for [_1] users. If user is active, the new role will be available when the user next logs in to LON-CAPA.',$counts{'role'})."</p>\n"); |
&mt('Roles added for [quant,_1,user].',$counts{'role'}).' '.&mt('If a user is currently logged-in to LON-CAPA, any new roles which are active will be available when the user next logs in.')."</p>\n"); |
|
} else { |
|
$r->print('<p>'.&mt('No roles added').'</p>'); |
} |
} |
if ($counts{'auth'} > 0) { |
if ($counts{'auth'} > 0) { |
$r->print("<p>\n". |
$r->print("<p>\n". |
Line 3277 sub upfile_drop_add {
|
Line 3739 sub upfile_drop_add {
|
$counts{'auth'})."</p>\n"); |
$counts{'auth'})."</p>\n"); |
} |
} |
$r->print(&print_namespacing_alerts($domain,\%alerts,\%curr_rules)); |
$r->print(&print_namespacing_alerts($domain,\%alerts,\%curr_rules)); |
$r->print('<form name="uploadresult" action="/adm/createuser">'); |
|
$r->print(&Apache::lonhtmlcommon::echo_form_input(['phase','prevphase','currstate'])); |
|
$r->print('</form>'); |
|
##################################### |
##################################### |
# Drop students # |
# Display list of students to drop # |
##################################### |
##################################### |
if ($env{'form.fullup'} eq 'yes') { |
if ($env{'form.fullup'} eq 'yes') { |
$r->print('<h3>'.&mt('Dropping Students')."</h3>\n"); |
$r->print('<h3>'.&mt('Students to Drop')."</h3>\n"); |
# Get current classlist |
# Get current classlist |
my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist(); |
my $classlist = &Apache::loncoursedata::get_classlist(); |
if (! defined($classlist)) { |
if (! defined($classlist)) { |
$r->print(&mt('There are no students currently enrolled.'). |
$r->print('<form name="studentform" method="post" action="/adm/createuser" />'. |
"\n"); |
'<input type="hidden" name="action" value="'.$env{'form.action'}.'" />'. |
|
&mt('There are no students with current/future access to the course.'). |
|
'</form>'."\n"); |
} else { |
} else { |
# Remove the students we just added from the list of students. |
# Remove the students we just added from the list of students. |
foreach (@userdata) { |
foreach my $line (@userdata) { |
my %entries=&Apache::loncommon::record_sep($_); |
my %entries=&Apache::loncommon::record_sep($line); |
unless (($entries{$fields{'username'}} eq '') || |
unless (($entries{$fields{'username'}} eq '') || |
(!defined($entries{$fields{'username'}}))) { |
(!defined($entries{$fields{'username'}}))) { |
delete($classlist->{$entries{$fields{'username'}}. |
delete($classlist->{$entries{$fields{'username'}}. |
Line 3301 sub upfile_drop_add {
|
Line 3762 sub upfile_drop_add {
|
} |
} |
} |
} |
# Print out list of dropped students. |
# Print out list of dropped students. |
&show_drop_list($r,$classlist,$keylist,'nosort'); |
&show_drop_list($r,$classlist,'nosort',$permission); |
} |
} |
} |
} |
} # end of unless |
} # end of unless |
|
if ($env{'form.fullup'} ne 'yes') { |
|
$r->print('</form>'); |
|
} |
} |
} |
|
|
sub print_namespacing_alerts { |
sub print_namespacing_alerts { |
Line 3348 sub print_namespacing_alerts {
|
Line 3812 sub print_namespacing_alerts {
|
} |
} |
|
|
sub user_change_result { |
sub user_change_result { |
my ($r,$userresult,$authresult,$roleresult,$counts,$flushc,$username, |
my ($r,$userresult,$authresult,$roleresult,$idresult,$counts,$flushc, |
$userchg) = @_; |
$username,$userchg) = @_; |
my $okresult = 0; |
my $okresult = 0; |
if ($userresult ne 'ok') { |
if ($userresult ne 'ok') { |
if ($userresult =~ /^error:(.+)$/) { |
if ($userresult =~ /^error:(.+)$/) { |
Line 3390 sub user_change_result {
|
Line 3854 sub user_change_result {
|
$flushc=0; |
$flushc=0; |
} |
} |
} |
} |
|
if ($idresult) { |
|
$r->print($idresult); |
|
} |
return $flushc; |
return $flushc; |
} |
} |
|
|
Line 3398 sub print_drop_menu {
|
Line 3865 sub print_drop_menu {
|
my ($r,$context,$permission) = @_; |
my ($r,$context,$permission) = @_; |
$r->print('<h3>'.&mt("Drop Students").'</h3>'."\n". |
$r->print('<h3>'.&mt("Drop Students").'</h3>'."\n". |
'<form name="studentform" method="post">'."\n"); |
'<form name="studentform" method="post">'."\n"); |
my $cid=$env{'request.course.id'}; |
my $classlist = &Apache::loncoursedata::get_classlist(); |
my ($classlist,$keylist) = &Apache::loncoursedata::get_classlist(); |
|
if (! defined($classlist)) { |
if (! defined($classlist)) { |
$r->print(&mt('There are no students currently enrolled.')."\n"); |
$r->print(&mt('There are no students currently enrolled.')."\n"); |
return; |
} else { |
|
&show_drop_list($r,$classlist,'nosort',$permission); |
} |
} |
# Print out the available choices |
|
&show_drop_list($r,$classlist,$keylist,$permission); |
|
$r->print('</form>'. &Apache::loncommon::end_page()); |
$r->print('</form>'. &Apache::loncommon::end_page()); |
return; |
return; |
} |
} |
Line 3417 sub update_user_list {
|
Line 3882 sub update_user_list {
|
my $now = time; |
my $now = time; |
my $count=0; |
my $count=0; |
my @changelist; |
my @changelist; |
if ($choice ne '') { |
if ($choice eq 'drop') { |
@changelist = &Apache::loncommon::get_env_multiple('form.actionlist'); |
|
} else { |
|
@changelist = &Apache::loncommon::get_env_multiple('form.droplist'); |
@changelist = &Apache::loncommon::get_env_multiple('form.droplist'); |
|
} else { |
|
@changelist = &Apache::loncommon::get_env_multiple('form.actionlist'); |
} |
} |
my %result_text = ( ok => { 'revoke' => 'Revoked', |
my %result_text = ( ok => { 'revoke' => 'Revoked', |
'delete' => 'Deleted', |
'delete' => 'Deleted', |
Line 3487 sub update_user_list {
|
Line 3952 sub update_user_list {
|
} |
} |
} |
} |
my $plrole = &Apache::lonnet::plaintext($role); |
my $plrole = &Apache::lonnet::plaintext($role); |
my ($uid,$first,$middle,$last,$gene,$sec); |
|
my $start = $env{'form.'.$item.'_start'}; |
my $start = $env{'form.'.$item.'_start'}; |
my $end = $env{'form.'.$item.'_end'}; |
my $end = $env{'form.'.$item.'_end'}; |
if ($choice eq 'drop') { |
if ($choice eq 'drop') { |
Line 3507 sub update_user_list {
|
Line 3971 sub update_user_list {
|
&Apache::lonnet::revokerole($udom,$uname,$scope,$role); |
&Apache::lonnet::revokerole($udom,$uname,$scope,$role); |
} |
} |
} elsif ($choice eq 'delete') { |
} elsif ($choice eq 'delete') { |
$start = -1; |
|
$end = -1; |
|
if ($role eq 'st') { |
if ($role eq 'st') { |
# FIXME - how does role deletion affect classlist? |
&Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$now,$start,$type,$locktype,$cid); |
&Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid); |
} |
} else { |
$result = |
$result = |
&Apache::lonnet::assignrole($udom,$uname,$scope,$role,$now, |
&Apache::lonnet::assignrole($udom,$uname,$scope,$role,$now, |
$start,1); |
0,1); |
|
} |
|
} else { |
} else { |
#reenable, activate, change access dates or change section |
#reenable, activate, change access dates or change section |
if ($choice ne 'chgsec') { |
if ($choice ne 'chgsec') { |
Line 3556 sub update_user_list {
|
Line 4016 sub update_user_list {
|
if (@newsecs == 0) { |
if (@newsecs == 0) { |
$result = &mt('No change in section assignment (none)'); |
$result = &mt('No change in section assignment (none)'); |
$nochg = 1; |
$nochg = 1; |
} |
} else { |
} else { |
|
if (!grep(/^\Q$sec\E$/,@newsecs)) { |
|
$revresult = |
$revresult = |
&Apache::lonnet::revokerole($udom,$uname,$scope,$role); |
&Apache::lonnet::revokerole($udom,$uname, |
|
$scope,$role); |
|
} |
|
} else { |
|
if (@newsecs > 0) { |
|
if (grep(/^\Q$sec\E$/,@newsecs)) { |
|
push(@retained,$sec); |
|
} else { |
|
$revresult = |
|
&Apache::lonnet::revokerole($udom,$uname, |
|
$scope,$role); |
|
} |
} else { |
} else { |
push(@retained,$sec); |
$revresult = |
|
&Apache::lonnet::revokerole($udom,$uname, |
|
$scope,$role); |
} |
} |
} |
} |
} else { |
} else { |
push(@retained,$sec); |
if ($sec eq '') { |
|
$nochg = 1; |
|
} else { |
|
push(@retained,$sec); |
|
} |
} |
} |
# add new sections |
# add new sections |
if (@newsecs == 0) { |
if (@newsecs == 0) { |
if (!$nochg) { |
if (!$nochg) { |
if ($sec ne '') { |
if ($role eq 'st') { |
if ($role eq 'st') { |
$result = |
$result = |
&Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,undef,$end,$start,$type,$locktype,$cid); |
&Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,undef,$end,$start,$type,$locktype,$cid); |
} else { |
} else { |
my $newscope = $scopestem; |
my $newscope = $scopestem; |
$result = &Apache::lonnet::assignrole($udom,$uname,$newscope,$role,$end,$start); |
$result = &Apache::lonnet::assignrole($udom,$uname,$newscope,$role,$end,$start); |
|
} |
|
} |
} |
} |
} |
} else { |
} else { |
Line 3612 sub update_user_list {
|
Line 4085 sub update_user_list {
|
$count++; |
$count++; |
} else { |
} else { |
$r->print( |
$r->print( |
&mt("Error $result_text{'error'}{$choice} [_1] in [_2] for [_3]:[_4]", |
&mt("Error $result_text{'error'}{$choice} [_1] in [_2] for [_3]: [_4].", |
$plrole,$extent,$uname.':'.$udom,$result).'<br />'); |
$plrole,$extent,$uname.':'.$udom,$result).'<br />'); |
} |
} |
} |
} |
$r->print('<p><b>'.&mt("$result_text{'ok'}{$choice} role(s) for [quant,_1,user,users,users].",$count).'</b></p>'); |
$r->print('<form name="studentform" method="post" action="/adm/createuser">'."\n"); |
|
if ($choice eq 'drop') { |
|
$r->print('<input type="hidden" name="action" value="listusers" />'."\n". |
|
'<input type="hidden" name="Status" value="Active" />'."\n". |
|
'<input type="hidden" name="showrole" value="st" />'."\n"); |
|
} else { |
|
foreach my $item ('action','sortby','roletype','showrole','Status','secfilter','grpfilter') { |
|
if ($env{'form.'.$item} ne '') { |
|
$r->print('<input type="hidden" name="'.$item.'" value="'.$env{'form.'.$item}. |
|
'" />'."\n"); |
|
} |
|
} |
|
} |
|
$r->print('<p><b>'.&mt("$result_text{'ok'}{$choice} role(s) for [quant,_1,user,users,no users].",$count).'</b></p>'); |
if ($count > 0) { |
if ($count > 0) { |
if ($choice eq 'revoke' || $choice eq 'drop') { |
if ($choice eq 'revoke' || $choice eq 'drop') { |
$r->print('<p>'.&mt('Re-enabling will re-activate data for the role.</p>')); |
$r->print('<p>'.&mt('Re-enabling will re-activate data for the role.</p>')); |
Line 3626 sub update_user_list {
|
Line 4112 sub update_user_list {
|
} |
} |
if ($env{'form.makedatesdefault'}) { |
if ($env{'form.makedatesdefault'}) { |
if ($choice eq 'chgdates' || $choice eq 'reenable' || $choice eq 'activate') { |
if ($choice eq 'chgdates' || $choice eq 'reenable' || $choice eq 'activate') { |
$r->print(&make_dates_default($startdate,$enddate)); |
$r->print(&make_dates_default($startdate,$enddate,$context)); |
} |
} |
} |
} |
|
my $linktext = &mt('Display User Lists'); |
|
if ($choice eq 'drop') { |
|
$linktext = &mt('Display current class roster'); |
|
} |
|
$r->print('<a href="javascript:document.studentform.submit()">'.$linktext.'</a></form>'."\n"); |
} |
} |
|
|
sub classlist_drop { |
sub classlist_drop { |
my ($scope,$uname,$udom,$now,$action) = @_; |
my ($scope,$uname,$udom,$now) = @_; |
my ($cdom,$cnum) = ($scope=~m{^/($match_domain)/($match_courseid)}); |
my ($cdom,$cnum) = ($scope=~m{^/($match_domain)/($match_courseid)}); |
my $cid=$cdom.'_'.$cnum; |
if (&Apache::lonnet::is_course($cdom,$cnum)) { |
my $user = $uname.':'.$udom; |
my $user = $uname.':'.$udom; |
if ($action eq 'drop') { |
|
if (!&active_student_roles($cnum,$cdom,$uname,$udom)) { |
if (!&active_student_roles($cnum,$cdom,$uname,$udom)) { |
my $result = |
my $result = |
&Apache::lonnet::cput('classlist', |
&Apache::lonnet::cput('classlist', |
{ $user => $now }, |
{ $user => $now },$cdom,$cnum); |
$env{'course.'.$cid.'.domain'}, |
|
$env{'course.'.$cid.'.num'}); |
|
return &mt('Drop from classlist: [_1]', |
return &mt('Drop from classlist: [_1]', |
'<b>'.$result.'</b>').'<br />'; |
'<b>'.$result.'</b>').'<br />'; |
} |
} |
Line 3712 sub course_sections {
|
Line 4200 sub course_sections {
|
my ($sections_count,$role) = @_; |
my ($sections_count,$role) = @_; |
my $output = ''; |
my $output = ''; |
my @sections = (sort {$a <=> $b} keys %{$sections_count}); |
my @sections = (sort {$a <=> $b} keys %{$sections_count}); |
if (scalar(@sections) == 1) { |
my $numsec = scalar(@sections); |
|
if ($numsec <= 1) { |
$output = '<select name="currsec_'.$role.'" >'."\n". |
$output = '<select name="currsec_'.$role.'" >'."\n". |
' <option value="">Select</option>'."\n". |
' <option value="">'.&mt('Select').'</option>'."\n". |
' <option value="">No section</option>'."\n". |
' <option value="">'.&mt('No section').'</option>'."\n"; |
|
if ($numsec == 1) { |
|
$output .= |
' <option value="'.$sections[0].'" >'.$sections[0].'</option>'."\n"; |
' <option value="'.$sections[0].'" >'.$sections[0].'</option>'."\n"; |
|
} |
} else { |
} else { |
$output = '<select name="currsec_'.$role.'" '; |
$output = '<select name="currsec_'.$role.'" '; |
my $multiple = 4; |
my $multiple = 4; |
if (scalar(@sections) < 4) { $multiple = scalar(@sections); } |
if (scalar(@sections) < 4) { $multiple = scalar(@sections); } |
$output .= 'multiple="multiple" size="'.$multiple.'">'."\n"; |
if ($role eq 'st') { |
|
$output .= '>'."\n". |
|
' <option value="">'.&mt('Select').'</option>'."\n". |
|
' <option value="">'.&mt('No section')."</option>\n"; |
|
} else { |
|
$output .= 'multiple="multiple" size="'.$multiple.'">'."\n"; |
|
} |
foreach my $sec (@sections) { |
foreach my $sec (@sections) { |
$output .= '<option value="'.$sec.'">'.$sec."</option>\n"; |
$output .= '<option value="'.$sec.'">'.$sec."</option>\n"; |
} |
} |
Line 3741 sub get_groupslist {
|
Line 4239 sub get_groupslist {
|
} |
} |
|
|
sub setsections_javascript { |
sub setsections_javascript { |
my ($form,$groupslist) = @_; |
my ($formname,$groupslist,$mode,$checkauth) = @_; |
my ($checkincluded,$finish,$roleplace,$setsection_js); |
my ($checkincluded,$finish,$rolecode,$setsection_js); |
if ($form eq 'cu') { |
if ($mode eq 'upload') { |
|
$checkincluded = 'formname.name == "'.$formname.'"'; |
|
$finish = "return 'ok';"; |
|
$rolecode = "var role = formname.defaultrole.options[formname.defaultrole.selectedIndex].value;\n"; |
|
} elsif ($formname eq 'cu') { |
$checkincluded = 'formname.elements[i-1].checked == true'; |
$checkincluded = 'formname.elements[i-1].checked == true'; |
$finish = 'formname.submit()'; |
if ($checkauth) { |
$roleplace = 3; |
$finish = "var authcheck = auth_check();\n". |
|
" if (authcheck == 'ok') {\n". |
|
" formname.submit();\n". |
|
" }\n"; |
|
} else { |
|
$finish = 'formname.submit()'; |
|
} |
|
$rolecode = "var match = str.split('_'); |
|
var role = match[3];\n"; |
|
} elsif ($formname eq 'enrollstudent') { |
|
$checkincluded = 'formname.name == "'.$formname.'"'; |
|
if ($checkauth) { |
|
$finish = "var authcheck = auth_check();\n". |
|
" if (authcheck == 'ok') {\n". |
|
" formname.submit();\n". |
|
" }\n"; |
|
} else { |
|
$finish = 'formname.submit()'; |
|
} |
|
$rolecode = "var match = str.split('_'); |
|
var role = match[1];\n"; |
} else { |
} else { |
$checkincluded = 'formname.name == "'.$form.'"'; |
$checkincluded = 'formname.name == "'.$formname.'"'; |
$finish = "seccheck = 'ok';"; |
$finish = "seccheck = 'ok';"; |
$roleplace = 1; |
$rolecode = "var match = str.split('_'); |
|
var role = match[1];\n"; |
$setsection_js = "var seccheck = 'alert';"; |
$setsection_js = "var seccheck = 'alert';"; |
} |
} |
my %alerts = &Apache::lonlocal::texthash( |
my %alerts = &Apache::lonlocal::texthash( |
Line 3775 function setSections(formname) {
|
Line 4298 function setSections(formname) {
|
var checkcurr = str.match(re1); |
var checkcurr = str.match(re1); |
if (checkcurr != null) { |
if (checkcurr != null) { |
if ($checkincluded) { |
if ($checkincluded) { |
var match = str.split('_'); |
$rolecode |
var role = match[$roleplace]; |
|
if (role == 'cc') { |
if (role == 'cc') { |
alert("$alerts{'secd'}\\n$alerts{'accr'}"); |
alert("$alerts{'secd'}\\n$alerts{'accr'}"); |
} |
} |
Line 3851 sub can_create_user {
|
Line 4373 sub can_create_user {
|
my ($dom,$context,$usertype) = @_; |
my ($dom,$context,$usertype) = @_; |
my %domconf = &Apache::lonnet::get_dom('configuration',['usercreation'],$dom); |
my %domconf = &Apache::lonnet::get_dom('configuration',['usercreation'],$dom); |
my $cancreate = 1; |
my $cancreate = 1; |
|
if (&Apache::lonnet::allowed('mau',$dom)) { |
|
return $cancreate; |
|
} |
if (ref($domconf{'usercreation'}) eq 'HASH') { |
if (ref($domconf{'usercreation'}) eq 'HASH') { |
if (ref($domconf{'usercreation'}{'cancreate'}) eq 'HASH') { |
if (ref($domconf{'usercreation'}{'cancreate'}) eq 'HASH') { |
if ($context eq 'course' || $context eq 'author') { |
if ($context eq 'course' || $context eq 'author') { |
Line 4005 sub get_permission {
|
Line 4530 sub get_permission {
|
} else { |
} else { |
my @allroles = &roles_by_context($context); |
my @allroles = &roles_by_context($context); |
foreach my $role (@allroles) { |
foreach my $role (@allroles) { |
if (&Apache::lonnet::allowed('c'.$role,$env{'request.role.domain'})) { $permission{'cusr'} = 1; |
if (&Apache::lonnet::allowed('c'.$role,$env{'request.role.domain'})) { |
|
$permission{'cusr'} = 1; |
last; |
last; |
} |
} |
} |
} |
Line 4034 sub authorpriv {
|
Line 4560 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,$setting,%customroles) = @_; |
|
my (@possible_roles,@permitted_roles); |
|
@possible_roles = &curr_role_permissions($context,$setting,1); |
|
foreach my $role (@possible_roles) { |
|
if ($role eq 'cr') { |
|
push(@permitted_roles,keys(%customroles)); |
|
} else { |
|
push(@permitted_roles,$role); |
|
} |
|
} |
|
return @permitted_roles; |
|
} |
|
|
sub get_course_identity { |
sub get_course_identity { |
my ($cid) = @_; |
my ($cid) = @_; |
my ($cnum,$cdom,$cdesc); |
my ($cnum,$cdom,$cdesc); |
Line 4056 sub get_course_identity {
|
Line 4596 sub get_course_identity {
|
} |
} |
|
|
sub dc_setcourse_js { |
sub dc_setcourse_js { |
my ($formname,$mode) = @_; |
my ($formname,$mode,$context) = @_; |
my $dc_setcourse_code; |
my ($dc_setcourse_code,$authen_check); |
my $cctext = &Apache::lonnet::plaintext('cc'); |
my $cctext = &Apache::lonnet::plaintext('cc'); |
my %alerts = §ioncheck_alerts(); |
my %alerts = §ioncheck_alerts(); |
my $role = 'role'; |
my $role = 'role'; |
if ($mode eq 'upload') { |
if ($mode eq 'upload') { |
$role = 'courserole'; |
$role = 'courserole'; |
|
} else { |
|
$authen_check = &verify_authen($formname,$context); |
} |
} |
$dc_setcourse_code = (<<"SCRIPTTOP"); |
$dc_setcourse_code = (<<"SCRIPTTOP"); |
|
$authen_check |
|
|
function setCourse() { |
function setCourse() { |
var course = document.$formname.dccourse.value; |
var course = document.$formname.dccourse.value; |
if (course != "") { |
if (course != "") { |
Line 4149 SCRIPTTOP
|
Line 4693 SCRIPTTOP
|
} |
} |
} |
} |
} |
} |
document.$formname.submit(); |
var authcheck = auth_check(); |
|
if (authcheck == 'ok') { |
|
document.$formname.submit(); |
|
} |
} |
} |
|
|
ENDSCRIPT |
ENDSCRIPT |
} else { |
} else { |
$dc_setcourse_code .= " |
$dc_setcourse_code .= " |
Line 4172 ENDSCRIPT
|
Line 4718 ENDSCRIPT
|
return -1; |
return -1; |
} |
} |
ENDSCRIPT |
ENDSCRIPT |
|
return $dc_setcourse_code; |
|
} |
|
|
|
sub verify_authen { |
|
my ($formname,$context) = @_; |
|
my %alerts = &authcheck_alerts(); |
|
my $finish = "return 'ok';"; |
|
if ($context eq 'author') { |
|
$finish = "document.$formname.submit();"; |
|
} |
|
my $outcome = <<"ENDSCRIPT"; |
|
|
|
function auth_check() { |
|
var logintype; |
|
if (document.$formname.login.length) { |
|
if (document.$formname.login.length > 0) { |
|
var loginpicked = 0; |
|
for (var i=0; i<document.$formname.login.length; i++) { |
|
if (document.$formname.login[i].checked == true) { |
|
loginpicked = 1; |
|
logintype = document.$formname.login[i].value; |
|
} |
|
} |
|
if (loginpicked == 0) { |
|
alert("$alerts{'authen'}"); |
|
return; |
|
} |
|
} |
|
} else { |
|
logintype = document.$formname.login.value; |
|
} |
|
if (logintype == 'nochange') { |
|
return 'ok'; |
|
} |
|
var argpicked = document.$formname.elements[logintype+'arg'].value; |
|
if ((argpicked == null) || (argpicked == '') || (typeof argpicked == 'undefined')) { |
|
var alertmsg = ''; |
|
switch (logintype) { |
|
case 'krb': |
|
alertmsg = '$alerts{'krb'}'; |
|
break; |
|
case 'int': |
|
alertmsg = '$alerts{'ipass'}'; |
|
case 'fsys': |
|
alertmsg = '$alerts{'ipass'}'; |
|
break; |
|
case 'loc': |
|
alertmsg = ''; |
|
break; |
|
default: |
|
alertmsg = ''; |
|
} |
|
if (alertmsg != '') { |
|
alert(alertmsg); |
|
return; |
|
} |
|
} |
|
$finish |
|
} |
|
ENDSCRIPT |
} |
} |
|
|
sub sectioncheck_alerts { |
sub sectioncheck_alerts { |
Line 4193 sub sectioncheck_alerts {
|
Line 4799 sub sectioncheck_alerts {
|
return %alerts; |
return %alerts; |
} |
} |
|
|
|
sub authcheck_alerts { |
|
my %alerts = |
|
&Apache::lonlocal::texthash( |
|
authen => 'You must choose an authentication type.', |
|
krb => 'You need to specify the Kerberos domain.', |
|
ipass => 'You need to specify the initial password.', |
|
); |
|
return %alerts; |
|
} |
|
|
1; |
1; |
|
|