version 1.35, 2007/12/26 13:55:32
|
version 1.89, 2009/04/22 17:42:36
|
Line 42 use LONCAPA qw(:DEFAULT :match);
|
Line 42 use LONCAPA qw(:DEFAULT :match);
|
############################################################### |
############################################################### |
# Drop student from all sections of a course, except optional $csec |
# Drop student from all sections of a course, except optional $csec |
sub modifystudent { |
sub modifystudent { |
my ($udom,$unam,$courseid,$csec,$desiredhost)=@_; |
my ($udom,$unam,$courseid,$csec,$desiredhost,$context)=@_; |
# if $csec is undefined, drop the student from all the courses matching |
# if $csec is undefined, drop the student from all the courses matching |
# this one. If $csec is defined, drop them from all other sections of |
# this one. If $csec is defined, drop them from all other sections of |
# this course and add them to section $csec |
# this course and add them to section $csec |
Line 69 sub modifystudent {
|
Line 69 sub modifystudent {
|
# dom name id mode pass f m l g |
# dom name id mode pass f m l g |
($udom,$unam,'', '', '',undef,undef,undef,undef, |
($udom,$unam,'', '', '',undef,undef,undef,undef, |
$section,time,undef,undef,$desiredhost,'','manual', |
$section,time,undef,undef,$desiredhost,'','manual', |
'',$courseid); |
'',$courseid,'',$context); |
$result .= $reply.':'; |
$result .= $reply.':'; |
} |
} |
} |
} |
} |
} |
} |
} |
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 86 sub modifystudent {
|
Line 86 sub modifystudent {
|
sub modifyuserrole { |
sub modifyuserrole { |
my ($context,$setting,$changeauth,$cid,$udom,$uname,$uid,$umode,$upass, |
my ($context,$setting,$changeauth,$cid,$udom,$uname,$uid,$umode,$upass, |
$first,$middle,$last,$gene,$sec,$forceid,$desiredhome,$email,$role, |
$first,$middle,$last,$gene,$sec,$forceid,$desiredhome,$email,$role, |
$end,$start,$checkid) = @_; |
$end,$start,$checkid,$inststatus) = @_; |
my ($scope,$userresult,$authresult,$roleresult,$idresult); |
my ($scope,$userresult,$authresult,$roleresult,$idresult); |
if ($setting eq 'course' || $context eq 'course') { |
if ($setting eq 'course' || $context eq 'course') { |
$scope = '/'.$cid; |
$scope = '/'.$cid; |
Line 124 sub modifyuserrole {
|
Line 124 sub modifyuserrole {
|
$userresult = |
$userresult = |
&Apache::lonnet::modifyuser($udom,$uname,$uid,$umode,$upass,$first, |
&Apache::lonnet::modifyuser($udom,$uname,$uid,$umode,$upass,$first, |
$middle,$last,$gene,$forceid,$desiredhome, |
$middle,$last,$gene,$forceid,$desiredhome, |
$email,$role,$start,$end); |
$email,$inststatus); |
if ($userresult eq 'ok') { |
if ($userresult eq 'ok') { |
if ($role ne '') { |
if ($role ne '') { |
$role =~ s/_/\//g; |
$role =~ s/_/\//g; |
$roleresult = &Apache::lonnet::assignrole($udom,$uname,$scope, |
$roleresult = &Apache::lonnet::assignrole($udom,$uname,$scope, |
$role,$end,$start); |
$role,$end,$start,'', |
|
'',$context); |
} |
} |
} |
} |
return ($userresult,$authresult,$roleresult,$idresult); |
return ($userresult,$authresult,$roleresult,$idresult); |
Line 168 sub propagate_id_change {
|
Line 169 sub propagate_id_change {
|
} |
} |
|
|
sub update_classlist { |
sub update_classlist { |
my ($cdom,$cnum,$udom,$uname,$user) = @_; |
my ($cdom,$cnum,$udom,$uname,$user,$newend) = @_; |
my ($uid,$classlistentry); |
my ($uid,$classlistentry); |
my $fullname = |
my $fullname = |
&Apache::lonnet::format_name($user->{'firstname'},$user->{'middlename'}, |
&Apache::lonnet::format_name($user->{'firstname'},$user->{'middlename'}, |
Line 179 sub update_classlist {
|
Line 180 sub update_classlist {
|
my @classinfo = split(/:/,$classhash{$uname.':'.$udom}); |
my @classinfo = split(/:/,$classhash{$uname.':'.$udom}); |
my $ididx=&Apache::loncoursedata::CL_ID() - 2; |
my $ididx=&Apache::loncoursedata::CL_ID() - 2; |
my $nameidx=&Apache::loncoursedata::CL_FULLNAME() - 2; |
my $nameidx=&Apache::loncoursedata::CL_FULLNAME() - 2; |
|
my $endidx = &Apache::loncoursedata::CL_END() - 2; |
|
my $startidx = &Apache::loncoursedata::CL_START() - 2; |
for (my $i=0; $i<@classinfo; $i++) { |
for (my $i=0; $i<@classinfo; $i++) { |
if ($i == $ididx) { |
if ($i == $endidx) { |
|
if ($newend ne '') { |
|
$classlistentry .= $newend.':'; |
|
} else { |
|
$classlistentry .= $classinfo[$i].':'; |
|
} |
|
} elsif ($i == $startidx) { |
|
if ($newend ne '') { |
|
if ($classinfo[$i] > $newend) { |
|
$classlistentry .= $newend.':'; |
|
} else { |
|
$classlistentry .= $classinfo[$i].':'; |
|
} |
|
} else { |
|
$classlistentry .= $classinfo[$i].':'; |
|
} |
|
} elsif ($i == $ididx) { |
if (defined($user->{'id'})) { |
if (defined($user->{'id'})) { |
$classlistentry .= $user->{'id'}.':'; |
$classlistentry .= $user->{'id'}.':'; |
} else { |
} else { |
$classlistentry .= $classinfo[$i].':'; |
$classlistentry .= $classinfo[$i].':'; |
} |
} |
} elsif ($i == $nameidx) { |
} elsif ($i == $nameidx) { |
$classlistentry .= $fullname.':'; |
if (defined($user->{'lastname'})) { |
|
$classlistentry .= $fullname.':'; |
|
} else { |
|
$classlistentry .= $classinfo[$i].':'; |
|
} |
} else { |
} else { |
$classlistentry .= $classinfo[$i].':'; |
$classlistentry .= $classinfo[$i].':'; |
} |
} |
Line 306 sub print_upload_manager_header {
|
Line 329 sub print_upload_manager_header {
|
$env{'request.role.domain'},$context, |
$env{'request.role.domain'},$context, |
$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: [_1]','<b>'.$distotal.'</b>'). |
"<br />\n"); |
"<br />\n"); |
$r->print('<div class="LC_left_float"><h3>'. |
$r->print('<div class="LC_left_float"><h3>'. |
&mt('Identify fields in uploaded list')."</h3>\n"); |
&mt('Identify fields in uploaded list')."</h3>\n"); |
Line 318 sub print_upload_manager_header {
|
Line 341 sub print_upload_manager_header {
|
&hidden_input('fileupload',$env{'form.fileupload'}). |
&hidden_input('fileupload',$env{'form.fileupload'}). |
&hidden_input('upfiletype',$env{'form.upfiletype'}). |
&hidden_input('upfiletype',$env{'form.upfiletype'}). |
&hidden_input('upfile_associate',$env{'form.upfile_associate'})); |
&hidden_input('upfile_associate',$env{'form.upfile_associate'})); |
$r->print('<br /><input type="button" value="Reverse Association" '. |
$r->print('<br /><label><input type="checkbox" name="noFirstLine"'.$checked.' />'. |
'name="'.&mt('Reverse Association').'" '. |
&mt('Ignore First Line').'</label><br />'); |
|
$r->print('<br /><input type="button" value="'.&mt('Reverse Association').'" '. |
|
'name="Reverse Association" '. |
'onClick="javascript:this.form.associate.value=\'Reverse Association\';submit(this.form);" />'); |
'onClick="javascript:this.form.associate.value=\'Reverse Association\';submit(this.form);" />'); |
$r->print('<label><input type="checkbox" name="noFirstLine"'.$checked.'/>'. |
|
&mt('Ignore First Line').'</label>'); |
|
$r->print("<br /><br />\n". |
$r->print("<br /><br />\n". |
'<script type="text/javascript" language="Javascript">'."\n". |
'<script type="text/javascript" language="Javascript">'."\n". |
$javascript."\n".$javascript_validations.'</script>'); |
$javascript."\n".$javascript_validations.'</script>'); |
Line 333 sub print_upload_manager_header {
|
Line 356 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,$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 385 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 385 sub javascript_validations {
|
Line 403 sub javascript_validations {
|
name => 'The optional name field was not specified.', |
name => 'The optional name field was not specified.', |
snum => 'The optional ID number field was not specified.', |
snum => 'The optional ID number field was not specified.', |
section => 'The optional section field was not specified.', |
section => 'The optional section field was not specified.', |
email => 'The optional email address field was not specified.', |
email => 'The optional e-mail address field was not specified.', |
role => 'The optional role field was not specified.', |
role => 'The optional role field was not specified.', |
|
domain => 'The optional domain field was not specified.', |
continue => 'Continue adding users?', |
continue => 'Continue adding users?', |
); |
); |
|
if (($mode eq 'upload') && ($context eq 'domain')) { |
my $function_name =(<<END); |
$alert{'inststatus'} = &mt('The optional affiliation field was not specified'); |
|
} |
|
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,foundrole,founddomain,foundinststatus) { |
END |
END |
my ($authnum,%can_assign) = &Apache::loncommon::get_assignable_auth($domain); |
my ($authnum,%can_assign) = &Apache::loncommon::get_assignable_auth($domain); |
my $auth_checks; |
my $auth_checks; |
Line 456 END
|
Line 477 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 508 END
|
Line 529 END
|
} |
} |
message+='$alert{'email'}'; |
message+='$alert{'email'}'; |
} |
} |
|
if (foundrole==0) { |
|
if (message!='') { |
|
message+='\\n'; |
|
} |
|
message+='$alert{'role'}'; |
|
} |
|
if (founddomain==0) { |
|
if (message!='') { |
|
message+='\\n'; |
|
} |
|
message+='$alert{'domain'}'; |
|
} |
|
END |
|
if (($mode eq 'upload') && ($context eq 'domain')) { |
|
$optional_checks .= (<<END); |
|
|
|
if (foundinststatus==0) { |
|
if (message!='') { |
|
message+='\\n'; |
|
} |
|
message+='$alert{'inststatus'}'; |
|
} |
|
END |
|
} |
|
$optional_checks .= (<<END); |
|
|
if (message!='') { |
if (message!='') { |
message+= '\\n$alert{'continue'}'; |
message+= '\\n$alert{'continue'}'; |
if (confirm(message)) { |
if (confirm(message)) { |
Line 521 END
|
Line 568 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 543 function verify(vf,sec_caller) {
|
Line 584 function verify(vf,sec_caller) {
|
var foundsec=0; |
var foundsec=0; |
var foundemail=0; |
var foundemail=0; |
var foundrole=0; |
var foundrole=0; |
|
var founddomain=0; |
|
var foundinststatus=0; |
var tw; |
var tw; |
for (i=0;i<=vf.nfields.value;i++) { |
for (i=0;i<=vf.nfields.value;i++) { |
tw=eval('vf.f'+i+'.selectedIndex'); |
tw=eval('vf.f'+i+'.selectedIndex'); |
Line 553 function verify(vf,sec_caller) {
|
Line 596 function verify(vf,sec_caller) {
|
if (tw==9) { foundpwd=1; } |
if (tw==9) { foundpwd=1; } |
if (tw==10) { foundemail=1; } |
if (tw==10) { foundemail=1; } |
if (tw==11) { foundrole=1; } |
if (tw==11) { foundrole=1; } |
|
if (tw==12) { founddomain=1; } |
|
if (tw==13) { foundinststatus=1; } |
} |
} |
verify_message(vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail,foundrole); |
verify_message(vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail,foundrole,founddomain,foundinststatus); |
} |
} |
|
|
// |
// |
Line 575 function verify(vf,sec_caller) {
|
Line 620 function verify(vf,sec_caller) {
|
// 9 = ipwd (password) |
// 9 = ipwd (password) |
// 10 = email address |
// 10 = email address |
// 11 = role |
// 11 = role |
|
// 12 = domain |
|
// 13 = inststatus |
|
|
function flip(vf,tf) { |
function flip(vf,tf) { |
var nw=eval('vf.f'+tf+'.selectedIndex'); |
var nw=eval('vf.f'+tf+'.selectedIndex'); |
Line 638 function verify(vf,sec_caller) {
|
Line 685 function verify(vf,sec_caller) {
|
var foundid=0; |
var foundid=0; |
var foundsec=0; |
var foundsec=0; |
var foundrole=0; |
var foundrole=0; |
|
var founddomain=0; |
|
var foundinststatus=0; |
var tw; |
var tw; |
for (i=0;i<=vf.nfields.value;i++) { |
for (i=0;i<=vf.nfields.value;i++) { |
tw=eval('vf.f'+i+'.selectedIndex'); |
tw=eval('vf.f'+i+'.selectedIndex'); |
Line 647 function verify(vf,sec_caller) {
|
Line 696 function verify(vf,sec_caller) {
|
if (i==7 && tw!=0) { foundsec=1; } |
if (i==7 && tw!=0) { foundsec=1; } |
if (i==8 && tw!=0) { foundpwd=1; } |
if (i==8 && tw!=0) { foundpwd=1; } |
if (i==9 && tw!=0) { foundrole=1; } |
if (i==9 && tw!=0) { foundrole=1; } |
|
if (i==10 && tw!=0) { founddomain=1; } |
|
if (i==13 && tw!=0) { foundinstatus=1; } |
} |
} |
verify_message(vf,founduname,foundpwd,foundname,foundid,foundsec,foundrole); |
verify_message(vf,founduname,foundpwd,foundname,foundid,foundsec,foundrole,founddomain,foundinststatus); |
} |
} |
|
|
function flip(vf,tf) { |
function flip(vf,tf) { |
Line 711 sub print_upload_manager_footer {
|
Line 762 sub print_upload_manager_footer {
|
$Str .= &hidden_input('keyfields',$keyfields); |
$Str .= &hidden_input('keyfields',$keyfields); |
$Str .= "<h3>".&mt('Login Type')."</h3>\n"; |
$Str .= "<h3>".&mt('Login Type')."</h3>\n"; |
if ($context eq 'domain') { |
if ($context eq 'domain') { |
$Str .= '<p>'.&mt('Change authentication for existing users to these settings?').' <span class="LC_nobreak"><label><input type="radio" name="changeauth" value="No" checked="checked" />'.&mt('No').'</label> <label><input type="radio" name="changeauth" value="Yes" />'.&mt('Yes').'</label></span></p>'; |
$Str .= '<p>'.&mt('Change authentication for existing users in domain "[_1]" to these settings?',$defdom).' <span class="LC_nobreak"><label><input type="radio" name="changeauth" value="No" checked="checked" />'.&mt('No').'</label> <label><input type="radio" name="changeauth" value="Yes" />'.&mt('Yes').'</label></span></p>'; |
} else { |
} else { |
$Str .= "<p>\n". |
$Str .= "<p>\n". |
&mt('Note: this will not take effect if the user already exists'). |
&mt('Note: This will not take effect if the user already exists.'). |
&Apache::loncommon::help_open_topic('Auth_Options'). |
&Apache::loncommon::help_open_topic('Auth_Options'). |
"</p>\n"; |
"</p>\n"; |
} |
} |
Line 729 sub print_upload_manager_footer {
|
Line 780 sub print_upload_manager_footer {
|
} else { |
} else { |
$Str .= $home_server_pick; |
$Str .= $home_server_pick; |
} |
} |
|
$Str .= '<h3>'.&mt('Default domain').'</h3>'."\n". |
|
&Apache::loncommon::select_dom_form($defdom,'defaultdomain',undef,1); |
$Str .= '<h3>'.&mt('Starting and Ending Dates'). |
$Str .= '<h3>'.&mt('Starting and Ending Dates'). |
"</h3>\n"; |
"</h3>\n"; |
$Str .= "<p>\n".$date_table."</p>\n"; |
$Str .= "<p>\n".$date_table."</p>\n"; |
Line 760 sub print_upload_manager_footer {
|
Line 813 sub print_upload_manager_footer {
|
my $secbox = §ion_picker($cdom,$cnum,'Any',$rowtitle, |
my $secbox = §ion_picker($cdom,$cnum,'Any',$rowtitle, |
$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); |
} |
} |
$Str .= '</div><div class="LC_clear_float_footer"><br /><input type="button"'. |
|
'onClick="javascript:verify(this.form,this.form.csec)" '. |
|
'value="Update Users" />'."<br />\n"; |
|
if ($context eq 'course') { |
|
$Str .= &mt('Note: for large courses, this operation may be time '. |
|
'consuming'); |
|
} |
|
$Str .= '</div>'; |
$Str .= '</div>'; |
|
$Str .= '<div class="LC_clear_float_footer">'; |
|
if ($context eq 'course') { |
|
$Str .= '<div class="LC_info">' |
|
.&mt('Note: For large courses, this operation may be time consuming.') |
|
.'</div>'; |
|
} |
|
$Str .= '<input type="button"' |
|
.'onClick="javascript:verify(this.form,this.form.csec)" ' |
|
.'value="'.&mt('Update Users').'" />'."\n" |
|
.'</div>'; |
$r->print($Str); |
$r->print($Str); |
return; |
return; |
} |
} |
Line 782 sub print_upload_manager_footer {
|
Line 837 sub print_upload_manager_footer {
|
sub forceid_change { |
sub forceid_change { |
my ($context) = @_; |
my ($context) = @_; |
my $output = |
my $output = |
"<h3>".&mt('ID/Student Number')."</h3>\n". |
"<h3>".&mt('Student/Employee ID')."</h3>\n". |
"<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 Student/Employee ID Safeguard and force change of conflicting IDs'). |
'of Conflicting IDs').'</label><br />'."\n". |
'</label><br />'."\n". |
&mt('(only do if you know what you are doing.)')."\n"; |
&mt('(only do if you know what you are doing.)')."\n"; |
if ($context eq 'domain') { |
if ($context eq 'domain') { |
$output .= '<br /><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 Student/Employee ID in courses in which user is active/future student,[_1](if forcing change).','<br />'). |
'</label>'."\n"; |
'</label>'."\n"; |
} |
} |
$output .= '</p>'; |
$output .= '</p>'; |
Line 830 sub print_upload_manager_form {
|
Line 885 sub print_upload_manager_form {
|
'ipwd_choice' => 'scalar', |
'ipwd_choice' => 'scalar', |
'email_choice' => 'scalar', |
'email_choice' => 'scalar', |
'role_choice' => 'scalar', |
'role_choice' => 'scalar', |
|
'domain_choice' => 'scalar', |
|
'inststatus_choice' => 'scalar', |
}; |
}; |
my $defdom = $env{'request.role.domain'}; |
my $defdom = $env{'request.role.domain'}; |
if ($context eq 'course') { |
if ($context eq 'course') { |
Line 856 sub print_upload_manager_form {
|
Line 913 sub print_upload_manager_form {
|
['mname',&mt('Middle Names/Initials'),$env{'form.mname_choice'}], |
['mname',&mt('Middle Names/Initials'),$env{'form.mname_choice'}], |
['lname',&mt('Last Name'), $env{'form.lname_choice'}], |
['lname',&mt('Last Name'), $env{'form.lname_choice'}], |
['gen', &mt('Generation'), $env{'form.gen_choice'}], |
['gen', &mt('Generation'), $env{'form.gen_choice'}], |
['id', &mt('ID/Student Number'),$env{'form.id_choice'}], |
['id', &mt('Student/Employee ID'),$env{'form.id_choice'}], |
['sec', &mt('Section'), $env{'form.sec_choice'}], |
['sec', &mt('Section'), $env{'form.sec_choice'}], |
['ipwd', &mt('Initial Password'),$env{'form.ipwd_choice'}], |
['ipwd', &mt('Initial Password'),$env{'form.ipwd_choice'}], |
['email',&mt('E-mail Address'), $env{'form.email_choice'}], |
['email',&mt('E-mail Address'), $env{'form.email_choice'}], |
['role',&mt('Role'), $env{'form.role_choice'}]); |
['role',&mt('Role'), $env{'form.role_choice'}], |
|
['domain',&mt('Domain'), $env{'form.domain_choice'}], |
|
['inststatus',&mt('Affiliation'), $env{'form.inststatus_choice'}]); |
if ($env{'form.upfile_associate'} eq 'reverse') { |
if ($env{'form.upfile_associate'} eq 'reverse') { |
&Apache::loncommon::csv_print_samples($r,\@records); |
&Apache::loncommon::csv_print_samples($r,\@records); |
$i=&Apache::loncommon::csv_print_select_table($r,\@records, |
$i=&Apache::loncommon::csv_print_select_table($r,\@records, |
Line 937 sub setup_date_selectors {
|
Line 996 sub setup_date_selectors {
|
|
|
|
|
sub get_dates_from_form { |
sub get_dates_from_form { |
my $startdate = &Apache::lonhtmlcommon::get_date_from_form('startdate'); |
my ($startname,$endname) = @_; |
my $enddate = &Apache::lonhtmlcommon::get_date_from_form('enddate'); |
if ($startname eq '') { |
|
$startname = 'startdate'; |
|
} |
|
if ($endname eq '') { |
|
$endname = 'enddate'; |
|
} |
|
my $startdate = &Apache::lonhtmlcommon::get_date_from_form($startname); |
|
my $enddate = &Apache::lonhtmlcommon::get_date_from_form($endname); |
if ($env{'form.no_end_date'}) { |
if ($env{'form.no_end_date'}) { |
$enddate = 0; |
$enddate = 0; |
} |
} |
Line 971 sub date_setting_table {
|
Line 1037 sub date_setting_table {
|
} |
} |
my $perpetual = '<span class="LC_nobreak"><label><input type="checkbox" name="no_end_date"'; |
my $perpetual = '<span class="LC_nobreak"><label><input type="checkbox" name="no_end_date"'; |
if (defined($endtime) && $endtime == 0) { |
if (defined($endtime) && $endtime == 0) { |
$perpetual .= ' checked'; |
$perpetual .= ' checked="checked"'; |
} |
} |
$perpetual.= ' /> '.&mt('no ending date').'</label></span>'; |
$perpetual.= ' /> '.&mt('no ending date').'</label></span>'; |
if ($mode eq 'create_enrolldates') { |
if ($mode eq 'create_enrolldates') { |
Line 1257 sub print_userlist {
|
Line 1323 sub print_userlist {
|
$output_selector .= "\n".$option; |
$output_selector .= "\n".$option; |
} |
} |
$output_selector .= '</select>'; |
$output_selector .= '</select>'; |
$r->print('<label>'.&mt('Output Format: [_1]',$output_selector).'</label>'.(' 'x3)); |
$r->print('<label><span class="LC_nobreak">' |
} |
.&mt('Output Format: [_1]',$output_selector) |
$r->print('<label>'.&mt('User Status: [_1]',$status_select).'</label>'.(' 'x3)."\n"); |
.'</span></label>'.(' 'x3)); |
|
} |
|
$r->print('<label><span class="LC_nobreak">' |
|
.&mt('User Status: [_1]',$status_select) |
|
.'</span></label>'.(' 'x3)."\n"); |
my $roleselected = ''; |
my $roleselected = ''; |
if ($env{'form.showrole'} eq 'Any') { |
if ($env{'form.showrole'} eq 'Any') { |
$roleselected = ' selected="selected" '; |
$roleselected = ' selected="selected" '; |
} |
} |
my ($role_select,$cnum,$cdom); |
my ($cnum,$cdom); |
if ($context eq 'domain') { |
$r->print(&role_filter($context)); |
$role_select = &domain_roles_select(); |
if ($context eq 'course') { |
$r->print('<label>'.&mt('Role Type: [_1]',$role_select).'</label>'); |
($cnum,$cdom) = &get_course_identity(); |
} else { |
$r->print(§ion_group_filter($cnum,$cdom)); |
$role_select = '<select name="showrole">'."\n". |
} |
'<option value="Any" '.$roleselected.'>'. |
if ($env{'form.phase'} eq '') { |
&mt('Any role').'</option>'; |
$r->print('<br /><br />'.&list_submit_button(&mt('Display List of Users')). |
my @poss_roles = &curr_role_permissions($context); |
"\n</p>\n". |
foreach my $role (@poss_roles) { |
'<input type="hidden" name="phase" value="" /></form>'); |
$roleselected = ''; |
return; |
if ($role eq $env{'form.showrole'}) { |
|
$roleselected = ' selected="selected" '; |
|
} |
|
my $plrole; |
|
if ($role eq 'cr') { |
|
$plrole = &mt('Custom role'); |
|
} else { |
|
$plrole=&Apache::lonnet::plaintext($role); |
|
} |
|
$role_select .= '<option value="'.$role.'"'.$roleselected.'>'.$plrole.'</option>'; |
|
} |
|
$role_select .= '</select>'; |
|
$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')). |
$r->print(' '.&list_submit_button(&mt('Update Display')). |
Line 1320 sub print_userlist {
|
Line 1373 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); |
if (ref($classlist) eq 'HASH') { |
foreach my $student (keys(%{$classlist})) { |
%userlist = %{$classlist}; |
my $section = $classlist->{$student}[$secidx]; |
|
if ($viewablesec ne '') { |
|
if ($section ne $viewablesec) { |
|
next; |
|
} else { |
|
$userlist{$student} = $classlist->{$student}; |
|
} |
|
} else { |
|
$userlist{$student} = $classlist->{$student}; |
|
} |
} |
} |
} |
my $showroles; |
if ($env{'form.showrole'} ne 'st') { |
if ($env{'form.showrole'} ne 'Any') { |
my $showroles; |
$showroles = [$env{'form.showrole'}]; |
if ($env{'form.showrole'} ne 'Any') { |
} else { |
$showroles = [$env{'form.showrole'}]; |
$showroles = undef; |
} else { |
|
$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 $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 1394 sub print_userlist {
|
Line 1441 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 1412 sub print_userlist {
|
Line 1460 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 1463 sub print_userlist {
|
Line 1511 sub print_userlist {
|
$permission,$env{'form.Status'},\%userlist,$keylist); |
$permission,$env{'form.Status'},\%userlist,$keylist); |
} |
} |
if (!$usercount) { |
if (!$usercount) { |
$r->print('<br />'.&mt('There are no users matching the search criteria.')); |
$r->print('<br /><span class="LC_warning">' |
|
.&mt('There are no users matching the search criteria.') |
|
.'</span>' |
|
); |
} |
} |
} |
} |
$r->print('<input type="hidden" name="phase" value="'. |
$r->print('<input type="hidden" name="phase" value="'. |
$env{'form.phase'}.'" /></form>'); |
$env{'form.phase'}.'" /></form>'); |
} |
} |
|
|
|
sub role_filter { |
|
my ($context) = @_; |
|
my $output; |
|
my $roleselected = ''; |
|
if ($env{'form.showrole'} eq 'Any') { |
|
$roleselected = ' selected="selected" '; |
|
} |
|
my ($role_select); |
|
if ($context eq 'domain') { |
|
$role_select = &domain_roles_select(); |
|
$output = '<label><span class="LC_nobreak">' |
|
.&mt('Role Type: [_1]',$role_select) |
|
.'</span></label>'; |
|
} else { |
|
$role_select = '<select name="showrole">'."\n". |
|
'<option value="Any" '.$roleselected.'>'. |
|
&mt('Any role').'</option>'; |
|
my @poss_roles = &curr_role_permissions($context); |
|
foreach my $role (@poss_roles) { |
|
$roleselected = ''; |
|
if ($role eq $env{'form.showrole'}) { |
|
$roleselected = ' selected="selected" '; |
|
} |
|
my $plrole; |
|
if ($role eq 'cr') { |
|
$plrole = &mt('Custom role'); |
|
} else { |
|
$plrole=&Apache::lonnet::plaintext($role); |
|
} |
|
$role_select .= '<option value="'.$role.'"'.$roleselected.'>'.$plrole.'</option>'; |
|
} |
|
$role_select .= '</select>'; |
|
$output = '<label><span class="LC_nobreak">' |
|
.&mt('Role: [_1]',$role_select) |
|
.'</span></label>'; |
|
} |
|
return $output; |
|
} |
|
|
sub section_group_filter { |
sub section_group_filter { |
my ($cnum,$cdom) = @_; |
my ($cnum,$cdom) = @_; |
my @filters; |
my @filters; |
Line 1487 sub section_group_filter {
|
Line 1577 sub section_group_filter {
|
all => 'all', |
all => 'all', |
none => 'none', |
none => 'none', |
); |
); |
my ($output,@options); |
my $output; |
foreach my $item (@filters) { |
foreach my $item (@filters) { |
my $markup; |
my ($markup,@options); |
if ($env{'form.'.$name{$item}} eq '') { |
if ($env{'form.'.$name{$item}} eq '') { |
$env{'form.'.$name{$item}} = 'all'; |
$env{'form.'.$name{$item}} = 'all'; |
} |
} |
Line 1533 sub list_submit_button {
|
Line 1623 sub list_submit_button {
|
|
|
sub gather_userinfo { |
sub gather_userinfo { |
my ($context,$format,$userlist,$indexhash,$userinfo,$rolehash,$permission) = @_; |
my ($context,$format,$userlist,$indexhash,$userinfo,$rolehash,$permission) = @_; |
|
my $viewablesec; |
|
if ($context eq 'course') { |
|
$viewablesec = &viewable_section($permission); |
|
} |
foreach my $item (keys(%{$rolehash})) { |
foreach my $item (keys(%{$rolehash})) { |
my %userdata; |
my %userdata; |
if ($context eq 'author') { |
if ($context eq 'author') { |
Line 1542 sub gather_userinfo {
|
Line 1636 sub gather_userinfo {
|
&build_user_record($context,\%userdata,$userinfo,$indexhash, |
&build_user_record($context,\%userdata,$userinfo,$indexhash, |
$item,$userlist); |
$item,$userlist); |
} elsif ($context eq 'course') { |
} elsif ($context eq 'course') { |
my $viewablesec = &viewable_section($permission); |
|
($userdata{'username'},$userdata{'domain'},$userdata{'role'}, |
($userdata{'username'},$userdata{'domain'},$userdata{'role'}, |
$userdata{'section'}) = split(/:/,$item,-1); |
$userdata{'section'}) = split(/:/,$item,-1); |
($userdata{'start'},$userdata{'end'})=split(/:/,$rolehash->{$item}); |
($userdata{'start'},$userdata{'end'})=split(/:/,$rolehash->{$item}); |
Line 1810 sub make_keylist_array {
|
Line 1903 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(); |
|
$index->{'thumbnail'} = &Apache::loncoursedata::CL_THUMBNAIL(); |
foreach my $key (keys(%{$index})) { |
foreach my $key (keys(%{$index})) { |
$keylist->[$index->{$key}] = $key; |
$keylist->[$index->{$key}] = $key; |
} |
} |
Line 1858 sub process_date_info {
|
Line 1953 sub process_date_info {
|
} |
} |
|
|
sub show_users_list { |
sub show_users_list { |
my ($r,$context,$mode,$permission,$statusmode,$userlist,$keylist)=@_; |
my ($r,$context,$mode,$permission,$statusmode,$userlist,$keylist,$formname)=@_; |
|
if ($formname eq '') { |
|
$formname = 'studentform'; |
|
} |
# |
# |
# Variables for excel output |
# Variables for excel output |
my ($excel_workbook, $excel_sheet, $excel_filename,$row,$format); |
my ($excel_workbook, $excel_sheet, $excel_filename,$row,$format); |
Line 1873 sub show_users_list {
|
Line 1971 sub show_users_list {
|
} else { |
} else { |
push(@sortable,'extent'); |
push(@sortable,'extent'); |
} |
} |
|
if ($mode eq 'pickauthor') { |
|
@sortable = ('username','fullname','email','status'); |
|
} |
if (!grep(/^\Q$sortby\E$/,@sortable)) { |
if (!grep(/^\Q$sortby\E$/,@sortable)) { |
$sortby = 'username'; |
$sortby = 'username'; |
} |
} |
Line 1913 function photowindow(photolink) {
|
Line 2014 function photowindow(photolink) {
|
END |
END |
} |
} |
} |
} |
if ($mode ne 'autoenroll') { |
if ($mode ne 'autoenroll' && $mode ne 'pickauthor') { |
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 $date_sec_selector = &date_section_javascript($context,$setting,$statusmode); |
my $singconfirm = &mt(' for a single user?'); |
my $verify_action_js = &bulkaction_javascript($formname); |
my $multconfirm = &mt(' for multiple users?'); |
|
my $date_sec_selector = &date_section_javascript($context,$setting,$statusmode); |
|
$r->print(<<END); |
$r->print(<<END); |
|
|
<script type="text/javascript" language="Javascript"> |
<script type="text/javascript" language="Javascript"> |
$check_uncheck_js |
$check_uncheck_js |
|
|
function verify_action (field) { |
$verify_action_js |
var numchecked = 0; |
|
var singconf = '$singconfirm'; |
|
var multconf = '$multconfirm'; |
|
if (field.length > 0) { |
|
for (i = 0; i < field.length; i++) { |
|
if (field[i].checked == true) { |
|
numchecked ++; |
|
} |
|
} |
|
} else { |
|
if (field.checked == true) { |
|
numchecked ++; |
|
} |
|
} |
|
if (numchecked == 0) { |
|
alert("$alert"); |
|
} |
|
else { |
|
var message = document.studentform.bulkaction[document.studentform.bulkaction.selectedIndex].text; |
|
if (numchecked == 1) { |
|
message += singconf; |
|
} |
|
else { |
|
message += multconf; |
|
} |
|
if (confirm(message)) { |
|
document.studentform.phase.value = 'bulkchange'; |
|
document.studentform.submit(); |
|
} |
|
} |
|
} |
|
|
|
function username_display_launch(username,domain) { |
function username_display_launch(username,domain) { |
var target; |
var target; |
for (var i=0; i<document.studentform.usernamelink.length; i++) { |
for (var i=0; i<document.$formname.usernamelink.length; i++) { |
if (document.studentform.usernamelink[i].checked) { |
if (document.$formname.usernamelink[i].checked) { |
target = document.studentform.usernamelink[i].value; |
target = document.$formname.usernamelink[i].value; |
} |
} |
} |
} |
if (target == 'modify') { |
if (target == 'modify') { |
document.studentform.srchterm.value=username; |
if (document.$formname.userwin.checked == true) { |
document.studentform.srchdomain.value=domain; |
var url = '/adm/createuser?srchterm='+username+'&srchdomain='+domain+'&phase=get_user_info&action=singleuser&srchin=dom&srchby=uname&srchtype=exact&popup=1'; |
document.studentform.phase.value='get_user_info'; |
var options = 'height=600,width=800,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no'; |
document.studentform.action.value = 'singleuser'; |
modifywin = window.open(url,'',options,1); |
document.studentform.submit(); |
modifywin.focus(); |
|
return; |
|
} else { |
|
document.$formname.srchterm.value=username; |
|
document.$formname.srchdomain.value=domain; |
|
document.$formname.phase.value='get_user_info'; |
|
document.$formname.action.value = 'singleuser'; |
|
document.$formname.submit(); |
|
} |
} |
} |
else { |
if (target == 'aboutme') { |
document.location.href = '/adm/'+domain+'/'+username+'/aboutme'; |
if (document.$formname.userwin.checked == true) { |
|
var url = '/adm/'+domain+'/'+username+'/aboutme?popup=1'; |
|
var options = 'height=600,width=800,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no'; |
|
aboutmewin = window.open(url,'',options,1); |
|
aboutmewin.focus(); |
|
return; |
|
} else { |
|
document.location.href = '/adm/'+domain+'/'+username+'/aboutme'; |
|
} |
} |
} |
} |
} |
</script> |
</script> |
Line 1996 END
|
Line 2080 END
|
'status' => "status", |
'status' => "status", |
'role' => "role", |
'role' => "role", |
'type' => "enroll type/action", |
'type' => "enroll type/action", |
'email' => "email address", |
'email' => "e-mail address", |
'clicker' => "clicker id", |
|
'photo' => "photo", |
'photo' => "photo", |
'extent' => "extent", |
'extent' => "extent", |
'pr' => "Proceed", |
'pr' => "Proceed", |
'ca' => "check all", |
'ca' => "check all", |
'ua' => "uncheck all", |
'ua' => "uncheck all", |
'ac' => "Action to take for selected users", |
'ac' => "Action to take for selected users", |
'link' => "Behavior of username links", |
'link' => "Behavior of clickable username link for each user", |
'aboutme' => "Display a user's personal page", |
'aboutme' => "Display a user's personal information page", |
|
'owin' => "Open in a new window", |
'modify' => "Modify a user's information", |
'modify' => "Modify a user's information", |
|
'clicker' => "Clicker-ID", |
); |
); |
if ($context eq 'domain' && $env{'form.roletype'} eq 'course') { |
if ($context eq 'domain' && $env{'form.roletype'} eq 'course') { |
$lt{'extent'} = &mt('Course(s): description, section(s), status'); |
$lt{'extent'} = &mt('Course(s): description, section(s), status'); |
} elsif ($context eq 'author') { |
} elsif ($context eq 'author') { |
$lt{'extent'} = &mt('Author'); |
$lt{'extent'} = &mt('Author'); |
} |
} |
my @cols = ('username','domain','id','fullname'); |
my @cols; |
if ($context eq 'course') { |
if ($mode eq 'pickauthor') { |
push(@cols,'section'); |
@cols = ('username','fullname','status','email'); |
} |
} else { |
if (!($context eq 'domain' && $env{'form.roletype'} eq 'course')) { |
@cols = ('username','domain','id','fullname'); |
push(@cols,('start','end')); |
if ($context eq 'course') { |
} |
push(@cols,'section'); |
if ($env{'form.showrole'} eq 'Any' || $env{'form.showrole'} eq 'cr') { |
} |
push(@cols,'role'); |
if (!($context eq 'domain' && $env{'form.roletype'} eq 'course')) { |
} |
push(@cols,('start','end')); |
if ($context eq 'domain' && ($env{'form.roletype'} eq 'author' || |
} |
$env{'form.roletype'} eq 'course')) { |
if ($env{'form.showrole'} eq 'Any' || $env{'form.showrole'} eq 'cr') { |
push (@cols,'extent'); |
push(@cols,'role'); |
} |
} |
if (($statusmode eq 'Any') && |
if ($context eq 'domain' && ($env{'form.roletype'} eq 'author' || |
(!($context eq 'domain' && $env{'form.roletype'} eq 'course'))) { |
$env{'form.roletype'} eq 'course')) { |
push(@cols,'status'); |
push (@cols,'extent'); |
} |
} |
if ($context eq 'course') { |
if (($statusmode eq 'Any') && |
push(@cols,'groups'); |
(!($context eq 'domain' && $env{'form.roletype'} eq 'course'))) { |
|
push(@cols,'status'); |
|
} |
|
if ($context eq 'course') { |
|
push(@cols,'groups'); |
|
} |
|
push(@cols,'email'); |
} |
} |
push(@cols,'email'); |
|
|
|
my $rolefilter = $env{'form.showrole'}; |
my $rolefilter = $env{'form.showrole'}; |
if ($env{'form.showrole'} eq 'cr') { |
if ($env{'form.showrole'} eq 'cr') { |
Line 2046 END
|
Line 2136 END
|
if ($mode ne 'autoenroll') { |
if ($mode ne 'autoenroll') { |
$results_description = &results_header_row($rolefilter,$statusmode, |
$results_description = &results_header_row($rolefilter,$statusmode, |
$context,$permission,$mode); |
$context,$permission,$mode); |
$r->print('<b>'.$results_description.'</b><br />'); |
$r->print('<b>'.$results_description.'</b><br /><br />'); |
} |
} |
my ($output,$actionselect,%canchange,%canchangesec); |
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' || $mode eq 'pickauthor') { |
if ($mode ne 'autoenroll') { |
if ($mode ne 'autoenroll' && $mode ne 'pickauthor') { |
if ($permission->{'cusr'}) { |
if ($permission->{'cusr'}) { |
$actionselect = &select_actions($context,$setting,$statusmode); |
$actionselect = &select_actions($context,$setting,$statusmode,$formname); |
} |
} |
$r->print(<<END); |
$r->print(<<END); |
<input type="hidden" name="srchby" value="uname" /> |
<input type="hidden" name="srchby" value="uname" /> |
Line 2061 END
|
Line 2151 END
|
<input type="hidden" name="srchterm" value="" /> |
<input type="hidden" name="srchterm" value="" /> |
<input type="hidden" name="srchdomain" value="" /> |
<input type="hidden" name="srchdomain" value="" /> |
END |
END |
$output = '<p>'; |
|
my @linkdests = ('aboutme'); |
|
if ($permission->{'cusr'}) { |
|
push (@linkdests,'modify'); |
|
$output .= '<span class="LC_nobreak">'.$lt{'link'}.': '; |
|
my $usernamelink = $env{'form.usernamelink'}; |
|
if ($usernamelink eq '') { |
|
$usernamelink = 'aboutme'; |
|
} |
|
foreach my $item (@linkdests) { |
|
my $checkedstr = ''; |
|
if ($item eq $usernamelink) { |
|
$checkedstr = ' checked="checked" '; |
|
} |
|
$output .= '<label><input type="radio" name="usernamelink" value="'.$item.'"'.$checkedstr.'> '.$lt{$item}.'</label> '; |
|
} |
|
$output .= '</span><br />'; |
|
} else { |
|
$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> |
<div class="LC_left_float"><fieldset><legend><b>$lt{'ac'}</b></legend> |
<p><input type="button" value="$lt{'ca'}" onclick="javascript:checkAll(document.studentform.actionlist)" /> |
$actionselect |
<input type="button" value="$lt{'ua'}" onclick="javascript:uncheckAll(document.studentform.actionlist)" /> |
<br/><br /><input type="button" value="$lt{'ca'}" onclick="javascript:checkAll(document.$formname.actionlist)" /> |
|
<input type="button" value="$lt{'ua'}" onclick="javascript:uncheckAll(document.$formname.actionlist)" /><br /><input type="button" value="$lt{'pr'}" onclick="javascript:verify_action('actionlist')" /></fieldset></div> |
END |
END |
my @allroles; |
my @allroles; |
if ($env{'form.showrole'} eq 'Any') { |
if ($env{'form.showrole'} eq 'Any') { |
Line 2127 END
|
Line 2198 END
|
} |
} |
} |
} |
} |
} |
|
$output .= '<div class="LC_left_float"><fieldset><legend><b>'.$lt{'link'}.'</b></legend>'. |
|
'<table><tr>'; |
|
my @linkdests = ('aboutme'); |
|
if ($permission->{'cusr'}) { |
|
unshift (@linkdests,'modify'); |
|
} |
|
$output .= '<td>'; |
|
my $usernamelink = $env{'form.usernamelink'}; |
|
if ($usernamelink eq '') { |
|
$usernamelink = 'aboutme'; |
|
} |
|
foreach my $item (@linkdests) { |
|
my $checkedstr = ''; |
|
if ($item eq $usernamelink) { |
|
$checkedstr = ' checked="checked"'; |
|
} |
|
$output .= '<span class="LC_nobreak"><label><input type="radio" name="usernamelink" value="'.$item.'"'.$checkedstr.' /> '.$lt{$item}.'</label></span><br />'; |
|
} |
|
my $checkwin; |
|
if ($env{'form.userwin'}) { |
|
$checkwin = ' checked="checked"'; |
|
} |
|
$output .= '</td><td valign="top"><span class="LC_nobreak"><input type="checkbox" name="userwin" value="1"'.$checkwin.' />'.$lt{'owin'}.'</span></td></tr></table></fieldset></div>'; |
} |
} |
$output .= "\n<p>\n". |
$output .= "\n".'<div class="LC_clear_float_footer"> </div>'."\n". |
&Apache::loncommon::start_data_table(). |
&Apache::loncommon::start_data_table(). |
&Apache::loncommon::start_data_table_header_row(); |
&Apache::loncommon::start_data_table_header_row(); |
if ($mode eq 'autoenroll') { |
if ($mode eq 'autoenroll') { |
$output .= " |
$output .= " |
<th><a href=\"javascript:document.studentform.sortby.value='type';document.studentform.submit();\">$lt{'type'}</a></th> |
<th><a href=\"javascript:document.$formname.sortby.value='type';document.$formname.submit();\">$lt{'type'}</a></th> |
"; |
"; |
} else { |
} else { |
$output .= "\n".'<th>'.&mt('Count').'</th>'."\n"; |
if ($mode eq 'pickauthor') { |
|
$output .= "\n".'<th> </th>'."\n"; |
|
} else { |
|
$output .= "\n".'<th>'.&mt('Count').'</th>'."\n"; |
|
} |
if ($actionselect) { |
if ($actionselect) { |
$output .= '<th>'.&mt('Select').'</th>'."\n"; |
$output .= '<th>'.&mt('Select').'</th>'."\n"; |
} |
} |
} |
} |
foreach my $item (@cols) { |
foreach my $item (@cols) { |
$output .= "<th><a href=\"javascript:document.studentform.sortby.value='$item';document.studentform.submit();\">$lt{$item}</a></th>\n"; |
$output .= "<th><a href=\"javascript:document.$formname.sortby.value='$item';document.$formname.submit();\">$lt{$item}</a></th>\n"; |
} |
} |
my %role_types = &role_type_names(); |
my %role_types = &role_type_names(); |
if ($context eq 'course' && $mode ne 'autoenroll') { |
if ($context eq 'course' && $mode ne 'autoenroll') { |
if ($env{'form.showrole'} eq 'st' || $env{'form.showrole'} eq 'Any') { |
if ($env{'form.showrole'} eq 'st' || $env{'form.showrole'} eq 'Any') { |
# Clicker display on or off? |
# Clicker display on or off? |
my %clicker_options = &Apache::lonlocal::texthash( |
my %clicker_options = ( |
'on' => 'Show', |
'on' => 'Show', |
'off' => 'Hide', |
'off' => 'Hide', |
); |
); |
my $clickerchg = 'on'; |
my $clickerchg = 'on'; |
if ($displayclickers eq 'on') { |
if ($displayclickers eq 'on') { |
$clickerchg = 'off'; |
$clickerchg = 'off'; |
} |
} |
$output .= ' <th>'."\n".' '. |
$output .= ' <th>'."\n".' ' |
'<a href="javascript:document.studentform.displayclickers.value='. |
.&mt('[_1]'.$clicker_options{$clickerchg}.'[_2] clicker id' |
"'".$clickerchg."'".';document.studentform.submit();">'. |
,'<a href="javascript:document.'.$formname.'.displayclickers.value=' |
$clicker_options{$clickerchg}.'</a> '.$lt{'clicker'}."\n". |
."'".$clickerchg."'".';document.'.$formname.'.submit();">' |
' </th>'."\n"; |
,'</a>') |
|
."\n".' </th>'."\n"; |
|
|
# Photo display on or off? |
# Photo display on or off? |
if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) { |
if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) { |
Line 2173 END
|
Line 2272 END
|
$photochg = 'off'; |
$photochg = 'off'; |
} |
} |
$output .= ' <th>'."\n".' '. |
$output .= ' <th>'."\n".' '. |
'<a href="javascript:document.studentform.displayphotos.value='. |
'<a href="javascript:document.'.$formname.'.displayphotos.value='. |
"'".$photochg."'".';document.studentform.submit();">'. |
"'".$photochg."'".';document.'.$formname.'.submit();">'. |
$photo_options{$photochg}.'</a> '.$lt{'photo'}."\n". |
$photo_options{$photochg}.'</a> '.$lt{'photo'}."\n". |
' </th>'."\n"; |
' </th>'."\n"; |
} |
} |
Line 2190 END
|
Line 2289 END
|
time.'_'.rand(1000000000).'.csv'; |
time.'_'.rand(1000000000).'.csv'; |
unless ($CSVfile = Apache::File->new('>/home/httpd'.$CSVfilename)) { |
unless ($CSVfile = Apache::File->new('>/home/httpd'.$CSVfilename)) { |
$r->log_error("Couldn't open $CSVfilename for output $!"); |
$r->log_error("Couldn't open $CSVfilename for output $!"); |
$r->print("Problems occured in writing the csv file. ". |
$r->print(&mt('Problems occurred in writing the CSV file. ' |
"This error has been logged. ". |
.'This error has been logged. ' |
"Please alert your LON-CAPA administrator."); |
.'Please alert your LON-CAPA administrator.')); |
$CSVfile = undef; |
$CSVfile = undef; |
} |
} |
# |
# |
|
push @cols,'clicker'; |
# Write headers and data to file |
# Write headers and data to file |
print $CSVfile '"'.$results_description.'"'."\n"; |
print $CSVfile '"'.$results_description.'"'."\n"; |
print $CSVfile '"'.join('","',map { |
print $CSVfile '"'.join('","',map { |
&Apache::loncommon::csv_translate($lt{$_}) |
&Apache::loncommon::csv_translate($lt{$_}) |
} (@cols)).'"'."\n"; |
} (@cols))."\"\n"; |
} elsif ($mode eq 'excel') { |
} elsif ($mode eq 'excel') { |
|
push @cols,'clicker'; |
# Create the excel spreadsheet |
# Create the excel spreadsheet |
($excel_workbook,$excel_filename,$format) = |
($excel_workbook,$excel_filename,$format) = |
&Apache::loncommon::create_workbook($r); |
&Apache::loncommon::create_workbook($r); |
Line 2210 END
|
Line 2311 END
|
$excel_sheet->write($row++,0,$results_description,$format->{'h2'}); |
$excel_sheet->write($row++,0,$results_description,$format->{'h2'}); |
# |
# |
my @colnames = map {$lt{$_}} (@cols); |
my @colnames = map {$lt{$_}} (@cols); |
|
|
$excel_sheet->write($row++,0,\@colnames,$format->{'bold'}); |
$excel_sheet->write($row++,0,\@colnames,$format->{'bold'}); |
} |
} |
|
|
# Done with header lines in all formats |
# Done with header lines in all formats |
|
|
my %index; |
my %index; |
my $i; |
my $i; |
foreach my $idx (@$keylist) { |
foreach my $idx (@$keylist) { |
Line 2232 END
|
Line 2333 END
|
$grpfilter = 'all'; |
$grpfilter = 'all'; |
} |
} |
} |
} |
|
my %ltstatus = &Apache::lonlocal::texthash( |
|
Active => 'Active', |
|
Future => 'Future', |
|
Expired => 'Expired', |
|
); |
# 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 2280 END
|
Line 2390 END
|
} |
} |
if ($mode ne 'autoenroll') { |
if ($mode ne 'autoenroll') { |
my $section = $userlist->{$user}->[$index{'section'}]; |
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 ($secfilter eq 'none') { |
if ($section ne '') { |
if ($section ne '') { |
delete($userlist->{$user}); |
delete($userlist->{$user}); |
Line 2302 END
|
Line 2419 END
|
next; |
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,'jpg'); |
|
$userlist->{$user}->[$index{'thumbnail'}] = |
|
&Apache::lonnet::retrievestudentphoto($udom,$uname, |
|
'gif','thumbnail'); |
|
} |
|
} |
} |
} |
} |
} |
my %emails = &Apache::loncommon::getemails($uname,$udom); |
my %emails = &Apache::loncommon::getemails($uname,$udom); |
Line 2342 END
|
Line 2468 END
|
foreach my $item (@{$keylist}) { |
foreach my $item (@{$keylist}) { |
$in{$item} = $sdata->[$index{$item}]; |
$in{$item} = $sdata->[$index{$item}]; |
} |
} |
my $role = $in{'role'}; |
my $clickers = (&Apache::lonnet::userenvironment($in{'domain'},$in{'username'},'clickers'))[1]; |
|
if ($clickers!~/\w/) { $clickers='-'; } |
|
$in{'clicker'} = $clickers; |
|
my $role = $in{'role'}; |
$in{'role'}=&Apache::lonnet::plaintext($sdata->[$index{'role'}]); |
$in{'role'}=&Apache::lonnet::plaintext($sdata->[$index{'role'}]); |
if (! defined($in{'start'}) || $in{'start'} == 0) { |
if (! defined($in{'start'}) || $in{'start'} == 0) { |
$in{'start'} = &mt('none'); |
$in{'start'} = &mt('none'); |
Line 2354 END
|
Line 2483 END
|
} else { |
} else { |
$in{'end'} = &Apache::lonlocal::locallocaltime($in{'end'}); |
$in{'end'} = &Apache::lonlocal::locallocaltime($in{'end'}); |
} |
} |
if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll') { |
if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll' || $mode eq 'pickauthor') { |
$r->print(&Apache::loncommon::start_data_table_row()); |
$r->print(&Apache::loncommon::start_data_table_row()); |
my $checkval; |
my $checkval; |
if ($mode eq 'autoenroll') { |
if ($mode eq 'autoenroll') { |
Line 2363 END
|
Line 2492 END
|
$cellentry = '<b>'.&mt('auto').'</b> <label><input type="checkbox" name="chgauto" value="'.$in{'username'}.':'.$in{'domain'}.'" /> Change</label>'; |
$cellentry = '<b>'.&mt('auto').'</b> <label><input type="checkbox" name="chgauto" value="'.$in{'username'}.':'.$in{'domain'}.'" /> Change</label>'; |
$autocount ++; |
$autocount ++; |
} else { |
} else { |
$cellentry = '<table border="0" cellspacing="0"><tr><td rowspan="2"><b>'.&mt('manual').'</b></td><td><nobr><label><input type="checkbox" name="chgmanual" value="'.$in{'username'}.':'.$in{'domain'}.'" /> Change</label></nobr></td></tr><tr><td><nobr>'; |
$cellentry = '<table border="0" cellspacing="0"><tr><td rowspan="2"><b>'.&mt('manual').'</b></td><td><span class="LC_nobreak"><label><input type="checkbox" name="chgmanual" value="'.$in{'username'}.':'.$in{'domain'}.'" /> Change</label></span></td></tr><tr><td><span class="LC_nobreak">'; |
$manualcount ++; |
$manualcount ++; |
if ($in{'lockedtype'}) { |
if ($in{'lockedtype'}) { |
$cellentry .= '<label><input type="checkbox" name="unlockchg" value="'.$in{'username'}.':'.$in{'domain'}.'" /> '.&mt('Unlock').'</label>'; |
$cellentry .= '<label><input type="checkbox" name="unlockchg" value="'.$in{'username'}.':'.$in{'domain'}.'" /> '.&mt('Unlock').'</label>'; |
Line 2372 END
|
Line 2501 END
|
$cellentry .= '<label><input type="checkbox" name="lockchg" value="'.$in{'username'}.':'.$in{'domain'}.'" /> '.&mt('Lock').'</label>'; |
$cellentry .= '<label><input type="checkbox" name="lockchg" value="'.$in{'username'}.':'.$in{'domain'}.'" /> '.&mt('Lock').'</label>'; |
$lockcount ++; |
$lockcount ++; |
} |
} |
$cellentry .= '</nobr></td></tr></table>'; |
$cellentry .= '</span></td></tr></table>'; |
} |
} |
$r->print("<td>$cellentry</td>\n"); |
$r->print("<td>$cellentry</td>\n"); |
} else { |
} else { |
$r->print("<td>$rowcount</td>\n"); |
if ($mode ne 'pickauthor') { |
$checkval; |
$r->print("<td>$rowcount</td>\n"); |
|
} |
if ($actionselect) { |
if ($actionselect) { |
my $showcheckbox; |
my $showcheckbox; |
if ($role =~ /^cr\//) { |
if ($role =~ /^cr\//) { |
Line 2407 END
|
Line 2537 END
|
} |
} |
} |
} |
$r->print('<td><input type="checkbox" name="'. |
$r->print('<td><input type="checkbox" name="'. |
'actionlist" value="'.$checkval.'"></td>'); |
'actionlist" value="'.$checkval.'" /></td>'); |
} else { |
} else { |
$r->print('<td> </td>'); |
$r->print('<td> </td>'); |
} |
} |
|
} elsif ($mode eq 'pickauthor') { |
|
$r->print('<td><input type="button" name="chooseauthor" onclick="javascript:gochoose('."'$in{'username'}'".');" value="'.&mt('Select').'" /></td>'); |
} |
} |
} |
} |
foreach my $item (@cols) { |
foreach my $item (@cols) { |
if ($item eq 'username') { |
if ($item eq 'username') { |
$r->print('<td>'.&print_username_link($mode,$permission, |
$r->print('<td>'.&print_username_link($mode,\%in).'</td>'); |
\%in).'</td>'); |
|
} elsif (($item eq 'start' || $item eq 'end') && ($actionselect)) { |
} elsif (($item eq 'start' || $item eq 'end') && ($actionselect)) { |
$r->print('<td>'.$in{$item}.'<input type="hidden" name="'.$checkval.'_'.$item.'" value="'.$sdata->[$index{$item}].'" /></td>'."\n"); |
$r->print('<td>'.$in{$item}.'<input type="hidden" name="'.$checkval.'_'.$item.'" value="'.$sdata->[$index{$item}].'" /></td>'."\n"); |
|
} elsif ($item eq 'status') { |
|
my $showitem = $in{$item}; |
|
if (defined($ltstatus{$in{$item}})) { |
|
$showitem = $ltstatus{$in{$item}}; |
|
} |
|
$r->print('<td>'.$showitem.'</td>'."\n"); |
} else { |
} else { |
$r->print('<td>'.$in{$item}.'</td>'."\n"); |
$r->print('<td>'.$in{$item}.'</td>'."\n"); |
} |
} |
Line 2434 END
|
Line 2571 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('."'".$in{'photo'}."'".')"><img src="'.$in{'thumbnail'}.'" 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 2463 END
|
Line 2597 END
|
foreach my $item (@cols) { |
foreach my $item (@cols) { |
push @line,&Apache::loncommon::csv_translate($in{$item}); |
push @line,&Apache::loncommon::csv_translate($in{$item}); |
} |
} |
print $CSVfile '"'.join('","',@line).'"'."\n"; |
print $CSVfile '"'.join('","',@line)."\"\n"; |
} elsif ($mode eq 'excel') { |
} elsif ($mode eq 'excel') { |
my $col = 0; |
my $col = 0; |
foreach my $item (@cols) { |
foreach my $item (@cols) { |
Line 2482 END
|
Line 2616 END
|
$row++; |
$row++; |
} |
} |
} |
} |
if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll') { |
if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll' || $mode eq 'pickauthor') { |
$r->print(&Apache::loncommon::end_data_table().'<br />'); |
$r->print(&Apache::loncommon::end_data_table().'<br />'); |
} elsif ($mode eq 'excel') { |
} elsif ($mode eq 'excel') { |
$excel_workbook->close(); |
$excel_workbook->close(); |
$r->print('<p><a href="'.$excel_filename.'">'. |
$r->print(&mt('[_1]Your Excel spreadsheet[_2] is ready for download.', '<p><a href="'.$excel_filename.'">','</a>')."</p>\n"); |
&mt('Your Excel spreadsheet').'</a> '.&mt('is ready for download').'.</p>'."\n"); |
|
} elsif ($mode eq 'csv') { |
} elsif ($mode eq 'csv') { |
close($CSVfile); |
close($CSVfile); |
$r->print('<a href="'.$CSVfilename.'">'. |
$r->print(&mt('[_1]Your CSV file[_2] is ready for download.', '<p><a href="'.$CSVfilename.'">','</a>')."</p>\n"); |
&mt('Your CSV file').'</a> is ready for download.'. |
|
"\n"); |
|
$r->rflush(); |
$r->rflush(); |
} |
} |
if ($mode eq 'autoenroll') { |
if ($mode eq 'autoenroll') { |
Line 2502 END
|
Line 2633 END
|
} |
} |
} |
} |
|
|
|
sub bulkaction_javascript { |
|
my ($formname,$caller) = @_; |
|
my $docstart = 'document'; |
|
if ($caller eq 'popup') { |
|
$docstart = 'opener.document'; |
|
} |
|
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):', |
|
); |
|
my $alert = &mt("You must select at least one user by checking a user's 'Select' checkbox"); |
|
my $noaction = &mt("You need to select an action to take for the user(s) you have selected"); |
|
my $singconfirm = &mt(' for a single user?'); |
|
my $multconfirm = &mt(' for multiple users?'); |
|
my $output = <<"ENDJS"; |
|
function verify_action (field) { |
|
var numchecked = 0; |
|
var singconf = '$singconfirm'; |
|
var multconf = '$multconfirm'; |
|
if ($docstart.$formname.elements[field].length > 0) { |
|
for (i=0; i<$docstart.$formname.elements[field].length; i++) { |
|
if ($docstart.$formname.elements[field][i].checked == true) { |
|
numchecked ++; |
|
} |
|
} |
|
} else { |
|
if ($docstart.$formname.elements[field].checked == true) { |
|
numchecked ++; |
|
} |
|
} |
|
if (numchecked == 0) { |
|
alert("$alert"); |
|
return; |
|
} else { |
|
var message = $docstart.$formname.bulkaction[$docstart.$formname.bulkaction.selectedIndex].text; |
|
var choice = $docstart.$formname.bulkaction[$docstart.$formname.bulkaction.selectedIndex].value; |
|
if (choice == '') { |
|
alert("$noaction"); |
|
return; |
|
} else { |
|
if (numchecked == 1) { |
|
message += singconf; |
|
} else { |
|
message += multconf; |
|
} |
|
ENDJS |
|
if ($caller ne 'popup') { |
|
$output .= <<"NEWWIN"; |
|
if (choice == 'chgdates' || choice == 'reenable' || choice == 'activate' || choice == 'chgsec') { |
|
opendatebrowser(document.$formname,'$formname','go'); |
|
return; |
|
|
|
} else { |
|
if (confirm(message)) { |
|
document.$formname.phase.value = 'bulkchange'; |
|
document.$formname.submit(); |
|
return; |
|
} |
|
} |
|
NEWWIN |
|
} else { |
|
$output .= <<"POPUP"; |
|
if (choice == 'chgdates' || choice == 'reenable' || choice == 'activate') { |
|
var datemsg = ''; |
|
if (($docstart.$formname.startdate_month.value == '') && |
|
($docstart.$formname.startdate_day.value == '') && |
|
($docstart.$formname.startdate_year.value == '')) { |
|
datemsg = "\\n$lt{'acwi'},\\n$lt{'asyo'}.\\n"; |
|
} |
|
if (($docstart.$formname.enddate_month.value == '') && |
|
($docstart.$formname.enddate_day.value == '') && |
|
($docstart.$formname.enddate_year.value == '')) { |
|
datemsg += "\\n$lt{'accw'},\\n$lt{'asyd'}.\\n"; |
|
} |
|
if (datemsg != '') { |
|
message += "\\n"+datemsg; |
|
} |
|
} |
|
if (choice == 'chgsec') { |
|
var rolefilter = $docstart.$formname.showrole.options[$docstart.$formname.showrole.selectedIndex].value; |
|
var retained = $docstart.$formname.retainsec.value; |
|
var secshow = $docstart.$formname.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)) { |
|
$docstart.$formname.phase.value = 'bulkchange'; |
|
$docstart.$formname.submit(); |
|
window.close(); |
|
} |
|
POPUP |
|
} |
|
$output .= ' |
|
} |
|
} |
|
} |
|
'; |
|
return $output; |
|
} |
|
|
sub print_username_link { |
sub print_username_link { |
my ($mode,$permission,$in) = @_; |
my ($mode,$in) = @_; |
my $output; |
my $output; |
if ($mode eq 'autoenroll') { |
if ($mode eq 'autoenroll') { |
$output = $in->{'username'}; |
$output = $in->{'username'}; |
} elsif (!$permission->{'cusr'}) { |
|
$output = &Apache::loncommon::aboutmewrapper($in->{'username'}, |
|
$in->{'username'}, |
|
$in->{'domain'}); |
|
} else { |
} else { |
$output = '<a href="javascript:username_display_launch('. |
$output = '<a href="javascript:username_display_launch('. |
"'$in->{'username'}','$in->{'domain'}'".')" />'. |
"'$in->{'username'}','$in->{'domain'}'".')" />'. |
Line 2529 sub role_type_names {
|
Line 2775 sub role_type_names {
|
} |
} |
|
|
sub select_actions { |
sub select_actions { |
my ($context,$setting,$statusmode) = @_; |
my ($context,$setting,$statusmode,$formname) = @_; |
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
revoke => "Revoke user roles", |
revoke => "Revoke user roles", |
delete => "Delete user roles", |
delete => "Delete user roles", |
Line 2590 sub select_actions {
|
Line 2836 sub select_actions {
|
} |
} |
} |
} |
if ($options) { |
if ($options) { |
$output = '<select name="bulkaction" onchange="javascript:opendatebrowser(this.form,'."'studentform'".')" />'."\n". |
$output = '<select name="bulkaction">'."\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 2606 sub select_actions {
|
Line 2852 sub select_actions {
|
'<input type="hidden" name="enddate_year" value="" />'."\n". |
'<input type="hidden" name="enddate_year" value="" />'."\n". |
'<input type="hidden" name="enddate_hour" value="" />'."\n". |
'<input type="hidden" name="enddate_hour" value="" />'."\n". |
'<input type="hidden" name="enddate_minute" value="" />'."\n". |
'<input type="hidden" name="enddate_minute" value="" />'."\n". |
'<input type="hidden" name="enddate_second" value="" />'."\n"; |
'<input type="hidden" name="enddate_second" value="" />'."\n". |
|
'<input type="hidden" name="no_end_date" value="" />'."\n"; |
if ($context eq 'course') { |
if ($context eq 'course') { |
$output .= '<input type="hidden" name="makedatesdefault" value="" />'."\n"; |
$output .= '<input type="hidden" name="makedatesdefault" value="" />'."\n"; |
} |
} |
Line 2621 sub select_actions {
|
Line 2868 sub select_actions {
|
|
|
sub date_section_javascript { |
sub date_section_javascript { |
my ($context,$setting) = @_; |
my ($context,$setting) = @_; |
my $title; |
my $title = 'Date_And_Section_Selector'; |
if (($context eq 'course') || ($context eq 'domain' && $setting eq 'course')) { |
my %nopopup = &Apache::lonlocal::texthash ( |
$title = &mt('Date and Section selector'); |
revoke => "Check the boxes for any users for whom roles are to be revoked, and click 'Proceed'", |
} else { |
delete => "Check the boxes for any users for whom roles are to be deleted, and click 'Proceed'", |
$title = &mt('Date selector'); |
none => "Choose an action to take for selected users", |
} |
); |
my $output = ' |
my $output = ' |
<script type="text/javascript"> |
<script type="text/javascript">'."\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 == '') { |
|
return; |
|
} |
|
var url = '/adm/createuser?'; |
var url = '/adm/createuser?'; |
var type = ''; |
var type = ''; |
var showrole = callingform.showrole.options[callingform.showrole.selectedIndex].value; |
var showrole = callingform.showrole.options[callingform.showrole.selectedIndex].value; |
Line 2677 function saveselections(formname) {
|
Line 2920 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; |
window.close(); |
|
} |
} |
return; |
|
END |
END |
} else { |
} else { |
if ($context eq 'course') { |
if ($context eq 'course') { |
Line 2717 END
|
Line 2966 END
|
opener.document.$callingform.enddate_hour.value = formname.enddate_hour.options[formname.enddate_hour.selectedIndex].value; |
opener.document.$callingform.enddate_hour.value = formname.enddate_hour.options[formname.enddate_hour.selectedIndex].value; |
opener.document.$callingform.enddate_minute.value = formname.enddate_minute.value; |
opener.document.$callingform.enddate_minute.value = formname.enddate_minute.value; |
opener.document.$callingform.enddate_second.value = formname.enddate_second.value; |
opener.document.$callingform.enddate_second.value = formname.enddate_second.value; |
window.close(); |
if (formname.no_end_date.checked) { |
|
opener.document.$callingform.no_end_date.value = '1'; |
|
} else { |
|
opener.document.$callingform.no_end_date.value = '0'; |
|
} |
END |
END |
} |
} |
$output .= ' |
my $verify_action_js = &bulkaction_javascript($callingform,'popup'); |
|
$output .= <<"ENDJS"; |
|
verify_action('actionlist'); |
} |
} |
|
|
|
$verify_action_js |
|
|
</script> |
</script> |
'; |
ENDJS |
my %lt = &Apache::lonlocal::texthash ( |
my %lt = &Apache::lonlocal::texthash ( |
chac => 'Access dates to apply for selected users', |
chac => 'Access dates to apply for selected users', |
chse => 'Changes in section affiliation to apply to selected users', |
chse => 'Changes in section affiliation to apply to selected users', |
Line 2780 END
|
Line 3038 END
|
$output .= $info.$secbox; |
$output .= $info.$secbox; |
} |
} |
$output .= '<p>'. |
$output .= '<p>'. |
&mt('Use "Save" to update the main window with your selections.').'<br /><br />'. |
|
'<input type="button" name="dateselection" value="'.&mt('Save').'" onclick="javascript:saveselections(this.form)" /></p>'."\n". |
'<input type="button" name="dateselection" value="'.&mt('Save').'" onclick="javascript:saveselections(this.form)" /></p>'."\n". |
'</form>'; |
'</form>'; |
return $output; |
return $output; |
Line 2794 sub section_picker {
|
Line 3051 sub section_picker {
|
if ($mode eq 'upload') { |
if ($mode eq 'upload') { |
my ($options,$cb_script,$coursepick) = |
my ($options,$cb_script,$coursepick) = |
&default_role_selector($context,1); |
&default_role_selector($context,1); |
$secbox .= &Apache::lonhtmlcommon::row_title('role','LC_oddrow_value'). |
$secbox .= &Apache::lonhtmlcommon::row_title(&mt('role'),'LC_oddrow_value'). |
$options. &Apache::lonhtmlcommon::row_closure(1)."\n"; |
$options. &Apache::lonhtmlcommon::row_closure(1)."\n"; |
} |
} |
$secbox .= &Apache::lonhtmlcommon::row_title($rowtitle,'LC_oddrow_value')."\n"; |
$secbox .= &Apache::lonhtmlcommon::row_title($rowtitle,'LC_oddrow_value')."\n"; |
Line 2824 sub results_header_row {
|
Line 3081 sub results_header_row {
|
} |
} |
if ($context eq 'course') { |
if ($context eq 'course') { |
if ($mode eq 'csv' || $mode eq 'excel') { |
if ($mode eq 'csv' || $mode eq 'excel') { |
$description = &mt('Course - ').$env{'course.'.$env{'request.course.id'}.'.description'}.': '; |
$description = &mt('Course - [_1]:',$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); |
Line 2883 sub results_header_row {
|
Line 3140 sub results_header_row {
|
} |
} |
} 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 [_1]' |
&Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'})).': '; |
,'<span class="LC_cusr_emph">' |
|
.&Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'}) |
|
.'</span>') |
|
.': '; |
if ($statusmode eq 'Expired') { |
if ($statusmode eq 'Expired') { |
$description .= &mt('Co-authors with expired [_1] roles',$showfilter); |
$description .= &mt('Co-authors with expired [_1] roles',$showfilter); |
} elsif ($statusmode eq 'Future') { |
} elsif ($statusmode eq 'Future') { |
Line 2900 sub results_header_row {
|
Line 3160 sub results_header_row {
|
} |
} |
} elsif ($context eq 'domain') { |
} elsif ($context eq 'domain') { |
my $domdesc = &Apache::lonnet::domain($env{'request.role.domain'},'description'); |
my $domdesc = &Apache::lonnet::domain($env{'request.role.domain'},'description'); |
$description = &mt('Domain - ').$domdesc.': '; |
$description = &mt('Domain - [_1]:',$domdesc).' '; |
if ($env{'form.roletype'} eq 'domain') { |
if ($env{'form.roletype'} eq 'domain') { |
if ($statusmode eq 'Expired') { |
if ($statusmode eq 'Expired') { |
$description .= &mt('Users in domain with expired [_1] roles',$showfilter); |
$description .= &mt('Users in domain with expired [_1] roles',$showfilter); |
Line 2999 sub show_drop_list {
|
Line 3259 sub show_drop_list {
|
$check_uncheck_js |
$check_uncheck_js |
</script> |
</script> |
<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 ($indexhash,$keylist) = &make_keylist_array(); |
my $studentcount = 0; |
my $studentcount = 0; |
Line 3117 END
|
Line 3377 END
|
# |
# |
$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="$studentkey"></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> |
Line 3136 END
|
Line 3396 END
|
'ua' => "uncheck all", |
'ua' => "uncheck all", |
); |
); |
$r->print(<<"END"); |
$r->print(<<"END"); |
</p><p> |
</p> |
<input type="button" value="$lt{'ca'}" onclick="javascript:checkAll(document.studentform.droplist)"> |
<p> |
<input type="button" value="$lt{'ua'}" onclick="javascript:uncheckAll(document.studentform.droplist)"> |
<input type="button" value="$lt{'ca'}" onclick="javascript:checkAll(document.studentform.droplist)" /> |
<p><input type=submit value="$lt{'dp'}"></p> |
<input type="button" value="$lt{'ua'}" onclick="javascript:uncheckAll(document.studentform.droplist)" /> |
|
</p> |
|
<p> |
|
<input type="submit" value="$lt{'dp'}" /> |
|
</p> |
END |
END |
return; |
return; |
} |
} |
Line 3150 END
|
Line 3414 END
|
sub print_first_users_upload_form { |
sub print_first_users_upload_form { |
my ($r,$context) = @_; |
my ($r,$context) = @_; |
my $str; |
my $str; |
$str = '<input type="hidden" name="phase" value="two">'; |
$str = '<input type="hidden" name="phase" value="two" />'; |
$str .= '<input type="hidden" name="action" value="upload" />'; |
$str .= '<input type="hidden" name="action" value="upload" />'; |
$str .= '<input type="hidden" name="state" value="got_file" />'; |
$str .= '<input type="hidden" name="state" value="got_file" />'; |
$str .= "<h3>".&mt('Upload a file containing information about users')."</h3>\n"; |
$str .= '<h2>'.&mt('Upload a file containing information about users').'</h2>'."\n"; |
|
$str .= '<p class="LC_info">' |
|
.&mt('Please upload an UTF8 encoded file to ensure a correct character encoding in your classlist.') |
|
.'</p>'."\n"; |
$str .= &Apache::loncommon::upfile_select_html(); |
$str .= &Apache::loncommon::upfile_select_html(); |
$str .= "<p>\n"; |
$str .= '<p>'; |
$str .= '<input type="submit" name="fileupload" value="'. |
|
&mt('Upload file of users').'">'."\n"; |
|
$str .= '<label><input type="checkbox" name="noFirstLine" /> '. |
|
&mt('Ignore First Line')."</label></p>\n"; |
|
$str .= &Apache::loncommon::help_open_topic("Course_Create_Class_List", |
$str .= &Apache::loncommon::help_open_topic("Course_Create_Class_List", |
&mt("How do I create a users list from a spreadsheet")). |
&mt("How do I create a users list from a spreadsheet")). |
"<br />\n"; |
"<br />\n"; |
$str .= &Apache::loncommon::help_open_topic("Course_Convert_To_CSV", |
$str .= &Apache::loncommon::help_open_topic("Course_Convert_To_CSV", |
&mt("How do I create a CSV file from a spreadsheet")). |
&mt("How do I create a CSV file from a spreadsheet")); |
"<br />\n"; |
$str .= "</p>\n"; |
|
$str .= "<p>\n"; |
|
$str .= '<label><input type="checkbox" name="noFirstLine" /> '. |
|
&mt('Ignore First Line')."</label></p>\n"; |
|
$str .= '<input type="submit" name="fileupload" value="'. |
|
&mt('Next').'" />'."<br />\n"; |
$str .= &Apache::loncommon::end_page(); |
$str .= &Apache::loncommon::end_page(); |
$r->print($str); |
$r->print($str); |
return; |
return; |
Line 3195 sub upfile_drop_add {
|
Line 3463 sub upfile_drop_add {
|
# |
# |
# Store the field choices away |
# Store the field choices away |
foreach my $field (qw/username names |
foreach my $field (qw/username names |
fname mname lname gen id sec ipwd email role/) { |
fname mname lname gen id sec ipwd email role domain/) { |
$env{'form.'.$field.'_choice'}=$fields{$field}; |
$env{'form.'.$field.'_choice'}=$fields{$field}; |
} |
} |
&Apache::loncommon::store_course_settings('enrollment_upload', |
&Apache::loncommon::store_course_settings('enrollment_upload', |
Line 3209 sub upfile_drop_add {
|
Line 3477 sub upfile_drop_add {
|
'sec_choice' => 'scalar', |
'sec_choice' => 'scalar', |
'ipwd_choice' => 'scalar', |
'ipwd_choice' => 'scalar', |
'email_choice' => 'scalar', |
'email_choice' => 'scalar', |
'role_choice' => 'scalar' }); |
'role_choice' => 'scalar', |
|
'domain_choice' => 'scalar', |
|
'inststatus_choice' => 'scalar'}); |
# |
# |
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,$context)); |
$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 $defdom=$env{'request.role.domain'}; |
|
my $domain; |
|
if ($env{'form.defaultdomain'} ne '') { |
|
$domain = $env{'form.defaultdomain'}; |
|
} else { |
|
$domain = $defdom; |
|
} |
my $desiredhost = $env{'form.lcserver'}; |
my $desiredhost = $env{'form.lcserver'}; |
if (lc($desiredhost) eq 'default') { |
if (lc($desiredhost) eq 'default') { |
$desiredhost = undef; |
$desiredhost = undef; |
} else { |
} else { |
my %home_servers = &Apache::lonnet::get_servers($domain,'library'); |
my %home_servers = &Apache::lonnet::get_servers($defdom,'library'); |
if (! exists($home_servers{$desiredhost})) { |
if (! exists($home_servers{$desiredhost})) { |
$r->print('<span class="LC_error">'.&mt('Error'). |
$r->print('<span class="LC_error">'.&mt('Error'). |
&mt('Invalid home server specified').'</span>'); |
&mt('Invalid home server specified').'</span>'); |
Line 3286 sub upfile_drop_add {
|
Line 3562 sub upfile_drop_add {
|
'permanentemail','id'); |
'permanentemail','id'); |
my %canmodify; |
my %canmodify; |
if (&Apache::lonnet::allowed('mau',$domain)) { |
if (&Apache::lonnet::allowed('mau',$domain)) { |
|
push(@userinfo,'inststatus'); |
foreach my $field (@userinfo) { |
foreach my $field (@userinfo) { |
$canmodify{$field} = 1; |
$canmodify{$field} = 1; |
} |
} |
Line 3306 sub upfile_drop_add {
|
Line 3583 sub upfile_drop_add {
|
if ($context eq 'course') { |
if ($context eq 'course') { |
my ($cnum,$cdom) = &get_course_identity(); |
my ($cnum,$cdom) = &get_course_identity(); |
my $roster = &Apache::loncoursedata::get_classlist(); |
my $roster = &Apache::loncoursedata::get_classlist(); |
%userlist = %{$roster}; |
if (ref($roster) eq 'HASH') { |
|
%userlist = %{$roster}; |
|
} |
my %advrolehash = &Apache::lonnet::get_my_roles($cnum,$cdom,undef, |
my %advrolehash = &Apache::lonnet::get_my_roles($cnum,$cdom,undef, |
\@statuses,\@poss_roles); |
\@statuses,\@poss_roles); |
&gather_userinfo($context,'view',\%userlist,$indexhash,\%info, |
&gather_userinfo($context,'view',\%userlist,$indexhash,\%info, |
Line 3332 sub upfile_drop_add {
|
Line 3611 sub upfile_drop_add {
|
} else { |
} else { |
$r->print('<h3>'.&mt('Adding/Modifying Users')."</h3>\n<p>\n"); |
$r->print('<h3>'.&mt('Adding/Modifying Users')."</h3>\n<p>\n"); |
} |
} |
|
$r->rflush; |
|
|
my %counts = ( |
my %counts = ( |
user => 0, |
user => 0, |
auth => 0, |
auth => 0, |
Line 3339 sub upfile_drop_add {
|
Line 3620 sub upfile_drop_add {
|
); |
); |
my $flushc=0; |
my $flushc=0; |
my %student=(); |
my %student=(); |
my (%curr_groups,@sections,@cleansec,@secs,$defaultwarn,$groupwarn); |
my (%curr_groups,@sections,@cleansec,$defaultwarn,$groupwarn); |
my %userchg; |
my %userchg; |
if ($context eq 'course' || $setting eq 'course') { |
if ($context eq 'course' || $setting eq 'course') { |
if ($context eq 'course') { |
if ($context eq 'course') { |
Line 3378 sub upfile_drop_add {
|
Line 3659 sub upfile_drop_add {
|
} |
} |
my (%curr_rules,%got_rules,%alerts); |
my (%curr_rules,%got_rules,%alerts); |
my %customroles = &my_custom_roles(); |
my %customroles = &my_custom_roles(); |
my ($custom_ok,@permitted_roles) = |
my @permitted_roles = &roles_on_upload($context,$setting,%customroles); |
&roles_on_upload($context,%customroles); |
|
# Get new users list |
# Get new users list |
foreach my $line (@userdata) { |
foreach my $line (@userdata) { |
|
my @secs; |
my %entries=&Apache::loncommon::record_sep($line); |
my %entries=&Apache::loncommon::record_sep($line); |
# Determine user name |
# Determine user name |
unless (($entries{$fields{'username'}} eq '') || |
unless (($entries{$fields{'username'}} eq '') || |
Line 3407 sub upfile_drop_add {
|
Line 3688 sub upfile_drop_add {
|
if ($entries{$fields{'username'}} |
if ($entries{$fields{'username'}} |
ne &LONCAPA::clean_username($entries{$fields{'username'}})) { |
ne &LONCAPA::clean_username($entries{$fields{'username'}})) { |
$r->print('<br />'. |
$r->print('<br />'. |
&mt('<b>[_1]</b>: Unacceptable username for user [_2] [_3] [_4] [_5]', |
&mt('[_1]: Unacceptable username for user [_2] [_3] [_4] [_5]', |
$entries{$fields{'username'}},$fname,$mname,$lname,$gen). |
'<b>'.$entries{$fields{'username'}}.'</b>',$fname,$mname,$lname,$gen)); |
'</b>'); |
|
next; |
next; |
} else { |
} else { |
|
if ($entries{$fields{'domain'}} |
|
ne &LONCAPA::clean_domain($entries{$fields{'domain'}})) { |
|
$r->print('<br />'. '<b>'.$entries{$fields{'domain'}}. |
|
'</b>: '.&mt('Unacceptable domain for user [_2] [_3] [_4] [_5]',$fname,$mname,$lname,$gen)); |
|
next; |
|
} |
my $username = $entries{$fields{'username'}}; |
my $username = $entries{$fields{'username'}}; |
|
my $userdomain = $entries{$fields{'domain'}}; |
|
if ($userdomain eq '') { |
|
$userdomain = $domain; |
|
} |
if (defined($fields{'sec'})) { |
if (defined($fields{'sec'})) { |
if (defined($entries{$fields{'sec'}})) { |
if (defined($entries{$fields{'sec'}})) { |
|
$entries{$fields{'sec'}} =~ s/\W//g; |
my $item = $entries{$fields{'sec'}}; |
my $item = $entries{$fields{'sec'}}; |
$item =~ s/(\s+$|^\s+)//g; |
|
if ($item eq "none" || $item eq 'all') { |
if ($item eq "none" || $item eq 'all') { |
$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)); |
$r->print('<br />'.&mt('[_1]: Unable to enroll user [_2] [_3] [_4] [_5] in a section named "[_6]" - this is a reserved word.','<b>'.$username.'</b>',$fname,$mname,$lname,$gen,$item)); |
next; |
next; |
} elsif (exists($curr_groups{$item})) { |
} 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.')); |
$r->print('<br />'.&mt('[_1]: Unable to enroll user [_2] [_3] [_4] [_5] in a section named "[_6]" - this is a course group.','<b>'.$username.'</b>',$fname,$mname,$lname,$gen,$item).' '.&mt('Section names and group names must be distinct.')); |
next; |
next; |
} else { |
} else { |
push(@secs,$item); |
push(@secs,$item); |
Line 3430 sub upfile_drop_add {
|
Line 3720 sub upfile_drop_add {
|
} |
} |
if ($env{'request.course.sec'} ne '') { |
if ($env{'request.course.sec'} ne '') { |
@secs = ($env{'request.course.sec'}); |
@secs = ($env{'request.course.sec'}); |
if (ref($userlist{$username.':'.$domain}) eq 'ARRAY') { |
if (ref($userlist{$username.':'.$userdomain}) eq 'ARRAY') { |
my $currsec = $userlist{$username.':'.$domain}[$secidx]; |
my $currsec = $userlist{$username.':'.$userdomain}[$secidx]; |
if ($currsec ne $env{'request.course.sec'}) { |
if ($currsec ne $env{'request.course.sec'}) { |
$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 />'); |
$r->print('<br />'.&mt('[_1]: Unable to enroll user [_2] [_3] [_4] [_5] in a section named "[_6]".','<b>'.$username.'</b>',$fname,$mname,$lname,$gen,$secs[0]).'<br />'); |
if ($currsec eq '') { |
if ($currsec eq '') { |
$r->print(&mt('This user already has an active/future student role in the course, unaffiliated to any section.')); |
$r->print(&mt('This user already has an active/future student role in the course, unaffiliated to any section.')); |
|
|
Line 3462 sub upfile_drop_add {
|
Line 3752 sub upfile_drop_add {
|
if (defined($fields{'email'})) { |
if (defined($fields{'email'})) { |
if (defined($entries{$fields{'email'}})) { |
if (defined($entries{$fields{'email'}})) { |
$email=$entries{$fields{'email'}}; |
$email=$entries{$fields{'email'}}; |
unless ($email=~/^[^\@]+\@[^\@]+$/) { $email=''; } } |
unless ($email=~/^[^\@]+\@[^\@]+$/) { $email=''; } |
|
} |
|
} |
|
# determine affiliation |
|
my $inststatus=''; |
|
if (defined($fields{'inststatus'})) { |
|
if (defined($entries{$fields{'inststatus'}})) { |
|
$inststatus=$entries{$fields{'inststatus'}}; |
|
} |
} |
} |
# determine user password |
# determine user password |
my $password = $genpwd; |
my $password = $genpwd; |
Line 3475 sub upfile_drop_add {
|
Line 3773 sub upfile_drop_add {
|
my $role = ''; |
my $role = ''; |
if (defined($fields{'role'})) { |
if (defined($fields{'role'})) { |
if ($entries{$fields{'role'}}) { |
if ($entries{$fields{'role'}}) { |
if (grep(/^\Q$entries{$fields{'role'}}\E$/,@permitted_roles)) { |
$entries{$fields{'role'}} =~ s/(\s+$|^\s+)//g; |
$role=$entries{$fields{'role'}}; |
if ($entries{$fields{'role'}} ne '') { |
$role =~ s/(\s+$|^\s+)//g; |
if (grep(/^\Q$entries{$fields{'role'}}\E$/,@permitted_roles)) { |
} |
$role = $entries{$fields{'role'}}; |
if ($custom_ok) { |
|
if ($customroles{$role}) { |
|
$role = 'cr_'.$env{'user.domain'}.'_'.$env{'user.name'}.'_'.$entries{$fields{'role'}}; |
|
} |
} |
} |
} |
if ($role eq '') { |
if ($role eq '') { |
my $rolestr = join(', ',@permitted_roles); |
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('[_1]: You do not have permission to add the requested role [_2] for the user.' |
|
,'<b>'.$entries{$fields{'username'}}.'</b>' |
|
,$entries{$fields{'role'}}) |
|
.'<br />' |
|
.&mt('Allowable role(s) is/are: [_1].',$rolestr)."\n" |
|
); |
next; |
next; |
} |
} |
} |
} |
Line 3496 sub upfile_drop_add {
|
Line 3796 sub upfile_drop_add {
|
$role = $defaultrole; |
$role = $defaultrole; |
} |
} |
# Clean up whitespace |
# Clean up whitespace |
foreach (\$domain,\$username,\$id,\$fname,\$mname, |
foreach (\$id,\$fname,\$mname,\$lname,\$gen) { |
\$lname,\$gen) { |
|
$$_ =~ s/(\s+$|^\s+)//g; |
$$_ =~ s/(\s+$|^\s+)//g; |
} |
} |
# check against rules |
# check against rules |
my $checkid = 0; |
my $checkid = 0; |
my $newuser = 0; |
my $newuser = 0; |
my (%rulematch,%inst_results,%idinst_results); |
my (%rulematch,%inst_results,%idinst_results); |
my $uhome=&Apache::lonnet::homeserver($username,$domain); |
my $uhome=&Apache::lonnet::homeserver($username,$userdomain); |
if ($uhome eq 'no_host') { |
if ($uhome eq 'no_host') { |
|
next if ($userdomain ne $domain); |
$checkid = 1; |
$checkid = 1; |
$newuser = 1; |
$newuser = 1; |
my $checkhash; |
my $checkhash; |
Line 3521 sub upfile_drop_add {
|
Line 3821 sub upfile_drop_add {
|
} |
} |
} else { |
} else { |
if ($context eq 'course' || $context eq 'author') { |
if ($context eq 'course' || $context eq 'author') { |
if ($role eq '') { |
if ($userdomain eq $domain ) { |
my @checkroles; |
if ($role eq '') { |
foreach my $role (@poss_roles) { |
my @checkroles; |
my $endkey; |
foreach my $role (@poss_roles) { |
if ($role ne 'st') { |
my $endkey; |
$endkey = ':'.$role; |
if ($role ne 'st') { |
} |
$endkey = ':'.$role; |
if (exists($userlist{$username.':'.$domain.$endkey})) { |
} |
if (!grep(/^\Q$role\E$/,@checkroles)) { |
if (exists($userlist{$username.':'.$userdomain.$endkey})) { |
push(@checkroles,$role); |
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}}; |
} |
} |
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); |
my @newinfo = (\$fname,\$mname,\$lname,\$gen,\$email,\$id); |
for (my $i=0; $i<@newinfo; $i++) { |
for (my $i=0; $i<@userinfo; $i++) { |
if (${$newinfo[$i]} ne '') { |
if (${$newinfo[$i]} ne '') { |
if (!$canmodify{$userinfo[$i]}) { |
if (!$canmodify{$userinfo[$i]}) { |
${$newinfo[$i]} = ''; |
${$newinfo[$i]} = ''; |
} |
} |
} |
} |
} |
} |
} |
} |
} |
if ($id ne '') { |
if ($id ne '') { |
if (!$newuser) { |
if (!$newuser) { |
my %idhash = &Apache::lonnet::idrget($domain,($username)); |
my %idhash = &Apache::lonnet::idrget($userdomain,($username)); |
if ($idhash{$username} ne $id) { |
if ($idhash{$username} ne $id) { |
$checkid = 1; |
$checkid = 1; |
} |
} |
Line 3560 sub upfile_drop_add {
|
Line 3862 sub upfile_drop_add {
|
if ($checkid) { |
if ($checkid) { |
my $checkhash; |
my $checkhash; |
my $checks = { 'id' => 1 }; |
my $checks = { 'id' => 1 }; |
$checkhash->{$username.':'.$domain} = { 'newuser' => $newuser, |
$checkhash->{$username.':'.$userdomain} = { 'newuser' => $newuser, |
'id' => $id }; |
'id' => $id }; |
&Apache::loncommon::user_rule_check($checkhash,$checks, |
&Apache::loncommon::user_rule_check($checkhash,$checks, |
\%alerts,\%rulematch,\%idinst_results,\%curr_rules, |
\%alerts,\%rulematch,\%idinst_results,\%curr_rules, |
\%got_rules); |
\%got_rules); |
if (ref($alerts{'id'}) eq 'HASH') { |
if (ref($alerts{'id'}) eq 'HASH') { |
if (ref($alerts{'id'}{$domain}) eq 'HASH') { |
if (ref($alerts{'id'}{$userdomain}) eq 'HASH') { |
next if ($alerts{'id'}{$domain}{$id}); |
next if ($alerts{'id'}{$userdomain}{$id}); |
} |
} |
} |
} |
} |
} |
Line 3576 sub upfile_drop_add {
|
Line 3878 sub upfile_drop_add {
|
my $multiple = 0; |
my $multiple = 0; |
my ($userresult,$authresult,$roleresult,$idresult); |
my ($userresult,$authresult,$roleresult,$idresult); |
my (%userres,%authres,%roleres,%idres); |
my (%userres,%authres,%roleres,%idres); |
|
my $singlesec = ''; |
if ($role eq 'st') { |
if ($role eq 'st') { |
my $sec; |
my $sec; |
if ($cid) { |
if (@secs > 0) { |
if (@secs > 0) { |
$sec = $secs[0]; |
$sec = $secs[0]; |
|
} |
|
&modifystudent($domain,$username,$cid,$sec, |
|
$desiredhost); |
|
$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; |
|
} |
} |
|
&modifystudent($userdomain,$username,$cid,$sec, |
|
$desiredhost,$context); |
|
$roleresult = |
|
&Apache::lonnet::modifystudent |
|
($userdomain,$username,$id,$amode,$password, |
|
$fname,$mname,$lname,$gen,$sec,$enddate, |
|
$startdate,$env{'form.forceid'}, |
|
$desiredhost,$email,'manual','',$cid, |
|
'',$context,$inststatus); |
|
$userresult = $roleresult; |
} else { |
} else { |
if (($context eq 'course') || |
if ($role ne '') { |
(grep(/^\Q$role\E$/,@courseroles))) { |
if ($context eq 'course' || $setting eq 'course') { |
if (!$cid) { |
if ($customroles{$role}) { |
next; |
$role = 'cr_'.$env{'user.domain'}.'_'. |
} |
$env{'user.name'}.'_'.$role; |
} |
} |
my $singlesec; |
if ($role ne 'cc') { |
if ((grep(/^\Q$role\E$/,@courseroles)) && ($role ne 'cc')) { |
if (@secs > 1) { |
if (@secs > 1) { |
$multiple = 1; |
$multiple = 1; |
foreach my $sec (@secs) { |
foreach my $sec (@secs) { |
($userres{$sec},$authres{$sec},$roleres{$sec},$idres{$sec}) = |
($userres{$sec},$authres{$sec},$roleres{$sec},$idres{$sec}) = |
&modifyuserrole($context,$setting, |
&modifyuserrole($context,$setting, |
$changeauth,$cid,$userdomain,$username, |
$changeauth,$cid,$domain,$username, |
$id,$amode,$password,$fname, |
$id,$amode,$password,$fname, |
$mname,$lname,$gen,$sec, |
$mname,$lname,$gen,$sec, |
$env{'form.forceid'},$desiredhost, |
$env{'form.forceid'},$desiredhost, |
$email,$role,$enddate, |
$email,$role,$enddate,$startdate,$checkid); |
$startdate,$checkid,$inststatus); |
|
} |
|
} elsif (@secs > 0) { |
|
$singlesec = $secs[0]; |
|
} |
} |
} |
} elsif (@secs > 0) { |
|
$singlesec = $secs[0]; |
|
} |
} |
} |
} |
if (!$multiple) { |
if (!$multiple) { |
($userresult,$authresult,$roleresult,$idresult) = |
($userresult,$authresult,$roleresult,$idresult) = |
&modifyuserrole($context,$setting, |
&modifyuserrole($context,$setting, |
$changeauth,$cid,$domain,$username, |
$changeauth,$cid,$userdomain,$username, |
$id,$amode,$password,$fname, |
$id,$amode,$password,$fname, |
$mname,$lname,$gen,$singlesec, |
$mname,$lname,$gen,$singlesec, |
$env{'form.forceid'},$desiredhost, |
$env{'form.forceid'},$desiredhost, |
$email,$role,$enddate,$startdate,$checkid); |
$email,$role,$enddate,$startdate, |
|
$checkid,$inststatus); |
} |
} |
} |
} |
if ($multiple) { |
if ($multiple) { |
foreach my $sec (sort(keys(%userres))) { |
foreach my $sec (sort(keys(%userres))) { |
$flushc = |
$flushc = |
&user_change_result($r,$userres{$sec},$authres{$sec}, |
&user_change_result($r,$userres{$sec},$authres{$sec}, |
$roleres{$sec},$idres{$sec},\%counts,$flushc, |
$roleres{$sec},$idres{$sec},\%counts,$flushc, |
$username,\%userchg); |
$username,$userdomain,\%userchg); |
|
|
} |
} |
} else { |
} else { |
$flushc = |
$flushc = |
&user_change_result($r,$userresult,$authresult, |
&user_change_result($r,$userresult,$authresult, |
$roleresult,$idresult,\%counts,$flushc, |
$roleresult,$idresult,\%counts,$flushc, |
$username,\%userchg); |
$username,$userdomain,\%userchg); |
} |
} |
} else { |
} else { |
if ($context eq 'course') { |
if ($context eq 'course') { |
$r->print('<br />'. |
$r->print('<br />'. |
&mt('<b>[_1]</b>: Unable to enroll. No password specified.',$username) |
&mt('[_1]: Unable to enroll. No password specified.','<b>'.$username.'</b>') |
); |
); |
} elsif ($context eq 'author') { |
} elsif ($context eq 'author') { |
$r->print('<br />'. |
$r->print('<br />'. |
&mt('<b>[_1]</b>: Unable to add co-author. No password specified.',$username) |
&mt('[_1]: Unable to add co-author. No password specified.','<b>'.$username.'</b>') |
); |
); |
} else { |
} else { |
$r->print('<br />'. |
$r->print('<br />'. |
&mt('<b>[_1]</b>: Unable to add user. No password specified.',$username) |
&mt('[_1]: Unable to add user. No password specified.','<b>'.$username.'</b>') |
); |
); |
} |
} |
} |
} |
Line 3686 sub upfile_drop_add {
|
Line 3991 sub upfile_drop_add {
|
'<input type="hidden" name="action" value="'.$env{'form.action'}.'" />'. |
'<input type="hidden" name="action" value="'.$env{'form.action'}.'" />'. |
&mt('There are no students with current/future access to the course.'). |
&mt('There are no students with current/future access to the course.'). |
'</form>'."\n"); |
'</form>'."\n"); |
} else { |
} elsif (ref($classlist) eq 'HASH') { |
# Remove the students we just added from the list of students. |
# Remove the students we just added from the list of students. |
foreach my $line (@userdata) { |
foreach my $line (@userdata) { |
my %entries=&Apache::loncommon::record_sep($line); |
my %entries=&Apache::loncommon::record_sep($line); |
Line 3748 sub print_namespacing_alerts {
|
Line 4053 sub print_namespacing_alerts {
|
|
|
sub user_change_result { |
sub user_change_result { |
my ($r,$userresult,$authresult,$roleresult,$idresult,$counts,$flushc, |
my ($r,$userresult,$authresult,$roleresult,$idresult,$counts,$flushc, |
$username,$userchg) = @_; |
$username,$userdomain,$userchg) = @_; |
my $okresult = 0; |
my $okresult = 0; |
if ($userresult ne 'ok') { |
if ($userresult ne 'ok') { |
if ($userresult =~ /^error:(.+)$/) { |
if ($userresult =~ /^error:(.+)$/) { |
my $error = $1; |
my $error = $1; |
$r->print('<br />'. |
$r->print('<br />'. |
&mt('<b>[_1]</b>: Unable to add/modify: [_2]',$username,$error)); |
&mt('[_1]: Unable to add/modify: [_2]','<b>'.$username.':'.$userdomain.'</b>',$error)); |
} |
} |
} else { |
} else { |
$counts->{'user'} ++; |
$counts->{'user'} ++; |
Line 3764 sub user_change_result {
|
Line 4069 sub user_change_result {
|
if ($authresult =~ /^error:(.+)$/) { |
if ($authresult =~ /^error:(.+)$/) { |
my $error = $1; |
my $error = $1; |
$r->print('<br />'. |
$r->print('<br />'. |
&mt('<b>[_1]</b>: Unable to modify authentication: [_2]',$username,$error)); |
&mt('[_1]: Unable to modify authentication: [_2]','<b>'.$username.':'.$userdomain.'</b>',$error)); |
} |
} |
} else { |
} else { |
$counts->{'auth'} ++; |
$counts->{'auth'} ++; |
Line 3774 sub user_change_result {
|
Line 4079 sub user_change_result {
|
if ($roleresult =~ /^error:(.+)$/) { |
if ($roleresult =~ /^error:(.+)$/) { |
my $error = $1; |
my $error = $1; |
$r->print('<br />'. |
$r->print('<br />'. |
&mt('<b>[_1]</b>: Unable to add role: [_2]',$username,$error)); |
&mt('[_1]: Unable to add role: [_2]','<b>'.$username.':'.$userdomain.'</b>',$error)); |
} |
} |
} else { |
} else { |
$counts->{'role'} ++; |
$counts->{'role'} ++; |
Line 3782 sub user_change_result {
|
Line 4087 sub user_change_result {
|
} |
} |
if ($okresult) { |
if ($okresult) { |
$flushc++; |
$flushc++; |
$userchg->{$username}=1; |
$userchg->{$username.':'.$userdomain}=1; |
$r->print('. '); |
$r->print('. '); |
if ($flushc>15) { |
if ($flushc>15) { |
$r->rflush; |
$r->rflush; |
Line 3894 sub update_user_list {
|
Line 4199 sub update_user_list {
|
$end = $now; |
$end = $now; |
$type = 'manual'; |
$type = 'manual'; |
$result = |
$result = |
&Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid); |
&Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid,'',$context); |
} elsif ($choice eq 'revoke') { |
} elsif ($choice eq 'revoke') { |
# revoke or delete user role |
# revoke or delete user role |
$end = $now; |
$end = $now; |
if ($role eq 'st') { |
if ($role eq 'st') { |
$result = |
$result = |
&Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid); |
&Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid,'',$context); |
} else { |
} else { |
$result = |
$result = |
&Apache::lonnet::revokerole($udom,$uname,$scope,$role); |
&Apache::lonnet::revokerole($udom,$uname,$scope,$role, |
|
'','',$context); |
} |
} |
} elsif ($choice eq 'delete') { |
} elsif ($choice eq 'delete') { |
if ($role eq 'st') { |
if ($role eq 'st') { |
&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,$now,$start,$type,$locktype,$cid,'',$context); |
} |
} |
$result = |
$result = |
&Apache::lonnet::assignrole($udom,$uname,$scope,$role,$now, |
&Apache::lonnet::assignrole($udom,$uname,$scope,$role,$now, |
$start,1); |
$start,1,'',$context); |
} 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 3920 sub update_user_list {
|
Line 4226 sub update_user_list {
|
} |
} |
if ($choice eq 'reenable') { |
if ($choice eq 'reenable') { |
if ($role eq 'st') { |
if ($role eq 'st') { |
$result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid); |
$result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid,'',$context); |
} else { |
} else { |
$result = |
$result = |
&Apache::lonnet::assignrole($udom,$uname,$scope,$role,$end, |
&Apache::lonnet::assignrole($udom,$uname,$scope,$role,$end, |
$now); |
$now,'','',$context); |
} |
} |
} elsif ($choice eq 'activate') { |
} elsif ($choice eq 'activate') { |
if ($role eq 'st') { |
if ($role eq 'st') { |
$result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid); |
$result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid,'',$context); |
} else { |
} else { |
$result = &Apache::lonnet::assignrole($udom,$uname,$scope,$role,$end, |
$result = &Apache::lonnet::assignrole($udom,$uname,$scope,$role,$end, |
$now); |
$now,'','',$context); |
} |
} |
} elsif ($choice eq 'chgdates') { |
} elsif ($choice eq 'chgdates') { |
if ($role eq 'st') { |
if ($role eq 'st') { |
$result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid); |
$result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid,'',$context); |
} else { |
} else { |
$result = &Apache::lonnet::assignrole($udom,$uname,$scope,$role,$end, |
$result = &Apache::lonnet::assignrole($udom,$uname,$scope,$role,$end, |
$start); |
$start,'','',$context); |
} |
} |
} elsif ($choice eq 'chgsec') { |
} elsif ($choice eq 'chgsec') { |
my (@newsecs,$revresult,$nochg,@retained); |
my (@newsecs,$revresult,$nochg,@retained); |
Line 3951 sub update_user_list {
|
Line 4257 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 { |
|
$revresult = |
|
&Apache::lonnet::revokerole($udom,$uname, |
|
$scope,$role, |
|
'','',$context); |
|
} |
} else { |
} else { |
if (@newsecs > 0) { |
if (@newsecs > 0) { |
if (grep(/^\Q$sec\E$/,@newsecs)) { |
if (grep(/^\Q$sec\E$/,@newsecs)) { |
Line 3959 sub update_user_list {
|
Line 4270 sub update_user_list {
|
} else { |
} else { |
$revresult = |
$revresult = |
&Apache::lonnet::revokerole($udom,$uname, |
&Apache::lonnet::revokerole($udom,$uname, |
$scope,$role); |
$scope,$role, |
|
'','',$context); |
} |
} |
} else { |
} else { |
$revresult = |
$revresult = |
&Apache::lonnet::revokerole($udom,$uname, |
&Apache::lonnet::revokerole($udom,$uname, |
$scope,$role); |
$scope,$role, |
|
'','',$context); |
} |
} |
} |
} |
} else { |
} else { |
Line 3979 sub update_user_list {
|
Line 4292 sub update_user_list {
|
if (!$nochg) { |
if (!$nochg) { |
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,'',$context); |
} 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,'','',$context); |
} |
} |
} |
} |
} else { |
} else { |
foreach my $newsec (@newsecs) { |
foreach my $newsec (@newsecs) { |
if (!grep(/^\Q$newsec\E$/,@retained)) { |
if (!grep(/^\Q$newsec\E$/,@retained)) { |
if ($role eq 'st') { |
if ($role eq 'st') { |
$result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$newsec,$end,$start,$type,$locktype,$cid); |
$result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$newsec,$end,$start,$type,$locktype,$cid,'',$context); |
} else { |
} else { |
my $newscope = $scopestem; |
my $newscope = $scopestem; |
if ($newsec ne '') { |
if ($newsec ne '') { |
Line 4036 sub update_user_list {
|
Line 4349 sub update_user_list {
|
$r->print('<p><b>'.&mt("$result_text{'ok'}{$choice} role(s) for [quant,_1,user,users,no users].",$count).'</b></p>'); |
$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>'); |
} |
} |
# 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(); |
Line 4057 sub classlist_drop {
|
Line 4370 sub classlist_drop {
|
my ($scope,$uname,$udom,$now) = @_; |
my ($scope,$uname,$udom,$now) = @_; |
my ($cdom,$cnum) = ($scope=~m{^/($match_domain)/($match_courseid)}); |
my ($cdom,$cnum) = ($scope=~m{^/($match_domain)/($match_courseid)}); |
if (&Apache::lonnet::is_course($cdom,$cnum)) { |
if (&Apache::lonnet::is_course($cdom,$cnum)) { |
my $user = $uname.':'.$udom; |
|
if (!&active_student_roles($cnum,$cdom,$uname,$udom)) { |
if (!&active_student_roles($cnum,$cdom,$uname,$udom)) { |
my $result = |
my %user; |
&Apache::lonnet::cput('classlist', |
my $result = &update_classlist($cdom,$cnum,$udom,$uname,\%user,$now); |
{ $user => $now },$cdom,$cnum); |
|
return &mt('Drop from classlist: [_1]', |
return &mt('Drop from classlist: [_1]', |
'<b>'.$result.'</b>').'<br />'; |
'<b>'.$result.'</b>').'<br />'; |
} |
} |
Line 4128 sub set_login {
|
Line 4439 sub set_login {
|
} |
} |
|
|
sub course_sections { |
sub course_sections { |
my ($sections_count,$role) = @_; |
my ($sections_count,$role,$current_sec) = @_; |
my $output = ''; |
my $output = ''; |
my @sections = (sort {$a <=> $b} keys %{$sections_count}); |
my @sections = (sort {$a <=> $b} keys %{$sections_count}); |
my $numsec = scalar(@sections); |
my $numsec = scalar(@sections); |
|
my $is_selected = ' selected="selected" '; |
if ($numsec <= 1) { |
if ($numsec <= 1) { |
$output = '<select name="currsec_'.$role.'" >'."\n". |
$output = '<select name="currsec_'.$role.'" >'."\n". |
' <option value="">'.&mt('Select').'</option>'."\n". |
' <option value="">'.&mt('Select').'</option>'."\n"; |
|
if ($current_sec eq 'none') { |
|
$output .= |
|
' <option value=""'.$is_selected.'>'.&mt('No section').'</option>'."\n"; |
|
} else { |
|
$output .= |
' <option value="">'.&mt('No section').'</option>'."\n"; |
' <option value="">'.&mt('No section').'</option>'."\n"; |
|
} |
if ($numsec == 1) { |
if ($numsec == 1) { |
$output .= |
if ($current_sec eq $sections[0]) { |
|
$output .= |
|
' <option value="'.$sections[0].'"'.$is_selected.'>'.$sections[0].'</option>'."\n"; |
|
} else { |
|
$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.'" '; |
Line 4146 sub course_sections {
|
Line 4469 sub course_sections {
|
if (scalar(@sections) < 4) { $multiple = scalar(@sections); } |
if (scalar(@sections) < 4) { $multiple = scalar(@sections); } |
if ($role eq 'st') { |
if ($role eq 'st') { |
$output .= '>'."\n". |
$output .= '>'."\n". |
' <option value="">'.&mt('Select').'</option>'."\n". |
' <option value="">'.&mt('Select').'</option>'."\n"; |
|
if ($current_sec eq 'none') { |
|
$output .= |
|
' <option value=""'.$is_selected.'>'.&mt('No section')."</option>\n"; |
|
} else { |
|
$output .= |
' <option value="">'.&mt('No section')."</option>\n"; |
' <option value="">'.&mt('No section')."</option>\n"; |
|
} |
} else { |
} else { |
$output .= 'multiple="multiple" size="'.$multiple.'">'."\n"; |
$output .= 'multiple="multiple" size="'.$multiple.'">'."\n"; |
} |
} |
foreach my $sec (@sections) { |
foreach my $sec (@sections) { |
$output .= '<option value="'.$sec.'">'.$sec."</option>\n"; |
if ($current_sec eq $sec) { |
|
$output .= '<option value="'.$sec.'"'.$is_selected.'>'.$sec."</option>\n"; |
|
} else { |
|
$output .= '<option value="'.$sec.'">'.$sec."</option>\n"; |
|
} |
} |
} |
} |
} |
$output .= '</select>'; |
$output .= '</select>'; |
Line 4170 sub get_groupslist {
|
Line 4503 sub get_groupslist {
|
} |
} |
|
|
sub setsections_javascript { |
sub setsections_javascript { |
my ($formname,$groupslist,$mode) = @_; |
my ($formname,$groupslist,$mode,$checkauth) = @_; |
my ($checkincluded,$finish,$rolecode,$setsection_js); |
my ($checkincluded,$finish,$rolecode,$setsection_js); |
if ($mode eq 'upload') { |
if ($mode eq 'upload') { |
$checkincluded = 'formname.name == "'.$formname.'"'; |
$checkincluded = 'formname.name == "'.$formname.'"'; |
Line 4178 sub setsections_javascript {
|
Line 4511 sub setsections_javascript {
|
$rolecode = "var role = formname.defaultrole.options[formname.defaultrole.selectedIndex].value;\n"; |
$rolecode = "var role = formname.defaultrole.options[formname.defaultrole.selectedIndex].value;\n"; |
} elsif ($formname eq 'cu') { |
} elsif ($formname eq 'cu') { |
$checkincluded = 'formname.elements[i-1].checked == true'; |
$checkincluded = 'formname.elements[i-1].checked == true'; |
$finish = 'formname.submit()'; |
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('_'); |
$rolecode = "var match = str.split('_'); |
var role = match[3];\n"; |
var role = match[3];\n"; |
} elsif ($formname eq 'enrollstudent') { |
} elsif ($formname eq 'enrollstudent') { |
$checkincluded = 'formname.name == "'.$formname.'"'; |
$checkincluded = 'formname.name == "'.$formname.'"'; |
$finish = 'formname.submit()'; |
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('_'); |
$rolecode = "var match = str.split('_'); |
var role = match[1];\n"; |
var role = match[1];\n"; |
} else { |
} else { |
Line 4329 sub can_modify_userinfo {
|
Line 4676 sub can_modify_userinfo {
|
if (ref($userroles) eq 'ARRAY') { |
if (ref($userroles) eq 'ARRAY') { |
foreach my $role (@{$userroles}) { |
foreach my $role (@{$userroles}) { |
my $testrole; |
my $testrole; |
if ($role =~ /^cr\//) { |
if ($context eq 'selfcreate') { |
$testrole = 'cr'; |
|
} else { |
|
$testrole = $role; |
$testrole = $role; |
|
} else { |
|
if ($role =~ /^cr\//) { |
|
$testrole = 'cr'; |
|
} else { |
|
$testrole = $role; |
|
} |
} |
} |
if (ref($domconfig{'usermodification'}{$context}{$testrole}) eq 'HASH') { |
if (ref($domconfig{'usermodification'}{$context}{$testrole}) eq 'HASH') { |
if ($domconfig{'usermodification'}{$context}{$testrole}{$field}) { |
if ($domconfig{'usermodification'}{$context}{$testrole}{$field}) { |
Line 4478 sub authorpriv {
|
Line 4829 sub authorpriv {
|
} |
} |
|
|
sub roles_on_upload { |
sub roles_on_upload { |
my ($context,%customroles) = @_; |
my ($context,$setting,%customroles) = @_; |
my (@possible_roles,@permitted_roles); |
my (@possible_roles,@permitted_roles); |
if ($context eq 'domain') { |
@possible_roles = &curr_role_permissions($context,$setting,1); |
@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) { |
foreach my $role (@possible_roles) { |
if ($role eq 'cr') { |
if ($role eq 'cr') { |
$custom_ok = 1; |
|
push(@permitted_roles,keys(%customroles)); |
push(@permitted_roles,keys(%customroles)); |
} else { |
} else { |
push(@permitted_roles,$role); |
push(@permitted_roles,$role); |
} |
} |
} |
} |
return ($custom_ok,@permitted_roles); |
return @permitted_roles; |
} |
} |
|
|
sub get_course_identity { |
sub get_course_identity { |
Line 4520 sub get_course_identity {
|
Line 4864 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 4613 SCRIPTTOP
|
Line 4961 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 4636 ENDSCRIPT
|
Line 4986 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 4657 sub sectioncheck_alerts {
|
Line 5067 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; |
|
|