';
$Str .= &hidden_input('nfields',$i);
$Str .= &hidden_input('keyfields',$keyfields);
- $Str .= "
".&mt('Login Type')." \n";
+
+ $Str .= '
'.&mt('Options').' '
+ .&Apache::lonhtmlcommon::start_pick_box();
+
+ $Str .= &Apache::lonhtmlcommon::row_title(&mt('Login Type'));
if ($context eq 'domain') {
- $Str .= '
'.&mt('Change authentication for existing users in domain "[_1]" to these settings?',$defdom).' '.&mt('No').' '.&mt('Yes').'
';
+ $Str .= '
'
+ .&mt('Change authentication for existing users in domain "[_1]" to these settings?'
+ ,$defdom)
+ .' '
+ .' '
+ .&mt('No').' '
+ .' '
+ .' '
+ .&mt('Yes').' '
+ .'
';
} else {
- $Str .= "
\n".
- &mt('Note: This will not take effect if the user already exists.').
+ $Str .= '
'."\n".
+ &mt('This will not take effect if the user already exists.').
&Apache::loncommon::help_open_topic('Auth_Options').
"
\n";
}
$Str .= &set_login($defdom,$krbform,$intform,$locform);
+
my ($home_server_pick,$numlib) =
&Apache::loncommon::home_server_form_item($defdom,'lcserver',
'default','hide');
if ($numlib > 1) {
- $Str .= '
'.&mt('LON-CAPA Home Server for New Users')." \n".
- &mt('LON-CAPA domain: [_1] with home server: [_2]',$defdom,
- $home_server_pick).'
';
- } else {
- $Str .= $home_server_pick;
- }
- $Str .= '
'.&mt('Default domain').' '."\n".
- &Apache::loncommon::select_dom_form($defdom,'defaultdomain',undef,1);
- $Str .= '
'.&mt('Starting and Ending Dates').
- " \n";
- $Str .= "
\n".$date_table."
\n";
+ $Str .= &Apache::lonhtmlcommon::row_closure()
+ .&Apache::lonhtmlcommon::row_title(
+ &mt('LON-CAPA Home Server for New Users'))
+ .&mt('LON-CAPA domain: [_1] with home server:','"'.$defdom.'"')
+ .$home_server_pick
+ .&Apache::lonhtmlcommon::row_closure();
+ } else {
+ $Str .= $home_server_pick.
+ &Apache::lonhtmlcommon::row_closure();
+ }
+
+ $Str .= &Apache::lonhtmlcommon::row_title(&mt('Default domain'))
+ .&Apache::loncommon::select_dom_form($defdom,'defaultdomain',undef,1)
+ .&Apache::lonhtmlcommon::row_closure();
+
+ $Str .= &Apache::lonhtmlcommon::row_title(&mt('Starting and Ending Dates'))
+ ."
\n".$date_table."
\n"
+ .&Apache::lonhtmlcommon::row_closure();
+
if ($context eq 'domain') {
- $Str .= '
'.&mt('Settings for assigning roles:').' '."\n".
- &mt('Pick the action to take on roles for these users:').'
'.&mt('No role changes').' '.&mt('Add a domain role').' '.&mt('Add a course role').'';
- }
- if ($context eq 'author') {
- $Str .= '
'.&mt('Default role')." \n".
- &mt('Choose the role to assign to users without a value specified in the uploaded file');
+ $Str .= &Apache::lonhtmlcommon::row_title(
+ &mt('Settings for assigning roles'))
+ .&mt('Pick the action to take on roles for these users:').'
'
+ .'
'
+ .' '
+ .' '.&mt('No role changes').' '
+ .' '
+ .' '
+ .' '.&mt('Add a domain role').' '
+ .' '
+ .' '
+ .' '.&mt('Add a course/community role').' '
+ .'';
+ } elsif ($context eq 'author') {
+ $Str .= &Apache::lonhtmlcommon::row_title(
+ &mt('Default role'))
+ .&mt('Choose the role to assign to users without a value specified in the uploaded file.')
} elsif ($context eq 'course') {
- $Str .= '
'.&mt('Default role and section')." \n".
- &mt('Choose the role and/or section(s) to assign to users without values specified in the uploaded file');
+ if ($showcredits) {
+ $Str .= &Apache::lonhtmlcommon::row_title(
+ &mt('Default role, section and credits'))
+ .&mt('Choose the role and/or section(s) and/or credits to assign to users without values specified in the uploaded file.');
+ } else {
+ $Str .= &Apache::lonhtmlcommon::row_title(
+ &mt('Default role and section'))
+ .&mt('Choose the role and/or section(s) to assign to users without values specified in the uploaded file.');
+ }
} else {
- $Str .= '
'.&mt('Default role and/or section(s)')." \n".
- &mt('Role and/or section(s) for users without values specified in the uploaded file.');
+ $Str .= &Apache::lonhtmlcommon::row_title(
+ &mt('Default role and/or section(s)'))
+ .&mt('Role and/or section(s) for users without values specified in the uploaded file.');
}
- $Str .= '
';
if (($context eq 'domain') || ($context eq 'author')) {
- my ($options,$cb_script,$coursepick) = &default_role_selector($context,1);
+ $Str .= '
';
+ my ($options,$cb_script,$coursepick) =
+ &default_role_selector($context,1,'',$showcredits);
if ($context eq 'domain') {
- $Str .= '
'.&mt('Domain Level').' '.$options.'
'.&mt('Course Level').' '.$cb_script.$coursepick;
+ $Str .= '
'
+ .''.&mt('Domain Level').' '
+ .$options
+ .'
'
+ .''.&mt('Course Level').' '
+ .'
'
+ .$cb_script.$coursepick
+ .&Apache::lonhtmlcommon::row_closure();
} elsif ($context eq 'author') {
- $Str .= $options;
+ $Str .= $options
+ .&Apache::lonhtmlcommon::row_closure(1); # last row in pick_box
}
} else {
my ($cnum,$cdom) = &get_course_identity();
my $rowtitle = &mt('section');
- my $secbox = §ion_picker($cdom,$cnum,'Any',$rowtitle,
- $permission,$context,'upload');
- $Str .= $secbox."
".&mt('Full Update')." \n".
- '
'.
- ' '.&mt('Display students with current/future access who are not in the uploaded file.').' '.&mt('Students selected from this list can be dropped.').'
'."\n";
+ my $defaultcredits;
+ if ($showcredits) {
+ $defaultcredits = &get_defaultcredits();
+ }
+ my $secbox = §ion_picker($cdom,$cnum,'Any',$rowtitle,$permission,
+ $context,'upload',$crstype,$showcredits,
+ $defaultcredits);
+ $Str .= $secbox
+ .&Apache::lonhtmlcommon::row_closure();
+ my %lt;
+ if ($crstype eq 'Community') {
+ %lt = &Apache::lonlocal::texthash (
+ disp => 'Display members with current/future access who are not in the uploaded file',
+ stus => 'Members selected from this list can be dropped.'
+ );
+ } else {
+ %lt = &Apache::lonlocal::texthash (
+ disp => 'Display students with current/future access who are not in the uploaded file',
+ stus => 'Students selected from this list can be dropped.'
+ );
+ }
+ $Str .= &Apache::lonhtmlcommon::row_title(&mt('Full Update'))
+ .'
'
+ .' '.$lt{'disp'}
+ .''
+ .$lt{'stus'}
+ .&Apache::lonhtmlcommon::row_closure();
}
if ($context eq 'course' || $context eq 'domain') {
$Str .= &forceid_change($context);
}
+
+ $Str .= &Apache::lonhtmlcommon::end_pick_box();
$Str .= '
';
- $Str .= '');
&print_upload_manager_footer($r,$i,$keyfields,$defdom,$today,$halfyear,
- $context,$permission);
+ $context,$permission,$crstype,$showcredits);
}
sub setup_date_selectors {
@@ -1012,7 +1258,7 @@ sub get_dates_from_form {
}
sub date_setting_table {
- my ($starttime,$endtime,$mode,$bulkaction,$formname,$permission) = @_;
+ my ($starttime,$endtime,$mode,$bulkaction,$formname,$permission,$crstype) = @_;
my $nolink;
if ($bulkaction) {
$nolink = 1;
@@ -1029,9 +1275,13 @@ sub date_setting_table {
($env{'form.action'} eq 'upload')) {
if ($env{'request.course.sec'} eq '') {
$dateDefault = ''."\n".
' '.&mt('Please select').' '."\n";
if ($context eq 'course') {
- $options .= &default_course_roles($context,$checkpriv,%customroles);
+ $options .= &default_course_roles($context,$checkpriv,$crstype,%customroles);
} elsif ($context eq 'author') {
my @roles = &construction_space_roles($checkpriv);
foreach my $role (@roles) {
@@ -1113,18 +1372,24 @@ sub default_role_selector {
$options .= ' '.$plrole.' ';
}
my $courseform = &Apache::loncommon::selectcourse_link
- ('studentform','dccourse','dcdomain','coursedesc',"$env{'request.role.domain'}",undef,'Course');
+ ('studentform','dccourse','dcdomain','coursedesc',"$env{'request.role.domain'}",undef,'Course/Community');
+ my ($credit_elem,$creditsinput);
+ if ($showcredits) {
+ $credit_elem = 'credits';
+ $creditsinput = ' ';
+ }
$cb_jscript =
- &Apache::loncommon::coursebrowser_javascript($env{'request.role.domain'},'currsec','studentform');
+ &Apache::loncommon::coursebrowser_javascript($env{'request.role.domain'},'currsec','studentform','courserole','Course/Community',$credit_elem);
$coursepick = &Apache::loncommon::start_data_table().
&Apache::loncommon::start_data_table_header_row().
''.$courseform.' '.$lt{'rol'}.' '.
''.$lt{'grs'}.' '.
+ ''.$lt{'crd'}.' '.
&Apache::loncommon::end_data_table_header_row().
&Apache::loncommon::start_data_table_row()."\n".
- ' '."\n".
+ ' '."\n".
''."\n".
- &default_course_roles($context,$checkpriv,%customroles)."\n".
+ &default_course_roles($context,$checkpriv,'Course',%customroles)."\n".
' '.
''.
''.
@@ -1140,7 +1405,8 @@ sub default_role_selector {
$env{'request.role.domain'}.'" />'.
' '.
' '.
- '
'.
+ ' '.
+ ''.$creditsinput.
&Apache::loncommon::end_data_table_row().
&Apache::loncommon::end_data_table()."\n";
}
@@ -1149,13 +1415,13 @@ sub default_role_selector {
}
sub default_course_roles {
- my ($context,$checkpriv,%customroles) = @_;
+ my ($context,$checkpriv,$crstype,%customroles) = @_;
my $output;
my $custom = 1;
- my @roles = &course_roles($context,$checkpriv,$custom);
+ my @roles = &course_roles($context,$checkpriv,$custom,lc($crstype));
foreach my $role (@roles) {
if ($role ne 'cr') {
- my $plrole=&Apache::lonnet::plaintext($role);
+ my $plrole=&Apache::lonnet::plaintext($role,$crstype);
$output .= ' '.$plrole.' ';
}
}
@@ -1204,8 +1470,14 @@ sub domain_roles {
}
sub course_roles {
- my ($context,$checkpriv,$custom) = @_;
- my @allroles = &roles_by_context('course',$custom);
+ my ($context,$checkpriv,$custom,$roletype) = @_;
+ my $crstype;
+ if ($roletype eq 'community') {
+ $crstype = 'Community' ;
+ } else {
+ $crstype = 'Course';
+ }
+ my @allroles = &roles_by_context('course',$custom,$crstype);
my @roles;
if ($context eq 'domain') {
@roles = @allroles;
@@ -1216,7 +1488,7 @@ sub course_roles {
if (&Apache::lonnet::allowed('c'.$role,$env{'request.course.id'})) {
push(@roles,$role);
} else {
- if ($role ne 'cc' && $env{'request.course.sec'} ne '') {
+ if ((($role ne 'cc') && ($role ne 'co')) && ($env{'request.course.sec'} ne '')) {
if (&Apache::lonnet::allowed('c'.$role,
$env{'request.course.id'}.'/'.
$env{'request.course.sec'})) {
@@ -1234,19 +1506,19 @@ sub course_roles {
}
sub curr_role_permissions {
- my ($context,$setting,$checkpriv) = @_;
+ my ($context,$setting,$checkpriv,$type) = @_;
my $custom = 1;
my @roles;
if ($context eq 'author') {
@roles = &construction_space_roles($checkpriv);
} elsif ($context eq 'domain') {
if ($setting eq 'course') {
- @roles = &course_roles($context,$checkpriv,$custom);
+ @roles = &course_roles($context,$checkpriv,$custom,$type);
} else {
@roles = &domain_roles($checkpriv);
}
} elsif ($context eq 'course') {
- @roles = &course_roles($context,$checkpriv,$custom);
+ @roles = &course_roles($context,$checkpriv,$custom,$type);
}
return @roles;
}
@@ -1254,10 +1526,15 @@ sub curr_role_permissions {
# ======================================================= Existing Custom Roles
sub my_custom_roles {
+ my ($crstype) = @_;
my %returnhash=();
+ my $extra = &Apache::lonnet::freeze_escape({'skipcheck' => 1});
my %rolehash=&Apache::lonnet::dump('roles');
- foreach my $key (keys %rolehash) {
+ foreach my $key (keys(%rolehash)) {
if ($key=~/^rolesdef\_(\w+)$/) {
+ if ($crstype eq 'Community') {
+ next if ($rolehash{$key} =~ /bre\&S/);
+ }
$returnhash{$1}=$1;
}
}
@@ -1266,7 +1543,7 @@ sub my_custom_roles {
sub print_userlist {
my ($r,$mode,$permission,$context,$formname,$totcodes,$codetitles,
- $idlist,$idlist_titles) = @_;
+ $idlist,$idlist_titles,$showcredits) = @_;
my $format = $env{'form.output'};
if (! exists($env{'form.sortby'})) {
$env{'form.sortby'} = 'username';
@@ -1274,8 +1551,9 @@ sub print_userlist {
if ($env{'form.Status'} !~ /^(Any|Expired|Active|Future)$/) {
$env{'form.Status'} = 'Active';
}
+ my $onchange = "javascript:updateCols('Status');";
my $status_select = &Apache::lonhtmlcommon::StatusOptions
- ($env{'form.Status'});
+ ($env{'form.Status'},undef,undef,$onchange);
if ($env{'form.showrole'} eq '') {
if ($context eq 'course') {
@@ -1300,36 +1578,32 @@ sub print_userlist {
@statuses = ('future');
}
-# if ($context eq 'course') {
-# $r->print(&display_adv_courseroles());
-# }
- #
# Interface output
$r->print('');
return;
}
- if (!(($context eq 'domain') && ($env{'form.roletype'} eq 'course'))) {
- $r->print(' '.&list_submit_button(&mt('Update Display')).
- "\n\n");
+ if (!(($context eq 'domain') &&
+ (($env{'form.roletype'} eq 'course') || ($env{'form.roletype'} eq 'community')))) {
+ $r->print(' '.
+ &list_submit_button(&mt('Update Display'))."\n");
+ }
+
+ my @cols = &infocolumns($context,$mode,$showcredits);
+ if (!@cols) {
+ $r->print(''.
+ &mt('No user information selected for display.').' '.
+ ' '."\n");
+ return;
}
my ($indexhash,$keylist) = &make_keylist_array();
- my (%userlist,%userinfo);
- if ($context eq 'domain' && $env{'form.roletype'} eq 'course') {
+ my (%userlist,%userinfo,$clearcoursepick);
+ if (($context eq 'domain') &&
+ ($env{'form.roletype'} eq 'course') ||
+ ($env{'form.roletype'} eq 'community')) {
+ my ($crstype,$numcodes,$title,$warning);
+ if ($env{'form.roletype'} eq 'course') {
+ $crstype = 'Course';
+ $numcodes = $totcodes;
+ $title = &mt('Select Courses');
+ $warning = &mt('Warning: data retrieval for multiple courses can take considerable time, as this operation is not currently optimized.');
+ } elsif ($env{'form.roletype'} eq 'community') {
+ $crstype = 'Community';
+ $numcodes = 0;
+ $title = &mt('Select Communities');
+ $warning = &mt('Warning: data retrieval for multiple communities can take considerable time, as this operation is not currently optimized.');
+ }
+ my @standardnames = &Apache::loncommon::get_standard_codeitems();
my $courseform =
- &Apache::lonhtmlcommon::course_selection($formname,$totcodes,
- $codetitles,$idlist,$idlist_titles);
- $r->print(''.&Apache::lonhtmlcommon::start_pick_box()."\n".
- &Apache::lonhtmlcommon::start_pick_box()."\n".
- &Apache::lonhtmlcommon::row_title(&mt('Select Course(s)'),
- 'LC_oddrow_value')."\n".
+ &Apache::lonhtmlcommon::course_selection($formname,$numcodes,
+ $codetitles,$idlist,$idlist_titles,$crstype,
+ \@standardnames);
+ $r->print('
'.
+ '
'.$title.' '."\n".
$courseform."\n".
- &Apache::lonhtmlcommon::row_closure(1).
- &Apache::lonhtmlcommon::end_pick_box().''.
- ''.&list_submit_button(&mt('Update Display')).
- "\n".'
'.&mt('Warning: data retrieval for multiple courses can take considerable time, as this operation is not currently optimized.').' '."\n");
- if ($env{'form.coursepick'}) {
- $r->print(' '.&mt('Searching').' ... ');
+ ' '.
+ ' '.
+ &list_submit_button(&mt('Update Display')).
+ "\n".'
'.$warning.' '."\n");
+ $clearcoursepick = 0;
+ if (($env{'form.origroletype'} ne '') &&
+ ($env{'form.origroletype'} ne $env{'form.roletype'})) {
+ $clearcoursepick = 1;
+ }
+ if (($env{'form.coursepick'}) && (!$clearcoursepick)) {
+ $r->print(' '.&mt('Searching ...').' ');
}
} else {
- $r->print(' '.&mt('Searching').' ... ');
+ $r->print(''.&mt('Searching ...').'
');
}
$r->rflush();
if ($context eq 'course') {
@@ -1438,8 +1743,9 @@ sub print_userlist {
}
}
}
- } elsif ($env{'form.roletype'} eq 'course') {
- if ($env{'form.coursepick'}) {
+ } elsif (($env{'form.roletype'} eq 'course') ||
+ ($env{'form.roletype'} eq 'community')) {
+ if (($env{'form.coursepick'}) && (!$clearcoursepick)) {
my %courses = &process_coursepick();
my %allusers;
my $hidepriv = 1;
@@ -1450,7 +1756,8 @@ sub print_userlist {
my (@roles,@sections,%access,%users,%userdata,
%statushash);
if ($env{'form.showrole'} eq 'Any') {
- @roles = &course_roles($context,undef,$custom);
+ @roles = &course_roles($context,undef,$custom,
+ $env{'form.roletype'});
} else {
@roles = ($env{'form.showrole'});
}
@@ -1487,31 +1794,37 @@ sub print_userlist {
}
}
if (keys(%userlist) == 0) {
+ my $msg = '';
if ($context eq 'author') {
- $r->print(&mt('There are no co-authors to display.')."\n");
+ $msg = &mt('There are no co-authors to display.');
} elsif ($context eq 'domain') {
if ($env{'form.roletype'} eq 'domain') {
- $r->print(&mt('There are no users with domain roles to display.')."\n");
+ $msg = &mt('There are no users with domain roles to display.');
} elsif ($env{'form.roletype'} eq 'author') {
- $r->print(&mt('There are no authors or co-authors to display.')."\n");
+ $msg = &mt('There are no authors or co-authors to display.');
} elsif ($env{'form.roletype'} eq 'course') {
- $r->print(&mt('There are no course users to display')."\n");
+ $msg = &mt('There are no course users to display');
+ } elsif ($env{'form.roletype'} eq 'community') {
+ $msg = &mt('There are no community users to display');
}
} elsif ($context eq 'course') {
$r->print(&mt('There are no course users to display.')."\n");
}
+ $r->print(''.$msg.'
'."\n") if $msg;
} else {
# Print out the available choices
my $usercount;
if ($env{'form.action'} eq 'modifystudent') {
($usercount) = &show_users_list($r,$context,'view',$permission,
- $env{'form.Status'},\%userlist,$keylist);
+ $env{'form.Status'},\%userlist,$keylist,'',
+ $showcredits);
} else {
($usercount) = &show_users_list($r,$context,$env{'form.output'},
- $permission,$env{'form.Status'},\%userlist,$keylist);
+ $permission,$env{'form.Status'},\%userlist,
+ $keylist,'',$showcredits);
}
if (!$usercount) {
- $r->print(''
+ $r->print(''
.&mt('There are no users matching the search criteria.')
.' '
);
@@ -1519,6 +1832,7 @@ sub print_userlist {
}
$r->print(' ');
+ return;
}
sub role_filter {
@@ -1531,14 +1845,23 @@ sub role_filter {
my ($role_select);
if ($context eq 'domain') {
$role_select = &domain_roles_select();
- $output = ''
+ $output = ''
.&mt('Role Type: [_1]',$role_select)
- .' ';
+ .' ';
} else {
- $role_select = ''."\n".
+ $role_select = ''."\n".
''.
&mt('Any role').' ';
- my @poss_roles = &curr_role_permissions($context);
+ my ($roletype,$crstype);
+ if ($context eq 'course') {
+ $crstype = &Apache::loncommon::course_type();
+ if ($crstype eq 'Community') {
+ $roletype = 'community';
+ } else {
+ $roletype = 'course';
+ }
+ }
+ my @poss_roles = &curr_role_permissions($context,'','',$roletype);
foreach my $role (@poss_roles) {
$roleselected = '';
if ($role eq $env{'form.showrole'}) {
@@ -1548,14 +1871,14 @@ sub role_filter {
if ($role eq 'cr') {
$plrole = &mt('Custom role');
} else {
- $plrole=&Apache::lonnet::plaintext($role);
+ $plrole=&Apache::lonnet::plaintext($role,$crstype);
}
$role_select .= ''.$plrole.' ';
}
$role_select .= ' ';
- $output = ''
+ $output = ''
.&mt('Role: [_1]',$role_select)
- .' ';
+ .'';
}
return $output;
}
@@ -1584,7 +1907,7 @@ sub section_group_filter {
$env{'form.'.$name{$item}} = 'all';
}
if ($item eq 'sec') {
- if ($env{'form.showrole'} eq 'cc') {
+ if (($env{'form.showrole'} eq 'cc') || ($env{'form.showrole'} eq 'co')) {
$env{'form.'.$name{$item}} = 'none';
}
my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum);
@@ -1595,11 +1918,11 @@ sub section_group_filter {
}
if (@options > 0) {
my $currsel;
- $markup = ' '."\n";
+ $markup = ''."\n";
foreach my $option ('all','none',@options) {
$currsel = '';
if ($env{'form.'.$name{$item}} eq $option) {
- $currsel = ' selected="selected" ';
+ $currsel = ' selected="selected"';
}
$markup .= ' ';
if (($option eq 'all') || ($option eq 'none')) {
@@ -1610,9 +1933,158 @@ sub section_group_filter {
$markup .= ' '."\n";
}
$markup .= ' '."\n";
- $output .= (' 'x3).''.$title{$item}.': '.$markup.' ';
+ $output .= (' 'x3).''
+ .''.$title{$item}.': '.$markup.' '
+ .' ';
+ }
+ }
+ return $output;
+}
+
+sub infocolumns {
+ my ($context,$mode,$showcredits) = @_;
+ my @cols;
+ if (($mode eq 'pickauthor') || ($mode eq 'autoenroll')) {
+ @cols = &get_cols_array($context,$mode,$showcredits);
+ } else {
+ my @posscols = &get_cols_array($context,$mode,$showcredits);
+ if ($env{'form.phase'} ne '') {
+ my @checkedcols = &Apache::loncommon::get_env_multiple('form.showcol');
+ foreach my $col (@checkedcols) {
+ if (grep(/^$col$/,@posscols)) {
+ push(@cols,$col);
+ }
+ }
+ } else {
+ @cols = @posscols;
+ }
+ }
+ return @cols;
+}
+
+sub get_cols_array {
+ my ($context,$mode,$showcredits) = @_;
+ my @cols;
+ if ($mode eq 'pickauthor') {
+ @cols = ('username','fullname','status','email');
+ } else {
+ @cols = ('username','domain','id','fullname');
+ if ($context eq 'course') {
+ push(@cols,'section');
+ }
+ push(@cols,('start','end','role'));
+ unless (($mode eq 'autoenroll') && ($env{'form.Status'} ne 'Any')) {
+ push(@cols,'status');
+ }
+ if ($context eq 'course') {
+ push(@cols,'groups');
+ }
+ push(@cols,'email');
+ if (($context eq 'course') && ($mode ne 'autoenroll')) {
+ if ($showcredits) {
+ push(@cols,'credits');
+ }
+ push(@cols,'lastlogin','clicker');
+ }
+ if (($context eq 'course') && ($mode ne 'autoenroll') &&
+ ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'})) {
+ push(@cols,'photo');
+ }
+ if ($context eq 'domain') {
+ push (@cols,'extent');
}
}
+ return @cols;
+}
+
+sub column_checkboxes {
+ my ($context,$mode,$formname,$showcredits) = @_;
+ my @cols = &get_cols_array($context,$mode,$showcredits);
+ my @showncols = &Apache::loncommon::get_env_multiple('form.showcol');
+ my (%disabledchk,%unchecked);
+ if ($env{'form.phase'} eq '') {
+ $disabledchk{'status'} = 1;
+ if ($context eq 'course') {
+ $disabledchk{'role'} = 1;
+ $unchecked{'photo'} = 1;
+ $unchecked{'clicker'} = 1;
+ if ($showcredits) {
+ $unchecked{'credits'} = 1;
+ }
+ } elsif ($context eq 'domain') {
+ $unchecked{'extent'} = 1;
+ }
+ $unchecked{'start'} = 1;
+ $unchecked{'end'} = 1;
+ } else {
+ if ($env{'form.Status'} ne 'Any') {
+ $disabledchk{'status'} = 1;
+ }
+ if (($env{'form.showrole'} ne 'Any') && ($env{'form.showrole'} ne 'cr')) {
+ $disabledchk{'role'} = 1;
+ }
+ if ($context eq 'domain') {
+ if (($env{'form.roletype'} eq 'course') ||
+ ($env{'form.roletype'} eq 'community')) {
+ $disabledchk{'status'} = 1;
+ } elsif ($env{'form.roletype'} eq 'domain') {
+ $disabledchk{'extent'} = 1;
+ }
+ }
+ }
+ my $numposs = scalar(@cols);
+ my $numinrow = 7;
+ my %lt = &get_column_names($context);
+ my $output = ''.&mt('Information to show').' '."\n".''.
+ ' '.
+ (' 'x3).
+ ' '.
+ ' ';
return $output;
}
@@ -1621,6 +2093,40 @@ sub list_submit_button {
return ' ';
}
+sub get_column_names {
+ my ($context) = @_;
+ my %lt = &Apache::lonlocal::texthash(
+ 'username' => "username",
+ 'domain' => "domain",
+ 'id' => 'ID',
+ 'fullname' => "name",
+ 'section' => "section",
+ 'groups' => "active groups",
+ 'start' => "start date",
+ 'end' => "end date",
+ 'status' => "status",
+ 'role' => "role",
+ 'credits' => "credits",
+ 'type' => "enroll type/action",
+ 'email' => "e-mail address",
+ 'photo' => "photo",
+ 'lastlogin' => "last login",
+ 'extent' => "extent",
+ 'ca' => "check all",
+ 'ua' => "uncheck all",
+ 'clicker' => "clicker-ID",
+ );
+ if ($context eq 'domain' && $env{'form.roletype'} eq 'course') {
+ $lt{'extent'} = &mt('course(s): description, section(s), status');
+ } elsif ($context eq 'domain' && $env{'form.roletype'} eq 'community') {
+ $lt{'extent'} = &mt('community(s): description, section(s), status');
+ } elsif (($context eq 'author') ||
+ ($context eq 'domain' && $env{'form.roletype'} eq 'author')) {
+ $lt{'extent'} = &mt('author');
+ }
+ return %lt;
+}
+
sub gather_userinfo {
my ($context,$format,$userlist,$indexhash,$userinfo,$rolehash,$permission) = @_;
my $viewablesec;
@@ -1663,7 +2169,8 @@ sub gather_userinfo {
$indexhash,$uniqid,$userlist);
}
}
- } elsif ($env{'form.roletype'} eq 'course') {
+ } elsif (($env{'form.roletype'} eq 'course') ||
+ ($env{'form.roletype'} eq 'community')) {
($userdata{'username'},$userdata{'domain'},$userdata{'role'}) =
split(/:/,$item);
if (ref($rolehash->{$item}) eq 'HASH') {
@@ -1713,7 +2220,8 @@ sub gather_userinfo {
sub build_user_record {
my ($context,$userdata,$userinfo,$indexhash,$record_key,$userlist) = @_;
next if ($userdata->{'start'} eq '-1' && $userdata->{'end'} eq '-1');
- if (!(($context eq 'domain') && ($env{'form.roletype'} eq 'course'))) {
+ if (!(($context eq 'domain') && (($env{'form.roletype'} eq 'course')
+ && ($env{'form.roletype'} eq 'community')))) {
&process_date_info($userdata);
}
my $username = $userdata->{'username'};
@@ -1782,7 +2290,7 @@ function setCourseCat(formname) {
if (formname.Year.options[formname.Year.selectedIndex].value == -1) {
return;
}
- courseSet('Year');
+ courseSet('$codetitles[0]');
for (var j=0; j 1) {
my @course_ids = split(/&&/,$env{'form.courselist'});
@@ -1864,29 +2376,6 @@ sub instcode_from_coursefilter {
return $instcode;
}
-sub display_adv_courseroles {
- my $output;
- #
- # List course personnel
- my %coursepersonnel =
- &Apache::lonnet::get_course_adv_roles($env{'request.course.id'});
- #
- $output = ' '.&Apache::loncommon::start_data_table();
- foreach my $role (sort(keys(%coursepersonnel))) {
- next if ($role =~ /^\s*$/);
- $output .= &Apache::loncommon::start_data_table_row().
- ''.$role.' ';
- foreach my $user (split(',',$coursepersonnel{$role})) {
- my ($puname,$pudom)=split(':',$user);
- $output .= ' '.&Apache::loncommon::aboutmewrapper(
- &Apache::loncommon::plainname($puname,$pudom),
- $puname,$pudom);
- }
- $output .= ' '.&Apache::loncommon::end_data_table_row();
- }
- $output .= &Apache::loncommon::end_data_table();
-}
-
sub make_keylist_array {
my ($index,$keylist);
$index->{'domain'} = &Apache::loncoursedata::CL_SDOM();
@@ -1905,6 +2394,7 @@ sub make_keylist_array {
$index->{'extent'} = &Apache::loncoursedata::CL_EXTENT();
$index->{'photo'} = &Apache::loncoursedata::CL_PHOTO();
$index->{'thumbnail'} = &Apache::loncoursedata::CL_THUMBNAIL();
+ $index->{'credits'} = &Apache::loncoursedata::CL_CREDITS();
foreach my $key (keys(%{$index})) {
$keylist->[$index->{$key}] = $key;
}
@@ -1953,7 +2443,8 @@ sub process_date_info {
}
sub show_users_list {
- my ($r,$context,$mode,$permission,$statusmode,$userlist,$keylist,$formname)=@_;
+ my ($r,$context,$mode,$permission,$statusmode,$userlist,$keylist,$formname,
+ $showcredits)=@_;
if ($formname eq '') {
$formname = 'studentform';
}
@@ -1968,36 +2459,36 @@ sub show_users_list {
my @sortable = ('username','domain','id','fullname','start','end','email','role');
if ($context eq 'course') {
push(@sortable,('section','groups','type'));
+ if ($showcredits) {
+ push(@sortable,'credits');
+ }
} else {
push(@sortable,'extent');
}
if ($mode eq 'pickauthor') {
@sortable = ('username','fullname','email','status');
}
- if (!grep(/^\Q$sortby\E$/,@sortable)) {
+ my %is_sortable;
+ map { $is_sortable{$_} => 1; } @sortable;
+ unless ($is_sortable{$sortby}) {
$sortby = 'username';
}
my $setting = $env{'form.roletype'};
- my ($cid,$cdom,$cnum,$classgroups,$displayphotos,$displayclickers);
+ my ($cid,$cdom,$cnum,$classgroups,$crstype,$defaultcredits);
if ($context eq 'course') {
$cid = $env{'request.course.id'};
+ $crstype = &Apache::loncommon::course_type();
($cnum,$cdom) = &get_course_identity($cid);
+ $defaultcredits = $env{'course.'.$cid.'.internal.defaultcredits'};
($classgroups) = &Apache::loncoursedata::get_group_memberships(
$userlist,$keylist,$cdom,$cnum);
if ($mode eq 'autoenroll') {
$env{'form.showrole'} = 'st';
} else {
- if (! exists($env{'form.displayphotos'})) {
- $env{'form.displayphotos'} = 'off';
- }
- $displayphotos = $env{'form.displayphotos'};
- if (! exists($env{'form.displayclickers'})) {
- $env{'form.displayclickers'} = 'off';
- }
- $displayclickers = $env{'form.displayclickers'};
if ($env{'course.'.$cid.'.internal.showphoto'}) {
$r->print('
');
}
- $r->print(<
-
-END
+ }
+ } elsif ($context eq 'domain') {
+ if ($setting eq 'community') {
+ $crstype = 'Community';
+ } elsif ($setting eq 'course') {
+ $crstype = 'Course';
}
}
if ($mode ne 'autoenroll' && $mode ne 'pickauthor') {
- my $check_uncheck_js = &Apache::loncommon::check_uncheck_jscript();
my $date_sec_selector = &date_section_javascript($context,$setting,$statusmode);
my $verify_action_js = &bulkaction_javascript($formname);
$r->print(<
-$check_uncheck_js
+//
$date_sec_selector
@@ -2067,82 +2572,39 @@ END
$r->print(<
END
-
- my %lt=&Apache::lonlocal::texthash(
- 'username' => "username",
- 'domain' => "domain",
- 'id' => 'ID',
- 'fullname' => "name",
- 'section' => "section",
- 'groups' => "active groups",
- 'start' => "start date",
- 'end' => "end date",
- 'status' => "status",
- 'role' => "role",
- 'type' => "enroll type/action",
- 'email' => "e-mail address",
- 'photo' => "photo",
- 'extent' => "extent",
+ my @cols = &infocolumns($context,$mode,$showcredits);
+ my %coltxt = &get_column_names($context);
+ my %acttxt = &Apache::lonlocal::texthash(
'pr' => "Proceed",
- 'ca' => "check all",
- 'ua' => "uncheck all",
'ac' => "Action to take for selected users",
'link' => "Behavior of clickable username link for each user",
'aboutme' => "Display a user's personal information page",
'owin' => "Open in a new window",
'modify' => "Modify a user's information",
- 'clicker' => "Clicker-ID",
+ 'track' => "View a user's recent activity",
);
- if ($context eq 'domain' && $env{'form.roletype'} eq 'course') {
- $lt{'extent'} = &mt('Course(s): description, section(s), status');
- } elsif ($context eq 'author') {
- $lt{'extent'} = &mt('Author');
- }
- my @cols;
- if ($mode eq 'pickauthor') {
- @cols = ('username','fullname','status','email');
- } else {
- @cols = ('username','domain','id','fullname');
- if ($context eq 'course') {
- push(@cols,'section');
- }
- if (!($context eq 'domain' && $env{'form.roletype'} eq 'course')) {
- push(@cols,('start','end'));
- }
- if ($env{'form.showrole'} eq 'Any' || $env{'form.showrole'} eq 'cr') {
- push(@cols,'role');
- }
- if ($context eq 'domain' && ($env{'form.roletype'} eq 'author' ||
- $env{'form.roletype'} eq 'course')) {
- push (@cols,'extent');
- }
- if (($statusmode eq 'Any') &&
- (!($context eq 'domain' && $env{'form.roletype'} eq 'course'))) {
- push(@cols,'status');
- }
- if ($context eq 'course') {
- push(@cols,'groups');
- }
- push(@cols,'email');
- }
-
+ my %lt = (%coltxt,%acttxt);
my $rolefilter = $env{'form.showrole'};
if ($env{'form.showrole'} eq 'cr') {
$rolefilter = &mt('custom');
} elsif ($env{'form.showrole'} ne 'Any') {
- $rolefilter = &Apache::lonnet::plaintext($env{'form.showrole'});
+ $rolefilter = &Apache::lonnet::plaintext($env{'form.showrole'},$crstype);
}
my $results_description;
if ($mode ne 'autoenroll') {
$results_description = &results_header_row($rolefilter,$statusmode,
- $context,$permission,$mode);
- $r->print(''.$results_description.' ');
+ $context,$permission,$mode,$crstype);
+ $r->print(''.$results_description.' ');
}
my ($output,$actionselect,%canchange,%canchangesec);
if ($mode eq 'html' || $mode eq 'view' || $mode eq 'autoenroll' || $mode eq 'pickauthor') {
if ($mode ne 'autoenroll' && $mode ne 'pickauthor') {
if ($permission->{'cusr'}) {
- $actionselect = &select_actions($context,$setting,$statusmode,$formname);
+ unless (($context eq 'domain') &&
+ (($setting eq 'course') || ($setting eq 'community'))) {
+ $actionselect =
+ &select_actions($context,$setting,$statusmode,$formname);
+ }
}
$r->print(<
@@ -2153,7 +2615,7 @@ END
END
if ($actionselect) {
$output .= <<"END";
-$lt{'ac'}
+
$lt{'ac'}
$actionselect
@@ -2162,9 +2624,9 @@ END
if ($env{'form.showrole'} eq 'Any') {
my $custom = 1;
if ($context eq 'domain') {
- @allroles = &roles_by_context($setting,$custom);
+ @allroles = &roles_by_context($setting,$custom,$crstype);
} else {
- @allroles = &roles_by_context($context,$custom);
+ @allroles = &roles_by_context($context,$custom,$crstype);
}
} else {
@allroles = ($env{'form.showrole'});
@@ -2194,16 +2656,28 @@ END
if (&Apache::lonnet::allowed('c'.$role,$env{'request.course.id'}.'/'.$env{'request.course.sec'})) {
$canchangesec{$role} = $env{'request.course.sec'};
}
+ } elsif ((($role eq 'co') && ($crstype eq 'Community')) ||
+ (($role eq 'cc') && ($crstype eq 'Course'))) {
+ if (&is_courseowner($env{'request.course.id'},
+ $env{'course.'.$env{'request.course.id'}.'.internal.courseowner'})) {
+ $canchange{$role} = 1;
+ }
}
}
}
}
- $output .= '';
}
- $output .= "\n".''."\n".
+ $output .= "\n".' '."\n".
&Apache::loncommon::start_data_table().
&Apache::loncommon::start_data_table_header_row();
if ($mode eq 'autoenroll') {
@@ -2230,55 +2708,21 @@ END
$lt{'type'}
";
} else {
- if ($mode eq 'pickauthor') {
- $output .= "\n".' '."\n";
- } else {
- $output .= "\n".''.&mt('Count').' '."\n";
- }
+ $output .= "\n".' '."\n";
if ($actionselect) {
$output .= ''.&mt('Select').' '."\n";
}
}
foreach my $item (@cols) {
- $output .= "$lt{$item} \n";
- }
- my %role_types = &role_type_names();
- if ($context eq 'course' && $mode ne 'autoenroll') {
- if ($env{'form.showrole'} eq 'st' || $env{'form.showrole'} eq 'Any') {
- # Clicker display on or off?
- my %clicker_options = (
- 'on' => 'Show',
- 'off' => 'Hide',
- );
- my $clickerchg = 'on';
- if ($displayclickers eq 'on') {
- $clickerchg = 'off';
- }
- $output .= ' '."\n".' '
- .&mt('[_1]'.$clicker_options{$clickerchg}.'[_2] clicker id'
- ,''
- ,' ')
- ."\n".' '."\n";
-
- # Photo display on or off?
- if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) {
- my %photo_options = &Apache::lonlocal::texthash(
- 'on' => 'Show',
- 'off' => 'Hide',
- );
- my $photochg = 'on';
- if ($displayphotos eq 'on') {
- $photochg = 'off';
- }
- $output .= ' '."\n".' '.
- ''.
- $photo_options{$photochg}.' '.$lt{'photo'}."\n".
- ' '."\n";
- }
+ $output .= "";
+ if ($is_sortable{$item}) {
+ $output .= "$lt{$item} ";
+ } else {
+ $output .= $lt{$item};
}
+ $output .= " \n";
}
+ my %role_types = &role_type_names();
$output .= &Apache::loncommon::end_data_table_header_row();
# Done with the HTML header line
} elsif ($mode eq 'csv') {
@@ -2289,20 +2733,22 @@ END
time.'_'.rand(1000000000).'.csv';
unless ($CSVfile = Apache::File->new('>/home/httpd'.$CSVfilename)) {
$r->log_error("Couldn't open $CSVfilename for output $!");
- $r->print(&mt('Problems occurred in writing the CSV file. '
- .'This error has been logged. '
- .'Please alert your LON-CAPA administrator.'));
+ $r->print(
+ ''
+ .&mt('Problems occurred in writing the CSV file.')
+ .' '.&mt('This error has been logged.')
+ .' '.&mt('Please alert your LON-CAPA administrator.')
+ .'
'
+ );
$CSVfile = undef;
}
#
- push @cols,'clicker';
# Write headers and data to file
print $CSVfile '"'.$results_description.'"'."\n";
print $CSVfile '"'.join('","',map {
&Apache::loncommon::csv_translate($lt{$_})
} (@cols))."\"\n";
} elsif ($mode eq 'excel') {
- push @cols,'clicker';
# Create the excel spreadsheet
($excel_workbook,$excel_filename,$format) =
&Apache::loncommon::create_workbook($r);
@@ -2338,6 +2784,11 @@ END
Future => 'Future',
Expired => 'Expired',
);
+ # If this is for a single course get last course "log-in".
+ my %crslogins;
+ if ($context eq 'course') {
+ %crslogins=&Apache::lonnet::dump('nohist_crslastlogin',$cdom,$cnum);
+ }
# Get groups, role, permanent e-mail so we can sort on them if
# necessary.
foreach my $user (keys(%{$userlist})) {
@@ -2365,7 +2816,8 @@ END
}
} elsif ($env{'form.roletype'} eq 'author') {
($uname,$udom,$role) = split(/:/,$user,-1);
- } elsif ($env{'form.roletype'} eq 'course') {
+ } elsif (($env{'form.roletype'} eq 'course') ||
+ ($env{'form.roletype'} eq 'community')) {
($uname,$udom,$role) = split(/:/,$user);
}
} else {
@@ -2420,7 +2872,7 @@ END
}
}
if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) {
- if (($displayphotos eq 'on') && ($role eq 'st')) {
+ if ((grep/^photo$/,@cols) && ($role eq 'st')) {
$userlist->{$user}->[$index{'photo'}] =
&Apache::lonnet::retrievestudentphoto($udom,$uname,'jpg');
$userlist->{$user}->[$index{'thumbnail'}] =
@@ -2428,6 +2880,11 @@ END
'gif','thumbnail');
}
}
+ if (($role eq 'st') && ($defaultcredits)) {
+ if ($userlist->{$user}->[$index{'credits'}] eq '') {
+ $userlist->{$user}->[$index{'credits'}] = $defaultcredits;
+ }
+ }
}
}
my %emails = &Apache::loncommon::getemails($uname,$udom);
@@ -2472,16 +2929,24 @@ END
if ($clickers!~/\w/) { $clickers='-'; }
$in{'clicker'} = $clickers;
my $role = $in{'role'};
- $in{'role'}=&Apache::lonnet::plaintext($sdata->[$index{'role'}]);
- if (! defined($in{'start'}) || $in{'start'} == 0) {
- $in{'start'} = &mt('none');
- } else {
- $in{'start'} = &Apache::lonlocal::locallocaltime($in{'start'});
+ $in{'role'}=&Apache::lonnet::plaintext($sdata->[$index{'role'}],$crstype);
+ unless ($mode eq 'excel') {
+ if (! defined($in{'start'}) || $in{'start'} == 0) {
+ $in{'start'} = &mt('none');
+ } else {
+ $in{'start'} = &Apache::lonlocal::locallocaltime($in{'start'});
+ }
+ if (! defined($in{'end'}) || $in{'end'} == 0) {
+ $in{'end'} = &mt('none');
+ } else {
+ $in{'end'} = &Apache::lonlocal::locallocaltime($in{'end'});
+ }
}
- if (! defined($in{'end'}) || $in{'end'} == 0) {
- $in{'end'} = &mt('none');
- } else {
- $in{'end'} = &Apache::lonlocal::locallocaltime($in{'end'});
+ if ($context eq 'course') {
+ my $lastlogin = $crslogins{$in{'username'}.':'.$in{'domain'}.':'.$in{'section'}.':'.$role};
+ if ($lastlogin ne '') {
+ $in{'lastlogin'} = &Apache::lonlocal::locallocaltime($lastlogin);
+ }
}
if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll' || $mode eq 'pickauthor') {
$r->print(&Apache::loncommon::start_data_table_row());
@@ -2527,17 +2992,27 @@ END
if ($showcheckbox) {
$checkval = $user;
if ($context eq 'course') {
- if ($role eq 'st') {
- $checkval .= ':st';
- }
- $checkval .= ':'.$in{'section'};
- if ($role eq 'st') {
- $checkval .= ':'.$in{'type'}.':'.
- $in{'lockedtype'};
- }
+ if (($role eq 'co' || $role eq 'cc') &&
+ ($user =~ /^\Q$env{'user.name'}:$env{'user.domain'}:$role\E/)) {
+ $showcheckbox = 0;
+ } else {
+ if ($role eq 'st') {
+ $checkval .= ':st';
+ }
+ $checkval .= ':'.$in{'section'};
+ if ($role eq 'st') {
+ $checkval .= ':'.$in{'type'}.':'.
+ $in{'lockedtype'}.':'.
+ $in{'credits'};
+ }
+ }
+ }
+ if ($showcheckbox) {
+ $r->print(' ');
+ } else {
+ $r->print(' ');
}
- $r->print(' ');
} else {
$r->print(' ');
}
@@ -2556,43 +3031,34 @@ END
$showitem = $ltstatus{$in{$item}};
}
$r->print(''.$showitem.' '."\n");
- } else {
- $r->print(''.$in{$item}.' '."\n");
- }
- }
- if (($context eq 'course') && ($mode ne 'autoenroll')) {
- if ($env{'form.showrole'} eq 'st' || $env{'form.showrole'} eq 'Any') {
- if ($displayclickers eq 'on') {
- my $clickers =
+ } elsif ($item eq 'photo') {
+ if (($context eq 'course') && ($mode ne 'autoenroll') &&
+ ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'})) {
+ if ($role eq 'st') {
+ $r->print(' ');
+ } else {
+ $r->print(' ');
+ }
+ }
+ } elsif ($item eq 'clicker') {
+ if (($context eq 'course') && ($mode ne 'autoenroll')) {
+ if ($env{'form.showrole'} eq 'st' || $env{'form.showrole'} eq 'Any') {
+ my $clickers =
(&Apache::lonnet::userenvironment($in{'domain'},$in{'username'},'clickers'))[1];
- if ($clickers!~/\w/) { $clickers='-'; }
- $r->print(''.$clickers.' ');
- } else {
- $r->print(' ');
- }
- if ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'}) {
- if ($displayphotos eq 'on' && $role eq 'st' && $in{'photo'} ne '') {
- $r->print(' ');
+ if ($clickers!~/\w/) { $clickers='-'; }
+ $r->print(''.$clickers.' ');
} else {
- $r->print(' ');
- }
+ $r->print(' '."\n");
+ }
}
+ } else {
+ $r->print(''.$in{$item}.' '."\n");
}
}
$r->print(&Apache::loncommon::end_data_table_row());
} elsif ($mode eq 'csv') {
next if (! defined($CSVfile));
# no need to bother with $linkto
- if (! defined($in{'start'}) || $in{'start'} == 0) {
- $in{'start'} = &mt('none');
- } else {
- $in{'start'} = &Apache::lonlocal::locallocaltime($in{'start'});
- }
- if (! defined($in{'end'}) || $in{'end'} == 0) {
- $in{'end'} = &mt('none');
- } else {
- $in{'end'} = &Apache::lonlocal::locallocaltime($in{'end'});
- }
my @line = ();
foreach my $item (@cols) {
push @line,&Apache::loncommon::csv_translate($in{$item});
@@ -2602,9 +3068,9 @@ END
my $col = 0;
foreach my $item (@cols) {
if ($item eq 'start' || $item eq 'end') {
- if (defined($item) && $item != 0) {
+ if ((defined($in{$item})) && ($in{$item} != 0)) {
$excel_sheet->write($row,$col++,
- &Apache::lonstathelpers::calc_serial($in{item}),
+ &Apache::lonstathelpers::calc_serial($in{$item}),
$format->{'date'});
} else {
$excel_sheet->write($row,$col++,'none');
@@ -2759,7 +3225,7 @@ sub print_username_link {
$output = $in->{'username'};
} else {
$output = '{'username'}','$in->{'domain'}'".')" />'.
+ "'$in->{'username'}','$in->{'domain'}'".')">'.
$in->{'username'}.' ';
}
return $output;
@@ -2770,6 +3236,7 @@ sub role_type_names {
'domain' => 'Domain Roles',
'author' => 'Co-Author Roles',
'course' => 'Course Roles',
+ 'community' => 'Community Roles',
);
return %lt;
}
@@ -2784,6 +3251,7 @@ sub select_actions {
chgdates => "Change starting/ending dates",
chgsec => "Change section associated with user roles",
);
+ # FIXME Add an option to change credits for student roles.
my ($output,$options,%choices);
# FIXME Disable actions for now for roletype=course in domain context
if ($context eq 'domain' && $setting eq 'course') {
@@ -2791,15 +3259,20 @@ sub select_actions {
}
if ($context eq 'course') {
if ($env{'form.showrole'} ne 'Any') {
- if (!&Apache::lonnet::allowed('c'.$env{'form.showrole'},
- $env{'request.course.id'})) {
- if ($env{'request.course.sec'} eq '') {
- return;
- } else {
- if (!&Apache::lonnet::allowed('c'.$env{'form.showrole'},$env{'request.course.id'}.'/'.$env{'request.course.sec'})) {
- return;
- }
- }
+ my $showactions;
+ if (&Apache::lonnet::allowed('c'.$env{'form.showrole'},
+ $env{'request.course.id'})) {
+ $showactions = 1;
+ } elsif ($env{'request.course.sec'} ne '') {
+ if (&Apache::lonnet::allowed('c'.$env{'form.showrole'},$env{'request.course.id'}.'/'.$env{'request.course.sec'})) {
+ $showactions = 1;
+ }
+ }
+ unless ($showactions) {
+ unless (&is_courseowner($env{'request.course.id'},
+ $env{'course.'.$env{'request.course.id'}.'.internal.courseowner'})) {
+ return;
+ }
}
}
}
@@ -2874,9 +3347,9 @@ sub date_section_javascript {
delete => "Check the boxes for any users for whom roles are to be deleted, and click 'Proceed'",
none => "Choose an action to take for selected users",
);
- my $output = '
-
ENDTWO
return $output;
}
sub date_section_selector {
- my ($context,$permission) = @_;
+ my ($context,$permission,$crstype,$showcredits) = @_;
my $callingform = $env{'form.callingform'};
my $formname = 'dateselect';
my $groupslist = &get_groupslist();
- my $sec_js = &setsections_javascript($formname,$groupslist);
+ my $sec_js =
+ &setsections_javascript($formname,$groupslist,undef,undef,$crstype,
+ $showcredits);
my $output = <<"END";
ENDJS
my %lt = &Apache::lonlocal::texthash (
chac => 'Access dates to apply for selected users',
chse => 'Changes in section affiliation to apply to selected users',
- fors => 'For student roles changing the section, will result in a section switch as students may only be in one section of a course at a time.',
- forn => 'For a role in a course that is not a student role, a user may have roles in more than one section of a course at a time.',
- reta => "Retain each user's current section affiliations?",
- dnap => '(Does not apply to student roles).',
+ fors => 'For student roles, changing the section will result in a section switch as students may only be in one section of a course at a time.',
+ forn => 'For a course role that is not "student", users may have roles in more than one section at a time.',
+ reta => "Retain each user's current section affiliations?",
+ dnap => '(Does not apply to student roles).',
);
my ($date_items,$headertext);
if ($env{'form.bulkaction'} eq 'chgsec') {
@@ -3002,13 +3480,18 @@ ENDJS
}
$date_items = &date_setting_table($starttime,undef,$context,
$env{'form.bulkaction'},$formname,
- $permission);
+ $permission,$crstype);
}
$output .= ''.$headertext.' '.
- '