--- loncom/auth/lonroles.pm 2008/09/02 02:56:52 1.205
+++ loncom/auth/lonroles.pm 2009/10/23 00:20:36 1.232
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# User Roles Screen
#
-# $Id: lonroles.pm,v 1.205 2008/09/02 02:56:52 raeburn Exp $
+# $Id: lonroles.pm,v 1.232 2009/10/23 00:20:36 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -27,6 +27,103 @@
#
###
+=pod
+
+=head1 NAME
+
+Apache::lonroles - User Roles Screen
+
+=head1 SYNOPSIS
+
+Invoked by /etc/httpd/conf/srm.conf:
+
+ $msg '.&mt('The following problems occurred:').
+ # Breadcrumbs
+ my $brcrum = [{'href' => $dest,
+ 'text' => 'Problems during Course Initialization'},];
+ $r->print(&Apache::loncommon::start_page('Problems during Course Initialization',
+ undef,
+ {'bread_crumbs' => $brcrum,})
+ );
+ $r->print(
+ ''.
+ ' '.&mt('The following problems occurred:').
+ '$msg
+
'.
$error.
- '
'.&mt('Continue').''.
- &Apache::loncommon::end_page());
+ '
'
- .&mt('This is LON-CAPA [_1]',$r->dir_config('lonVersion'))
- .'
'
- .''.&mt('Logout').' '
+ $r->print('
'
+ .&mt('This LON-CAPA server is version [_1]',$r->dir_config('lonVersion'))
+ .'
'
+ .''.&mt('Logout').' '
.''
.&mt('Course Catalog')
- .'
'); } - $r->print(' | '.&mt('User Role').' | '.&mt('Extent') - .' | '.&mt('Start').' | '.&mt('End') - .' | '.&mt('User Role').' | ' + .''.&mt('Extent').' | ' + .''.&mt('Start').' | ' + .''.&mt('End').' | ' + .&Apache::loncommon::end_data_table_header_row() + ); $doheaders=-1; my @roletypes = &roletypes(); foreach my $type (@roletypes) { @@ -866,7 +1108,14 @@ sub print_rolerows { foreach my $which (sort {uc($a) cmp uc($b)} (keys(%{$sortrole}))) { if ($roleclass->{$sortrole->{$which}} =~ /^\Q$type\E/) { if (ref($roletext) eq 'HASH') { - $output.=$roletext->{$sortrole->{$which}}; + if (ref($roletext->{$sortrole->{$which}}) eq 'ARRAY') { + $output.= &Apache::loncommon::start_data_table_row(). + $roletext->{$sortrole->{$which}}->[0]. + &Apache::loncommon::end_data_table_row(). + &Apache::loncommon::continue_data_table_row(). + $roletext->{$sortrole->{$which}}->[1]. + &Apache::loncommon::end_data_table_row(); + } if ($sortrole->{$which} =~ m-dc\./($match_domain)/-) { if (ref($dcroles) eq 'HASH') { if ($dcroles->{$1}) { @@ -879,9 +1128,12 @@ sub print_rolerows { } if ($output) { if ($doheaders > 0) { - $r->print("|||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
". - &mt($type)." | ' + .&mt($type) + .' | ' + .&Apache::loncommon::end_data_table_empty_row() + ); } $r->print($output); } @@ -907,6 +1159,50 @@ sub findcourse_advice { } $r->print(''.&mt('Date requested').' | '.&mt('Course title').' | '. + ''.&mt('User role').' | '.&mt('Section').' | '. + &Apache::loncommon::end_data_table_header_row()); + my @sorted = sort { $a <=> $b } (keys(%reqs_by_date)); + foreach my $item (@sorted) { + if (ref($reqs_by_date{$item}) eq 'ARRAY') { + foreach my $crs (@{$reqs_by_date{$item}}) { + my %courseinfo = &Apache::lonnet::coursedescription($crs); + my $usec = $selfenrollrequests{$crs}{'section'}; + if ($usec eq '') { + $usec = &mt('No section'); + } + $r->print(&Apache::loncommon::start_data_table_row(). + ''.&Apache::lonlocal::locallocaltime($item).' | '. + ''.$courseinfo{'description'}.' | '. + ''.$rolename.' | '.$usec.' | '. + &Apache::loncommon::end_data_table_row()); + } + } + } + $r->print(&Apache::loncommon::end_data_table()); + } return; } @@ -965,34 +1261,9 @@ sub privileges_info { return $output; } -sub role_status { - my ($rolekey,$then,$now,$role,$where,$trolecode,$tstatus,$tstart,$tend) = @_; - my @pwhere = (); - if (exists($env{$rolekey}) && $env{$rolekey} ne '') { - (undef,undef,$$role,@pwhere)=split(/\./,$rolekey); - unless (!defined($$role) || $$role eq '') { - $$where=join('.',@pwhere); - $$trolecode=$$role.'.'.$$where; - ($$tstart,$$tend)=split(/\./,$env{$rolekey}); - $$tstatus='is'; - if ($$tstart && $$tstart>$then) { - $$tstatus='future'; - if ($$tstart<$now) { $$tstatus='will'; } - } - if ($$tend) { - if ($$tend<$then) { - $$tstatus='expired'; - } elsif ($$tend<$now) { - $$tstatus='will_not'; - } - } - } - } -} - sub build_roletext { - my ($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$tfont,$trole,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver) = @_; - my $roletext='||||
'.&mt('Switch Server').' | '; + $roletext.='' + .'' + .&mt('Switch Server') + .' | '; } else { - $roletext.=(''); + $roletext.=(' | '); } } elsif ($tstatus eq 'is') { - $roletext.=' | '. + ' | '; } elsif ($tryagain) { $roletext.= - ''. + ' | '; } elsif ($advanced) { $roletext.= - ''. + ' | '; + } elsif ($reinit) { + $roletext.= + ''. + ' | '; } else { - $roletext.=''; + $roletext.= + ' | '. + ' | '; } } if ($trolecode !~ m/^(dc|ca|au|aa)\./) { $tremark.=&Apache::lonannounce::showday(time,1, &Apache::lonannounce::readcalendar($tdom.'_'.$trest)); } - $roletext.=''.$trole. - ' | '.$twhere. - ' | '.$tpstart. - ' | '.$tpend. - ' | '.$trole.' | ' + .''.$twhere.' | ' + .''.$tpstart.' | ' + .''.$tpend.' | '; if (!$is_dc) { - $roletext.='
'.$tremark. - ' | |||||||||||||
'. + $tremark.' '. + ' | '; } - return $roletext; + return ($roletext,$roletext_end); } sub check_needs_switchserver { @@ -1076,20 +1362,6 @@ sub check_author_homeserver { } } -sub check_privs { - my ($cdom,$cnum,$then,$now,$checkrole) = @_; - my $cckey = 'user.role.'.$checkrole.'./'.$cdom.'/'.$cnum; - if ($env{$cckey}) { - my ($role,$where,$trolecode,$tstart,$tend,$tremark,$tstatus,$tpstart,$tpend,$tfont); - &role_status($cckey,$then,$now,\$role,\$where,\$trolecode,\$tstatus,\$tstart,\$tend); - unless (($tstatus eq 'is') || ($tstatus eq 'will_not')) { - &set_privileges($cdom,$cnum,$checkrole); - } - } else { - &set_privileges($cdom,$cnum,$checkrole); - } -} - sub check_fordc { my ($dcroles,$then) = @_; my $numdc = 0; @@ -1112,21 +1384,21 @@ sub check_fordc { } sub adhoc_course_role { - my ($then) = @_; + my ($refresh,$then) = @_; my ($cdom,$cnum); $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; - if (&check_forcc($cdom,$cnum,$then)) { + if (&check_forcc($cdom,$cnum,$refresh,$then)) { my $setprivs; if (!defined($env{'user.role.'.$env{'form.switchrole'}})) { $setprivs = 1; } else { my ($start,$end) = split(/\./,$env{'user.role.'.$env{'form.switchrole'}}); - if (($start && ($start>$then || $start == -1)) || + if (($start && ($start>$refresh || $start == -1)) || ($end && $end<$then)) { $setprivs = 1; } - } + } if ($setprivs) { if ($env{'form.switchrole'} =~ m-^(in|ta|ep|ad|st|cr)([\w/]*)\./\Q$cdom\E/\Q$cnum\E/?(\w*)$-) { my $role = $1; @@ -1139,7 +1411,15 @@ sub adhoc_course_role { return; } } - my (%userroles,%newrole,%newgroups); + my (%userroles,%newrole,%newgroups,%group_privs); + my %cgroups = + &Apache::lonnet::get_active_groups($env{'user.domain'}, + $env{'user.name'},$cdom,$cnum); + foreach my $group (keys(%cgroups)) { + $group_privs{$group} = + $env{'user.priv.cc./'.$cdom.'/'.$cnum.'./'.$cdom.'/'.$cnum.'/'.$group}; + } + $newgroups{'/'.$cdom.'/'.$cnum} = \%group_privs; my $area = '/'.$cdom.'/'.$cnum; my $spec = $role.'.'.$area; if ($usec ne '') { @@ -1147,8 +1427,8 @@ sub adhoc_course_role { $area .= '/'.$usec; } &Apache::lonnet::standard_roleprivs(\%newrole,$role,$cdom,$spec,$cnum,$area); - &Apache::lonnet::set_userprivs(\%userroles,\%newrole,%newgroups); - my $adhocstart = $then-1; + &Apache::lonnet::set_userprivs(\%userroles,\%newrole,\%newgroups); + my $adhocstart = $refresh-1; $userroles{'user.role.'.$spec} = $adhocstart.'.'; &Apache::lonnet::appenv(\%userroles,[$role,'cm']); } @@ -1158,7 +1438,7 @@ sub adhoc_course_role { } sub check_forcc { - my ($cdom,$cnum,$then) = @_; + my ($cdom,$cnum,$refresh,$then) = @_; my $is_cc; if ($cdom ne '' && $cnum ne '') { if (&Apache::lonnet::is_course($cdom,$cnum)) { @@ -1166,7 +1446,7 @@ sub check_forcc { if (defined($env{$envkey})) { $is_cc = 1; my ($tstart,$tend)=split(/\./,$env{$envkey}); - if ($tstart && $tstart>$then) { $is_cc = 0; } + if ($tstart && $tstart>$refresh) { $is_cc = 0; } if ($tend && $tend <$then) { $is_cc = 0; } } } @@ -1194,6 +1474,7 @@ sub coursepick_jscript { ); my $verify_script = <<"END"; END return $verify_script; @@ -1236,7 +1518,7 @@ sub coauthorlink { sub display_cc_role { my $rolekey = shift; - my $roletext; + my ($roletext,$roletext_end); my $advanced = $env{'user.adv'}; my $tryagain = $env{'form.tryagain'}; unless ($rolekey =~/^error\:/) { @@ -1245,14 +1527,13 @@ sub display_cc_role { my $trolecode = 'cc./'.$1.'/'.$2; my $twhere; my $ttype; - my $tbg='#77FF77'; - my $tfont='#003300'; + my $tbg='LC_roles_is'; my %newhash=&Apache::lonnet::coursedescription($tcourseid); if (%newhash) { $twhere=$newhash{'description'}. - ' '. - &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$2,$1,$tfont). - ''; + ' '. + &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$2,$1). + ''; $ttype = $newhash{'type'}; } else { $twhere=&mt('Currently not available'); @@ -1260,28 +1541,26 @@ sub display_cc_role { } my $trole = &Apache::lonnet::plaintext('cc',$ttype); $twhere.="|||||||||||||
| |||||||||||||