--- loncom/interface/lonmenu.pm 2016/11/09 14:23:36 1.461 +++ loncom/interface/lonmenu.pm 2017/01/02 19:44:06 1.465 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines to control the menu # -# $Id: lonmenu.pm,v 1.461 2016/11/09 14:23:36 raeburn Exp $ +# $Id: lonmenu.pm,v 1.465 2017/01/02 19:44:06 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -381,6 +381,7 @@ sub secondary_menu { ? "/$env{'request.course.sec'}" : ''); my $canedit = &Apache::lonnet::allowed('mdc', $env{'request.course.id'}); + my $canvieweditor = &Apache::lonnet::allowed('cev', $env{'request.course.id'}); my $canviewroster = $env{'course.'.$env{'request.course.id'}.'.student_classlist_view'}; if ($canviewroster eq 'disabled') { undef($canviewroster); @@ -400,7 +401,7 @@ sub secondary_menu { if ($env{'request.course.id'}) { $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; - if ($canedit) { + if ($canedit || $canvieweditor) { $showsyllabus = 1; $showfeeds = 1; } else { @@ -416,7 +417,7 @@ sub secondary_menu { $showfeeds = 1; } } - unless (($canmgr || $canvgr)) { + unless ($canmgr || $canvgr) { my %slots = &Apache::lonnet::get_course_slots($cnum,$cdom); if (keys(%slots) > 0) { $showresv = 1; @@ -452,8 +453,8 @@ sub secondary_menu { next if $$menuitem[4] ne 'always' && ($$menuitem[4] ne 'author' && $$menuitem[4] ne 'cca') && !$env{'request.course.id'}; - next if $$menuitem[4] =~ /^mdc/ - && !$canedit; + next if $$menuitem[4] =~ /^crsedit/ + && (!$canedit && !$canvieweditor); next if $$menuitem[4] eq 'nvgr' && $canvgr; next if $$menuitem[4] eq 'vgr' @@ -746,6 +747,7 @@ sub innerregister { $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; $perms{'mdc'} = &Apache::lonnet::allowed('mdc',$env{'request.course.id'}); + $perms{'cev'} = &Apache::lonnet::allowed('cev',$env{'request.course.id'}); my @privs; if ($env{'request.symb'} ne '') { if ($env{'request.filename'}=~/$LONCAPA::assess_re/) { @@ -785,7 +787,7 @@ sub innerregister { # # This applies to items inside a folder/page modifiable in the course. # - if (($env{'request.symb'}=~/^uploaded/) && ($perms{'mdc'})) { + if (($env{'request.symb'}=~/^uploaded/) && (($perms{'mdc'}) || ($perms{'cev'}))) { my $text = 'Edit Folder'; if (($mapurl =~ /\.page$/) || ($env{'request.symb'}=~ @@ -1034,9 +1036,9 @@ sub get_editbutton { my ($cfile,$home,$switchserver,$forceedit,$forceview,$forcereg) = @_; my $jscall; if (($forceview) && ($env{'form.todocs'})) { - my ($folderpath,$command); + my ($folderpath,$command,$navmap); if ($env{'request.symb'}) { - $folderpath = &Apache::loncommon::symb_to_docspath($env{'request.symb'}); + $folderpath = &Apache::loncommon::symb_to_docspath($env{'request.symb'},\$navmap); } elsif ($env{'form.folderpath'} =~ /^supplemental/) { $folderpath = $env{'form.folderpath'}; $command = '&forcesupplement=1'; @@ -2097,7 +2099,7 @@ sub roles_selector { my ($cdom,$cnum,$httphost) = @_; my $crstype = &Apache::loncommon::course_type(); my $now = time; - my (%courseroles,%seccount,%courseprivs); + my (%courseroles,%seccount,%courseprivs,%roledesc); my $is_cc; my ($js,$form,$switcher); my $ccrole; @@ -2147,7 +2149,7 @@ sub roles_selector { if ($is_cc) { &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); + &get_customadhoc_roles($cdom,$cnum,\%courseroles,\%seccount,\%courseprivs,\%roledesc,$privref); } else { my %gotnosection; foreach my $item (keys(%env)) { @@ -2201,7 +2203,7 @@ sub roles_selector { } if ((keys(%seccount) > 1) || ($numdiffsec > 1)) { my @submenu; - $js = &jump_to_role($cdom,$cnum,\%seccount,\%courseroles,\%courseprivs,$privref); + $js = &jump_to_role($cdom,$cnum,\%seccount,\%courseroles,\%courseprivs,\%roledesc,$privref); $form = '
'."\n". ' $end))) { + if ($env{"user.role.dh./$cdom/"}) { + my ($start,$end)=split(/\./,$env{"user.role.dh./$cdom/"}); + my $now = time; + if (!($start && ($now<$start)) && !($end && ($now>$end))) { + my ($possroles,$description) = &Apache::lonnet::get_my_adhocroles($cdom.'_'.$cnum); + my %available; + if (ref($possroles) eq 'ARRAY') { + map { $available{$_} = 1; } @{$possroles}; + } + my %domdefaults = &Apache::lonnet::get_domain_defaults($cdom); + if (ref($domdefaults{'adhocroles'}) eq 'HASH') { + if (keys(%{$domdefaults{'adhocroles'}})) { my $numsec = 1; my @sections; my ($allseclist,$cached) = @@ -2353,16 +2363,17 @@ sub get_customadhoc_roles { } } else { my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum); - $numsec += scalar(keys(%sections_count)); - $allseclist = join(',',sort(keys(%sections_count))); + @sections = sort(keys(%sections_count)); + $numsec += scalar(@sections); + $allseclist = join(',',@sections); &Apache::lonnet::do_cache_new('courseseclist',$cdom.'_'.$cnum,$allseclist); } my (%adhoc,$gotprivs); my $prefix = "cr/$cdom/$cdom".'-domainconfig'; - foreach my $role (@customroles) { + foreach my $role (keys(%{$domdefaults{'adhocroles'}})) { next if (($role eq '') || ($role =~ /\W/)); $seccount->{"$prefix/$role"} = $numsec; - $courseroles->{"$prefix/$role"} = \@sections; + $roledesc->{"$prefix/$role"} = $description->{$role}; if ((ref($privref) eq 'ARRAY') && (@{$privref} > 0)) { if (exists($env{"user.priv.$prefix/$role./$cdom/$cnum./"})) { $courseprivs->{"$prefix/$role./$cdom/$cnum./"} = @@ -2383,7 +2394,9 @@ sub get_customadhoc_roles { foreach my $key (keys(%roledefs)) { (undef,my $rolename) = split(/_/,$key); if ($rolename ne '') { - $adhoc{$rolename} = $roledefs{$key}; + my ($systempriv,$domainpriv,$coursepriv) = split(/\_/,$roledefs{$key}); + $coursepriv = &Apache::lonnet::course_adhocrole_privs($rolename,$cdom,$cnum,$coursepriv); + $adhoc{$rolename} = join('_',($systempriv,$domainpriv,$coursepriv)); } } &Apache::lonnet::do_cache_new('adhocroles',$cdom,\%adhoc); @@ -2396,6 +2409,9 @@ sub get_customadhoc_roles { split(/\_/,$adhoc{$role}); } } + if ($available{$role}) { + $courseroles->{"$prefix/$role"} = \@sections; + } } } } @@ -2405,7 +2421,7 @@ sub get_customadhoc_roles { } sub jump_to_role { - my ($cdom,$cnum,$seccount,$courseroles,$courseprivs,$privref) = @_; + my ($cdom,$cnum,$seccount,$courseroles,$courseprivs,$roledesc,$privref) = @_; my %lt = &Apache::lonlocal::texthash( this => 'This role has section(s) associated with it.', ente => 'Enter a specific section.',