--- loncom/interface/lonmenu.pm 2009/04/29 16:57:29 1.261
+++ loncom/interface/lonmenu.pm 2009/05/18 16:29:55 1.266
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Routines to control the menu
#
-# $Id: lonmenu.pm,v 1.261 2009/04/29 16:57:29 bisitz Exp $
+# $Id: lonmenu.pm,v 1.266 2009/05/18 16:29:55 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -51,8 +51,6 @@ described at http://www.lon-capa.org.
=over
-=item show_course()
-
Little texts
=item initlittle()
@@ -150,27 +148,11 @@ use vars qw(@desklines %category_names %
my @inlineremote;
-
-
-sub show_course {
- my $course = !$env{'user.adv'};
- if (!$env{'user.adv'}) {
- foreach my $env (keys(%env)) {
- next if ($env !~ m/^user\.priv\./);
- if ($env !~ m/^user\.priv\.(?:st|cm)/) {
- $course = 0;
- last;
- }
- }
- }
- return $course;
-}
-
sub initlittle {
return &Apache::lonlocal::texthash('ret' => 'Return to Last Location',
'nav' => 'Navigate Contents',
'main' => 'Main Menu',
- 'roles' => (&show_course()?
+ 'roles' => (&Apache::loncommon::show_course()?
'Courses':'Roles'),
'other' => 'Other Roles',
'docs' => 'Edit Course',
@@ -369,19 +351,18 @@ $utility
$helplink
$lt{'exit'}
-
+
- $lt{'main'}
$reloadlink
$navmaps
$docs
$groups
$role_selector
-
+
$form
-
$reg
ENDINLINEMENU
} else {
@@ -1207,7 +1188,7 @@ sub rawconfig {
my $uname=$env{'user.name'};
my $udom=$env{'user.domain'};
my $adv=$env{'user.adv'};
- my $show_course=&show_course();
+ my $show_course=&Apache::loncommon::show_course();
my $author=$env{'user.author'};
my $crs='';
if ($env{'request.course.id'}) {
@@ -1629,7 +1610,7 @@ sub hidden_button_check {
sub roles_selector {
my ($cdom,$cnum) = @_;
my $now = time;
- my (%courseroles,%seccount,%gotnosection);
+ my (%courseroles,%seccount);
my $is_cc;
my $role_selector;
if ($env{'user.role.cc./'.$cdom.'/'.$cnum}) {
@@ -1644,35 +1625,9 @@ sub roles_selector {
}
}
if ($is_cc) {
- my %adv_roles =
- &Apache::lonnet::get_course_adv_roles($env{'request.course.id'},1);
- foreach my $role (keys(%adv_roles)) {
- my ($urole,$usec) = split(/:/,$role);
- if (!$gotnosection{$urole}) {
- $seccount{$urole} ++;
- $gotnosection{$urole} = 1;
- }
- if (ref($courseroles{$urole}) eq 'ARRAY') {
- if ($usec ne '') {
- if (!grep(/^Q$usec\E$/,@{$courseroles{$urole}})) {
- push(@{$courseroles{$urole}},$usec);
- $seccount{$urole} ++;
- }
- }
- } else {
- @{$courseroles{$urole}} = ();
- if ($usec ne '') {
- $seccount{$urole} ++;
- push(@{$courseroles{$urole}},$usec);
- }
- }
- }
- my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum);
- @{$courseroles{'st'}} = ();
- if (keys(%sections_count) > 0) {
- push(@{$courseroles{'st'}},keys(%sections_count));
- }
+ &get_all_courseroles($cdom,$cnum,\%courseroles,\%seccount);
} else {
+ my %gotnosection;
foreach my $item (keys(%env)) {
if ($item =~ m-^user\.role\.([^.]+)\./\Q$cdom\E/\Q$cnum\E/?(\w*)$-) {
my $role = $1;
@@ -1688,7 +1643,7 @@ sub roles_selector {
}
if (ref($courseroles{$role}) eq 'ARRAY') {
if ($sec ne '') {
- if (!grep(/^Q$sec\E$/,@{$courseroles{$role}})) {
+ if (!grep(/^\Q$sec\E$/,@{$courseroles{$role}})) {
push(@{$courseroles{$role}},$sec);
$seccount{$role} ++;
}
@@ -1730,6 +1685,61 @@ sub roles_selector {
return $role_selector;
}
+sub get_all_courseroles {
+ my ($cdom,$cnum,$courseroles,$seccount) = @_;
+ unless ((ref($courseroles) eq 'HASH') && (ref($seccount) eq 'HASH')) {
+ return;
+ }
+ my ($result,$cached) =
+ &Apache::lonnet::is_cached_new('getcourseroles',$cdom.'_'.$cnum);
+ if (defined($cached)) {
+ if (ref($result) eq 'HASH') {
+ if ((ref($result->{'roles'}) eq 'HASH') &&
+ (ref($result->{'seccount'}) eq 'HASH')) {
+ %{$courseroles} = %{$result->{'roles'}};
+ %{$seccount} = %{$result->{'seccount'}};
+ return;
+ }
+ }
+ }
+ my %gotnosection;
+ my %adv_roles =
+ &Apache::lonnet::get_course_adv_roles($env{'request.course.id'},1);
+ foreach my $role (keys(%adv_roles)) {
+ my ($urole,$usec) = split(/:/,$role);
+ if (!$gotnosection{$urole}) {
+ $seccount->{$urole} ++;
+ $gotnosection{$urole} = 1;
+ }
+ if (ref($courseroles->{$urole}) eq 'ARRAY') {
+ if ($usec ne '') {
+ if (!grep(/^Q$usec\E$/,@{$courseroles->{$urole}})) {
+ push(@{$courseroles->{$urole}},$usec);
+ $seccount->{$urole} ++;
+ }
+ }
+ } else {
+ @{$courseroles->{$urole}} = ();
+ if ($usec ne '') {
+ $seccount->{$urole} ++;
+ push(@{$courseroles->{$urole}},$usec);
+ }
+ }
+ }
+ my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum,['st']);
+ @{$courseroles->{'st'}} = ();
+ if (keys(%sections_count) > 0) {
+ push(@{$courseroles->{'st'}},keys(%sections_count));
+ $seccount->{'st'} = scalar(keys(%sections_count));
+ }
+ my $rolehash = {
+ 'roles' => $courseroles,
+ 'seccount' => $seccount,
+ };
+ &Apache::lonnet::do_cache_new('getcourseroles',$cdom.'_'.$cnum,$rolehash);
+ return;
+}
+
sub jump_to_role {
my ($cdom,$cnum,$seccount,$courseroles) = @_;
my %lt = &Apache::lonlocal::texthash(