--- loncom/interface/lonmenu.pm 2016/08/15 15:52:16 1.452 +++ loncom/interface/lonmenu.pm 2016/10/27 21:06:13 1.457 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines to control the menu # -# $Id: lonmenu.pm,v 1.452 2016/08/15 15:52:16 raeburn Exp $ +# $Id: lonmenu.pm,v 1.457 2016/10/27 21:06:13 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -386,8 +386,10 @@ sub secondary_menu { undef($canviewroster); } my $canviewgrps = &Apache::lonnet::allowed('vcg', $crs_sec); - my $canmodifyuser = &Apache::lonnet::allowed('cst', $crs_sec); + my $canmodifyuser = &Apache::lonnet::allowed('cst', $crs_sec); + my $canviewusers = &Apache::lonnet::allowed('vcl', $crs_sec); my $canviewwnew = &Apache::lonnet::allowed('whn', $crs_sec); + my $canviewpara = &Apache::lonnet::allowed('vpa', $crs_sec); my $canmodpara = &Apache::lonnet::allowed('opa', $crs_sec); my $canvgr = &Apache::lonnet::allowed('vgr', $crs_sec); my $canmgr = &Apache::lonnet::allowed('mgr', $crs_sec); @@ -414,7 +416,7 @@ sub secondary_menu { $showfeeds = 1; } } - unless ($canmgr) { + unless (($canmgr || $canvgr)) { my %slots = &Apache::lonnet::get_course_slots($cnum,$cdom); if (keys(%slots) > 0) { $showresv = 1; @@ -456,18 +458,18 @@ sub secondary_menu { && $canvgr; next if $$menuitem[4] eq 'vgr' && !$canvgr; - next if $$menuitem[4] eq 'cst' - && !$canmodifyuser; - next if $$menuitem[4] eq 'ncst' - && ($canmodifyuser || !$canviewroster); + next if $$menuitem[4] eq 'viewusers' + && !$canmodifyuser && !$canviewusers; + next if $$menuitem[4] eq 'noviewusers' + && ($canmodifyuser || $canviewusers || !$canviewroster); next if $$menuitem[4] eq 'mgr' && !$canmgr; next if $$menuitem[4] eq 'showresv' && !$showresv; next if $$menuitem[4] eq 'whn' && !$canviewwnew; - next if $$menuitem[4] eq 'opa' - && !$canmodpara; + next if $$menuitem[4] eq 'params' + && (!$canmodpara && !$canviewpara); next if $$menuitem[4] =~ /showgroups$/ && !$canviewgrps && !$grouptools; @@ -749,7 +751,7 @@ sub innerregister { if ($env{'request.filename'}=~/$LONCAPA::assess_re/) { push(@privs,('mgr','vgr')); } - push(@privs,'opa'); + push(@privs,('opa','vpa')); } foreach my $priv (@privs) { $perms{$priv} = &Apache::lonnet::allowed($priv,$env{'request.course.id'}); @@ -773,7 +775,7 @@ sub innerregister { 'Content Submissions'); } } - if (($env{'request.symb'} ne '') && ($perms{'opa'})) { + if (($env{'request.symb'} ne '') && (($perms{'opa'}) || ($perms{'vpa'}))) { &switch('','',7,3,'pparm.png','Content Settings','parms[_2]', "gocmd('/adm/parmset','set')", 'Content Settings'); @@ -2093,7 +2095,7 @@ sub roles_selector { } else { $ccrole = 'cc'; } - my ($priv,$gotsymb,$destsymb); + my ($privref,$gotsymb,$destsymb); my $destinationurl = $ENV{'REQUEST_URI'}; if ($destinationurl =~ /\?symb=/) { $gotsymb = 1; @@ -2114,12 +2116,15 @@ sub roles_selector { my $destination = $destinationurl; $destination =~ s/(\?.*)$//; if (exists($reqprivs->{$destination})) { - $priv = $reqprivs->{$destination}; + if ($reqprivs->{$destination} =~ /,/) { + @{$privref} = split(/,/,$reqprivs->{$destination}); + } else { + $privref = [$reqprivs->{$destination}]; + } } } if ($env{'user.role.'.$ccrole.'./'.$cdom.'/'.$cnum}) { my ($start,$end) = split(/\./,$env{'user.role.'.$ccrole.'./'.$cdom.'/'.$cnum}); - if ((($start) && ($start<0)) || (($end) && ($end<$now)) || (($start) && ($now<$start))) { @@ -2129,7 +2134,9 @@ sub roles_selector { } } if ($is_cc) { - &get_all_courseroles($cdom,$cnum,\%courseroles,\%seccount,\%courseprivs,$priv); + &get_all_courseroles($cdom,$cnum,\%courseroles,\%seccount,\%courseprivs); + } elsif ($env{'request.role'} =~ m{^\Qcr/$cdom/$cdom-domainconfig/\E(\w+)\.\Q/$cdom/$cnum\E}) { + &get_customadhoc_roles($cdom,$cnum,\%courseroles,\%seccount,\%courseprivs,$privref); } else { my %gotnosection; foreach my $item (keys(%env)) { @@ -2145,7 +2152,7 @@ sub roles_selector { $gotnosection{$role} = 1; } } - if ($priv ne '') { + if ((ref($privref) eq 'ARRAY') && (@{$privref} > 0)) { my $cnumsec = $cnum; if ($sec ne '') { $cnumsec .= "/$sec"; @@ -2183,7 +2190,7 @@ sub roles_selector { } if ((keys(%seccount) > 1) || ($numdiffsec > 1)) { my @submenu; - $js = &jump_to_role($cdom,$cnum,\%seccount,\%courseroles,\%courseprivs,$priv); + $js = &jump_to_role($cdom,$cnum,\%seccount,\%courseroles,\%courseprivs,$privref); $form = '