version 1.13, 2007/12/11 01:17:16
|
version 1.17, 2007/12/21 12:41:25
|
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 236 sub domain_roles_select {
|
Line 235 sub domain_roles_select {
|
} elsif ($roletype eq 'author') { |
} 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 962 sub make_dates_default {
|
Line 961 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 1048 sub default_role_selector {
|
Line 1046 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); |
my $plrole=&Apache::lonnet::plaintext($role); |
$output .= ' <option value="'.$role.'">'.$plrole.'</option>'; |
$output .= ' <option value="'.$role.'">'.$plrole.'</option>'; |
Line 1066 sub default_course_roles {
|
Line 1065 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 1082 sub construction_space_roles {
|
Line 1081 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 1097 sub domain_roles {
|
Line 1096 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 1128 sub course_roles {
|
Line 1127 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 'author') { |
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 1287 sub print_userlist {
|
Line 1287 sub print_userlist {
|
} |
} |
} |
} |
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'}]; |
Line 1303 sub print_userlist {
|
Line 1302 sub print_userlist {
|
my (%cstr_roles,%dom_roles); |
my (%cstr_roles,%dom_roles); |
if ($context eq 'author') { |
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 1328 sub print_userlist {
|
Line 1327 sub print_userlist {
|
} else { |
} else { |
my @possroles; |
my @possroles; |
if ($env{'form.showrole'} eq 'Any') { |
if ($env{'form.showrole'} eq 'Any') { |
@possroles = ('ca','aa'); |
my @possroles = &roles_by_context($context); |
} else { |
} else { |
@possroles = ($env{'form.showrole'}); |
@possroles = ($env{'form.showrole'}); |
} |
} |
Line 1351 sub print_userlist {
|
Line 1350 sub print_userlist {
|
foreach my $cid (keys(%courses)) { |
foreach my $cid (keys(%courses)) { |
my %coursehash = |
my %coursehash = |
&Apache::lonnet::coursedescription($cid,{'one_time' => 1}); |
&Apache::lonnet::coursedescription($cid,{'one_time' => 1}); |
my $cdom = $coursehash{'domain'}; |
my ($cnum,$cdom,$cdesc) = &get_course_identity($cid); |
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'); |
unshift(@roles,'cr'); |
} else { |
} else { |
@roles = ($env{'form.showrole'}); |
@roles = ($env{'form.showrole'}); |
Line 1760 sub show_users_list {
|
Line 1758 sub show_users_list {
|
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 1783 function photowindow(photolink) {
|
Line 1783 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 1919 END
|
Line 1920 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); |
|
$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 1980 END
|
Line 1984 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 2014 END
|
Line 2018 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 2151 END
|
Line 2155 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 2256 END
|
Line 2282 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 2480 END
|
Line 2508 END
|
'<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 2529 END
|
Line 2556 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) = @_; |
my ($description,$showfilter); |
my ($description,$showfilter); |
if ($rolefilter ne 'Any') { |
if ($rolefilter ne 'Any') { |
$showfilter = $rolefilter; |
$showfilter = $rolefilter; |
Line 2550 sub results_header_row {
|
Line 2607 sub results_header_row {
|
$description .= &mt('All users in course with [_1] roles',$rolefilter); |
$description .= &mt('All users in course with [_1] roles',$rolefilter); |
} |
} |
} |
} |
|
if (exists($permission->{'view_section'})) { |
|
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') { |
} elsif ($context eq 'author') { |
$description = &mt('Author space for [_1].').' '; |
$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 2631 sub results_header_row {
|
Line 2697 sub results_header_row {
|
################################################# |
################################################# |
################################################# |
################################################# |
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 2641 sub show_drop_list {
|
Line 2708 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 2675 my %lt=&Apache::lonlocal::texthash('usrn
|
Line 2733 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 2687 my %lt=&Apache::lonlocal::texthash('usrn
|
Line 2745 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 2759 END
|
Line 2817 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 3269 sub user_change_result {
|
Line 3334 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 3279 sub print_expire_menu {
|
Line 3345 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 3299 sub update_user_list {
|
Line 3365 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 3314 sub update_user_list {
|
Line 3386 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 3347 sub update_user_list {
|
Line 3430 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 3450 sub update_user_list {
|
Line 3539 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 3691 ENDSECCODE
|
Line 3787 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 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); |
|
} |
|
|
|
|
|
|
1; |
1; |
|
|