--- loncom/interface/lonuserutils.pm 2012/02/09 22:06:16 1.136.6.3
+++ loncom/interface/lonuserutils.pm 2012/08/21 15:43:27 1.141
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Utility functions for managing LON-CAPA user accounts
#
-# $Id: lonuserutils.pm,v 1.136.6.3 2012/02/09 22:06:16 raeburn Exp $
+# $Id: lonuserutils.pm,v 1.141 2012/08/21 15:43:27 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -47,8 +47,7 @@ sub modifystudent {
# this one. If $csec is defined, drop them from all other sections of
# this course and add them to section $csec
my ($cnum,$cdom) = &get_course_identity($courseid);
- my $extra = &Apache::lonnet::freeze_escape({'skipcheck' => 1});
- my %roles = &Apache::lonnet::dump('roles',$udom,$unam,'.',undef,$extra);
+ my %roles = &Apache::lonnet::dump('roles',$udom,$unam);
my ($tmp) = keys(%roles);
# Bail out if we were unable to get the students roles
return "$1" if ($tmp =~ /^(con_lost|error|no_such_host)/i);
@@ -342,8 +341,7 @@ sub print_upload_manager_header {
."
\n");
$r->print(''.
&mt('Identify fields in uploaded list')." \n");
- $r->print(&mt('Enter as many fields as you can.').'
'.
- &mt('The system will inform you and bring you back to this page, [_1]if the data selected are insufficient to add users.','
')."
\n");
+ $r->print(&mt('Enter as many fields as you can.
The system will inform you and bring you back to this page,
if the data selected are insufficient to add users.')."
\n");
$r->print(&hidden_input('action','upload').
&hidden_input('state','got_file').
&hidden_input('associate','').
@@ -1423,6 +1421,7 @@ sub curr_role_permissions {
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)) {
if ($key=~/^rolesdef\_(\w+)$/) {
@@ -1445,8 +1444,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') {
@@ -1479,12 +1479,12 @@ sub print_userlist {
$r->print('
');
return;
}
if (!(($context eq 'domain') &&
(($env{'form.roletype'} eq 'course') || ($env{'form.roletype'} eq 'community')))) {
- $r->print(
- "\n\n"
- .'
'
- .&list_submit_button(&mt('Update Display'))
- ."
\n"
- );
+ $r->print(&list_submit_button(&mt('Update Display'))."\n");
+ }
+
+ my @cols = &infocolumns($context,$mode);
+ if (!@cols) {
+ $r->print('
'.
+ &mt('No user information selected for display.').' '.
+ '
'."\n");
+ return;
}
my ($indexhash,$keylist) = &make_keylist_array();
my (%userlist,%userinfo,$clearcoursepick);
@@ -1566,7 +1571,7 @@ sub print_userlist {
$r->print('
'.&mt('Searching').' ...
');
}
} else {
- $r->print('
'.&mt('Searching').' ...
');
+ $r->print('
'.&mt('Searching').' ...
');
}
$r->rflush();
if ($context eq 'course') {
@@ -1720,6 +1725,7 @@ sub print_userlist {
}
$r->print('
');
+ return;
}
sub role_filter {
@@ -1732,11 +1738,11 @@ 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 ($roletype,$crstype);
@@ -1763,9 +1769,9 @@ sub role_filter {
$role_select .= ''.$plrole.' ';
}
$role_select .= ' ';
- $output = ''
+ $output = ''
.&mt('Role: [_1]',$role_select)
- .' ';
+ .'';
}
return $output;
}
@@ -1828,11 +1834,167 @@ sub section_group_filter {
return $output;
}
+sub infocolumns {
+ my ($context,$mode) = @_;
+ my @cols;
+ if (($mode eq 'pickauthor') || ($mode eq 'autoenroll')) {
+ @cols = &get_cols_array($context,$mode);
+ } else {
+ my @posscols = &get_cols_array($context,$mode);
+ 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) = @_;
+ 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'));
+ if ($context eq 'domain') {
+ push (@cols,'extent');
+ }
+ 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')) {
+ push(@cols,'lastlogin','clicker');
+ }
+ if (($context eq 'course') && ($mode ne 'autoenroll') &&
+ ($env{'course.'.$env{'request.course.id'}.'.internal.showphoto'})) {
+ push(@cols,'photos');
+ }
+ }
+ return @cols;
+}
+
+sub column_checkboxes {
+ my ($context,$mode,$formname) = @_;
+ my @cols = &get_cols_array($context,$mode);
+ 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;
+ $unchecked{'start'} = 1;
+ $unchecked{'end'} = 1;
+ } else {
+ if ($env{'form.Status'} ne 'Any') {
+ $disabledchk{'status'} = 1;
+ }
+ if ($env{'form.showrole'} ne 'Any') {
+ $disabledchk{'role'} = 1;
+ }
+ }
+ my $numposs = scalar(@cols);
+ my $numinrow = 8;
+ my %lt = &get_column_names($context);
+ my $output = ''.&mt('Information to show').' '."\n".''.
+ ' '.
+ (' 'x3).
+ ' '.
+ ' ';
+ return $output;
+}
+
sub list_submit_button {
my ($text) = @_;
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",
+ '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('Communities: description, section(s), status');
+ } elsif ($context eq 'author') {
+ $lt{'extent'} = &mt('Author');
+ }
+ return %lt;
+}
+
sub gather_userinfo {
my ($context,$format,$userlist,$indexhash,$userinfo,$rolehash,$permission) = @_;
my $viewablesec;
@@ -2196,7 +2358,7 @@ sub show_users_list {
$sortby = 'username';
}
my $setting = $env{'form.roletype'};
- my ($cid,$cdom,$cnum,$classgroups,$displayphotos,$displayclickers,$crstype);
+ my ($cid,$cdom,$cnum,$classgroups,$crstype);
if ($context eq 'course') {
$cid = $env{'request.course.id'};
$crstype = &Apache::loncommon::course_type();
@@ -2206,14 +2368,6 @@ sub show_users_list {
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') {
@@ -2242,14 +2392,12 @@ END
}
}
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(<
// 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",
- 'lastlogin' => "last login",
- 'extent' => "extent",
+ my @cols = &infocolumns($context,$mode);
+ 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",
'track' => "View a user's recent activity",
- '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('Communities: 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')
- && ($env{'form.roletype'} eq 'community'))) {
- 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' ||
- $env{'form.roletype'} eq 'community')) {
- push (@cols,'extent');
- }
- if (($statusmode eq 'Any') &&
- (!($context eq 'domain' && (($env{'form.roletype'} eq 'course')
- || ($env{'form.roletype'} eq 'community'))))) {
- push(@cols,'status');
- }
- if ($context eq 'course') {
- push(@cols,'groups');
- }
- push(@cols,'email');
- if ($context eq 'course') {
- push(@cols,'lastlogin');
- }
- }
-
+ my %lt = (%coltxt,%acttxt);
my $rolefilter = $env{'form.showrole'};
if ($env{'form.showrole'} eq 'cr') {
$rolefilter = &mt('custom');
@@ -2386,7 +2477,7 @@ END
if ($mode ne 'autoenroll') {
$results_description = &results_header_row($rolefilter,$statusmode,
$context,$permission,$mode,$crstype);
- $r->print(''.$results_description.' ');
+ $r->print(''.$results_description.' ');
}
my ($output,$actionselect,%canchange,%canchangesec);
if ($mode eq 'html' || $mode eq 'view' || $mode eq 'autoenroll' || $mode eq 'pickauthor') {
@@ -2448,6 +2539,12 @@ 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;
+ }
}
}
}
@@ -2482,7 +2579,7 @@ END
}
$output .= ' '.$lt{'owin'}.' ';
}
- $output .= "\n".''."\n".
+ $output .= "\n".'