--- loncom/interface/lonmenu.pm 2012/12/27 05:34:07 1.403 +++ loncom/interface/lonmenu.pm 2013/05/09 05:24:36 1.414 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines to control the menu # -# $Id: lonmenu.pm,v 1.403 2012/12/27 05:34:07 raeburn Exp $ +# $Id: lonmenu.pm,v 1.414 2013/05/09 05:24:36 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -248,7 +248,6 @@ sub primary_menu { if (ref($primary_submenu{$title}) eq 'ARRAY') { foreach my $item (@{$primary_submenu{$title}}) { next if (($item->[2] eq 'wishlist') && (!$env{'user.adv'})); - next if (($item->[2] eq 'reqcrs') && (!&check_for_rcrs())); next if ((($item->[2] eq 'portfolio') || ($item->[2] eq 'blog')) && (!&Apache::lonnet::usertools_access('','',$item->[2], @@ -326,6 +325,37 @@ sub secondary_menu { my $canmgr = &Apache::lonnet::allowed('mgr', $crs_sec); my $author = &getauthor(); + my ($cdom,$cnum,$showsyllabus,$showfeeds); + if ($env{'request.course.id'}) { + $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; + if ($canedit) { + $showsyllabus = 1; + $showfeeds = 1; + } else { + unless (&Apache::lonnet::is_on_map("public/$cdom/$cnum/syllabus")) { + if (($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'}) || + ($env{'course.'.$env{'request.course.id'}.'.uploadedsyllabus'}) || + ($env{'course.'.$env{'request.course.id'}.'.updatedsyllabus'}) || + ($env{'request.course.syllabustime'})) { + $showsyllabus = 1; + } + } + if ($env{'request.course.feeds'}) { + $showfeeds = 1; + } + } + } + + my ($canmodifycoauthor); + if ($env{'request.role'} eq "au./$env{'user.domain'}/") { + my $extent = "$env{'user.domain'}/$env{'user.name'}"; + if ((&Apache::lonnet::allowed('cca',$extent)) || + (&Apache::lonnet::allowed('caa',$extent))) { + $canmodifycoauthor = 1; + } + } + my %groups = &Apache::lonnet::get_active_groups( $env{'user.domain'}, $env{'user.name'}, $env{'course.' . $env{'request.course.id'} . '.domain'}, @@ -337,7 +367,7 @@ sub secondary_menu { # evaluate conditions next if ref($menuitem) ne 'ARRAY'; next if $$menuitem[4] ne 'always' - && $$menuitem[4] ne 'author' + && ($$menuitem[4] ne 'author' && $$menuitem[4] ne 'cca') && !$env{'request.course.id'}; next if $$menuitem[4] =~ /^mdc/ && !$canedit; @@ -360,8 +390,14 @@ sub secondary_menu { next if $$menuitem[4] =~ /showgroups$/ && !$canviewgrps && !%groups; + next if $$menuitem[4] eq 'showsyllabus' + && !$showsyllabus; + next if $$menuitem[4] eq 'showfeeds' + && !$showfeeds; next if $$menuitem[4] eq 'author' && !$author; + next if $$menuitem[4] eq 'cca' + && !$canmodifycoauthor; if ($$menuitem[3] eq 'Roles' && $env{'request.course.id'}) { # special treatment for role selector @@ -372,6 +408,17 @@ sub secondary_menu { ); $menu .= $switcher; } else { + if ($$menuitem[3] eq 'Syllabus' && $env{'request.course.id'}) { + my $url = $$menuitem[0]; + $url =~ s{\[cdom\]/\[cnum\]}{$cdom/$cnum}; + if (&Apache::lonnet::is_on_map($url)) { + unless ($$menuitem[0] =~ /\?register=1/) { + $$menuitem[0] .= '?register=1'; + } + } else { + $$menuitem[0] =~ s{\?register=1}{}; + } + } $menu .= &prep_menuitem(\@$menuitem); } } @@ -395,6 +442,10 @@ sub secondary_menu { } $menu =~ s/\[uname\]/$$author{user}/g; $menu =~ s/\[udom\]/$$author{dom}/g; + if ($showsyllabus || $showfeeds) { + $menu =~ s/\[cnum\]/$cnum/g; + $menu =~ s/\[cdom\]/$cdom/g; + } if ($menu) { $menu = "
"; } @@ -504,6 +555,14 @@ sub innerregister { &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1); } return $trail; + } elsif ($resurl =~ m{^\Q/uploaded$courseurl/portfolio/syllabus/}) { + &Apache::lonhtmlcommon::clear_breadcrumbs(); + &prepare_functions('/public'.$courseurl."/syllabus", + $forcereg,$group,undef,undef,1); + $title = &mt('Syllabus File'); + my ($trail) = + &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1); + return $trail; } unless ($env{'request.state'} eq 'construct') { &Apache::lonhtmlcommon::clear_breadcrumbs(); @@ -836,24 +895,18 @@ sub prepare_functions { # # This applies in course context # - if (($resurl eq "/public/$cdom/$cnum/syllabus") && ($perms{'mdc'})) { - if ($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ /\w/) { - &switch('','',6,1,'pcstr.png','Edit', - 'resource[_2]', - "go('/adm/courseprefs?phase=display&actions=courseinfo')", - 'Edit this resource'); - $editbutton = 1; + if (($perms{'mdc'}) && + (($resurl eq "/public/$cdom/$cnum/syllabus") || + ($resurl =~ m{^/uploaded/$cdom/$cnum/portfolio/syllabus/}))) { + $cfile = $resurl; + $home = &Apache::lonnet::homeserver($cnum,$cdom); + if ($env{'form.forceedit'}) { + $forceview = 1; } else { - $cfile = $resurl; - $home = &Apache::lonnet::homeserver($cnum,$cdom); - if ($env{'form.forceedit'}) { - $forceview = 1; - } else { - $forceedit = 1; - } - $editbutton = &get_editbutton($cfile,$home,$switchserver, - $forceedit,$forceview,$forcereg); + $forceedit = 1; } + $editbutton = &get_editbutton($cfile,$home,$switchserver, + $forceedit,$forceview,$forcereg); } elsif (($resurl eq '/adm/extresedit') && (($env{'form.symb'}) || ($env{'form.folderpath'}))) { ($cfile,$home,$switchserver,$forceedit,$forceview) = @@ -864,7 +917,15 @@ sub prepare_functions { $forceedit,$forceview,$forcereg, $env{'form.title'},$env{'form.suppurl'}); } - } elsif ($resurl !~ m{^/?adm/($match_domain)/($match_username)/aboutme$}) { + } elsif (($resurl =~ m{^/?adm/viewclasslist$}) && + (&Apache::lonnet::allowed('opa',$env{'request.course.id'}))) { + ($cfile,$home,$switchserver,$forceedit,$forceview) = + &Apache::lonnet::can_edit_resource($resurl,$cnum,$cdom,$resurl, + $env{'form.symb'}); + $editbutton = &get_editbutton($cfile,$home,$switchserver, + $forceedit,$forceview,$forcereg); + } elsif (($resurl !~ m{^/?adm/($match_domain)/($match_username)/aboutme$}) && + ($resurl ne '/cgi-bin/printout.pl')) { if ($env{'request.filename'}) { my $file=&Apache::lonnet::declutter($env{'request.filename'}); ($cfile,$home,$switchserver,$forceedit,$forceview) = @@ -918,14 +979,6 @@ sub prepare_functions { 'Add records'); } } - } elsif ($resurl =~ m{^/?adm/viewclasslist}) { -# This applies to viewclasslist page for users in a course - if (&Apache::lonnet::allowed('opa',$env{'request.course.id'})) { - &switch('','',6,4,'pparm.png','Settings', - '', - "go('/adm/courseprefs?actions=classlists&phase=display')", - 'Student-viewable classlist options'); - } } if (($env{'form.folderpath'} =~ /^supplemental/) && (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) && @@ -979,8 +1032,9 @@ sub advtools_crumbs { 'advtools', @funcs[61,71,72,73,74,92]); } elsif ($env{'request.noversionuri'} eq '/adm/viewclasslist') { &Apache::lonhtmlcommon::add_breadcrumb_tool( - 'advtools', @funcs[64]); + 'advtools', $funcs[61]); } + return; } # ================================================================== Raw Config @@ -1662,11 +1716,7 @@ sub roles_selector { } } } - if ($crstype eq 'Community') { - $switchtext = &mt('Switch community role') - } else { - $switchtext = &mt('Switch course role') - } + $switchtext = &mt('Switch role'); my @roles_order = ($ccrole,'in','ta','ep','ad','st'); my $numdiffsec; if (keys(%seccount) == 1) { @@ -1788,6 +1838,7 @@ sub get_all_courseroles { push(@{$courseroles->{'st'}},keys(%sections_count)); $seccount->{'st'} = scalar(keys(%sections_count)); } + $seccount->{'st'} ++; # Increment for a section-less student role. my $rolehash = { 'roles' => $courseroles, 'seccount' => $seccount, @@ -1992,7 +2043,6 @@ sub countdown_timer { } my $duedate = &Apache::lonnet::EXT("resource.0.duedate"); my @interval=&Apache::lonnet::EXT("resource.0.interval"); - my $hastimeleft; if (@interval > 1) { my $first_access=&Apache::lonnet::get_first_access($interval[1]); if ($first_access > 0) {