--- loncom/interface/lonuserutils.pm 2007/12/05 21:23:14 1.11
+++ loncom/interface/lonuserutils.pm 2007/12/21 14:05:40 1.18
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Utility functions for managing LON-CAPA user accounts
#
-# $Id: lonuserutils.pm,v 1.11 2007/12/05 21:23:14 raeburn Exp $
+# $Id: lonuserutils.pm,v 1.18 2007/12/21 14:05:40 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -46,8 +46,7 @@ sub modifystudent {
# 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 course and add them to section $csec
- my $cdom = $env{'course.'.$courseid.'.domain'};
- my $cnum = $env{'course.'.$courseid.'.num'};
+ my ($cnum,$cdom) = &get_course_identity($courseid);
my %roles = &Apache::lonnet::dump('roles',$udom,$unam);
my ($tmp) = keys(%roles);
# Bail out if we were unable to get the students roles
@@ -96,7 +95,7 @@ sub modifyuserrole {
}
} elsif ($context eq 'domain') {
$scope = '/'.$env{'request.role.domain'}.'/';
- } elsif ($context eq 'construction_space') {
+ } elsif ($context eq 'author') {
$scope = '/'.$env{'user.domain'}.'/'.$env{'user.name'};
}
if ($context eq 'domain') {
@@ -136,22 +135,30 @@ sub modifyuserrole {
sub propagate_id_change {
my ($uname,$udom,$user) = @_;
- my (@types,@roles,@cdoms);
+ my (@types,@roles);
@types = ('active','future');
@roles = ('st');
my $idresult;
my %roleshash = &Apache::lonnet::get_my_roles($uname,
- $udom,'userroles',\@types,\@roles,\@cdoms);
+ $udom,'userroles',\@types,\@roles);
+ my %args = (
+ one_time => 1,
+ );
foreach my $item (keys(%roleshash)) {
my ($cnum,$cdom,$role) = split(/:/,$item);
my ($start,$end) = split(/:/,$roleshash{$item});
if (&Apache::lonnet::is_course($cdom,$cnum)) {
- my %userupdate;
- my $result = &update_classlist($cdom,$cnum,$udom,$uname,\%userupdate);
+ my $result = &update_classlist($cdom,$cnum,$udom,$uname,$user);
+ my %coursehash =
+ &Apache::lonnet::coursedescription($cdom.'_'.$cnum,\%args);
+ my $cdesc = $coursehash{'description'};
+ if ($cdesc eq '') {
+ $cdesc = $cdom.'_'.$cnum;
+ }
if ($result eq 'ok') {
- $idresult .= "Classlist change: $uname:$udom - class -> $cnum:$cdom\n";
+ $idresult .= &mt('Classlist update for "[_1]" in "[_2]".',$uname.':'.$udom,$cdesc).'
'."\n";
} else {
- $idresult .= "Error - $result -during classlist update for $uname:$udom in $cnum:$cdom\n";
+ $idresult .= &mt('Error: "[_1]" during classlist update for "[_2]" in "[_3]".',$result,$uname.':'.$udom,$cdesc).'
'."\n";
}
}
}
@@ -203,7 +210,7 @@ sub domain_roles_select {
# domain context
#
# Role types
- my @roletypes = ('domain','construction_space','course');
+ my @roletypes = ('domain','author','course');
my %lt = &role_type_names();
#
# build up the menu information to be passed to
@@ -225,11 +232,11 @@ sub domain_roles_select {
my @roles;
if ($roletype eq 'domain') {
@roles = &domain_roles();
- } elsif ($roletype eq 'construction_space') {
+ } elsif ($roletype eq 'author') {
@roles = &construction_space_roles();
} else {
- @roles = &course_roles('domain');
- unshift(@roles,'cr');
+ my $custom = 1;
+ @roles = &course_roles('domain',undef,$custom);
}
my $order = ['Any',@roles];
$select_menus{$roletype}->{'order'} = $order;
@@ -246,7 +253,7 @@ sub domain_roles_select {
}
my $result = &Apache::loncommon::linked_select_forms
('studentform',(' 'x3).&mt('Role: '),$env{'form.roletype'},
- 'roletype','showrole',\%select_menus,['domain','construction_space','course']);
+ 'roletype','showrole',\%select_menus,['domain','author','course']);
return $result;
}
@@ -651,7 +658,7 @@ sub print_upload_manager_footer {
my $formname;
if ($context eq 'course') {
$formname = 'document.studentform';
- } elsif ($context eq 'construction_space') {
+ } elsif ($context eq 'author') {
$formname = 'document.studentform';
} elsif ($context eq 'domain') {
$formname = 'document.studentform';
@@ -702,7 +709,7 @@ sub print_upload_manager_footer {
$Str .= '
'.&mt('role').': '.
@@ -755,7 +762,7 @@ sub forceid_change {
if ($context eq 'domain') {
$output .= ''."\n";
}
return $output;
@@ -916,7 +923,7 @@ sub date_setting_table {
my $dateDefault;
if ($mode eq 'create_enrolldates' || $mode eq 'create_defaultdates') {
$dateDefault = ' ';
- } elsif ($mode ne 'construction_space' && $mode ne 'domain') {
+ } elsif ($mode ne 'author' && $mode ne 'domain') {
if (($bulkaction eq 'reenable') ||
($bulkaction eq 'activate') ||
($bulkaction eq 'chgdates')) {
@@ -954,11 +961,10 @@ sub make_dates_default {
my ($startdate,$enddate,$context) = @_;
my $result = '';
if ($context eq 'course') {
- my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
- my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
+ my ($cnum,$cdom) = &get_course_identity();
my $put_result = &Apache::lonnet::put('environment',
{'default_enrollment_start_date'=>$startdate,
- 'default_enrollment_end_date' =>$enddate},$dom,$crs);
+ 'default_enrollment_end_date' =>$enddate},$cdom,$cnum);
if ($put_result eq 'ok') {
$result .= &mt('Set default start and end dates for course').
' '."\n"; @@ -978,7 +984,7 @@ sub default_role_selector { my ($context,$checkpriv) = @_; my %customroles; my ($options,$coursepick,$cb_jscript); - if ($context ne 'construction_space') { + if ($context ne 'author') { %customroles = &my_custom_roles(); } @@ -992,7 +998,7 @@ sub default_role_selector { ' '."\n"; if ($context eq 'course') { $options .= &default_course_roles($context,$checkpriv,%customroles); - } elsif ($context eq 'construction_space') { + } elsif ($context eq 'author') { my @roles = &construction_space_roles($checkpriv); foreach my $role (@roles) { my $plrole=&Apache::lonnet::plaintext($role); @@ -1040,7 +1046,8 @@ sub default_role_selector { sub default_course_roles { my ($context,$checkpriv,%customroles) = @_; my $output; - my @roles = &course_roles($context,$checkpriv); + my $custom = 1; + my @roles = &course_roles($context,$checkpriv,$custom); foreach my $role (@roles) { my $plrole=&Apache::lonnet::plaintext($role); $output .= ' '; @@ -1058,7 +1065,7 @@ sub default_course_roles { sub construction_space_roles { my ($checkpriv) = @_; - my @allroles = ('ca','aa'); + my @allroles = &roles_by_context('author'); my @roles; if ($checkpriv) { foreach my $role (@allroles) { @@ -1074,7 +1081,7 @@ sub construction_space_roles { sub domain_roles { my ($checkpriv) = @_; - my @allroles = ('dc','li','dg','au','sc'); + my @allroles = &roles_by_context('domain'); my @roles; if ($checkpriv) { foreach my $role (@allroles) { @@ -1089,8 +1096,8 @@ sub domain_roles { } sub course_roles { - my ($context,$checkpriv) = @_; - my @allroles = ('st','ta','ep','in','cc'); + my ($context,$checkpriv,$custom) = @_; + my @allroles = &roles_by_context('course',$custom); my @roles; if ($context eq 'domain') { @roles = @allroles; @@ -1120,17 +1127,18 @@ sub course_roles { sub curr_role_permissions { my ($context,$setting,$checkpriv) = @_; + my $custom = 1; my @roles; - if ($context eq 'construction_space') { + if ($context eq 'author') { @roles = &construction_space_roles($checkpriv); } elsif ($context eq 'domain') { if ($setting eq 'course') { - @roles = &course_roles($context,$checkpriv); + @roles = &course_roles($context,$checkpriv,$custom); } else { @roles = &domain_roles($checkpriv); } } elsif ($context eq 'course') { - @roles = &course_roles($context,$checkpriv); + @roles = &course_roles($context,$checkpriv,$custom); } return @roles; } @@ -1162,7 +1170,11 @@ sub print_userlist { ($env{'form.Status'}); if ($env{'form.showrole'} eq '') { - $env{'form.showrole'} = 'Any'; + if ($context eq 'course') { + $env{'form.showrole'} = 'st'; + } else { + $env{'form.showrole'} = 'Any'; + } } if (! defined($env{'form.output'}) || $env{'form.output'} !~ /^(csv|excel|html)$/ ) { @@ -1275,8 +1287,7 @@ sub print_userlist { } } my $cid =$env{'request.course.id'}; - my $cdom=$env{'course.'.$cid.'.domain'}; - my $cnum=$env{'course.'.$cid.'.num'}; + my ($cnum,$cdom) = &get_course_identity($cid); my $showroles; if ($env{'form.showrole'} ne 'Any') { $showroles = [$env{'form.showrole'}]; @@ -1289,9 +1300,9 @@ sub print_userlist { \%advrolehash,$permission); } else { my (%cstr_roles,%dom_roles); - if ($context eq 'construction_space') { + if ($context eq 'author') { # 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, \@statuses,\@possroles); &gather_userinfo($context,$format,\%userlist,$indexhash,\%userinfo, @@ -1305,7 +1316,7 @@ sub print_userlist { \%userinfo,$dom_roles{$key},$permission); } } - } elsif ($env{'form.roletype'} eq 'construction_space') { + } elsif ($env{'form.roletype'} eq 'author') { my %dom_roles = &Apache::lonnet::get_domain_roles($env{'request.role.domain'},['au']); my %coauthors; foreach my $key (keys(%dom_roles)) { @@ -1316,7 +1327,7 @@ sub print_userlist { } else { my @possroles; if ($env{'form.showrole'} eq 'Any') { - @possroles = ('ca','aa'); + my @possroles = &roles_by_context($context); } else { @possroles = ($env{'form.showrole'}); } @@ -1339,14 +1350,13 @@ sub print_userlist { foreach my $cid (keys(%courses)) { my %coursehash = &Apache::lonnet::coursedescription($cid,{'one_time' => 1}); - my $cdom = $coursehash{'domain'}; - my $cnum = $coursehash{'num'}; + my ($cnum,$cdom,$cdesc) = &get_course_identity($cid); next if ($cnum eq '' || $cdom eq ''); - my $cdesc = $coursehash{'description'}; + my $custom = 1; my (@roles,@sections,%access,%users,%userdata, %statushash); if ($env{'form.showrole'} eq 'Any') { - @roles = &course_roles($context); + @roles = &course_roles($context,undef,$custom); unshift(@roles,'cr'); } else { @roles = ($env{'form.showrole'}); @@ -1384,12 +1394,12 @@ sub print_userlist { } } if (keys(%userlist) == 0) { - if ($context eq 'construction_space') { + if ($context eq 'author') { $r->print(&mt('There are no co-authors to display.')."\n"); } elsif ($context eq 'domain') { if ($env{'form.roletype'} eq 'domain') { $r->print(&mt('There are no users with domain roles to display.')."\n"); - } elsif ($env{'form.roletype'} eq 'construction_space') { + } elsif ($env{'form.roletype'} eq 'author') { $r->print(&mt('There are no authors or co-authors to display.')."\n"); } elsif ($env{'form.roletype'} eq 'course') { $r->print(&mt('There are no course users to display')."\n"); @@ -1425,7 +1435,7 @@ sub gather_userinfo { foreach my $item (keys(%{$rolehash})) { @{$userlist->{$item}} = (); my %userdata; - if ($context eq 'construction_space' || $context eq 'course') { + if ($context eq 'author' || $context eq 'course') { ($userdata{'username'},$userdata{'domain'},$userdata{'role'}) = split(/:/,$item); ($userdata{'start'},$userdata{'end'})=split(/:/,$rolehash->{$item}); @@ -1436,7 +1446,7 @@ sub gather_userinfo { split(/:/,$item); ($userdata{'end'},$userdata{'start'})=split(/:/,$rolehash->{$item}); &build_user_record(\%userdata,$userinfo,$indexhash,$item,$userlist); - } elsif ($env{'form.roletype'} eq 'construction_space') { + } elsif ($env{'form.roletype'} eq 'author') { if (ref($rolehash->{$item}) eq 'HASH') { $userdata{'extent'} = $item; foreach my $key (keys(%{$rolehash->{$item}})) { @@ -1748,20 +1758,22 @@ sub show_users_list { my ($cid,$cdom,$cnum,$classgroups,$displayphotos,$displayclickers); if ($context eq 'course') { $cid=$env{'request.course.id'}; - $cdom = $env{'course.'.$cid.'.domain'}; - $cnum = $env{'course.'.$cid.'.num'}; + ($cnum,$cdom) = &get_course_identity($cid); ($classgroups) = &Apache::loncoursedata::get_group_memberships( $userlist,$keylist,$cdom,$cnum); - 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(' + 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(< '); + my $results_description; + if ($mode ne 'autoenroll') { + $results_description = &results_header_row($rolefilter,$statusmode, + $context,$permission); + $r->print(''.$results_description.' '); + } my ($output,$actionselect); - if ($mode eq 'html' || $mode eq 'view') { - if ($permission->{'cusr'}) { - $actionselect = &select_actions($context,$setting,$statusmode); - } - $r->print(< ';
- my @linkdests = ('aboutme');
- if ($permission->{'cusr'}) {
- push (@linkdests,'modify');
- $output .= ''.$lt{'link'}.': ';
- my $usernamelink = $env{'form.usernamelink'};
- if ($usernamelink eq '') {
- $usernamelink = 'aboutme';
- }
- foreach my $item (@linkdests) {
- my $checkedstr = '';
- if ($item eq $usernamelink) {
- $checkedstr = ' checked="checked" ';
- }
- $output .= ' ';
- }
- $output .= ' ';
+ my @linkdests = ('aboutme');
+ if ($permission->{'cusr'}) {
+ push (@linkdests,'modify');
+ $output .= ''.$lt{'link'}.': ';
+ my $usernamelink = $env{'form.usernamelink'};
+ if ($usernamelink eq '') {
+ $usernamelink = 'aboutme';
+ }
+ foreach my $item (@linkdests) {
+ my $checkedstr = '';
+ if ($item eq $usernamelink) {
+ $checkedstr = ' checked="checked" ';
+ }
+ $output .= ' ';
+ }
+ $output .= ' END - } + } } $output .= "\n \n". &Apache::loncommon::start_data_table(). @@ -1968,7 +1984,7 @@ END $output .= " $lt{$item} | \n";
}
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') {
# Clicker display on or off?
my %clicker_options = &Apache::lonlocal::texthash(
@@ -2002,8 +2018,8 @@ END
' '."\n";
}
}
- $output .= &Apache::loncommon::end_data_table_header_row();
}
+ $output .= &Apache::loncommon::end_data_table_header_row();
# Done with the HTML header line
} elsif ($mode eq 'csv') {
#
@@ -2065,7 +2081,7 @@ END
delete($userlist->{$user});
next;
}
- } elsif ($env{'form.roletype'} eq 'construction_space') {
+ } elsif ($env{'form.roletype'} eq 'author') {
($uname,$udom,$role) = split(/:/,$user,-1);
} elsif ($env{'form.roletype'} eq 'course') {
($uname,$udom,$role) = split(/:/,$user);
@@ -2139,32 +2155,54 @@ END
}
if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll') {
$r->print(&Apache::loncommon::start_data_table_row());
- $r->print("$rowcount | \n");
my $checkval;
- if ($mode ne 'autoenroll' && $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'};
+ if ($mode eq 'autoenroll') {
+ my $cellentry;
+ if ($in{'type'} eq 'auto') {
+ $cellentry = ''.&mt('auto').' ';
+ $autocount ++;
+ } else {
+ $cellentry = '
$cellentry | \n");
+ } else {
+ $r->print("$rowcount | \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('');
}
- $r->print(' | ');
}
foreach my $item (@cols) {
if ($item eq 'username') {
- $r->print(' | '.&print_username_link($permission,\%in).' | ');
- } elsif (($item eq 'start' || $item eq 'end') && ($mode ne 'autoeroll') && ($actionselect)) {
+ $r->print(''.&print_username_link($mode,$permission,
+ \%in).' | ');
+ } elsif (($item eq 'start' || $item eq 'end') && ($actionselect)) {
$r->print(''.$in{$item}.' | '."\n");
} else {
$r->print(''.$in{$item}.' | '."\n");
}
}
- if ($context eq 'course') {
+ if (($context eq 'course') && ($mode ne 'autoenroll')) {
if ($env{'form.showrole'} eq 'st' || $env{'form.showrole'} eq 'Any') {
if ($displayclickers eq 'on') {
my $clickers =
@@ -2244,9 +2282,11 @@ END
}
sub print_username_link {
- my ($permission,$in) = @_;
+ my ($mode,$permission,$in) = @_;
my $output;
- if (!$permission->{'cusr'}) {
+ if ($mode eq 'autoenroll') {
+ $output = $in->{'username'};
+ } elsif (!$permission->{'cusr'}) {
$output = &Apache::loncommon::aboutmewrapper($in->{'username'},
$in->{'username'},
$in->{'domain'});
@@ -2260,9 +2300,9 @@ sub print_username_link {
sub role_type_names {
my %lt = &Apache::lonlocal::texthash (
- 'domain' => 'Domain Roles',
- 'construction_space' => 'Co-Author Roles',
- 'course' => 'Course Roles',
+ 'domain' => 'Domain Roles',
+ 'author' => 'Co-Author Roles',
+ 'course' => 'Course Roles',
);
return %lt;
}
@@ -2283,10 +2323,6 @@ sub select_actions {
';
$choices{'dates'} = 1;
} else {
- if ($statusmode eq 'Active' || $statusmode eq 'Future') {
- $options .= '
-';
- }
if ($statusmode eq 'Future') {
$options .= '
';
@@ -2296,6 +2332,12 @@ sub select_actions {
';
$choices{'dates'} = 1;
}
+ if ($statusmode eq 'Active' || $statusmode eq 'Future') {
+ $options .= '
+
+';
+ $choices{'dates'} = 1;
+ }
}
if ($context eq 'domain') {
$options .= '
@@ -2466,8 +2508,7 @@ END
' | + | - $lt{'usrn'} + $lt{'usrn'} | - $lt{'dom'} + $lt{'dom'} | - ID + ID | - $lt{'sn'} + $lt{'sn'} | - $lt{'sec'} + $lt{'sec'} | - $lt{'start'} + $lt{'start'} | - $lt{'end'} + $lt{'end'} | - $lt{'groups'} + $lt{'groups'} | - END + $r->print(&Apache::loncommon::end_data_table_header_row()); } # # Sort the students @@ -2745,6 +2817,13 @@ END } my $status = $sdata->[$index{'status'}]; 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 = ''; # $r->print(&Apache::loncommon::start_data_table_row()); $r->print(<<"END"); @@ -2894,7 +2973,7 @@ sub upfile_drop_add { } elsif ($setting eq 'course') { $defaultrole = $env{'form.courserole'}; } - } elsif ($context eq 'construction_space') { + } elsif ($context eq 'author') { $defaultrole = $env{'form.defaultrole'}; } if ($context eq 'domain' && $setting eq 'course') { @@ -2917,7 +2996,7 @@ sub upfile_drop_add { ####################################### if ($context eq 'course') { $r->print('
---|