version 1.11, 2007/12/05 21:23:14
|
version 1.24, 2007/12/22 03:38:26
|
Line 46 sub modifystudent {
|
Line 46 sub modifystudent {
|
# 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 |
my $cdom = $env{'course.'.$courseid.'.domain'}; |
my ($cnum,$cdom) = &get_course_identity($courseid); |
my $cnum = $env{'course.'.$courseid.'.num'}; |
|
my %roles = &Apache::lonnet::dump('roles',$udom,$unam); |
my %roles = &Apache::lonnet::dump('roles',$udom,$unam); |
my ($tmp) = keys(%roles); |
my ($tmp) = keys(%roles); |
# Bail out if we were unable to get the students roles |
# Bail out if we were unable to get the students roles |
Line 69 sub modifystudent {
|
Line 68 sub modifystudent {
|
my $reply=&Apache::lonnet::modifystudent |
my $reply=&Apache::lonnet::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); |
$section,time,undef,undef,$desiredhost,'','manual', |
|
'',$courseid); |
$result .= $reply.':'; |
$result .= $reply.':'; |
} |
} |
} |
} |
Line 96 sub modifyuserrole {
|
Line 96 sub modifyuserrole {
|
} |
} |
} elsif ($context eq 'domain') { |
} elsif ($context eq 'domain') { |
$scope = '/'.$env{'request.role.domain'}.'/'; |
$scope = '/'.$env{'request.role.domain'}.'/'; |
} elsif ($context eq 'construction_space') { |
} elsif ($context eq 'author') { |
$scope = '/'.$env{'user.domain'}.'/'.$env{'user.name'}; |
$scope = '/'.$env{'user.domain'}.'/'.$env{'user.name'}; |
} |
} |
if ($context eq 'domain') { |
if ($context eq 'domain') { |
Line 127 sub modifyuserrole {
|
Line 127 sub modifyuserrole {
|
$email,$role,$start,$end); |
$email,$role,$start,$end); |
if ($userresult eq 'ok') { |
if ($userresult eq 'ok') { |
if ($role ne '') { |
if ($role ne '') { |
|
$role =~ s/_/\//g; |
$roleresult = &Apache::lonnet::assignrole($udom,$uname,$scope, |
$roleresult = &Apache::lonnet::assignrole($udom,$uname,$scope, |
$role,$end,$start); |
$role,$end,$start); |
} |
} |
Line 136 sub modifyuserrole {
|
Line 137 sub modifyuserrole {
|
|
|
sub propagate_id_change { |
sub propagate_id_change { |
my ($uname,$udom,$user) = @_; |
my ($uname,$udom,$user) = @_; |
my (@types,@roles,@cdoms); |
my (@types,@roles); |
@types = ('active','future'); |
@types = ('active','future'); |
@roles = ('st'); |
@roles = ('st'); |
my $idresult; |
my $idresult; |
my %roleshash = &Apache::lonnet::get_my_roles($uname, |
my %roleshash = &Apache::lonnet::get_my_roles($uname, |
$udom,'userroles',\@types,\@roles,\@cdoms); |
$udom,'userroles',\@types,\@roles); |
|
my %args = ( |
|
one_time => 1, |
|
); |
foreach my $item (keys(%roleshash)) { |
foreach my $item (keys(%roleshash)) { |
my ($cnum,$cdom,$role) = split(/:/,$item); |
my ($cnum,$cdom,$role) = split(/:/,$item,-1); |
my ($start,$end) = split(/:/,$roleshash{$item}); |
my ($start,$end) = split(/:/,$roleshash{$item}); |
if (&Apache::lonnet::is_course($cdom,$cnum)) { |
if (&Apache::lonnet::is_course($cdom,$cnum)) { |
my %userupdate; |
my $result = &update_classlist($cdom,$cnum,$udom,$uname,$user); |
my $result = &update_classlist($cdom,$cnum,$udom,$uname,\%userupdate); |
my %coursehash = |
|
&Apache::lonnet::coursedescription($cdom.'_'.$cnum,\%args); |
|
my $cdesc = $coursehash{'description'}; |
|
if ($cdesc eq '') { |
|
$cdesc = $cdom.'_'.$cnum; |
|
} |
if ($result eq 'ok') { |
if ($result eq 'ok') { |
$idresult .= "Classlist change: $uname:$udom - class -> $cnum:$cdom\n"; |
$idresult .= &mt('Classlist update for "[_1]" in "[_2]".',$uname.':'.$udom,$cdesc).'<br />'."\n"; |
} else { |
} else { |
$idresult .= "Error - $result -during classlist update for $uname:$udom in $cnum:$cdom\n"; |
$idresult .= &mt('Error: "[_1]" during classlist update for "[_2]" in "[_3]".',$result,$uname.':'.$udom,$cdesc).'<br />'."\n"; |
} |
} |
} |
} |
} |
} |
Line 203 sub domain_roles_select {
|
Line 212 sub domain_roles_select {
|
# domain context |
# domain context |
# |
# |
# Role types |
# Role types |
my @roletypes = ('domain','construction_space','course'); |
my @roletypes = ('domain','author','course'); |
my %lt = &role_type_names(); |
my %lt = &role_type_names(); |
# |
# |
# build up the menu information to be passed to |
# build up the menu information to be passed to |
Line 225 sub domain_roles_select {
|
Line 234 sub domain_roles_select {
|
my @roles; |
my @roles; |
if ($roletype eq 'domain') { |
if ($roletype eq 'domain') { |
@roles = &domain_roles(); |
@roles = &domain_roles(); |
} elsif ($roletype eq 'construction_space') { |
} elsif ($roletype eq 'author') { |
@roles = &construction_space_roles(); |
@roles = &construction_space_roles(); |
} else { |
} else { |
@roles = &course_roles('domain'); |
my $custom = 1; |
unshift(@roles,'cr'); |
@roles = &course_roles('domain',undef,$custom); |
} |
} |
my $order = ['Any',@roles]; |
my $order = ['Any',@roles]; |
$select_menus{$roletype}->{'order'} = $order; |
$select_menus{$roletype}->{'order'} = $order; |
Line 246 sub domain_roles_select {
|
Line 255 sub domain_roles_select {
|
} |
} |
my $result = &Apache::loncommon::linked_select_forms |
my $result = &Apache::loncommon::linked_select_forms |
('studentform',(' 'x3).&mt('Role: '),$env{'form.roletype'}, |
('studentform',(' 'x3).&mt('Role: '),$env{'form.roletype'}, |
'roletype','showrole',\%select_menus,['domain','construction_space','course']); |
'roletype','showrole',\%select_menus,['domain','author','course']); |
return $result; |
return $result; |
} |
} |
|
|
Line 258 sub hidden_input {
|
Line 267 sub hidden_input {
|
} |
} |
|
|
sub print_upload_manager_header { |
sub print_upload_manager_header { |
my ($r,$datatoken,$distotal,$krbdefdom,$context)=@_; |
my ($r,$datatoken,$distotal,$krbdefdom,$context,$permission)=@_; |
my $javascript; |
my $javascript; |
# |
# |
if (! exists($env{'form.upfile_associate'})) { |
if (! exists($env{'form.upfile_associate'})) { |
Line 288 sub print_upload_manager_header {
|
Line 297 sub print_upload_manager_header {
|
$password_choice = 'int'; |
$password_choice = 'int'; |
} |
} |
# |
# |
|
my $groupslist; |
|
if ($context eq 'course') { |
|
$groupslist = &get_groupslist(); |
|
} |
my $javascript_validations = |
my $javascript_validations = |
&javascript_validations('auth',$krbdefdom,$password_choice,undef, |
&javascript_validations('upload',$krbdefdom,$password_choice,undef, |
$env{'request.role.domain'}); |
$env{'request.role.domain'},$context, |
|
$permission,$groupslist); |
my $checked=(($env{'form.noFirstLine'})?' checked="checked" ':''); |
my $checked=(($env{'form.noFirstLine'})?' checked="checked" ':''); |
$r->print(&mt('Total number of records found in file: <b>[_1]</b>.',$distotal). |
$r->print(&mt('Total number of records found in file: <b>[_1]</b>.',$distotal). |
"<br />\n"); |
"<br />\n"); |
Line 317 sub print_upload_manager_header {
|
Line 331 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, |
my $authheader; |
$context,$permission,$groupslist)=@_; |
if ($mode eq 'auth') { |
|
my %param = ( formname => 'studentform', |
my %param = ( |
kerb_def_dom => $krbdefdom, |
|
curr_authtype => $curr_authtype); |
|
$authheader = &Apache::loncommon::authform_header(%param); |
|
} elsif ($mode eq 'createcourse') { |
|
my %param = ( formname => 'ccrs', |
|
kerb_def_dom => $krbdefdom, |
|
curr_authtype => $curr_authtype ); |
|
$authheader = &Apache::loncommon::authform_header(%param); |
|
} elsif ($mode eq 'modifycourse') { |
|
my %param = ( formname => 'cmod', |
|
kerb_def_dom => $krbdefdom, |
kerb_def_dom => $krbdefdom, |
mode => 'modifycourse', |
|
curr_authtype => $curr_authtype, |
curr_authtype => $curr_authtype, |
curr_autharg => $curr_authfield ); |
); |
$authheader = &Apache::loncommon::authform_header(%param); |
if ($mode eq 'createuser') { |
|
$param{'formname'} = 'cu'; |
|
} elsif ($mode eq 'upload') { |
|
$param{'formname'} = 'studentform'; |
|
} elsif ($mode eq 'singlestudent') { |
|
$param{'formname'} = 'cu'; |
|
} elsif ($mode eq 'createcourse') { |
|
$param{'formname'} = 'ccrs'; |
|
} elsif ($mode eq 'modifycourse') { |
|
$param{'formname'} = 'cmod'; |
|
$param{'mode'} = 'modifycourse', |
|
$param{'curr_autharg'} = $curr_authfield; |
} |
} |
|
|
|
my ($setsection_call,$setsections_js); |
|
my $finish = " vf.submit();\n"; |
|
if ($mode eq 'upload') { |
|
if (($context eq 'course') || ($context eq 'domain')) { |
|
if ($context eq 'course') { |
|
if ($env{'request.course.sec'} eq '') { |
|
$setsection_call = 'setSections(document.'.$param{'formname'}.');'; |
|
$setsections_js = |
|
&setsections_javascript($param{'formname'},$groupslist, |
|
$mode); |
|
} else { |
|
$setsection_call = "'ok'"; |
|
} |
|
} elsif ($context eq 'domain') { |
|
$setsection_call = 'setCourse()'; |
|
$setsections_js = &dc_setcourse_js($param{'formname'},$mode); |
|
} |
|
$finish = " var checkSec = $setsection_call\n". |
|
" if (checkSec == 'ok') {\n". |
|
" vf.submit();\n". |
|
" }\n"; |
|
} |
|
} |
|
my $authheader = &Apache::loncommon::authform_header(%param); |
|
|
my %alert = &Apache::lonlocal::texthash |
my %alert = &Apache::lonlocal::texthash |
(username => 'You need to specify the username field.', |
(username => 'You need to specify the username field.', |
authen => 'You must choose an authentication type.', |
authen => 'You must choose an authentication type.', |
Line 351 sub javascript_validations {
|
Line 390 sub javascript_validations {
|
continue => 'Continue adding users?', |
continue => 'Continue adding users?', |
); |
); |
|
|
# my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition(); |
|
my $function_name =(<<END); |
my $function_name =(<<END); |
|
$setsections_js |
|
|
function verify_message (vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail) { |
function verify_message (vf,founduname,foundpwd,foundname,foundid,foundsec,foundemail) { |
END |
END |
my ($authnum,%can_assign) = &Apache::loncommon::get_assignable_auth($domain); |
my ($authnum,%can_assign) = &Apache::loncommon::get_assignable_auth($domain); |
Line 472 END
|
Line 512 END
|
message+= '\\n$alert{'continue'}'; |
message+= '\\n$alert{'continue'}'; |
if (confirm(message)) { |
if (confirm(message)) { |
vf.state.value='enrolling'; |
vf.state.value='enrolling'; |
vf.submit(); |
$finish |
} |
} |
} else { |
} else { |
vf.state.value='enrolling'; |
vf.state.value='enrolling'; |
vf.submit(); |
$finish |
} |
} |
} |
} |
END |
END |
} |
} |
my $result = $function_name; |
my $result = $function_name; |
if ( ($mode eq 'auth') || ($mode eq 'createcourse') || ($mode eq 'modifycourse') ) { |
if ( ($mode eq 'upload') || ($mode eq 'createcourse') || ($mode eq 'modifycourse') ) { |
$result .= $auth_checks; |
$result .= $auth_checks; |
} |
} |
$result .= $optional_checks."\n".$section_checks; |
$result .= $optional_checks."\n".$section_checks; |
if ( ($mode eq 'auth') || ($mode eq 'createcourse') || ($mode eq 'modifycourse') ) { |
if ( ($mode eq 'upload') || ($mode eq 'createcourse') || ($mode eq 'modifycourse') ) { |
$result .= $authheader; |
$result .= $authheader; |
} |
} |
return $result; |
return $result; |
Line 647 ENDPICK
|
Line 687 ENDPICK
|
############################################################### |
############################################################### |
############################################################### |
############################################################### |
sub print_upload_manager_footer { |
sub print_upload_manager_footer { |
my ($r,$i,$keyfields,$defdom,$today,$halfyear,$context)=@_; |
my ($r,$i,$keyfields,$defdom,$today,$halfyear,$context,$permission) = @_; |
my $formname; |
my $form = 'document.studentform'; |
if ($context eq 'course') { |
my $formname = 'studentform'; |
$formname = 'document.studentform'; |
|
} elsif ($context eq 'construction_space') { |
|
$formname = 'document.studentform'; |
|
} elsif ($context eq 'domain') { |
|
$formname = 'document.studentform'; |
|
} |
|
my ($krbdef,$krbdefdom) = |
my ($krbdef,$krbdefdom) = |
&Apache::loncommon::get_kerberos_defaults($defdom); |
&Apache::loncommon::get_kerberos_defaults($defdom); |
my %param = ( formname => $formname, |
my %param = ( formname => $form, |
kerb_def_dom => $krbdefdom, |
kerb_def_dom => $krbdefdom, |
kerb_def_auth => $krbdef |
kerb_def_auth => $krbdef |
); |
); |
Line 670 sub print_upload_manager_footer {
|
Line 704 sub print_upload_manager_footer {
|
my $krbform = &Apache::loncommon::authform_kerberos(%param); |
my $krbform = &Apache::loncommon::authform_kerberos(%param); |
my $intform = &Apache::loncommon::authform_internal(%param); |
my $intform = &Apache::loncommon::authform_internal(%param); |
my $locform = &Apache::loncommon::authform_local(%param); |
my $locform = &Apache::loncommon::authform_local(%param); |
my $date_table = &date_setting_table(undef,undef,$context); |
my $date_table = &date_setting_table(undef,undef,$context,undef, |
|
$formname,$permission); |
my $Str = "\n".'<div class="LC_left_float">'; |
my $Str = "\n".'<div class="LC_left_float">'; |
$Str .= &hidden_input('nfields',$i); |
$Str .= &hidden_input('nfields',$i); |
$Str .= &hidden_input('keyfields',$keyfields); |
$Str .= &hidden_input('keyfields',$keyfields); |
Line 702 sub print_upload_manager_footer {
|
Line 736 sub print_upload_manager_footer {
|
$Str .= '<h3>'.&mt('Settings for assigning roles:').'</h3>'."\n". |
$Str .= '<h3>'.&mt('Settings for assigning roles:').'</h3>'."\n". |
&mt('Pick the action to take on roles for these users:').'<br /><span class="LC_nobreak"><label><input type="radio" name="roleaction" value="norole" checked="checked" /> '.&mt('No role changes').'</label> <label><input type="radio" name="roleaction" value="domain" /> '.&mt('Add a domain role').'</label> <label><input type="radio" name="roleaction" value="course" /> '.&mt('Add a course role').'</label></span>'; |
&mt('Pick the action to take on roles for these users:').'<br /><span class="LC_nobreak"><label><input type="radio" name="roleaction" value="norole" checked="checked" /> '.&mt('No role changes').'</label> <label><input type="radio" name="roleaction" value="domain" /> '.&mt('Add a domain role').'</label> <label><input type="radio" name="roleaction" value="course" /> '.&mt('Add a course role').'</label></span>'; |
} |
} |
if ($context eq 'construction_space') { |
if ($context eq 'author') { |
$Str .= '<h3>'.&mt('Default role')."</h3>\n". |
$Str .= '<h3>'.&mt('Default role')."</h3>\n". |
&mt('Choose the role to assign to users without one specified in the uploaded file'); |
&mt('Choose the role to assign to users without one specified in the uploaded file'); |
} elsif ($context eq 'course') { |
} elsif ($context eq 'course') { |
Line 712 sub print_upload_manager_footer {
|
Line 746 sub print_upload_manager_footer {
|
$Str .= '<br /><br /><b>'.&mt('Default role and/or section')."</b><br />\n". |
$Str .= '<br /><br /><b>'.&mt('Default role and/or section')."</b><br />\n". |
&mt('Role and/or section for users without one in the uploaded file.'); |
&mt('Role and/or section for users without one in the uploaded file.'); |
} |
} |
$Str .= '<br /><br />'; |
$Str .= '<br />'; |
my ($options,$cb_script,$coursepick) = &default_role_selector($context,'defaultrole',1); |
if (($context eq 'domain') || ($context eq 'author')) { |
if ($context eq 'domain') { |
my ($options,$cb_script,$coursepick) = &default_role_selector($context,1); |
$Str .= '<span class="LC_role_level">'.&mt('Domain Level').'</span><br />'.$options.'<br /><br /><span class="LC_role_level">'.&mt('Course Level').'</span><br />'.$cb_script.$coursepick; |
if ($context eq 'domain') { |
} elsif ($context eq 'construction_space') { |
$Str .= '<span class="LC_role_level">'.&mt('Domain Level').'</span><br />'.$options.'<br /><br /><span class="LC_role_level">'.&mt('Course Level').'</span><br />'.$cb_script.$coursepick; |
$Str .= $options; |
} elsif ($context eq 'author') { |
} else { |
$Str .= $options; |
$Str .= '<table><tr><td><span class="LC_nobreak"<b>'.&mt('role').': </b>'. |
} |
$options.'</span></td><td> </td><td><span class="LC_nobreak">'. |
} else { |
'<b>'.&mt('section').': </b><input type="text" name="section" value="" size="12" /></span></td></tr></table>'; |
my ($cnum,$cdom) = &get_course_identity(); |
} |
my $rowtitle = &mt('section'); |
if ($context eq 'course') { |
my $secbox = §ion_picker($cdom,$cnum,'Any',$rowtitle, |
$Str .= "<h3>".&mt('Full Update')."</h3>\n". |
$permission,$context,'upload'); |
'<label><input type="checkbox" name="fullup" value="yes">'. |
$Str .= $secbox."<h3>".&mt('Full Update')."</h3>\n". |
' '.&mt('Full update (also print list of users not enrolled anymore)'). |
'<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.'); |
"</label></p>\n"; |
"</label></p>\n"; |
} |
} |
if ($context eq 'course' || $context eq 'domain') { |
if ($context eq 'course' || $context eq 'domain') { |
Line 755 sub forceid_change {
|
Line 790 sub forceid_change {
|
if ($context eq 'domain') { |
if ($context eq 'domain') { |
$output .= '<label><input type="checkbox" name="recurseid"'. |
$output .= '<label><input type="checkbox" name="recurseid"'. |
' value="yes">'. |
' value="yes">'. |
&mt('Update ID/Student Number in courses in which user is an Active or Future student, (if forcing change).'). |
&mt('Update ID/Student Number in courses in which user is Active/Future student,<br />(if forcing change).'). |
'</label></p>'."\n"; |
'</label></p>'."\n"; |
} |
} |
return $output; |
return $output; |
Line 764 sub forceid_change {
|
Line 799 sub forceid_change {
|
############################################################### |
############################################################### |
############################################################### |
############################################################### |
sub print_upload_manager_form { |
sub print_upload_manager_form { |
my ($r,$context) = @_; |
my ($r,$context,$permission) = @_; |
my $firstLine; |
my $firstLine; |
my $datatoken; |
my $datatoken; |
if (!$env{'form.datatoken'}) { |
if (!$env{'form.datatoken'}) { |
Line 808 sub print_upload_manager_form {
|
Line 843 sub print_upload_manager_form {
|
my ($krbdef,$krbdefdom) = |
my ($krbdef,$krbdefdom) = |
&Apache::loncommon::get_kerberos_defaults($defdom); |
&Apache::loncommon::get_kerberos_defaults($defdom); |
# |
# |
&print_upload_manager_header($r,$datatoken,$distotal,$krbdefdom,$context); |
&print_upload_manager_header($r,$datatoken,$distotal,$krbdefdom,$context, |
|
$permission); |
my $i; |
my $i; |
my $keyfields; |
my $keyfields; |
if ($total>=0) { |
if ($total>=0) { |
Line 842 sub print_upload_manager_form {
|
Line 878 sub print_upload_manager_form {
|
} |
} |
$r->print('</div>'); |
$r->print('</div>'); |
&print_upload_manager_footer($r,$i,$keyfields,$defdom,$today,$halfyear, |
&print_upload_manager_footer($r,$i,$keyfields,$defdom,$today,$halfyear, |
$context); |
$context,$permission); |
} |
} |
|
|
sub setup_date_selectors { |
sub setup_date_selectors { |
my ($starttime,$endtime,$mode,$nolink) = @_; |
my ($starttime,$endtime,$mode,$nolink,$formname) = @_; |
|
if ($formname eq '') { |
|
$formname = 'studentform'; |
|
} |
if (! defined($starttime)) { |
if (! defined($starttime)) { |
$starttime = time; |
$starttime = time; |
unless ($mode eq 'create_enrolldates' || $mode eq 'create_defaultdates') { |
unless ($mode eq 'create_enrolldates' || $mode eq 'create_defaultdates') { |
Line 869 sub setup_date_selectors {
|
Line 908 sub setup_date_selectors {
|
} |
} |
|
|
my $startdateform = |
my $startdateform = |
&Apache::lonhtmlcommon::date_setter('studentform','startdate',$starttime, |
&Apache::lonhtmlcommon::date_setter($formname,'startdate',$starttime, |
undef,undef,undef,undef,undef,undef,undef,$nolink); |
undef,undef,undef,undef,undef,undef,undef,$nolink); |
|
|
my $enddateform = |
my $enddateform = |
&Apache::lonhtmlcommon::date_setter('studentform','enddate',$endtime, |
&Apache::lonhtmlcommon::date_setter($formname,'enddate',$endtime, |
undef,undef,undef,undef,undef,undef,undef,$nolink); |
undef,undef,undef,undef,undef,undef,undef,$nolink); |
|
|
if ($mode eq 'create_enrolldates') { |
if ($mode eq 'create_enrolldates') { |
Line 906 sub get_dates_from_form {
|
Line 945 sub get_dates_from_form {
|
} |
} |
|
|
sub date_setting_table { |
sub date_setting_table { |
my ($starttime,$endtime,$mode,$bulkaction) = @_; |
my ($starttime,$endtime,$mode,$bulkaction,$formname,$permission) = @_; |
my $nolink; |
my $nolink; |
if ($bulkaction) { |
if ($bulkaction) { |
$nolink = 1; |
$nolink = 1; |
} |
} |
my ($startform,$endform) = |
my ($startform,$endform) = |
&setup_date_selectors($starttime,$endtime,$mode,$nolink); |
&setup_date_selectors($starttime,$endtime,$mode,$nolink,$formname); |
my $dateDefault; |
my $dateDefault; |
if ($mode eq 'create_enrolldates' || $mode eq 'create_defaultdates') { |
if ($mode eq 'create_enrolldates' || $mode eq 'create_defaultdates') { |
$dateDefault = ' '; |
$dateDefault = ' '; |
} elsif ($mode ne 'construction_space' && $mode ne 'domain') { |
} elsif ($mode ne 'author' && $mode ne 'domain') { |
if (($bulkaction eq 'reenable') || |
if (($bulkaction eq 'reenable') || |
($bulkaction eq 'activate') || |
($bulkaction eq 'activate') || |
($bulkaction eq 'chgdates')) { |
($bulkaction eq 'chgdates') || |
$dateDefault = '<span class="LC_nobreak">'. |
($env{'form.action'} eq 'upload')) { |
'<label><input type="checkbox" name="makedatesdefault" /> '. |
if ($env{'request.course.sec'} eq '') { |
&mt('make these dates the default for future enrollment'). |
$dateDefault = '<span class="LC_nobreak">'. |
'</label></span>'; |
'<label><input type="checkbox" name="makedatesdefault" /> '. |
|
&mt('make these dates the default access dates for future student enrollment'). |
|
'</label></span>'; |
|
} |
} |
} |
} |
} |
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"'; |
Line 943 sub date_setting_table {
|
Line 985 sub date_setting_table {
|
'LC_oddrow_value')."\n". |
'LC_oddrow_value')."\n". |
$endform.' '.$perpetual. |
$endform.' '.$perpetual. |
&Apache::lonhtmlcommon::row_closure(1). |
&Apache::lonhtmlcommon::row_closure(1). |
&Apache::lonhtmlcommon::end_pick_box().'<br />'; |
&Apache::lonhtmlcommon::end_pick_box(); |
if ($dateDefault) { |
if ($dateDefault) { |
$result .= $dateDefault.'<br />'."\n"; |
$result .= $dateDefault.'<br />'."\n"; |
} |
} |
Line 954 sub make_dates_default {
|
Line 996 sub make_dates_default {
|
my ($startdate,$enddate,$context) = @_; |
my ($startdate,$enddate,$context) = @_; |
my $result = ''; |
my $result = ''; |
if ($context eq 'course') { |
if ($context eq 'course') { |
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my ($cnum,$cdom) = &get_course_identity(); |
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my $put_result = &Apache::lonnet::put('environment', |
my $put_result = &Apache::lonnet::put('environment', |
{'default_enrollment_start_date'=>$startdate, |
{'default_enrollment_start_date'=>$startdate, |
'default_enrollment_end_date' =>$enddate},$dom,$crs); |
'default_enrollment_end_date' =>$enddate},$cdom,$cnum); |
if ($put_result eq 'ok') { |
if ($put_result eq 'ok') { |
$result .= &mt('Set default start and end dates for course'). |
$result .= &mt('Set default start and end dates for course'). |
'<br />'."\n"; |
'<br />'."\n"; |
Line 978 sub default_role_selector {
|
Line 1019 sub default_role_selector {
|
my ($context,$checkpriv) = @_; |
my ($context,$checkpriv) = @_; |
my %customroles; |
my %customroles; |
my ($options,$coursepick,$cb_jscript); |
my ($options,$coursepick,$cb_jscript); |
if ($context ne 'construction_space') { |
if ($context ne 'author') { |
%customroles = &my_custom_roles(); |
%customroles = &my_custom_roles(); |
} |
} |
|
|
Line 992 sub default_role_selector {
|
Line 1033 sub default_role_selector {
|
' <option value="">'.&mt('Please select').'</option>'."\n"; |
' <option value="">'.&mt('Please select').'</option>'."\n"; |
if ($context eq 'course') { |
if ($context eq 'course') { |
$options .= &default_course_roles($context,$checkpriv,%customroles); |
$options .= &default_course_roles($context,$checkpriv,%customroles); |
} elsif ($context eq 'construction_space') { |
} elsif ($context eq 'author') { |
my @roles = &construction_space_roles($checkpriv); |
my @roles = &construction_space_roles($checkpriv); |
foreach my $role (@roles) { |
foreach my $role (@roles) { |
my $plrole=&Apache::lonnet::plaintext($role); |
my $plrole=&Apache::lonnet::plaintext($role); |
Line 1005 sub default_role_selector {
|
Line 1046 sub default_role_selector {
|
$options .= ' <option value="'.$role.'">'.$plrole.'</option>'; |
$options .= ' <option value="'.$role.'">'.$plrole.'</option>'; |
} |
} |
my $courseform = &Apache::loncommon::selectcourse_link |
my $courseform = &Apache::loncommon::selectcourse_link |
('studentform','defaultcourse','defaultdomain','defaultdesc',"$env{'request.role.domain'}",undef,'Course'); |
('studentform','dccourse','dcdomain','coursedesc',"$env{'request.role.domain'}",undef,'Course'); |
$cb_jscript = |
$cb_jscript = |
&Apache::loncommon::coursebrowser_javascript($env{'request.role.domain'},'defaultsec','studentform'); |
&Apache::loncommon::coursebrowser_javascript($env{'request.role.domain'},'currsec','studentform'); |
$coursepick = &Apache::loncommon::start_data_table(). |
$coursepick = &Apache::loncommon::start_data_table(). |
&Apache::loncommon::start_data_table_header_row(). |
&Apache::loncommon::start_data_table_header_row(). |
'<th>'.$courseform.'</th><th>'.$lt{'rol'}.'</th>'. |
'<th>'.$courseform.'</th><th>'.$lt{'rol'}.'</th>'. |
'<th>'.$lt{'grs'}.'</th>'. |
'<th>'.$lt{'grs'}.'</th>'. |
&Apache::loncommon::end_data_table_header_row(). |
&Apache::loncommon::end_data_table_header_row(). |
&Apache::loncommon::start_data_table_row()."\n". |
&Apache::loncommon::start_data_table_row()."\n". |
'<td><input type="text" name="defaultdesc" value="" onFocus="this.blur();opencrsbrowser('."'studentform','defcourse','defdomain','coursedesc',''".')" /></td>'."\n". |
'<td><input type="text" name="coursedesc" value="" onFocus="this.blur();opencrsbrowser('."'studentform','dccourse','dcdomain','coursedesc',''".')" /></td>'."\n". |
'<td><select name="courserole">'."\n". |
'<td><select name="courserole">'."\n". |
&default_course_roles($context,$checkpriv,%customroles)."\n". |
&default_course_roles($context,$checkpriv,%customroles)."\n". |
'</select></td><td>'. |
'</select></td><td>'. |
'<table class="LC_createuser">'. |
'<table class="LC_createuser">'. |
'<tr class="LC_section_row"><td valign"top">'. |
'<tr class="LC_section_row"><td valign"top">'. |
$lt{'exs'}.'<br /><select name="defaultsec">'. |
$lt{'exs'}.'<br /><select name="currsec">'. |
' <option value=""><--'.&mt('Pick course first'). |
' <option value=""><--'.&mt('Pick course first'). |
'</select></td>'. |
'</select></td>'. |
'<td> </td>'. |
'<td> </td>'. |
'<td valign="top">'.$lt{'new'}.'<br />'. |
'<td valign="top">'.$lt{'new'}.'<br />'. |
'<input type="text" name="newsec" value="" size="5" />'. |
'<input type="text" name="newsec" value="" size="5" />'. |
'<input type="hidden" name="groups" value="" /></td>'. |
'<input type="hidden" name="groups" value="" />'. |
'</tr></table></td>'. |
'<input type="hidden" name="sections" value="" />'. |
|
'<input type="hidden" name="origdom" value="'. |
|
$env{'request.role.domain'}.'" />'. |
|
'<input type="hidden" name="dccourse" value="" />'. |
|
'<input type="hidden" name="dcdomain" value="" />'. |
|
'</td></tr></table></td>'. |
&Apache::loncommon::end_data_table_row(). |
&Apache::loncommon::end_data_table_row(). |
&Apache::loncommon::end_data_table()."\n". |
&Apache::loncommon::end_data_table()."\n"; |
'<input type="hidden" name="defaultcourse" value="" />'. |
|
'<input type="hidden" name="defaultdomain" value="" />'; |
|
} |
} |
$options .= '</select>'; |
$options .= '</select>'; |
return ($options,$cb_jscript,$coursepick); |
return ($options,$cb_jscript,$coursepick); |
Line 1040 sub default_role_selector {
|
Line 1084 sub default_role_selector {
|
sub default_course_roles { |
sub default_course_roles { |
my ($context,$checkpriv,%customroles) = @_; |
my ($context,$checkpriv,%customroles) = @_; |
my $output; |
my $output; |
my @roles = &course_roles($context,$checkpriv); |
my $custom = 1; |
|
my @roles = &course_roles($context,$checkpriv,$custom); |
foreach my $role (@roles) { |
foreach my $role (@roles) { |
my $plrole=&Apache::lonnet::plaintext($role); |
if ($role ne 'cr') { |
$output .= ' <option value="'.$role.'">'.$plrole.'</option>'; |
my $plrole=&Apache::lonnet::plaintext($role); |
|
$output .= ' <option value="'.$role.'">'.$plrole.'</option>'; |
|
} |
} |
} |
if (keys(%customroles) > 0) { |
if (keys(%customroles) > 0) { |
my %customroles = &my_custom_roles(); |
if (grep(/^cr$/,@roles)) { |
foreach my $cust (sort(keys(%customroles))) { |
foreach my $cust (sort(keys(%customroles))) { |
my $custrole='cr_cr_'.$env{'user.domain'}. |
my $custrole='cr_'.$env{'user.domain'}. |
'_'.$env{'user.name'}.'_'.$cust; |
'_'.$env{'user.name'}.'_'.$cust; |
$output .= ' <option value="'.$custrole.'">'.$cust.'</option>'; |
$output .= ' <option value="'.$custrole.'">'.$cust.'</option>'; |
|
} |
} |
} |
} |
} |
return $output; |
return $output; |
Line 1058 sub default_course_roles {
|
Line 1106 sub default_course_roles {
|
|
|
sub construction_space_roles { |
sub construction_space_roles { |
my ($checkpriv) = @_; |
my ($checkpriv) = @_; |
my @allroles = ('ca','aa'); |
my @allroles = &roles_by_context('author'); |
my @roles; |
my @roles; |
if ($checkpriv) { |
if ($checkpriv) { |
foreach my $role (@allroles) { |
foreach my $role (@allroles) { |
Line 1074 sub construction_space_roles {
|
Line 1122 sub construction_space_roles {
|
|
|
sub domain_roles { |
sub domain_roles { |
my ($checkpriv) = @_; |
my ($checkpriv) = @_; |
my @allroles = ('dc','li','dg','au','sc'); |
my @allroles = &roles_by_context('domain'); |
my @roles; |
my @roles; |
if ($checkpriv) { |
if ($checkpriv) { |
foreach my $role (@allroles) { |
foreach my $role (@allroles) { |
Line 1089 sub domain_roles {
|
Line 1137 sub domain_roles {
|
} |
} |
|
|
sub course_roles { |
sub course_roles { |
my ($context,$checkpriv) = @_; |
my ($context,$checkpriv,$custom) = @_; |
my @allroles = ('st','ta','ep','in','cc'); |
my @allroles = &roles_by_context('course',$custom); |
my @roles; |
my @roles; |
if ($context eq 'domain') { |
if ($context eq 'domain') { |
@roles = @allroles; |
@roles = @allroles; |
Line 1101 sub course_roles {
|
Line 1149 sub course_roles {
|
if (&Apache::lonnet::allowed('c'.$role,$env{'request.course.id'})) { |
if (&Apache::lonnet::allowed('c'.$role,$env{'request.course.id'})) { |
push(@roles,$role); |
push(@roles,$role); |
} else { |
} else { |
if ($role ne 'cc' && $env{'request.course.section'} ne '') { |
if ($role ne 'cc' && $env{'request.course.sec'} ne '') { |
if (!&Apache::lonnet::allowed('c'.$role, |
if (&Apache::lonnet::allowed('c'.$role, |
$env{'request.course.id'}.'/'. |
$env{'request.course.id'}.'/'. |
$env{'request.course.section'})) { |
$env{'request.course.sec'})) { |
push(@roles,$role); |
push(@roles,$role); |
} |
} |
} |
} |
Line 1120 sub course_roles {
|
Line 1168 sub course_roles {
|
|
|
sub curr_role_permissions { |
sub curr_role_permissions { |
my ($context,$setting,$checkpriv) = @_; |
my ($context,$setting,$checkpriv) = @_; |
|
my $custom = 1; |
my @roles; |
my @roles; |
if ($context eq 'construction_space') { |
if ($context eq 'author') { |
@roles = &construction_space_roles($checkpriv); |
@roles = &construction_space_roles($checkpriv); |
} elsif ($context eq 'domain') { |
} elsif ($context eq 'domain') { |
if ($setting eq 'course') { |
if ($setting eq 'course') { |
@roles = &course_roles($context,$checkpriv); |
@roles = &course_roles($context,$checkpriv,$custom); |
} else { |
} else { |
@roles = &domain_roles($checkpriv); |
@roles = &domain_roles($checkpriv); |
} |
} |
} elsif ($context eq 'course') { |
} elsif ($context eq 'course') { |
@roles = &course_roles($context,$checkpriv); |
@roles = &course_roles($context,$checkpriv,$custom); |
} |
} |
return @roles; |
return @roles; |
} |
} |
Line 1162 sub print_userlist {
|
Line 1211 sub print_userlist {
|
($env{'form.Status'}); |
($env{'form.Status'}); |
|
|
if ($env{'form.showrole'} eq '') { |
if ($env{'form.showrole'} eq '') { |
$env{'form.showrole'} = 'Any'; |
if ($context eq 'course') { |
|
$env{'form.showrole'} = 'st'; |
|
} else { |
|
$env{'form.showrole'} = 'Any'; |
|
} |
} |
} |
if (! defined($env{'form.output'}) || |
if (! defined($env{'form.output'}) || |
$env{'form.output'} !~ /^(csv|excel|html)$/ ) { |
$env{'form.output'} !~ /^(csv|excel|html)$/ ) { |
Line 1224 sub print_userlist {
|
Line 1277 sub print_userlist {
|
if ($role eq $env{'form.showrole'}) { |
if ($role eq $env{'form.showrole'}) { |
$roleselected = ' selected="selected" '; |
$roleselected = ' selected="selected" '; |
} |
} |
my $plrole=&Apache::lonnet::plaintext($role); |
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 .= '<option value="'.$role.'"'.$roleselected.'>'.$plrole.'</option>'; |
} |
} |
$roleselected = ''; |
$role_select .= '</select>'; |
if ($env{'form.showrole'} eq 'cr') { |
|
$roleselected = ' selected="selected" '; |
|
} |
|
$role_select .= '<option value="cr"'.$roleselected.'>'.&mt('Custom role').'</option>'. |
|
'</select>'; |
|
$r->print('<label>'.&mt('Role: [_1]',$role_select).'</label>'); |
$r->print('<label>'.&mt('Role: [_1]',$role_select).'</label>'); |
} |
} |
if (!(($context eq 'domain') && ($env{'form.roletype'} eq 'course'))) { |
if (!(($context eq 'domain') && ($env{'form.roletype'} eq 'course'))) { |
Line 1263 sub print_userlist {
|
Line 1316 sub print_userlist {
|
if ($context eq 'course') { |
if ($context eq 'course') { |
my $classlist = &Apache::loncoursedata::get_classlist(); |
my $classlist = &Apache::loncoursedata::get_classlist(); |
my $secidx = &Apache::loncoursedata::CL_SECTION(); |
my $secidx = &Apache::loncoursedata::CL_SECTION(); |
|
my $viewablesec = &viewable_section($permission); |
foreach my $student (keys(%{$classlist})) { |
foreach my $student (keys(%{$classlist})) { |
if (exists($permission->{'view_section'})) { |
my $section = $classlist->{$student}[$secidx]; |
if ($classlist->{$student}[$secidx] ne $permission->{'view_section'}) { |
if ($viewablesec ne '') { |
|
if ($section ne $viewablesec) { |
next; |
next; |
} else { |
} else { |
$userlist{$student} = $classlist->{$student}; |
$userlist{$student} = $classlist->{$student}; |
Line 1274 sub print_userlist {
|
Line 1329 sub print_userlist {
|
$userlist{$student} = $classlist->{$student}; |
$userlist{$student} = $classlist->{$student}; |
} |
} |
} |
} |
my $cid =$env{'request.course.id'}; |
my $cid = $env{'request.course.id'}; |
my $cdom=$env{'course.'.$cid.'.domain'}; |
my ($cnum,$cdom) = &get_course_identity($cid); |
my $cnum=$env{'course.'.$cid.'.num'}; |
|
my $showroles; |
my $showroles; |
if ($env{'form.showrole'} ne 'Any') { |
if ($env{'form.showrole'} ne 'Any') { |
$showroles = [$env{'form.showrole'}]; |
$showroles = [$env{'form.showrole'}]; |
} else { |
} else { |
$showroles = undef; |
$showroles = undef; |
} |
} |
|
my $withsec = 1; |
my %advrolehash = &Apache::lonnet::get_my_roles($cnum,$cdom,undef, |
my %advrolehash = &Apache::lonnet::get_my_roles($cnum,$cdom,undef, |
\@statuses,$showroles); |
\@statuses,$showroles,undef,$withsec); |
&gather_userinfo($context,$format,\%userlist,$indexhash,\%userinfo, |
&gather_userinfo($context,$format,\%userlist,$indexhash,\%userinfo, |
\%advrolehash,$permission); |
\%advrolehash,$permission); |
} else { |
} else { |
my (%cstr_roles,%dom_roles); |
my (%cstr_roles,%dom_roles); |
if ($context eq 'construction_space') { |
if ($context eq 'author') { |
# List co-authors and assistant co-authors |
# List co-authors and assistant co-authors |
my @possroles = ('ca','aa'); |
my @possroles = &roles_by_context($context); |
%cstr_roles = &Apache::lonnet::get_my_roles(undef,undef,undef, |
%cstr_roles = &Apache::lonnet::get_my_roles(undef,undef,undef, |
\@statuses,\@possroles); |
\@statuses,\@possroles); |
&gather_userinfo($context,$format,\%userlist,$indexhash,\%userinfo, |
&gather_userinfo($context,$format,\%userlist,$indexhash,\%userinfo, |
Line 1305 sub print_userlist {
|
Line 1360 sub print_userlist {
|
\%userinfo,$dom_roles{$key},$permission); |
\%userinfo,$dom_roles{$key},$permission); |
} |
} |
} |
} |
} elsif ($env{'form.roletype'} eq 'construction_space') { |
} elsif ($env{'form.roletype'} eq 'author') { |
my %dom_roles = &Apache::lonnet::get_domain_roles($env{'request.role.domain'},['au']); |
my %dom_roles = &Apache::lonnet::get_domain_roles($env{'request.role.domain'},['au']); |
my %coauthors; |
my %coauthors; |
foreach my $key (keys(%dom_roles)) { |
foreach my $key (keys(%dom_roles)) { |
Line 1316 sub print_userlist {
|
Line 1371 sub print_userlist {
|
} else { |
} else { |
my @possroles; |
my @possroles; |
if ($env{'form.showrole'} eq 'Any') { |
if ($env{'form.showrole'} eq 'Any') { |
@possroles = ('ca','aa'); |
@possroles = &roles_by_context('author'); |
} else { |
} else { |
@possroles = ($env{'form.showrole'}); |
@possroles = ($env{'form.showrole'}); |
} |
} |
foreach my $author (sort(keys(%{$dom_roles{$key}}))) { |
foreach my $author (sort(keys(%{$dom_roles{$key}}))) { |
my ($role,$authorname,$authordom) = split(/:/,$author); |
my ($role,$authorname,$authordom) = split(/:/,$author,-1); |
my $extent = '/'.$authordom.'/'.$authorname; |
my $extent = '/'.$authordom.'/'.$authorname; |
%{$coauthors{$extent}} = |
%{$coauthors{$extent}} = |
&Apache::lonnet::get_my_roles($authorname, |
&Apache::lonnet::get_my_roles($authorname, |
Line 1337 sub print_userlist {
|
Line 1392 sub print_userlist {
|
my %courses = &process_coursepick(); |
my %courses = &process_coursepick(); |
my %allusers; |
my %allusers; |
foreach my $cid (keys(%courses)) { |
foreach my $cid (keys(%courses)) { |
my %coursehash = |
my ($cnum,$cdom,$cdesc) = &get_course_identity($cid); |
&Apache::lonnet::coursedescription($cid,{'one_time' => 1}); |
|
my $cdom = $coursehash{'domain'}; |
|
my $cnum = $coursehash{'num'}; |
|
next if ($cnum eq '' || $cdom eq ''); |
next if ($cnum eq '' || $cdom eq ''); |
my $cdesc = $coursehash{'description'}; |
my $custom = 1; |
my (@roles,@sections,%access,%users,%userdata, |
my (@roles,@sections,%access,%users,%userdata, |
%statushash); |
%statushash); |
if ($env{'form.showrole'} eq 'Any') { |
if ($env{'form.showrole'} eq 'Any') { |
@roles = &course_roles($context); |
@roles = &course_roles($context,undef,$custom); |
unshift(@roles,'cr'); |
|
} else { |
} else { |
@roles = ($env{'form.showrole'}); |
@roles = ($env{'form.showrole'}); |
} |
} |
Line 1384 sub print_userlist {
|
Line 1435 sub print_userlist {
|
} |
} |
} |
} |
if (keys(%userlist) == 0) { |
if (keys(%userlist) == 0) { |
if ($context eq 'construction_space') { |
if ($context eq 'author') { |
$r->print(&mt('There are no co-authors to display.')."\n"); |
$r->print(&mt('There are no co-authors to display.')."\n"); |
} elsif ($context eq 'domain') { |
} elsif ($context eq 'domain') { |
if ($env{'form.roletype'} eq 'domain') { |
if ($env{'form.roletype'} eq 'domain') { |
$r->print(&mt('There are no users with domain roles to display.')."\n"); |
$r->print(&mt('There are no users with domain roles to display.')."\n"); |
} elsif ($env{'form.roletype'} eq 'construction_space') { |
} elsif ($env{'form.roletype'} eq 'author') { |
$r->print(&mt('There are no authors or co-authors to display.')."\n"); |
$r->print(&mt('There are no authors or co-authors to display.')."\n"); |
} elsif ($env{'form.roletype'} eq 'course') { |
} elsif ($env{'form.roletype'} eq 'course') { |
$r->print(&mt('There are no course users to display')."\n"); |
$r->print(&mt('There are no course users to display')."\n"); |
Line 1423 sub list_submit_button {
|
Line 1474 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) = @_; |
foreach my $item (keys(%{$rolehash})) { |
foreach my $item (keys(%{$rolehash})) { |
@{$userlist->{$item}} = (); |
|
my %userdata; |
my %userdata; |
if ($context eq 'construction_space' || $context eq 'course') { |
if ($context eq 'author') { |
($userdata{'username'},$userdata{'domain'},$userdata{'role'}) = |
($userdata{'username'},$userdata{'domain'},$userdata{'role'}) = |
split(/:/,$item); |
split(/:/,$item); |
($userdata{'start'},$userdata{'end'})=split(/:/,$rolehash->{$item}); |
($userdata{'start'},$userdata{'end'})=split(/:/,$rolehash->{$item}); |
&build_user_record(\%userdata,$userinfo,$indexhash,$item,$userlist); |
&build_user_record($context,\%userdata,$userinfo,$indexhash, |
|
$item,$userlist); |
|
} elsif ($context eq 'course') { |
|
my $viewablesec = &viewable_section($permission); |
|
($userdata{'username'},$userdata{'domain'},$userdata{'role'}, |
|
$userdata{'section'}) = split(/:/,$item,-1); |
|
($userdata{'start'},$userdata{'end'})=split(/:/,$rolehash->{$item}); |
|
if (($viewablesec ne '') && ($userdata{'section'} ne '')) { |
|
next if ($viewablesec ne $userdata{'section'}); |
|
} |
|
&build_user_record($context,\%userdata,$userinfo,$indexhash, |
|
$item,$userlist); |
} elsif ($context eq 'domain') { |
} elsif ($context eq 'domain') { |
if ($env{'form.roletype'} eq 'domain') { |
if ($env{'form.roletype'} eq 'domain') { |
($userdata{'role'},$userdata{'username'},$userdata{'domain'}) = |
($userdata{'role'},$userdata{'username'},$userdata{'domain'}) = |
split(/:/,$item); |
split(/:/,$item); |
($userdata{'end'},$userdata{'start'})=split(/:/,$rolehash->{$item}); |
($userdata{'end'},$userdata{'start'})=split(/:/,$rolehash->{$item}); |
&build_user_record(\%userdata,$userinfo,$indexhash,$item,$userlist); |
&build_user_record($context,\%userdata,$userinfo,$indexhash, |
} elsif ($env{'form.roletype'} eq 'construction_space') { |
$item,$userlist); |
|
} elsif ($env{'form.roletype'} eq 'author') { |
if (ref($rolehash->{$item}) eq 'HASH') { |
if (ref($rolehash->{$item}) eq 'HASH') { |
$userdata{'extent'} = $item; |
$userdata{'extent'} = $item; |
foreach my $key (keys(%{$rolehash->{$item}})) { |
foreach my $key (keys(%{$rolehash->{$item}})) { |
Line 1444 sub gather_userinfo {
|
Line 1506 sub gather_userinfo {
|
($userdata{'start'},$userdata{'end'}) = |
($userdata{'start'},$userdata{'end'}) = |
split(/:/,$rolehash->{$item}{$key}); |
split(/:/,$rolehash->{$item}{$key}); |
my $uniqid = $key.':'.$item; |
my $uniqid = $key.':'.$item; |
&build_user_record(\%userdata,$userinfo,$indexhash,$uniqid,$userlist); |
&build_user_record($context,\%userdata,$userinfo,$indexhash, |
|
$uniqid,$userlist); |
} |
} |
} |
} |
} elsif ($env{'form.roletype'} eq 'course') { |
} elsif ($env{'form.roletype'} eq 'course') { |
Line 1459 sub gather_userinfo {
|
Line 1522 sub gather_userinfo {
|
my $space = ', '; |
my $space = ', '; |
if ($format eq 'html' || $format eq 'view') { |
if ($format eq 'html' || $format eq 'view') { |
$spanstart = '<span class="LC_nobreak">'; |
$spanstart = '<span class="LC_nobreak">'; |
if ($permission->{'cusr'}) { |
# FIXME: actions on courses disabled for now |
if ($numcids > 1) { |
# if ($permission->{'cusr'}) { |
$spanstart .= '<input type="radio" name="'.$item.'" value="'.$cid.'" />'; |
# if ($numcids > 1) { |
} else { |
# $spanstart .= '<input type="radio" name="'.$item.'" value="'.$cid.'" />'; |
$spanstart .= '<input type="hidden" name="'.$item.'" value="'.$cid.'" />'; |
# } else { |
} |
# $spanstart .= '<input type="hidden" name="'.$item.'" value="'.$cid.'" />'; |
} |
# } |
|
# } |
$spanend = '</span><br />'; |
$spanend = '</span><br />'; |
$space = ', '; |
$space = ', '; |
} |
} |
Line 1479 sub gather_userinfo {
|
Line 1543 sub gather_userinfo {
|
} |
} |
} |
} |
} |
} |
&build_user_record(\%userdata,$userinfo,$indexhash,$item,$userlist); |
&build_user_record($context,\%userdata,$userinfo,$indexhash, |
|
$item,$userlist); |
} |
} |
} |
} |
} |
} |
Line 1487 sub gather_userinfo {
|
Line 1552 sub gather_userinfo {
|
} |
} |
|
|
sub build_user_record { |
sub build_user_record { |
my ($userdata,$userinfo,$indexhash,$record_key,$userlist) = @_; |
my ($context,$userdata,$userinfo,$indexhash,$record_key,$userlist) = @_; |
next if ($userdata->{'start'} eq '-1' && $userdata->{'end'} eq '-1'); |
next if ($userdata->{'start'} eq '-1' && $userdata->{'end'} eq '-1'); |
&process_date_info($userdata); |
if (!(($context eq 'domain') && ($env{'form.roletype'} eq 'course'))) { |
|
&process_date_info($userdata); |
|
} |
my $username = $userdata->{'username'}; |
my $username = $userdata->{'username'}; |
my $domain = $userdata->{'domain'}; |
my $domain = $userdata->{'domain'}; |
if (ref($userinfo->{$username.':'.$domain}) eq 'HASH') { |
if (ref($userinfo->{$username.':'.$domain}) eq 'HASH') { |
$userdata->{'fullname'} = |
$userdata->{'fullname'} = $userinfo->{$username.':'.$domain}{'fullname'}; |
$userinfo->{$username.':'.$domain}{'fullname'}; |
|
$userdata->{'id'} = $userinfo->{$username.':'.$domain}{'id'}; |
$userdata->{'id'} = $userinfo->{$username.':'.$domain}{'id'}; |
} else { |
} else { |
&aggregate_user_info($domain,$username,$userinfo); |
&aggregate_user_info($domain,$username,$userinfo); |
Line 1744 sub show_users_list {
|
Line 1810 sub show_users_list {
|
if (!grep(/^\Q$sortby\E$/,@sortable)) { |
if (!grep(/^\Q$sortby\E$/,@sortable)) { |
$sortby = 'username'; |
$sortby = 'username'; |
} |
} |
my $setting = $env{'form.roleaction'}; |
my $setting = $env{'form.roletype'}; |
my ($cid,$cdom,$cnum,$classgroups,$displayphotos,$displayclickers); |
my ($cid,$cdom,$cnum,$classgroups,$displayphotos,$displayclickers); |
if ($context eq 'course') { |
if ($context eq 'course') { |
$cid=$env{'request.course.id'}; |
$cid = $env{'request.course.id'}; |
$cdom = $env{'course.'.$cid.'.domain'}; |
($cnum,$cdom) = &get_course_identity($cid); |
$cnum = $env{'course.'.$cid.'.num'}; |
|
($classgroups) = &Apache::loncoursedata::get_group_memberships( |
($classgroups) = &Apache::loncoursedata::get_group_memberships( |
$userlist,$keylist,$cdom,$cnum); |
$userlist,$keylist,$cdom,$cnum); |
if (! exists($env{'form.displayphotos'})) { |
if ($mode eq 'autoenroll') { |
$env{'form.displayphotos'} = 'off'; |
$env{'form.showrole'} = 'st'; |
} |
} else { |
$displayphotos = $env{'form.displayphotos'}; |
if (! exists($env{'form.displayphotos'})) { |
if (! exists($env{'form.displayclickers'})) { |
$env{'form.displayphotos'} = 'off'; |
$env{'form.displayclickers'} = 'off'; |
} |
} |
$displayphotos = $env{'form.displayphotos'}; |
$displayclickers = $env{'form.displayclickers'}; |
if (! exists($env{'form.displayclickers'})) { |
if ($env{'course.'.$cid.'.internal.showphoto'}) { |
$env{'form.displayclickers'} = 'off'; |
$r->print(' |
} |
|
$displayclickers = $env{'form.displayclickers'}; |
|
if ($env{'course.'.$cid.'.internal.showphoto'}) { |
|
$r->print(' |
<script type="text/javascript"> |
<script type="text/javascript"> |
function photowindow(photolink) { |
function photowindow(photolink) { |
var title = "Photo_Viewer"; |
var title = "Photo_Viewer"; |
Line 1771 function photowindow(photolink) {
|
Line 1839 function photowindow(photolink) {
|
stdeditbrowser.focus(); |
stdeditbrowser.focus(); |
} |
} |
</script> |
</script> |
'); |
'); |
} |
} |
$r->print(<<END); |
$r->print(<<END); |
<input type="hidden" name="displayphotos" value="$displayphotos" /> |
<input type="hidden" name="displayphotos" value="$displayphotos" /> |
<input type="hidden" name="displayclickers" value="$displayclickers" /> |
<input type="hidden" name="displayclickers" value="$displayclickers" /> |
END |
END |
|
} |
} |
} |
unless ($mode eq 'autoenroll') { |
if ($mode ne 'autoenroll') { |
my $check_uncheck_js = &Apache::loncommon::check_uncheck_jscript(); |
my $check_uncheck_js = &Apache::loncommon::check_uncheck_jscript(); |
my $alert = &mt("You must select at least one user by checking a user's 'Select' checkbox"); |
my $alert = &mt("You must select at least one user by checking a user's 'Select' checkbox"); |
my $singconfirm = &mt(' for a single user'); |
my $singconfirm = &mt(' for a single user'); |
Line 1875 END
|
Line 1944 END
|
); |
); |
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 'construction_space') { |
} elsif ($context eq 'author') { |
$lt{'extent'} = &mt('Author'); |
$lt{'extent'} = &mt('Author'); |
} |
} |
my @cols = ('username','domain','id','fullname'); |
my @cols = ('username','domain','id','fullname'); |
Line 1888 END
|
Line 1957 END
|
if ($env{'form.showrole'} eq 'Any' || $env{'form.showrole'} eq 'cr') { |
if ($env{'form.showrole'} eq 'Any' || $env{'form.showrole'} eq 'cr') { |
push(@cols,'role'); |
push(@cols,'role'); |
} |
} |
if ($context eq 'domain' && ($env{'form.roletype'} eq 'construction_space' || |
if ($context eq 'domain' && ($env{'form.roletype'} eq 'author' || |
$env{'form.roletype'} eq 'course')) { |
$env{'form.roletype'} eq 'course')) { |
push (@cols,'extent'); |
push (@cols,'extent'); |
} |
} |
Line 1907 END
|
Line 1976 END
|
} elsif ($env{'form.showrole'} ne 'Any') { |
} elsif ($env{'form.showrole'} ne 'Any') { |
$rolefilter = &Apache::lonnet::plaintext($env{'form.showrole'}); |
$rolefilter = &Apache::lonnet::plaintext($env{'form.showrole'}); |
} |
} |
my $results_description = &results_header_row($rolefilter,$statusmode, |
my $results_description; |
$context); |
if ($mode ne 'autoenroll') { |
$r->print('<b>'.$results_description.'</b><br />'); |
$results_description = &results_header_row($rolefilter,$statusmode, |
|
$context,$permission,$mode); |
|
$r->print('<b>'.$results_description.'</b><br />'); |
|
} |
my ($output,$actionselect); |
my ($output,$actionselect); |
if ($mode eq 'html' || $mode eq 'view') { |
if ($mode eq 'html' || $mode eq 'view' || $mode eq 'autoenroll') { |
if ($permission->{'cusr'}) { |
if ($mode ne 'autoenroll') { |
$actionselect = &select_actions($context,$setting,$statusmode); |
if ($permission->{'cusr'}) { |
} |
$actionselect = &select_actions($context,$setting,$statusmode); |
$r->print(<<END); |
} |
|
$r->print(<<END); |
<input type="hidden" name="srchby" value="uname" /> |
<input type="hidden" name="srchby" value="uname" /> |
<input type="hidden" name="srchin" value="dom" /> |
<input type="hidden" name="srchin" value="dom" /> |
<input type="hidden" name="srchtype" value="exact" /> |
<input type="hidden" name="srchtype" value="exact" /> |
<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 |
if ($mode ne 'autoenroll') { |
$output = '<p>'; |
$output = '<p>'; |
my @linkdests = ('aboutme'); |
my @linkdests = ('aboutme'); |
if ($permission->{'cusr'}) { |
if ($permission->{'cusr'}) { |
push (@linkdests,'modify'); |
push (@linkdests,'modify'); |
$output .= '<span class="LC_nobreak">'.$lt{'link'}.': '; |
$output .= '<span class="LC_nobreak">'.$lt{'link'}.': '; |
my $usernamelink = $env{'form.usernamelink'}; |
my $usernamelink = $env{'form.usernamelink'}; |
if ($usernamelink eq '') { |
if ($usernamelink eq '') { |
$usernamelink = 'aboutme'; |
$usernamelink = 'aboutme'; |
} |
} |
foreach my $item (@linkdests) { |
foreach my $item (@linkdests) { |
my $checkedstr = ''; |
my $checkedstr = ''; |
if ($item eq $usernamelink) { |
if ($item eq $usernamelink) { |
$checkedstr = ' checked="checked" '; |
$checkedstr = ' checked="checked" '; |
} |
} |
$output .= '<label><input type="radio" name="usernamelink" value="'.$item.'"'.$checkedstr.'> '.$lt{$item}.'</label> '; |
$output .= '<label><input type="radio" name="usernamelink" value="'.$item.'"'.$checkedstr.'> '.$lt{$item}.'</label> '; |
} |
} |
$output .= '</span><br />'; |
$output .= '</span><br />'; |
} else { |
} else { |
$output .= &mt("Click on a username to view the user's personal page.").'<br />'; |
$output .= &mt("Click on a username to view the user's personal page.").'<br />'; |
} |
} |
if ($actionselect) { |
if ($actionselect) { |
$output .= <<"END"; |
$output .= <<"END"; |
|
$lt{'ac'}: $actionselect <input type="button" value="$lt{'pr'}" onclick="javascript:verify_action(document.studentform.actionlist)" /></p> |
$lt{'ac'}: $actionselect <input type="button" value="$lt{'pr'}" onclick="javascript:verify_action(document.studentform.actionlist)" /></p> |
<p><input type="button" value="$lt{'ca'}" onclick="javascript:checkAll(document.studentform.actionlist)" /> |
<p><input type="button" value="$lt{'ca'}" onclick="javascript:checkAll(document.studentform.actionlist)" /> |
<input type="button" value="$lt{'ua'}" onclick="javascript:uncheckAll(document.studentform.actionlist)" /> |
<input type="button" value="$lt{'ua'}" onclick="javascript:uncheckAll(document.studentform.actionlist)" /> |
END |
END |
} |
} |
} |
} |
$output .= "\n<p>\n". |
$output .= "\n<p>\n". |
&Apache::loncommon::start_data_table(). |
&Apache::loncommon::start_data_table(). |
Line 1968 END
|
Line 2040 END
|
$output .= "<th><a href=\"javascript:document.studentform.sortby.value='$item';document.studentform.submit();\">$lt{$item}</a></th>\n"; |
$output .= "<th><a href=\"javascript:document.studentform.sortby.value='$item';document.studentform.submit();\">$lt{$item}</a></th>\n"; |
} |
} |
my %role_types = &role_type_names(); |
my %role_types = &role_type_names(); |
if ($context eq 'course') { |
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 = &Apache::lonlocal::texthash( |
Line 2002 END
|
Line 2074 END
|
' </th>'."\n"; |
' </th>'."\n"; |
} |
} |
} |
} |
$output .= &Apache::loncommon::end_data_table_header_row(); |
|
} |
} |
|
$output .= &Apache::loncommon::end_data_table_header_row(); |
# Done with the HTML header line |
# Done with the HTML header line |
} elsif ($mode eq 'csv') { |
} elsif ($mode eq 'csv') { |
# |
# |
Line 2065 END
|
Line 2137 END
|
delete($userlist->{$user}); |
delete($userlist->{$user}); |
next; |
next; |
} |
} |
} elsif ($env{'form.roletype'} eq 'construction_space') { |
} elsif ($env{'form.roletype'} eq 'author') { |
($uname,$udom,$role) = split(/:/,$user,-1); |
($uname,$udom,$role) = split(/:/,$user,-1); |
} elsif ($env{'form.roletype'} eq 'course') { |
} elsif ($env{'form.roletype'} eq 'course') { |
($uname,$udom,$role) = split(/:/,$user); |
($uname,$udom,$role) = split(/:/,$user); |
Line 2139 END
|
Line 2211 END
|
} |
} |
if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll') { |
if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll') { |
$r->print(&Apache::loncommon::start_data_table_row()); |
$r->print(&Apache::loncommon::start_data_table_row()); |
$r->print("<td>$rowcount</td>\n"); |
|
my $checkval; |
my $checkval; |
if ($mode ne 'autoenroll' && $actionselect) { |
if ($mode eq 'autoenroll') { |
$checkval = $user; |
my $cellentry; |
if ($context eq 'course') { |
if ($in{'type'} eq 'auto') { |
if ($role eq 'st') { |
$cellentry = '<b>'.&mt('auto').'</b> <label><input type="checkbox" name="chgauto" value="'.$in{'username'}.':'.$in{'domain'}.'" /> Change</label>'; |
$checkval .= ':st'; |
$autocount ++; |
} |
} else { |
$checkval .= ':'.$in{'section'}; |
$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>'; |
if ($role eq 'st') { |
$manualcount ++; |
$checkval .= ':'.$in{'type'}.':'.$in{'lockedtype'}; |
if ($in{'lockedtype'}) { |
|
$cellentry .= '<label><input type="checkbox" name="unlockchg" value="'.$in{'username'}.':'.$in{'domain'}.'" /> '.&mt('Unlock').'</label>'; |
|
$unlockcount ++; |
|
} else { |
|
$cellentry .= '<label><input type="checkbox" name="lockchg" value="'.$in{'username'}.':'.$in{'domain'}.'" /> '.&mt('Lock').'</label>'; |
|
$lockcount ++; |
} |
} |
|
$cellentry .= '</nobr></td></tr></table>'; |
|
} |
|
$r->print("<td>$cellentry</td>\n"); |
|
} else { |
|
$r->print("<td>$rowcount</td>\n"); |
|
$checkval; |
|
if ($actionselect) { |
|
$checkval = $user; |
|
if ($context eq 'course') { |
|
if ($role eq 'st') { |
|
$checkval .= ':st'; |
|
} |
|
$checkval .= ':'.$in{'section'}; |
|
if ($role eq 'st') { |
|
$checkval .= ':'.$in{'type'}.':'.$in{'lockedtype'}; |
|
} |
|
} |
|
$r->print('<td><input type="checkbox" name="actionlist" value="'. |
|
$checkval.'"></td>'); |
} |
} |
$r->print('<td><input type="checkbox" name="actionlist" value="'. |
|
$checkval.'"></td>'); |
|
} |
} |
foreach my $item (@cols) { |
foreach my $item (@cols) { |
if ($item eq 'username') { |
if ($item eq 'username') { |
$r->print('<td>'.&print_username_link($permission,\%in).'</td>'); |
$r->print('<td>'.&print_username_link($mode,$permission, |
} elsif (($item eq 'start' || $item eq 'end') && ($mode ne 'autoeroll') && ($actionselect)) { |
\%in).'</td>'); |
|
} 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"); |
} else { |
} else { |
$r->print('<td>'.$in{$item}.'</td>'."\n"); |
$r->print('<td>'.$in{$item}.'</td>'."\n"); |
} |
} |
} |
} |
if ($context eq 'course') { |
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') { |
if ($displayclickers eq 'on') { |
if ($displayclickers eq 'on') { |
my $clickers = |
my $clickers = |
Line 2244 END
|
Line 2338 END
|
} |
} |
|
|
sub print_username_link { |
sub print_username_link { |
my ($permission,$in) = @_; |
my ($mode,$permission,$in) = @_; |
my $output; |
my $output; |
if (!$permission->{'cusr'}) { |
if ($mode eq 'autoenroll') { |
|
$output = $in->{'username'}; |
|
} elsif (!$permission->{'cusr'}) { |
$output = &Apache::loncommon::aboutmewrapper($in->{'username'}, |
$output = &Apache::loncommon::aboutmewrapper($in->{'username'}, |
$in->{'username'}, |
$in->{'username'}, |
$in->{'domain'}); |
$in->{'domain'}); |
Line 2260 sub print_username_link {
|
Line 2356 sub print_username_link {
|
|
|
sub role_type_names { |
sub role_type_names { |
my %lt = &Apache::lonlocal::texthash ( |
my %lt = &Apache::lonlocal::texthash ( |
'domain' => 'Domain Roles', |
'domain' => 'Domain Roles', |
'construction_space' => 'Co-Author Roles', |
'author' => 'Co-Author Roles', |
'course' => 'Course Roles', |
'course' => 'Course Roles', |
); |
); |
return %lt; |
return %lt; |
} |
} |
Line 2278 sub select_actions {
|
Line 2374 sub select_actions {
|
chgsec => "Change section associated with user roles", |
chgsec => "Change section associated with user roles", |
); |
); |
my ($output,$options,%choices); |
my ($output,$options,%choices); |
|
# FIXME Disable actions for now for roletype=course in domain context |
|
if ($context eq 'domain' && $setting eq 'course') { |
|
return; |
|
} |
if ($statusmode eq 'Any') { |
if ($statusmode eq 'Any') { |
$options .= ' |
$options .= ' |
<option value="chgdates">'.$lt{'chgdates'}.'</option>'; |
<option value="chgdates">'.$lt{'chgdates'}.'</option>'; |
$choices{'dates'} = 1; |
$choices{'dates'} = 1; |
} else { |
} else { |
if ($statusmode eq 'Active' || $statusmode eq 'Future') { |
|
$options .= ' |
|
<option value="revoke">'.$lt{'revoke'}.'</option>'; |
|
} |
|
if ($statusmode eq 'Future') { |
if ($statusmode eq 'Future') { |
$options .= ' |
$options .= ' |
<option value="activate">'.$lt{'activate'}.'</option>'; |
<option value="activate">'.$lt{'activate'}.'</option>'; |
Line 2296 sub select_actions {
|
Line 2392 sub select_actions {
|
<option value="reenable">'.$lt{'reenable'}.'</option>'; |
<option value="reenable">'.$lt{'reenable'}.'</option>'; |
$choices{'dates'} = 1; |
$choices{'dates'} = 1; |
} |
} |
|
if ($statusmode eq 'Active' || $statusmode eq 'Future') { |
|
$options .= ' |
|
<option value="chgdates">'.$lt{'chgdates'}.'</option> |
|
<option value="revoke">'.$lt{'revoke'}.'</option>'; |
|
$choices{'dates'} = 1; |
|
} |
} |
} |
if ($context eq 'domain') { |
if ($context eq 'domain') { |
$options .= ' |
$options .= ' |
Line 2381 ENDTWO
|
Line 2483 ENDTWO
|
} |
} |
|
|
sub date_section_selector { |
sub date_section_selector { |
my ($context) = @_; |
my ($context,$permission) = @_; |
my $callingform = $env{'form.callingform'}; |
my $callingform = $env{'form.callingform'}; |
my $formname = 'dateselect'; |
my $formname = 'dateselect'; |
my $groupslist = &get_groupslist(); |
my $groupslist = &get_groupslist(); |
Line 2460 END
|
Line 2562 END
|
$starttime = time; |
$starttime = time; |
} |
} |
$date_items = &date_setting_table($starttime,undef,$context, |
$date_items = &date_setting_table($starttime,undef,$context, |
$env{'form.bulkaction'}); |
$env{'form.bulkaction'},$formname, |
|
$permission); |
} |
} |
$output .= '<h3>'.$headertext.'</h3>'. |
$output .= '<h3>'.$headertext.'</h3>'. |
'<form name="'.$formname.'" method="post">'."\n". |
'<form name="'.$formname.'" method="post">'."\n". |
$date_items; |
$date_items; |
if ($context eq 'course' && $env{'form.bulkaction'} eq 'chgsec') { |
if ($context eq 'course' && $env{'form.bulkaction'} eq 'chgsec') { |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my ($cnum,$cdom) = &get_course_identity(); |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my %sections_count = |
my %sections_count = |
&Apache::loncommon::get_sections($cdom,$cnum); |
&Apache::loncommon::get_sections($cdom,$cnum); |
my $info; |
my $info; |
Line 2495 END
|
Line 2597 END
|
$info = '<input type="hidden" name="retainsec" value="0" />'; |
$info = '<input type="hidden" name="retainsec" value="0" />'; |
} |
} |
my $sections_select .= &course_sections(\%sections_count,$env{'form.showrole'}); |
my $sections_select .= &course_sections(\%sections_count,$env{'form.showrole'}); |
my $secbox = '<p>'.&Apache::lonhtmlcommon::start_pick_box()."\n". |
my $rowtitle = &mt('New section to assign'); |
&Apache::lonhtmlcommon::row_title(&mt('New section to assign'),'LC_oddrow_value')."\n". |
my $secbox = §ion_picker($cdom,$cnum,$env{'form.showrole'},$rowtitle,$permission,$context); |
'<table class="LC_createuser"><tr class="LC_section_row">'."\n". |
|
'<td align="center">'.&mt('Existing sections')."\n". |
|
'<br />'.$sections_select.'</td><td align="center">'. |
|
&mt('New section').'<br />'."\n". |
|
'<input type="text" name="newsec" size="15" />'."\n". |
|
'<input type="hidden" name="sections" value="" />'."\n". |
|
'</td></tr></table>'."\n". |
|
&Apache::lonhtmlcommon::row_closure(1)."\n". |
|
&Apache::lonhtmlcommon::end_pick_box().'</p>'; |
|
$output .= $info.$secbox; |
$output .= $info.$secbox; |
} |
} |
$output .= '<p>'. |
$output .= '<p>'. |
Line 2515 END
|
Line 2608 END
|
return $output; |
return $output; |
} |
} |
|
|
|
sub section_picker { |
|
my ($cdom,$cnum,$role,$rowtitle,$permission,$context,$mode) = @_; |
|
my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum); |
|
my $sections_select .= &course_sections(\%sections_count,$role); |
|
my $secbox = '<p>'.&Apache::lonhtmlcommon::start_pick_box()."\n"; |
|
if ($mode eq 'upload') { |
|
my ($options,$cb_script,$coursepick) = |
|
&default_role_selector($context,1); |
|
$secbox .= &Apache::lonhtmlcommon::row_title('role','LC_oddrow_value'). |
|
$options. &Apache::lonhtmlcommon::row_closure(1)."\n"; |
|
} |
|
$secbox .= &Apache::lonhtmlcommon::row_title($rowtitle,'LC_oddrow_value')."\n"; |
|
if ($env{'request.course.sec'} eq '') { |
|
$secbox .= '<table class="LC_createuser"><tr class="LC_section_row">'."\n". |
|
'<td align="center">'.&mt('Existing sections')."\n". |
|
'<br />'.$sections_select.'</td><td align="center">'. |
|
&mt('New section').'<br />'."\n". |
|
'<input type="text" name="newsec" size="15" />'."\n". |
|
'<input type="hidden" name="sections" value="" />'."\n". |
|
'</td></tr></table>'."\n"; |
|
} else { |
|
$secbox .= '<input type="hidden" name="sections" value="'. |
|
$env{'request.course.sec'}.'" />'. |
|
$env{'request.course.sec'}; |
|
} |
|
$secbox .= &Apache::lonhtmlcommon::row_closure(1)."\n". |
|
&Apache::lonhtmlcommon::end_pick_box().'</p>'; |
|
return $secbox; |
|
} |
|
|
sub results_header_row { |
sub results_header_row { |
my ($rolefilter,$statusmode,$context) = @_; |
my ($rolefilter,$statusmode,$context,$permission,$mode) = @_; |
my ($description,$showfilter); |
my ($description,$showfilter); |
if ($rolefilter ne 'Any') { |
if ($rolefilter ne 'Any') { |
$showfilter = $rolefilter; |
$showfilter = $rolefilter; |
} |
} |
if ($context eq 'course') { |
if ($context eq 'course') { |
$description = &mt('Course - ').$env{'course.'.$env{'request.course.id'}.'.description'}.': '; |
if ($mode eq 'csv' || $mode eq 'excel') { |
|
$description = &mt('Course - ').$env{'course.'.$env{'request.course.id'}.'.description'}.': '; |
|
} |
if ($statusmode eq 'Expired') { |
if ($statusmode eq 'Expired') { |
$description .= &mt('Users in course with expired [_1] roles',$showfilter); |
$description .= &mt('Users in course with expired [_1] roles',$showfilter); |
} elsif ($statusmode eq 'Future') { |
} elsif ($statusmode eq 'Future') { |
Line 2536 sub results_header_row {
|
Line 2661 sub results_header_row {
|
$description .= &mt('All users in course with [_1] roles',$rolefilter); |
$description .= &mt('All users in course with [_1] roles',$rolefilter); |
} |
} |
} |
} |
} elsif ($context eq 'construction_space') { |
if (exists($permission->{'view_section'})) { |
$description = &mt('Author space for [_1].').' '; |
if ($env{'form.showrole'} eq 'st') { |
|
$description .= ' '.&mt('(section [_1] only)',$permission->{'view_section'}); |
|
} elsif ($env{'form.showrole'} eq 'any') { |
|
$description .= ' '.&mt('(section [_1] only)',$permission->{'view_section'}); |
|
} |
|
} |
|
} elsif ($context eq 'author') { |
|
$description = |
|
&mt('Author space for <span class="LC_cusr_emph">[_1]</span>', |
|
&Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'})).': '; |
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 2568 sub results_header_row {
|
Line 2702 sub results_header_row {
|
$description .= &mt('All users in domain with [_1] roles',$rolefilter); |
$description .= &mt('All users in domain with [_1] roles',$rolefilter); |
} |
} |
} |
} |
} elsif ($env{'form.roletype'} eq 'construction_space') { |
} elsif ($env{'form.roletype'} eq 'author') { |
if ($statusmode eq 'Expired') { |
if ($statusmode eq 'Expired') { |
$description .= &mt('Co-authors in domain with expired [_1] roles',$showfilter); |
$description .= &mt('Co-authors in domain with expired [_1] roles',$showfilter); |
} elsif ($statusmode eq 'Future') { |
} elsif ($statusmode eq 'Future') { |
Line 2613 sub results_header_row {
|
Line 2747 sub results_header_row {
|
} |
} |
return $description; |
return $description; |
} |
} |
|
|
|
sub viewable_section { |
|
my ($permission) = @_; |
|
my $viewablesec; |
|
if (ref($permission) eq 'HASH') { |
|
if (exists($permission->{'view_section'})) { |
|
$viewablesec = $permission->{'view_section'}; |
|
} elsif (exists($permission->{'cusr_section'})) { |
|
$viewablesec = $permission->{'cusr_section'}; |
|
} |
|
} |
|
return $viewablesec; |
|
} |
|
|
|
|
################################################# |
################################################# |
################################################# |
################################################# |
sub show_drop_list { |
sub show_drop_list { |
my ($r,$classlist,$keylist,$nosort)=@_; |
my ($r,$classlist,$keylist,$nosort,$permission)=@_; |
my $cid=$env{'request.course.id'}; |
my $cid=$env{'request.course.id'}; |
|
my ($cnum,$cdom) = &get_course_identity($cid); |
if (! exists($env{'form.sortby'})) { |
if (! exists($env{'form.sortby'})) { |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['sortby']); |
['sortby']); |
Line 2627 sub show_drop_list {
|
Line 2776 sub show_drop_list {
|
if ($sortby !~ /^(username|domain|section|groups|fullname|id|start|end)$/) { |
if ($sortby !~ /^(username|domain|section|groups|fullname|id|start|end)$/) { |
$sortby = 'username'; |
$sortby = 'username'; |
} |
} |
my $cdom = $env{'course.'.$cid.'.domain'}; |
|
my $cnum = $env{'course.'.$cid,'.num'}; |
|
my ($classgroups) = &Apache::loncoursedata::get_group_memberships( |
my ($classgroups) = &Apache::loncoursedata::get_group_memberships( |
$classlist,$keylist,$cdom,$cnum); |
$classlist,$keylist,$cdom,$cnum); |
# |
# |
my $action = "drop"; |
my $action = "drop"; |
|
my $check_uncheck_js = &Apache::loncommon::check_uncheck_jscript(); |
$r->print(<<END); |
$r->print(<<END); |
<input type="hidden" name="sortby" value="$sortby" /> |
<input type="hidden" name="sortby" value="$sortby" /> |
<input type="hidden" name="action" value="$action" /> |
<input type="hidden" name="action" value="$action" /> |
<input type="hidden" name="state" value="done" /> |
<input type="hidden" name="state" value="done" /> |
<script> |
<script type="text/javascript" language="Javascript"> |
function checkAll(field) { |
$check_uncheck_js |
for (i = 0; i < field.length; i++) |
|
field[i].checked = true ; |
|
} |
|
|
|
function uncheckAll(field) { |
|
for (i = 0; i < field.length; i++) |
|
field[i].checked = false ; |
|
} |
|
</script> |
</script> |
<p> |
<p> |
<input type="hidden" name="phase" value="four"> |
<input type="hidden" name="phase" value="four"> |
Line 2661 my %lt=&Apache::lonlocal::texthash('usrn
|
Line 2801 my %lt=&Apache::lonlocal::texthash('usrn
|
'groups' => "active groups", |
'groups' => "active groups", |
); |
); |
if ($nosort) { |
if ($nosort) { |
$r->print(&Apache::loncommon::start_data_table()); |
$r->print(&Apache::loncommon::start_data_table(). |
|
&Apache::loncommon::start_data_table_header_row()); |
$r->print(<<END); |
$r->print(<<END); |
<tr> |
|
<th> </th> |
<th> </th> |
<th>$lt{'usrn'}</th> |
<th>$lt{'usrn'}</th> |
<th>$lt{'dom'}</th> |
<th>$lt{'dom'}</th> |
Line 2673 my %lt=&Apache::lonlocal::texthash('usrn
|
Line 2813 my %lt=&Apache::lonlocal::texthash('usrn
|
<th>$lt{'start'}</th> |
<th>$lt{'start'}</th> |
<th>$lt{'end'}</th> |
<th>$lt{'end'}</th> |
<th>$lt{'groups'}</th> |
<th>$lt{'groups'}</th> |
</tr> |
|
END |
END |
|
$r->print(&Apache::loncommon::end_data_table_header_row()); |
} else { |
} else { |
$r->print(&Apache::loncommon::start_data_table()); |
$r->print(&Apache::loncommon::start_data_table(). |
|
&Apache::loncommon::start_data_table_header_row()); |
$r->print(<<END); |
$r->print(<<END); |
<tr><th> </th> |
<th> </th> |
<th> |
<th> |
<a href="/adm/dropadd?action=$action&sortby=username">$lt{'usrn'}</a> |
<a href="/adm/createuser?action=$action&sortby=username">$lt{'usrn'}</a> |
</th><th> |
</th><th> |
<a href="/adm/dropadd?action=$action&sortby=domain">$lt{'dom'}</a> |
<a href="/adm/createuser?action=$action&sortby=domain">$lt{'dom'}</a> |
</th><th> |
</th><th> |
<a href="/adm/dropadd?action=$action&sortby=id">ID</a> |
<a href="/adm/createuser?action=$action&sortby=id">ID</a> |
</th><th> |
</th><th> |
<a href="/adm/dropadd?action=$action&sortby=fullname">$lt{'sn'}</a> |
<a href="/adm/createuser?action=$action&sortby=fullname">$lt{'sn'}</a> |
</th><th> |
</th><th> |
<a href="/adm/dropadd?action=$action&sortby=section">$lt{'sec'}</a> |
<a href="/adm/createuser?action=$action&sortby=section">$lt{'sec'}</a> |
</th><th> |
</th><th> |
<a href="/adm/dropadd?action=$action&sortby=start">$lt{'start'}</a> |
<a href="/adm/createuser?action=$action&sortby=start">$lt{'start'}</a> |
</th><th> |
</th><th> |
<a href="/adm/dropadd?action=$action&sortby=end">$lt{'end'}</a> |
<a href="/adm/createuser?action=$action&sortby=end">$lt{'end'}</a> |
</th><th> |
</th><th> |
<a href="/adm/dropadd?action=$action&sortby=groups">$lt{'groups'}</a> |
<a href="/adm/createuser?action=$action&sortby=groups">$lt{'groups'}</a> |
</th> |
</th> |
</tr> |
|
END |
END |
|
$r->print(&Apache::loncommon::end_data_table_header_row()); |
} |
} |
# |
# |
# Sort the students |
# Sort the students |
Line 2745 END
|
Line 2885 END
|
} |
} |
my $status = $sdata->[$index{'status'}]; |
my $status = $sdata->[$index{'status'}]; |
next if ($status ne 'Active'); |
next if ($status ne 'Active'); |
|
if ($env{'request.course.sec'} ne '') { |
|
if ($section ne $env{'request.course.sec'}) { |
|
next; |
|
} |
|
} |
|
my $studentkey = $student.':'.$section; |
|
my $startitem = '<input type="hidden" name="'.$studentkey.'_start" value="'.$sdata->[$index{'start'}].'" />'; |
# |
# |
$r->print(&Apache::loncommon::start_data_table_row()); |
$r->print(&Apache::loncommon::start_data_table_row()); |
$r->print(<<"END"); |
$r->print(<<"END"); |
Line 2804 sub print_first_users_upload_form {
|
Line 2951 sub print_first_users_upload_form {
|
|
|
# ================================================= Drop/Add from uploaded file |
# ================================================= Drop/Add from uploaded file |
sub upfile_drop_add { |
sub upfile_drop_add { |
my ($r,$context) = @_; |
my ($r,$context,$permission) = @_; |
&Apache::loncommon::load_tmp_file($r); |
&Apache::loncommon::load_tmp_file($r); |
my @userdata=&Apache::loncommon::upfile_record_sep(); |
my @userdata=&Apache::loncommon::upfile_record_sep(); |
if($env{'form.noFirstLine'}){shift(@userdata);} |
if($env{'form.noFirstLine'}){shift(@userdata);} |
Line 2894 sub upfile_drop_add {
|
Line 3041 sub upfile_drop_add {
|
} elsif ($setting eq 'course') { |
} elsif ($setting eq 'course') { |
$defaultrole = $env{'form.courserole'}; |
$defaultrole = $env{'form.courserole'}; |
} |
} |
} elsif ($context eq 'construction_space') { |
} elsif ($context eq 'author') { |
$defaultrole = $env{'form.defaultrole'}; |
$defaultrole = $env{'form.defaultrole'}; |
} |
} |
if ($context eq 'domain' && $setting eq 'course') { |
if ($context eq 'domain' && $setting eq 'course') { |
Line 2917 sub upfile_drop_add {
|
Line 3064 sub upfile_drop_add {
|
####################################### |
####################################### |
if ($context eq 'course') { |
if ($context eq 'course') { |
$r->print('<h3>'.&mt('Enrolling Users')."</h3>\n<p>\n"); |
$r->print('<h3>'.&mt('Enrolling Users')."</h3>\n<p>\n"); |
} elsif ($context eq 'construction_space') { |
} elsif ($context eq 'author') { |
$r->print('<h3>'.&mt('Updating Co-authors')."</h3>\n<p>\n"); |
$r->print('<h3>'.&mt('Updating Co-authors')."</h3>\n<p>\n"); |
} else { |
} else { |
$r->print('<h3>'.&mt('Adding/Modifying Users')."</h3>\n<p>\n"); |
$r->print('<h3>'.&mt('Adding/Modifying Users')."</h3>\n<p>\n"); |
Line 3057 sub upfile_drop_add {
|
Line 3204 sub upfile_drop_add {
|
next if ($alerts{'username'}{$domain}{$username}); |
next if ($alerts{'username'}{$domain}{$username}); |
} |
} |
} |
} |
|
} else { |
|
# FIXME check if user info can be updated. |
} |
} |
if ($id ne '') { |
if ($id ne '') { |
if (!$newuser) { |
if (!$newuser) { |
Line 3109 sub upfile_drop_add {
|
Line 3258 sub upfile_drop_add {
|
$r->print('<br />'. |
$r->print('<br />'. |
&mt('<b>[_1]</b>: Unable to enroll. No password specified.',$username) |
&mt('<b>[_1]</b>: Unable to enroll. No password specified.',$username) |
); |
); |
} elsif ($context eq 'construction_space') { |
} elsif ($context eq 'author') { |
$r->print('<br />'. |
$r->print('<br />'. |
&mt('<b>[_1]</b>: Unable to add co-author. No password specified.',$username) |
&mt('<b>[_1]</b>: Unable to add co-author. No password specified.',$username) |
); |
); |
Line 3135 sub upfile_drop_add {
|
Line 3284 sub upfile_drop_add {
|
&mt('Authentication changed for [_1] existing users.', |
&mt('Authentication changed for [_1] existing users.', |
$counts{'auth'})."</p>\n"); |
$counts{'auth'})."</p>\n"); |
} |
} |
if (keys(%alerts) > 0) { |
$r->print(&print_namespacing_alerts($domain,\%alerts,\%curr_rules)); |
if (ref($alerts{'username'}) eq 'HASH') { |
|
foreach my $dom (sort(keys(%{$alerts{'username'}}))) { |
|
my $count; |
|
if (ref($alerts{'username'}{$dom}) eq 'HASH') { |
|
$count = keys(%{$alerts{'username'}{$dom}}); |
|
} |
|
my $domdesc = &Apache::lonnet::domain($domain,'description'); |
|
if (ref($curr_rules{$dom}) eq 'HASH') { |
|
$r->print(&Apache::loncommon::instrule_disallow_msg( |
|
'username',$domdesc,$count,'upload')); |
|
} |
|
$r->print(&Apache::loncommon::user_rule_formats($dom, |
|
$domdesc,$curr_rules{$dom}{'username'}, |
|
'username')); |
|
} |
|
} |
|
if (ref($alerts{'id'}) eq 'HASH') { |
|
foreach my $dom (sort(keys(%{$alerts{'id'}}))) { |
|
my $count; |
|
if (ref($alerts{'id'}{$dom}) eq 'HASH') { |
|
$count = keys(%{$alerts{'id'}{$dom}}); |
|
} |
|
my $domdesc = &Apache::lonnet::domain($domain,'description'); |
|
if (ref($curr_rules{$dom}) eq 'HASH') { |
|
$r->print(&Apache::loncommon::instrule_disallow_msg( |
|
'id',$domdesc,$count,'upload')); |
|
} |
|
$r->print(&Apache::loncommon::user_rule_formats($dom, |
|
$domdesc,$curr_rules{$dom}{'id'},'id')); |
|
} |
|
} |
|
} |
|
$r->print('<form name="uploadresult" action="/adm/createuser">'); |
$r->print('<form name="uploadresult" action="/adm/createuser">'); |
$r->print(&Apache::lonhtmlcommon::echo_form_input(['phase','prevphase','currstate'])); |
$r->print(&Apache::lonhtmlcommon::echo_form_input(['phase','prevphase','currstate'])); |
$r->print('</form>'); |
$r->print('</form>'); |
Line 3198 sub upfile_drop_add {
|
Line 3315 sub upfile_drop_add {
|
} # end of unless |
} # end of unless |
} |
} |
|
|
|
sub print_namespacing_alerts { |
|
my ($domain,$alerts,$curr_rules) = @_; |
|
my $output; |
|
if (ref($alerts) eq 'HASH') { |
|
if (keys(%{$alerts}) > 0) { |
|
if (ref($alerts->{'username'}) eq 'HASH') { |
|
foreach my $dom (sort(keys(%{$alerts->{'username'}}))) { |
|
my $count; |
|
if (ref($alerts->{'username'}{$dom}) eq 'HASH') { |
|
$count = keys(%{$alerts->{'username'}{$dom}}); |
|
} |
|
my $domdesc = &Apache::lonnet::domain($domain,'description'); |
|
if (ref($curr_rules->{$dom}) eq 'HASH') { |
|
$output .= &Apache::loncommon::instrule_disallow_msg( |
|
'username',$domdesc,$count,'upload'); |
|
} |
|
$output .= &Apache::loncommon::user_rule_formats($dom, |
|
$domdesc,$curr_rules->{$dom}{'username'}, |
|
'username'); |
|
} |
|
} |
|
if (ref($alerts->{'id'}) eq 'HASH') { |
|
foreach my $dom (sort(keys(%{$alerts->{'id'}}))) { |
|
my $count; |
|
if (ref($alerts->{'id'}{$dom}) eq 'HASH') { |
|
$count = keys(%{$alerts->{'id'}{$dom}}); |
|
} |
|
my $domdesc = &Apache::lonnet::domain($domain,'description'); |
|
if (ref($curr_rules->{$dom}) eq 'HASH') { |
|
$output .= &Apache::loncommon::instrule_disallow_msg( |
|
'id',$domdesc,$count,'upload'); |
|
} |
|
$output .= &Apache::loncommon::user_rule_formats($dom, |
|
$domdesc,$curr_rules->{$dom}{'id'},'id'); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
sub user_change_result { |
sub user_change_result { |
my ($r,$userresult,$authresult,$roleresult,$counts,$flushc,$username, |
my ($r,$userresult,$authresult,$roleresult,$counts,$flushc,$username, |
$userchg) = @_; |
$userchg) = @_; |
Line 3245 sub user_change_result {
|
Line 3402 sub user_change_result {
|
} |
} |
|
|
# ========================================================= Menu Phase Two Drop |
# ========================================================= Menu Phase Two Drop |
sub print_expire_menu { |
sub print_drop_menu { |
my ($r,$context) = @_; |
my ($r,$context,$permission) = @_; |
$r->print("<h3>".&mt("Expire Users' Roles")."</h3>"); |
$r->print('<h3>'.&mt("Drop Students").'</h3>'."\n". |
|
'<form name="studentform" method="post">'."\n"); |
my $cid=$env{'request.course.id'}; |
my $cid=$env{'request.course.id'}; |
my ($classlist,$keylist) = &Apache::loncoursedata::get_classlist(); |
my ($classlist,$keylist) = &Apache::loncoursedata::get_classlist(); |
if (! defined($classlist)) { |
if (! defined($classlist)) { |
Line 3255 sub print_expire_menu {
|
Line 3413 sub print_expire_menu {
|
return; |
return; |
} |
} |
# Print out the available choices |
# Print out the available choices |
&show_drop_list($r,$classlist,$keylist); |
&show_drop_list($r,$classlist,$keylist,$permission); |
|
$r->print('</form>'. &Apache::loncommon::end_page()); |
return; |
return; |
} |
} |
|
|
|
|
# ================================================================== Phase four |
# ================================================================== Phase four |
|
|
sub update_user_list { |
sub update_user_list { |
Line 3275 sub update_user_list {
|
Line 3433 sub update_user_list {
|
my %result_text = ( ok => { 'revoke' => 'Revoked', |
my %result_text = ( ok => { 'revoke' => 'Revoked', |
'delete' => 'Deleted', |
'delete' => 'Deleted', |
'reenable' => 'Re-enabled', |
'reenable' => 'Re-enabled', |
'activate' => 'Activated', |
'activate' => 'Activated', |
|
'chgdates' => 'Changed Access Dates for', |
|
'chgsec' => 'Changed section for', |
|
'drop' => 'Dropped', |
}, |
}, |
error => {'revoke' => 'revoking', |
error => {'revoke' => 'revoking', |
'delete' => 'deleting', |
'delete' => 'deleting', |
'reenable' => 're-enabling', |
'reenable' => 're-enabling', |
'activate' => 'activating', |
'activate' => 'activating', |
|
'chgdates' => 'changing access dates for', |
|
'chgsec' => 'changing section for', |
|
'drop' => 'dropping', |
}, |
}, |
); |
); |
my ($startdate,$enddate); |
my ($startdate,$enddate); |
Line 3290 sub update_user_list {
|
Line 3454 sub update_user_list {
|
foreach my $item (@changelist) { |
foreach my $item (@changelist) { |
my ($role,$uname,$udom,$cid,$sec,$scope,$result,$type,$locktype,@sections, |
my ($role,$uname,$udom,$cid,$sec,$scope,$result,$type,$locktype,@sections, |
$scopestem); |
$scopestem); |
if ($context eq 'course') { |
if ($choice eq 'drop') { |
|
($uname,$udom,$sec) = split(/:/,$item,-1); |
|
$role = 'st'; |
|
$cid = $env{'request.course.id'}; |
|
$scopestem = '/'.$cid; |
|
$scopestem =~s/\_/\//g; |
|
if ($sec eq '') { |
|
$scope = $scopestem; |
|
} else { |
|
$scope = $scopestem.'/'.$sec; |
|
} |
|
} elsif ($context eq 'course') { |
($uname,$udom,$role,$sec,$type,$locktype) = split(/\:/,$item,-1); |
($uname,$udom,$role,$sec,$type,$locktype) = split(/\:/,$item,-1); |
$cid = $env{'request.course.id'}; |
$cid = $env{'request.course.id'}; |
$scopestem = '/'.$cid; |
$scopestem = '/'.$cid; |
Line 3300 sub update_user_list {
|
Line 3475 sub update_user_list {
|
} else { |
} else { |
$scope = $scopestem.'/'.$sec; |
$scope = $scopestem.'/'.$sec; |
} |
} |
} elsif ($context eq 'construction_space') { |
} elsif ($context eq 'author') { |
($uname,$udom,$role) = split(/\:/,$item,-1); |
($uname,$udom,$role) = split(/\:/,$item,-1); |
$scope = '/'.$env{'user.domain'}.'/'.$env{'user.name'}; |
$scope = '/'.$env{'user.domain'}.'/'.$env{'user.name'}; |
} elsif ($context eq 'domain') { |
} elsif ($context eq 'domain') { |
if ($setting eq 'domain') { |
if ($setting eq 'domain') { |
($role,$uname,$udom) = split(/\:/,$item,-1); |
($role,$uname,$udom) = split(/\:/,$item,-1); |
$scope = '/'.$env{'request.role.domain'}.'/'; |
$scope = '/'.$env{'request.role.domain'}.'/'; |
} elsif ($setting eq 'construction_space') { |
} elsif ($setting eq 'author') { |
($uname,$udom,$role,$scope) = split(/\:/,$item); |
($uname,$udom,$role,$scope) = split(/\:/,$item); |
} elsif ($setting eq 'course') { |
} elsif ($setting eq 'course') { |
($uname,$udom,$role,$cid,$sec,$type,$locktype) = |
($uname,$udom,$role,$cid,$sec,$type,$locktype) = |
Line 3323 sub update_user_list {
|
Line 3498 sub update_user_list {
|
my ($uid,$first,$middle,$last,$gene,$sec); |
my ($uid,$first,$middle,$last,$gene,$sec); |
my $start = $env{'form.'.$item.'_start'}; |
my $start = $env{'form.'.$item.'_start'}; |
my $end = $env{'form.'.$item.'_end'}; |
my $end = $env{'form.'.$item.'_end'}; |
# revoke or delete user role |
if ($choice eq 'drop') { |
if ($choice eq 'revoke') { |
# drop students |
|
$end = $now; |
|
$type = 'manual'; |
|
$result = |
|
&Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid); |
|
} elsif ($choice eq 'revoke') { |
|
# revoke or delete user role |
$end = $now; |
$end = $now; |
if ($role eq 'st') { |
if ($role eq 'st') { |
$result = |
$result = |
Line 3426 sub update_user_list {
|
Line 3607 sub update_user_list {
|
} |
} |
} |
} |
} |
} |
|
my $extent = $scope; |
|
if ($choice eq 'drop' || $context eq 'course') { |
|
my ($cnum,$cdom,$cdesc) = &get_course_identity($cid); |
|
if ($cdesc) { |
|
$extent = $cdesc; |
|
} |
|
} |
if ($result eq 'ok' || $result eq 'ok:') { |
if ($result eq 'ok' || $result eq 'ok:') { |
$r->print(&mt("$result_text{'ok'}{$choice} role of '[_1]' in [_2] for [_3]", |
$r->print(&mt("$result_text{'ok'}{$choice} role of '[_1]' in [_2] for [_3]", |
$plrole,$scope,$uname.':'.$udom).'<br />'); |
$plrole,$extent,$uname.':'.$udom).'<br />'); |
$count++; |
$count++; |
} else { |
} else { |
$r->print( |
$r->print( |
&mt("Error $result_text{'error'}{$choice} [_1] in [_2] for [_3]:[_4]", |
&mt("Error $result_text{'error'}{$choice} [_1] in [_2] for [_3]:[_4]", |
$plrole,$scope,$uname.':'.$udom,$result).'<br />'); |
$plrole,$extent,$uname.':'.$udom,$result).'<br />'); |
} |
} |
} |
} |
$r->print('<p><b>'.&mt("$result_text{'ok'}{$choice} role(s) for [quant,_1,user,users,users].",$count).'</b></p>'); |
$r->print('<p><b>'.&mt("$result_text{'ok'}{$choice} role(s) for [quant,_1,user,users,users].",$count).'</b></p>'); |
if ($count > 0) { |
if ($count > 0) { |
if ($choice eq 'revoke') { |
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 |
Line 3667 ENDSECCODE
|
Line 3855 ENDSECCODE
|
return $setsection_js; |
return $setsection_js; |
} |
} |
|
|
|
sub can_create_user { |
|
my ($dom,$context,$usertype) = @_; |
|
my %domconf = &Apache::lonnet::get_dom('configuration',['usercreation'],$dom); |
|
my $cancreate = 1; |
|
if (ref($domconf{'usercreation'}) eq 'HASH') { |
|
if (ref($domconf{'usercreation'}{'cancreate'}) eq 'HASH') { |
|
if ($context eq 'course' || $context eq 'author') { |
|
my $creation = $domconf{'usercreation'}{'cancreate'}{$context}; |
|
if ($creation eq 'none') { |
|
$cancreate = 0; |
|
} elsif ($creation ne 'any') { |
|
if (defined($usertype)) { |
|
if ($creation ne $usertype) { |
|
$cancreate = 0; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return $cancreate; |
|
} |
|
|
|
sub can_modify_userinfo { |
|
my ($context,$dom,$fields,$userroles) = @_; |
|
my %domconfig = |
|
&Apache::lonnet::get_dom('configuration',['usermodification'], |
|
$dom); |
|
my %canmodify; |
|
if (ref($fields) eq 'ARRAY') { |
|
foreach my $field (@{$fields}) { |
|
$canmodify{$field} = 0; |
|
if (&Apache::lonnet::allowed('mau',$dom)) { |
|
$canmodify{$field} = 1; |
|
} else { |
|
if (ref($domconfig{'usermodification'}) eq 'HASH') { |
|
if (ref($domconfig{'usermodification'}{$context}) eq 'HASH') { |
|
if (ref($userroles) eq 'ARRAY') { |
|
foreach my $role (@{$userroles}) { |
|
my $testrole; |
|
if ($role =~ /^cr\//) { |
|
$testrole = 'cr'; |
|
} else { |
|
$testrole = $role; |
|
} |
|
if (ref($domconfig{'usermodification'}{$context}{$testrole}) eq 'HASH') { |
|
if ($domconfig{'usermodification'}{$context}{$testrole}{$field}) { |
|
$canmodify{$field} = 1; |
|
last; |
|
} |
|
} |
|
} |
|
} else { |
|
foreach my $key (keys(%{$domconfig{'usermodification'}{$context}})) { |
|
if (ref($domconfig{'usermodification'}{$context}{$key}) eq 'HASH') { |
|
if ($domconfig{'usermodification'}{$context}{$key}{$field}) { |
|
$canmodify{$field} = 1; |
|
last; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} elsif ($context eq 'course') { |
|
if (ref($userroles) eq 'ARRAY') { |
|
if (grep(/^st$/,@{$userroles})) { |
|
$canmodify{$field} = 1; |
|
} |
|
} else { |
|
$canmodify{$field} = 1; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return %canmodify; |
|
} |
|
|
|
sub check_usertype { |
|
my ($dom,$uname,$rules) = @_; |
|
my $usertype; |
|
if (ref($rules) eq 'HASH') { |
|
my @user_rules = keys(%{$rules}); |
|
if (@user_rules > 0) { |
|
my %rule_check = &Apache::lonnet::inst_rulecheck($dom,$uname,undef,'username',\@user_rules); |
|
if (keys(%rule_check) > 0) { |
|
$usertype = 'unofficial'; |
|
foreach my $item (keys(%rule_check)) { |
|
if ($rule_check{$item}) { |
|
$usertype = 'official'; |
|
last; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return $usertype; |
|
} |
|
|
|
sub roles_by_context { |
|
my ($context,$custom) = @_; |
|
my @allroles; |
|
if ($context eq 'course') { |
|
@allroles = ('st','ad','ta','ep','in','cc'); |
|
if ($custom) { |
|
push(@allroles,'cr'); |
|
} |
|
} elsif ($context eq 'author') { |
|
@allroles = ('ca','aa'); |
|
} elsif ($context eq 'domain') { |
|
@allroles = ('li','dg','sc','au','dc'); |
|
} |
|
return @allroles; |
|
} |
|
|
|
sub get_permission { |
|
my ($context,$roles) = @_; |
|
my %permission; |
|
if ($context eq 'course') { |
|
my $custom = 1; |
|
my @allroles = &roles_by_context($context,$custom); |
|
foreach my $role (@allroles) { |
|
if (&Apache::lonnet::allowed('c'.$role,$env{'request.course.id'})) { |
|
$permission{'cusr'} = 1; |
|
last; |
|
} |
|
} |
|
if (&Apache::lonnet::allowed('ccr',$env{'request.course.id'})) { |
|
$permission{'custom'} = 1; |
|
} |
|
if (&Apache::lonnet::allowed('vcl',$env{'request.course.id'})) { |
|
$permission{'view'} = 1; |
|
} |
|
if (!$permission{'view'}) { |
|
my $scope = $env{'request.course.id'}.'/'.$env{'request.course.sec'}; |
|
$permission{'view'} = &Apache::lonnet::allowed('vcl',$scope); |
|
if ($permission{'view'}) { |
|
$permission{'view_section'} = $env{'request.course.sec'}; |
|
} |
|
} |
|
if (!$permission{'cusr'}) { |
|
if ($env{'request.course.sec'} ne '') { |
|
my $scope = $env{'request.course.id'}.'/'.$env{'request.course.sec'}; |
|
$permission{'cusr'} = (&Apache::lonnet::allowed('cst',$scope)); |
|
if ($permission{'cusr'}) { |
|
$permission{'cusr_section'} = $env{'request.course.sec'}; |
|
} |
|
} |
|
} |
|
if (&Apache::lonnet::allowed('mdg',$env{'request.course.id'})) { |
|
$permission{'grp_manage'} = 1; |
|
} |
|
} elsif ($context eq 'author') { |
|
$permission{'cusr'} = &authorpriv($env{'user.name'},$env{'request.role.domain'}); |
|
$permission{'view'} = $permission{'cusr'}; |
|
} else { |
|
my @allroles = &roles_by_context($context); |
|
foreach my $role (@allroles) { |
|
if (&Apache::lonnet::allowed('c'.$role,$env{'request.role.domain'})) { $permission{'cusr'} = 1; |
|
last; |
|
} |
|
} |
|
if (!$permission{'cusr'}) { |
|
if (&Apache::lonnet::allowed('mau',$env{'request.role.domain'})) { |
|
$permission{'cusr'} = 1; |
|
} |
|
} |
|
if (&Apache::lonnet::allowed('ccr',$env{'request.role.domain'})) { |
|
$permission{'custom'} = 1; |
|
} |
|
$permission{'view'} = $permission{'cusr'}; |
|
} |
|
my $allowed = 0; |
|
foreach my $perm (values(%permission)) { |
|
if ($perm) { $allowed=1; last; } |
|
} |
|
return (\%permission,$allowed); |
|
} |
|
|
|
# ==================================================== Figure out author access |
|
|
|
sub authorpriv { |
|
my ($auname,$audom)=@_; |
|
unless ((&Apache::lonnet::allowed('cca',$audom.'/'.$auname)) |
|
|| (&Apache::lonnet::allowed('caa',$audom.'/'.$auname))) { return ''; } return 1; |
|
} |
|
|
|
sub get_course_identity { |
|
my ($cid) = @_; |
|
my ($cnum,$cdom,$cdesc); |
|
if ($cid eq '') { |
|
$cid = $env{'request.course.id'} |
|
} |
|
if ($cid ne '') { |
|
$cnum = $env{'course.'.$cid.'.num'}; |
|
$cdom = $env{'course.'.$cid.'.domain'}; |
|
$cdesc = $env{'course.'.$cid.'.description'}; |
|
if ($cnum eq '' || $cdom eq '') { |
|
my %coursehash = |
|
&Apache::lonnet::coursedescription($cid,{'one_time' => 1}); |
|
$cdom = $coursehash{'domain'}; |
|
$cnum = $coursehash{'num'}; |
|
$cdesc = $coursehash{'description'}; |
|
} |
|
} |
|
return ($cnum,$cdom,$cdesc); |
|
} |
|
|
|
sub dc_setcourse_js { |
|
my ($formname,$mode) = @_; |
|
my $dc_setcourse_code; |
|
my $cctext = &Apache::lonnet::plaintext('cc'); |
|
my %alerts = §ioncheck_alerts(); |
|
my $role = 'role'; |
|
if ($mode eq 'upload') { |
|
$role = 'courserole'; |
|
} |
|
$dc_setcourse_code = (<<"SCRIPTTOP"); |
|
function setCourse() { |
|
var course = document.$formname.dccourse.value; |
|
if (course != "") { |
|
if (document.$formname.dcdomain.value != document.$formname.origdom.value) { |
|
alert("$alerts{'curd'}"); |
|
return; |
|
} |
|
var userrole = document.$formname.$role.options[document.$formname.$role.selectedIndex].value |
|
var section=""; |
|
var numsections = 0; |
|
var newsecs = new Array(); |
|
for (var i=0; i<document.$formname.currsec.length; i++) { |
|
if (document.$formname.currsec.options[i].selected == true ) { |
|
if (document.$formname.currsec.options[i].value != "" && document.$formname.currsec.options[i].value != null) { |
|
if (numsections == 0) { |
|
section = document.$formname.currsec.options[i].value |
|
numsections = 1; |
|
} |
|
else { |
|
section = section + "," + document.$formname.currsec.options[i].value |
|
numsections ++; |
|
} |
|
} |
|
} |
|
} |
|
if (document.$formname.newsec.value != "" && document.$formname.newsec.value != null) { |
|
if (numsections == 0) { |
|
section = document.$formname.newsec.value |
|
} |
|
else { |
|
section = section + "," + document.$formname.newsec.value |
|
} |
|
newsecs = document.$formname.newsec.value.split(/,/g); |
|
numsections = numsections + newsecs.length; |
|
} |
|
if ((userrole == 'st') && (numsections > 1)) { |
|
alert("$alerts{'inea'}. $alerts{'youh'} "+numsections+" $alerts{'sect'}.\\n$alerts{'plsm'}.") |
|
return; |
|
} |
|
for (var j=0; j<newsecs.length; j++) { |
|
if ((newsecs[j] == 'all') || (newsecs[j] == 'none')) { |
|
alert("'"+newsecs[j]+"' $alerts{'mayn'}.\\n$alerts{'plsc'}."); |
|
return; |
|
} |
|
if (document.$formname.groups.value != '') { |
|
var groups = document.$formname.groups.value.split(/,/g); |
|
for (var k=0; k<groups.length; k++) { |
|
if (newsecs[j] == groups[k]) { |
|
alert("'"+newsecs[j]+"' $alerts{'mayt'}.\\n$alerts{'secn'}. $alerts{'plsc'}."); |
|
return; |
|
} |
|
} |
|
} |
|
} |
|
if ((userrole == 'cc') && (numsections > 0)) { |
|
alert("$alerts{'secd'} $cctext $alerts{'role'}.\\n$alerts{'accr'}."); |
|
section = ""; |
|
} |
|
SCRIPTTOP |
|
if ($mode ne 'upload') { |
|
$dc_setcourse_code .= (<<"ENDSCRIPT"); |
|
var coursename = "_$env{'request.role.domain'}"+"_"+course+"_"+userrole |
|
var numcourse = getIndex(document.$formname.dccourse); |
|
if (numcourse == "-1") { |
|
alert("$alerts{'thwa'}"); |
|
return; |
|
} |
|
else { |
|
document.$formname.elements[numcourse].name = "act"+coursename; |
|
var numnewsec = getIndex(document.$formname.newsec); |
|
if (numnewsec != "-1") { |
|
document.$formname.elements[numnewsec].name = "sec"+coursename; |
|
document.$formname.elements[numnewsec].value = section; |
|
} |
|
var numstart = getIndex(document.$formname.start); |
|
if (numstart != "-1") { |
|
document.$formname.elements[numstart].name = "start"+coursename; |
|
} |
|
var numend = getIndex(document.$formname.end); |
|
if (numend != "-1") { |
|
document.$formname.elements[numend].name = "end"+coursename |
|
} |
|
} |
|
} |
|
document.$formname.submit(); |
|
} |
|
|
|
ENDSCRIPT |
|
} else { |
|
$dc_setcourse_code .= " |
|
document.$formname.sections.value = section; |
|
} |
|
return 'ok'; |
|
} |
|
"; |
|
} |
|
$dc_setcourse_code .= (<<"ENDSCRIPT"); |
|
|
|
function getIndex(caller) { |
|
for (var i=0;i<document.$formname.elements.length;i++) { |
|
if (document.$formname.elements[i] == caller) { |
|
return i; |
|
} |
|
} |
|
return -1; |
|
} |
|
ENDSCRIPT |
|
} |
|
|
|
sub sectioncheck_alerts { |
|
my %alerts = &Apache::lonlocal::texthash( |
|
curd => 'You must select a course in the current domain', |
|
inea => 'In each course, each user may only have one student role at a time', |
|
youh => 'You had selected', |
|
sect => 'sections', |
|
plsm => 'Please modify your selections so they include no more than one section', |
|
mayn => 'may not be used as the name for a section, as it is a reserved word', |
|
plsc => 'Please choose a different section name', |
|
mayt => 'may not be used as the name for a section, as it is the name of a course group', |
|
secn => 'Section names and group names must be distinct', |
|
secd => 'Section designations do not apply to ', |
|
role => 'roles', |
|
accr => 'role will be added with access to all sections', |
|
thwa => 'There was a problem with your course selection' |
|
); |
|
return %alerts; |
|
} |
|
|
|
|
1; |
1; |
|
|