--- loncom/interface/lonmenu.pm 2011/11/30 18:34:25 1.315.2.15 +++ loncom/interface/lonmenu.pm 2010/03/10 21:25:50 1.316 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines to control the menu # -# $Id: lonmenu.pm,v 1.315.2.15 2011/11/30 18:34:25 raeburn Exp $ +# $Id: lonmenu.pm,v 1.316 2010/03/10 21:25:50 droeschl Exp $ # # Copyright Michigan State University Board of Trustees # @@ -28,8 +28,6 @@ # # There is one parameter controlling the action of this module: # -# environment.remote - if this is 'on', the routines controll the remote -# control, otherwise they render the main window controls; =head1 NAME @@ -124,22 +122,8 @@ and in the body of the document =item unloadevents() -=item startupremote() - -=item setflags() - -=item maincall() - -=item load_remote_msg() - =item get_menu_name() -=item reopenmenu() - -=item open() - -Open the menu - =item clear() =item switch() @@ -156,10 +140,6 @@ The javascript is usually similar to "go =item rawconfig() -=item close() - -=item footer() - =item utilityfunctions() =item serverform() @@ -205,10 +185,10 @@ sub prep_menuitem { } else { # textual Link $link = &mt($$menuitem[3]); } - return '
  • $link
  • |; + . ( $$menuitem[4] eq 'newmsg' ? ' class="LC_new_message"' : '') + . qq| href="$$menuitem[0]">$link|; } # primary_menu() evaluates @primary_menu and returns XHTML for the menu @@ -220,11 +200,6 @@ sub primary_menu { my $menu; # each element of @primary contains following array: # (link url, icon path, alt text, link text, condition) - my $public; - if ((($env{'user.name'} eq 'public') && ($env{'user.domain'} eq 'public')) - || (($env{'user.name'} eq '') && ($env{'user.domain'} eq ''))) { - $public = 1; - } foreach my $menuitem (@primary_menu) { # evaluate conditions next if ref($menuitem) ne 'ARRAY'; # @@ -232,76 +207,39 @@ sub primary_menu { && &Apache::lonmsg::mynewmail(); # whether a new msg next if $$menuitem[4] eq 'newmsg' # arrived or not && !&Apache::lonmsg::mynewmail(); # - next if $$menuitem[4] !~ /public/ ##we've a public user, - && $public; ##who should not see all - ##links - next if $$menuitem[4] eq 'onlypublic'# hide links which are - && !$public; # only visible to public - # users + next if $$menuitem[4] !~ /public/ ##we've a public user, + && $env{'user.name'} eq 'public' ##who should not see all + && $env{'user.domain'} eq 'public'; ##links + next if $$menuitem[4] eq 'onlypublic'# hide links which are + && $env{'user.name'} ne 'public' # only visible to public + && $env{'user.domain'} ne 'public'; # users next if $$menuitem[4] eq 'roles' ##show links depending on - && &Apache::loncommon::show_course(); ##term 'Courses' or + && &Apache::loncommon::show_course(); ##term 'Courses' or next if $$menuitem[4] eq 'courses' ##'Roles' wanted && !&Apache::loncommon::show_course(); ## - - + + if ($$menuitem[3] eq 'Help') { # special treatment for helplink - if ($public) { - my $origmail = $Apache::lonnet::perlvar{'lonSupportEMail'}; - my $defdom = &Apache::lonnet::default_login_domain(); - my $to = &Apache::loncommon::build_recipient_list(undef, - 'helpdeskmail', - $defdom,$origmail); - if ($to ne '') { - $menu .= &prep_menuitem($menuitem); - } - } else { - $menu .= '
  • '.&Apache::loncommon::top_nav_help('Help').'
  • '; - } + $menu .= '
  • '.&Apache::loncommon::top_nav_help('Help').'
  • '; } else { - $menu .= &prep_menuitem($menuitem); + my @items = @{$menuitem}; + $items[0] = 'javascript:'.$menuitem->[0].';'; + $menu .= &prep_menuitem(\@items); } } return "
      $menu
    "; } -#returns hashref {user=>'',dom=>''} containing: -# own name, domain if user is au -# name, domain of parent author if user is ca or aa -#empty return if user is not an author or not on homeserver -# -#TODO this should probably be moved somewhere more central -#since it can be used by different parts of the system -sub getauthor{ - return unless $env{'request.role'}=~/^(ca|aa|au)/; #nothing to do if user isn't some kind of author - - #co- or assistent author? - my ($dom, $user) = ($env{'request.role'} =~ /^(?:ca|aa)\.\/($match_domain)\/($match_username)$/) - ? ($1, $2) #domain, username of the parent author - : @env{ ('request.role.domain', 'user.name') }; #own domain, username - - # current server == home server? - my $home = &Apache::lonnet::homeserver($user,$dom); - foreach (&Apache::lonnet::current_machine_ids()){ - return {user => $user, dom => $dom} if $_ eq $home; - } - - # if wrong server - return; -} - sub secondary_menu { my $menu; my $crstype = &Apache::loncommon::course_type(); - my $crs_sec = $env{'request.course.id'} . ($env{'request.course.sec'} - ? "/$env{'request.course.sec'}" - : ''); - my $canedit = &Apache::lonnet::allowed('mdc', $env{'request.course.id'}); - my $canviewgrps = &Apache::lonnet::allowed('vcg', $crs_sec); - my $author = getauthor(); - + my $canedit = &Apache::lonnet::allowed('mdc', $env{'request.course.id'}); + my $canviewgrps = &Apache::lonnet::allowed('vcg', $env{'request.course.id'} + . ($env{'request.course.sec'} ? "/$env{'request.course.sec'}" + : '')); my $showlink = &show_return_link(); my %groups = &Apache::lonnet::get_active_groups( $env{'user.domain'}, $env{'user.name'}, @@ -311,7 +249,6 @@ sub secondary_menu { # evaluate conditions next if ref($menuitem) ne 'ARRAY'; next if $$menuitem[4] ne 'always' - && $$menuitem[4] ne 'author' && !$env{'request.course.id'}; next if $$menuitem[4] eq 'showreturn' && !$showlink @@ -333,8 +270,6 @@ sub secondary_menu { next if $$menuitem[4] =~ /showgroups$/ && !$canviewgrps && !%groups; - next if $$menuitem[4] eq 'author' - && !$author; if ($$menuitem[3] eq 'Roles' && $env{'request.course.id'}) { # special treatment for role selector @@ -376,18 +311,11 @@ sub secondary_menu { $menu =~ s/\[url\]/$escurl/g; $menu =~ s/\[symb\]/$escsymb/g; } - $menu =~ s/\[uname\]/$$author{user}/g; - $menu =~ s/\[udom\]/$$author{dom}/g; return ""; } sub show_return_link { - if (($env{'request.noversionuri'} =~ m{^/adm/(viewclasslist|navmaps)($|\?)}) - || ($env{'request.noversionuri'} =~ m{^/adm/.*/aboutme($|\?)})) { - - return if ($env{'form.register'}); - } return (($env{'request.noversionuri'}=~m{^/(res|public)/} && $env{'request.symb'} eq '') || @@ -396,7 +324,7 @@ sub show_return_link { (($env{'request.noversionuri'}=~/^\/adm\//) && ($env{'request.noversionuri'}!~/^\/adm\/wrapper\//) && ($env{'request.noversionuri'}!~ - m[^/adm/.*/(smppg|bulletinboard)($|\?)]) + m[^/adm/.*/(smppg|bulletinboard|aboutme)($|\?)]) )); } @@ -409,11 +337,6 @@ sub registerurl { if ($env{'request.state'} eq 'construct') { $force_title=&Apache::lonxml::display_title(); } - if (($env{'environment.remote'} eq 'off') || - ((($env{'request.publicaccess'}) || - (!&Apache::lonnet::is_on_map( - &unescape($env{'request.noversionuri'})))) && - (!$forcereg))) { return $result .'' .$force_title; - } -# Graphical display after login only - if ($env{'request.registered'} && !$forcereg) { return ''; } - $result.=&innerregister($forcereg); - return $result.$force_title; } sub innerregister { my ($forcereg,$titletable,$bread_crumbs) = @_; - my $result = ''; my ($uname,$thisdisfn); my $const_space = ($env{'request.state'} eq 'construct'); my $is_const_dir = 0; @@ -440,25 +357,11 @@ sub innerregister { $env{'request.registered'} = 1; - my $noremote = ($env{'environment.remote'} eq 'off'); - undef(@inlineremote); - my $reopen=&Apache::lonmenu::reopenmenu(); + if ( $env{'request.symb'} && $env{'request.course.id'} ) { - my $newmail=''; - - if (&Apache::lonmsg::newmail() && !$noremote) { - # We have new mail and remote is up - $newmail= 'swmenu.setstatus("you have","messages");'; - } - - my ($breadcrumb,$separator,$resurl); - if ($noremote - && ($env{'request.symb'}) - && ($env{'request.course.id'})) { - - (my $mapurl, my $rid,$resurl) = &Apache::lonnet::decode_symb(&Apache::lonnet::symbread()); + my ($mapurl,$rid,$resurl) = &Apache::lonnet::decode_symb(&Apache::lonnet::symbread()); my $coursetitle = $env{'course.'.$env{'request.course.id'}.'.description'}; my $maptitle = &Apache::lonnet::gettitle($mapurl); @@ -469,16 +372,9 @@ sub innerregister { } else { $contentstext = &mt('Course Contents'); } - my @crumbs; - unless (($forcereg) && ($env{'request.noversionuri'} eq '/adm/navmaps') - && ($mapurl eq $env{'course.'.$env{'request.course.id'}.'.url'})) { - my $navhref = "javascript:gopost('/adm/navmaps','')"; - if ($env{'environment.remotenavmap'} eq 'on') { - $navhref = "javascript:gonav('/adm/navmaps');"; - } - @crumbs = ({text => $contentstext, - href => $navhref}); - } + my @crumbs = ({text => $contentstext, + href => "Javascript:gonav('/adm/navmaps')"}); + if ($mapurl ne $env{'course.'.$env{'request.course.id'}.'.url'}) { push(@crumbs, {text => '...', no_mt => 1}); @@ -492,29 +388,12 @@ sub innerregister { &Apache::lonhtmlcommon::clear_breadcrumbs(); &Apache::lonhtmlcommon::add_breadcrumb(@crumbs); - #$breadcrumb .= &Apache::lonhtmlcommon::breadcrumbs(undef,undef,0); - unless (($env{'request.state'} eq 'edit') || ($newmail) || - ($env{'request.state'} eq 'construct') || - ($env{'form.register'})) { - $separator = &Apache::loncommon::head_subbox(); - } - # - } elsif (!$const_space){ - #a situation when we're looking at a resource outside of context of a - #course or construction space (e.g. with cumulative rights) - &Apache::lonhtmlcommon::clear_breadcrumbs(); - &Apache::lonhtmlcommon::add_breadcrumb({text => 'View Resource'}); } - if ($env{'request.state'} eq 'construct') { - $newmail = $titletable; - } - my $timesync = ( $noremote ? '' : 'swmenu.syncclock(1000*'.time.');' ); - my $tablestart = ( $noremote ? '' : ''); - my $tableend = ( $noremote ? '
    ' : ''); # ============================================================================= # ============================ This is for URLs that actually can be registered - if (($env{'request.noversionuri'}!~m{^/(res/)*adm/}) || ($forcereg)) { + return '' unless ( ($env{'request.noversionuri'}!~m{^/(res/)*adm/}) + || $forcereg ); # -- This applies to homework problems for users with grading privileges my $crs='/'.$env{'request.course.id'}; if ($env{'request.course.sec'}) { @@ -598,8 +477,6 @@ sub innerregister { my $cfuname=''; my $cfudom=''; my $uploaded; - my $switchserver=''; - my $home; if ($env{'request.filename'}) { my $file=&Apache::lonnet::declutter($env{'request.filename'}); if (defined($cnum) && defined($cdom)) { @@ -610,20 +487,18 @@ sub innerregister { # Check that the user has permission to edit this resource ($cfuname,$cfudom)=&Apache::loncacc::constructaccess($file,$1); if (defined($cfudom)) { - $home=&Apache::lonnet::homeserver($cfuname,$cfudom); + my $home=&Apache::lonnet::homeserver($cfuname,$cfudom); my $allowed=0; my @ids=&Apache::lonnet::current_machine_ids(); foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } } if ($allowed) { $cfile=$file; - } else { - $switchserver=$file; } } } } # Finally, turn the button on or off - if (($cfile || $switchserver) && !$const_space) { + if ($cfile && !$const_space) { my $nocrsedit; # Suppress display where CC has switched to student role. if ($env{'request.course.id'}) { @@ -635,19 +510,9 @@ sub innerregister { if ($nocrsedit) { $editbutton=&clear(6,1); } else { - my $bot = "go('$cfile')"; - if ($switchserver) { - if ( $env{'request.symb'} && $env{'request.course.id'} ) { - my ($mapurl,$rid,$resurl) = &Apache::lonnet::decode_symb(&Apache::lonnet::symbread()); - $cfile = '/adm/switchserver?otherserver='.$home.'&role='. - &HTML::Entities::encode($env{'request.role'},'"<>&').'&symb='. - &HTML::Entities::encode($env{'request.symb'},'"<>&'); - $bot = "need_switchserver('$cfile');"; - } - } $editbutton=&switch ('','',6,1,'pcstr.gif','edit[_1]','resource[_2]', - $bot,"Edit this resource"); + "go('".$cfile."');","Edit this resource"); $noeditbutton = 0; } } elsif ($editbutton eq '') { @@ -670,18 +535,6 @@ sub innerregister { } } } - if ($env{'request.course.id'}) { - if ($resurl eq "public/$cdom/$cnum/syllabus") { - if ($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ /\w/) { - if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) { - $editbutton=&switch('','',6,1,'pcstr.png','Edit', - 'resource[_2]', - "go('/adm/courseprefs?phase=display&actions=courseinfo')", - 'Edit this resource'); - } - } - } - } ### ### # Prepare the rest of the buttons @@ -710,32 +563,18 @@ s&7&1&del.gif&delete[_1]&resource[_2]&go s&7&2&prt.gif&prepare[_1]&printout[_1]&gocstr('/adm/printout','/~$uname/$cleandisfn')&Prepare a printable document ENDMENUITEMS } - if ($noremote) { if (ref($bread_crumbs) eq 'ARRAY') { &Apache::lonhtmlcommon::clear_breadcrumbs(); foreach my $crumb (@{$bread_crumbs}){ &Apache::lonhtmlcommon::add_breadcrumb($crumb); } } - } } elsif ( defined($env{'request.course.id'}) && $env{'request.symb'} ne '' ) { # # We are in a course and looking at a registred URL # Should probably be in mydesk.tab # - - my %icon_text; - if ($noremote) { - %icon_text = &Apache::lonlocal::texthash ( - annotate => 'Notes', - bookmark => 'Bookmark', - catalog => 'Info', - evaluate => 'Evaluate', - feedback => 'Communicate', - printout => 'Print', - ); - } $menuitems=(< 0){ $menuitems.="anot.gif"; } $menuitems.="&anno-[_1]&tations[_1]&annotate()&"; -$menuitems.="Make notes and annotations about this resource&&1&$icon_text{'annotate'}\n"; +$menuitems.="Make notes and annotations about this resource&&1\n"; - unless ($noremote) { - my $showreqcrs = &check_for_rcrs(); - if ($showreqcrs) { - $menuitems.="s&8&1&rcrs.gif&request[_1]&course[_16]". - "&go('/adm/requestcourse')&Course requests\n"; - } - } - unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme|viewclasslist|portfolio)(\?|$)/) { + unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme)(\?|$)/) { if ((!$env{'request.enc'}) && ($env{'request.noversionuri'} !~ m{^/adm/wrapper/ext/})) { - my $tail; - unless ($env{'request.state'} eq 'construct') { - $tail = '&&&'.$icon_text{'catalog'}; - } $menuitems.=(< -#$inlineremote[21] $inlineremote[23] -#ENDARROWSINLINE -# if ( &hidden_button_check() ne 'yes' ) { -# $inlinebuttons .= (< -#ENDINLINEICONS -# } -# } else { # not iconsonly -# if ( $inlineremote[21] ne '' || $inlineremote[23] ne '' ) { -# $inlinebuttons = (<$inlineremote[21] $inlineremote[23] -#ENDFIRSTLINE -# } -# if ( &hidden_button_check() ne 'yes' ) { -# foreach my $row ( 6 .. 9 ) { -# if ( $inlineremote[ ${row} . '1' ] ne '' -# || $inlineremote[ $row . '2' ] ne '' -# || $inlineremote[ $row . '3' ] ne '' ) -# { -# $inlinebuttons .= <<"ENDLINE"; -#$inlineremote["${row}1"]$inlineremote["${row}2"]$inlineremote["${row}3"] -#ENDLINE -# } -# } -# } -# } - } - $breadcrumb = &Apache::lonhtmlcommon::breadcrumbs(undef,undef,0); - $result =(< -// BEGIN LON-CAPA Internal - -$timesync -$breadcrumb - - - -$newmail - - - -ENDREGTEXT -# Registered, graphical output - } else { - my $requri=&Apache::lonnet::clutter(&Apache::lonnet::fixversion((split(/\?/,$env{'request.noversionuri'}))[0])); - $requri=&Apache::lonenc::check_encrypt(&unescape($requri)); - my $cursymb=&Apache::lonenc::check_encrypt($env{'request.symb'}); - my $navstatus=&get_nav_status(); - my $clearcstr; - - if ($env{'user.adv'}) { $clearcstr='clearbut(6,1)'; } - $result = (< -// - -ENDREGTHIS + Apache::lonhtmlcommon::add_breadcrumb_tool( + 'advtools', @inlineremote[61,71,72,73,92]); } -# ============================================================================= - } else { -# ========================================== This can or will not be registered - if ($noremote) { -# Not registered - $result= (< -// - -ENDDONOTREGTHIS - } -# ============================================================================= - } - return $result; + return Apache::lonhtmlcommon::scripttag('', 'start') + . Apache::lonhtmlcommon::breadcrumbs(undef,undef,0) + . Apache::lonhtmlcommon::scripttag('', 'end'); } sub is_course_upload { @@ -1034,176 +715,22 @@ sub unloadevents() { return 'LONCAPAstale();'; } - -sub startupremote { - my ($lowerurl)=@_; - if ($env{'environment.remote'} eq 'off') { - return (''); - } -# -# The Remote actually gets launched! -# - my $configmenu=&rawconfig(); - my $esclowerurl=&escape($lowerurl); - my $message=&mt('"Waiting for Remote Control window to load: "+[_1]','waited'); - return(< -// - -ENDREMOTESTARTUP -} - -sub setflags() { - return(< -// - -ENDSETFLAGS -} - -sub maincall() { - if ($env{'environment.remote'} eq 'off') { return ''; } - return(< -// - -ENDMAINCALL -} - -sub load_remote_msg { - my ($lowerurl)=@_; - - if ($env{'environment.remote'} eq 'off') { return ''; } - - my $esclowerurl=&escape($lowerurl); - my $link=&mt('[_1]Continue[_2] on in Inline Menu mode' - ,'' - ,''); - return(< -
    - -
    -

    -

    $link

    -ENDREMOTEFORM -} - sub get_menu_name { my $hostid = $Apache::lonnet::perlvar{'lonHostID'}; $hostid =~ s/\W//g; return 'LCmenu'.$hostid; } - -sub reopenmenu { - if ($env{'environment.remote'} eq 'off') { return ''; } - my $menuname = &get_menu_name(); - my $nothing = &Apache::lonhtmlcommon::javascript_nothing(); - return('window.open('.$nothing.',"'.$menuname.'","",false);'); -} - - -sub open { - my $returnval=''; - if ($env{'environment.remote'} eq 'off') { - return - ''; - } - my $menuname = &get_menu_name(); - -# unless (shift eq 'unix') { -# resizing does not work on linux because of virtual desktop sizes -# $returnval.=(< -ENDOPEN - return ''; -} - - # ================================================================== Raw Config +#SD +#this is called by +#lonmenu +# sub clear { my ($row,$col)=@_; - unless ($env{'environment.remote'} eq 'off') { - if (($row<1) || ($row>13)) { return ''; } - return "\n".qq(window.status+='.';swmenu.clearbut($row,$col);); - } else { - $inlineremote[10*$row+$col]=''; - return ''; - } + $inlineremote[10*$row+$col]=''; + return ''; } # ============================================ Switch a button or create a link @@ -1211,30 +738,17 @@ sub clear { # The javascript is usually similar to "go('/adm/roles')" or "cstrgo(..)". sub switch { - my ($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat,$nobreak,$inlinetools)=@_; + my ($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat,$nobreak)=@_; $act=~s/\$uname/$uname/g; $act=~s/\$udom/$udom/g; $top=&mt($top); $bot=&mt($bot); $desc=&mt($desc); - if (($env{'environment.remote'} ne 'off') || ($env{'environment.icons'} eq 'classic')) { - $img=&mt($img); - } my $idx=10*$row+$col; - if ($cat ne '') { - $category_members{$cat}.=':'.$idx; - } + $category_members{$cat}.=':'.$idx; - unless ($env{'environment.remote'} eq 'off') { - if (($row<1) || ($row>13)) { return ''; } -# Remote - return "\n". - qq(window.status+='.';swmenu.switchbutton($row,$col,"$img","$top","$bot","$act","$desc");); - } else { # Inline Remote - if ($env{'environment.icons'} ne 'classic') { - $img=~s/\.gif$/\.png/; - } + $img=~s/\.gif$/\.png/; if ($nobreak==2) { return ''; } my $text=$top.' '.$bot; $text=~s/\s*\-\s*//gs; @@ -1264,19 +778,15 @@ sub switch { } } else { # Inline Menu +#SD look here if ($env{'environment.icons'} eq 'iconsonly') { $inlineremote[$idx]=''.$pic.''; } else { - my $icon_text = $desc; - if ($inlinetools) { - $icon_text = $inlinetools.' '; - } $inlineremote[$idx]= ''.$pic. - ''.$icon_text.' '; + ''.$desc.''; } } - } return ''; } @@ -1294,13 +804,6 @@ sub secondlevel { return $output; } -sub openmenu { - my $menuname = &get_menu_name(); - if ($env{'environment.remote'} eq 'off') { return ''; } - my $nothing = &Apache::lonhtmlcommon::javascript_nothing(); - return "window.open(".$nothing.",'".$menuname."');"; -} - sub inlinemenu { undef(@inlineremote); undef(%category_members); @@ -1343,13 +846,7 @@ sub rawconfig { # my $textualoverride=shift; my $output=''; - unless ($env{'environment.remote'} eq 'off') { - $output.= - "window.status='Opening Remote Control';var swmenu=".&openmenu(). -"\nwindow.status='Configuring Remote Control ';"; - } else { - unless ($textualoverride) { return ''; } - } + return '' unless $textualoverride; my $uname=$env{'user.name'}; my $udom=$env{'user.domain'}; my $adv=$env{'user.adv'}; @@ -1373,13 +870,6 @@ sub rawconfig { my ($row,$col,$pro,$prt,$img,$top,$bot,$act,$desc,$cat)=split(/\:/,$line); $prt=~s/\$uname/$uname/g; $prt=~s/\$udom/$udom/g; - if ($env{'environment.remotenavmap'} eq 'on') { - unless ($env{'environment.remote'} eq 'on') { - if ($img eq 'nav.gif') { - $act = "gonav('/adm/navmaps','')"; - } - } - } if ($prt =~ /\$crs/) { next unless ($env{'request.course.id'}); next if ($crstype eq 'Community'); @@ -1530,13 +1020,6 @@ sub rawconfig { $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc,$cat); } } - unless ($env{'environment.remote'} eq 'off') { - $output.="\nwindow.status='Synchronizing Time';swmenu.syncclock(1000*".time.");\nwindow.status='Remote Control Configured.';"; - if (&Apache::lonmsg::newmail()) { - $output.='swmenu.setstatus("you have","messages");'; - } - } - return $output; } @@ -1562,34 +1045,8 @@ sub check_for_rcrs { return $showreqcrs; } -# ======================================================================= Close - -sub close { - if ($env{'environment.remote'} eq 'off') { return ''; } - my $menuname = &get_menu_name(); - return(< -// - -ENDCLOSE -} - # ====================================================================== Footer -sub footer { - -} - sub nav_control_js { my $nav=($env{'environment.remotenavmap'} eq 'on'); return (< 1}); - my $confirm_switch = &mt("Editing requires switching to the resource's home server.").'\n'. - &mt('Switch server?'); - return (<{$destination})) { - $priv = $reqprivs->{$destination}; - } - } + } if ($env{'user.role.'.$ccrole.'./'.$cdom.'/'.$cnum}) { my ($start,$end) = split(/\./,$env{'user.role.'.$ccrole.'./'.$cdom.'/'.$cnum}); @@ -1922,7 +1357,7 @@ sub roles_selector { } } if ($is_cc) { - &get_all_courseroles($cdom,$cnum,\%courseroles,\%seccount,\%courseprivs,$priv); + &get_all_courseroles($cdom,$cnum,\%courseroles,\%seccount); } else { my %gotnosection; foreach my $item (keys(%env)) { @@ -1938,18 +1373,6 @@ sub roles_selector { $gotnosection{$role} = 1; } } - if ($priv ne '') { - my $cnumsec = $cnum; - if ($sec ne '') { - $cnumsec .= "/$sec"; - } - $courseprivs{"$role./$cdom/$cnumsec./"} = - $env{"user.priv.$role./$cdom/$cnumsec./"}; - $courseprivs{"$role./$cdom/$cnumsec./$cdom/"} = - $env{"user.priv.$role./$cdom/$cnumsec./$cdom/"}; - $courseprivs{"$role./$cdom/$cnumsec./$cdom/$cnumsec"} = - $env{"user.priv.$role./$cdom/$cnumsec./$cdom/$cnumsec"}; - } if (ref($courseroles{$role}) eq 'ARRAY') { if ($sec ne '') { if (!grep(/^\Q$sec\E$/,@{$courseroles{$role}})) { @@ -1975,7 +1398,7 @@ sub roles_selector { } my @roles_order = ($ccrole,'in','ta','ep','ad','st'); if (keys(%courseroles) > 1) { - $role_selector = &jump_to_role($cdom,$cnum,\%seccount,\%courseroles,\%courseprivs,$priv); + $role_selector = &jump_to_role($cdom,$cnum,\%seccount,\%courseroles); $role_selector .= '
    '."\n". ''."\n". + &HTML::Entities::encode($ENV{'REQUEST_URI'}).'" />'."\n". ''."\n". ''."\n". ''."\n". @@ -2001,21 +1424,18 @@ sub roles_selector { } sub get_all_courseroles { - my ($cdom,$cnum,$courseroles,$seccount,$courseprivs) = @_; - unless ((ref($courseroles) eq 'HASH') && (ref($seccount) eq 'HASH') && - (ref($courseprivs) eq 'HASH')) { + 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') && - (ref($result->{'privs'}) eq 'HASH')) { + if ((ref($result->{'roles'}) eq 'HASH') && + (ref($result->{'seccount'}) eq 'HASH')) { %{$courseroles} = %{$result->{'roles'}}; %{$seccount} = %{$result->{'seccount'}}; - %{$courseprivs} = %{$result->{'privs'}}; return; } } @@ -2043,43 +1463,30 @@ sub get_all_courseroles { push(@{$courseroles->{$urole}},$usec); } } - my $area = '/'.$cdom.'/'.$cnum; - if ($usec ne '') { - $area .= '/'.$usec; - } - if ($role =~ /^cr\//) { - &Apache::lonnet::custom_roleprivs($courseprivs,$urole,$cdom,$cnum,$urole.'.'.$area,$area); - } else { - &Apache::lonnet::standard_roleprivs($courseprivs,$urole,$cdom,$urole.'.'.$area,$cnum,$area); - } } my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum,['st']); @{$courseroles->{'st'}} = (); - &Apache::lonnet::standard_roleprivs($courseprivs,'st',$cdom,"st./$cdom/$cnum",$cnum,"/$cdom/$cnum"); if (keys(%sections_count) > 0) { push(@{$courseroles->{'st'}},keys(%sections_count)); - $seccount->{'st'} = scalar(keys(%sections_count)); + $seccount->{'st'} = scalar(keys(%sections_count)); } my $rolehash = { 'roles' => $courseroles, 'seccount' => $seccount, - 'privs' => $courseprivs, }; &Apache::lonnet::do_cache_new('getcourseroles',$cdom.'_'.$cnum,$rolehash); return; } sub jump_to_role { - my ($cdom,$cnum,$seccount,$courseroles,$courseprivs,$priv) = @_; + my ($cdom,$cnum,$seccount,$courseroles) = @_; my %lt = &Apache::lonlocal::texthash( this => 'This role has section(s) associated with it.', ente => 'Enter a specific section.', orlb => 'Enter a specific section, or leave blank for no section.', avai => 'Available sections are:', youe => 'You entered an invalid section choice:', - plst => 'Please try again.', - role => 'The role you selected is not permitted to view the current page.', - swit => 'Switch role, but display Main Menu page instead?', + plst => 'Please try again', ); my $js; if (ref($courseroles) eq 'HASH') { @@ -2102,37 +1509,6 @@ sub jump_to_role { ' numsec['.$i.'] = "'.$seccount->{$items[$i]}.'";'."\n"; } } - my $checkroles = 0; - if ($priv && ref($courseprivs) eq 'HASH') { - my (%disallowed,%allowed,@disallow); - foreach my $role (sort(keys(%{$courseprivs}))) { - my $trole; - if ($role =~ m{^(.+?)\Q./$cdom/$cnum\E}) { - $trole = $1; - } - if (($trole ne '') && ($trole ne 'cm')) { - if ($courseprivs->{$role} =~ /\Q:$priv\E($|:|\&\w+)/) { - $allowed{$trole} = 1; - } else { - $disallowed{$trole} = 1; - } - } - } - foreach my $trole (keys(%disallowed)) { - unless ($allowed{$trole}) { - push(@disallow,$trole); - } - } - if (@disallow > 0) { - $checkroles = 1; - $js .= " var disallow = new Array('".join("','",@disallow)."');\n". - " var rolecheck = 1;\n"; - } - } - if (!$checkroles) { - $js .= " var disallow = new Array();\n". - " rolecheck = 0;\n"; - } return <<"END";