--- loncom/interface/lonmenu.pm 2007/04/11 02:42:00 1.209 +++ loncom/interface/lonmenu.pm 2007/11/09 20:57:29 1.231 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines to control the menu # -# $Id: lonmenu.pm,v 1.209 2007/04/11 02:42:00 www Exp $ +# $Id: lonmenu.pm,v 1.231 2007/11/09 20:57:29 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -54,14 +54,27 @@ my @inlineremote; # ================================================================ Little texts +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' => ($env{'user.adv'}? - 'Roles':'Courses'), - 'docs' => 'Course Documents', + 'roles' => (&show_course()? + 'Courses':'Roles'), + 'docs' => 'Edit Course', 'exit' => 'Exit', 'login' => 'Log In', 'launch' => 'Launch Remote Control', @@ -121,9 +134,7 @@ sub menubuttons { $navmaps=(<<ENDNAV); <a href="/adm/navmaps?postdata=$escurl&postsymb=$escsymb" target="_top">$lt{'nav'}</a> ENDNAV - if (($env{'request.noversionuri'}=~/^\/adm\//) && - ($env{'request.noversionuri'}!~/^\/adm\/wrapper\//) && - ($env{'request.noversionuri'}!~/^\/adm\/.*\/(smppg|bulletinboard|aboutme)(\?|$)/)) { + if (&show_return_link()) { my $escreload=&escape('return:'); $reloadlink=(<<ENDRELOAD); <a href="/adm/flip?postdata=$escreload" target="_top">$lt{'ret'}</a> @@ -196,7 +207,7 @@ ENDINLINEMENU $navmaps=(<<ENDNAV); <td><a href="$link" target="_top">$lt{'nav'}</a></td> ENDNAV -my $is_group = (&Apache::loncommon::course_type() eq 'Group'); + my $is_group = (&Apache::loncommon::course_type() eq 'Group'); if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) { my $text = ($is_group) ? $lt{'gdoc'} : $lt{'docs'}; $docs=(<<ENDDOCS); @@ -208,16 +219,7 @@ ENDDOCS <td><a href="/adm/coursegroups" target="_top">$lt{'groups'}</a></td> ENDGROUPS } - if ( - ($env{'request.noversionuri'}=~m[^/(res|public)/] && - $env{'request.symb'} eq '') - || - (($env{'request.noversionuri'}=~/^\/adm\//) && - ($env{'request.noversionuri'}!~/^\/adm\/wrapper\//) && - ($env{'request.noversionuri'}!~ - m[^/adm/.*/(smppg|bulletinboard|aboutme)($|\?)]) - ) - ) { + if (&show_return_link()) { my $escreload=&escape('return:'); $reloadlink=(<<ENDRELOAD); <td><a href="/adm/flip?postdata=$escreload" target="_top">$lt{'ret'}</a></td> @@ -274,6 +276,19 @@ ENDINLINEMENU } } +sub show_return_link { + return (($env{'request.noversionuri'}=~m{^/(res|public)/} && + $env{'request.symb'} eq '') + || + ($env{'request.noversionuri'}=~ m{^/cgi-bin/printout.pl}) + || + (($env{'request.noversionuri'}=~/^\/adm\//) && + ($env{'request.noversionuri'}!~/^\/adm\/wrapper\//) && + ($env{'request.noversionuri'}!~ + m[^/adm/.*/(smppg|bulletinboard|aboutme)($|\?)]) + )); +} + # ====================================== This gets called in the header section sub registerurl { @@ -445,7 +460,7 @@ sub innerregister { # Finally, turn the button on or off if ($cfile && !$const_space) { $editbutton=&switch - ('','',6,1,'cstr.gif','edit[_1]','resource[_2]', + ('','',6,1,'pcstr.gif','edit[_1]','resource[_2]', "go('".$cfile."');","Edit this resource"); } elsif ($editbutton eq '') { $editbutton=&clear(6,1); @@ -486,9 +501,14 @@ s&8&3&prt.gif&prepare[_1]&printout[_1]&g s&9&1&sbkm.gif&set[_1]&bookmark[_2]&set_bookmark()&Set a bookmark for this resource&&1 s&9&3&anot.gif&anno-[_1]&tations[_1]&annotate()&Make notes and annotations about this resource&&1 ENDMENUITEMS + unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme)(\?|$)/) { - $menuitems.=(<<ENDREALRES); + if (!$env{'request.enc'}) { + $menuitems.=(<<ENDREALRES); s&6&3&catalog.gif&catalog[_1]&info[_1]&catalog_info()&Show catalog information +ENDREALRES + } + $menuitems.=(<<ENDREALRES); s&8&1&eval.gif&evaluate[_1]&this[_1]&gopost('/adm/evaluate',currentURL,1)&Provide my evaluation of this resource s&8&2&fdbk.gif&feedback[_1]&discuss[_1]&gopost('/adm/feedback',currentURL,1)&Provide feedback messages or contribute to the course discussion about this resource ENDREALRES @@ -502,10 +522,19 @@ ENDMENUITEMS my $buttons=''; foreach (split(/\n/,$menuitems)) { my ($command,@rest)=split(/\&/,$_); - if ($command eq 's') { - $buttons.=&switch('','',@rest); - } else { - $buttons.=&clear(@rest); + my $idx=10*$rest[0]+$rest[1]; + if (&hidden_button_check() eq 'yes') { + if ($idx == 21 ||$idx == 23) { + $buttons.=&switch('','',@rest); + } else { + $buttons.=&clear(@rest); + } + } else { + if ($command eq 's') { + $buttons.=&switch('','',@rest); + } else { + $buttons.=&clear(@rest); + } } } @@ -515,29 +544,52 @@ ENDMENUITEMS my $inlinebuttons=''; if ($addremote) { # Registered, textual output - if ($env{'browser.interface'} eq 'textual') { $inlinebuttons= join('',map { (defined($_)?$_:'') } @inlineremote); } else { - $inlinebuttons=(<<ENDINLINE); + if ($env{'environment.icons'} eq 'iconsonly') { + $inlinebuttons=(<<ENDARROWSINLINE); +<tr><td> +$inlineremote[21] $inlineremote[23] +ENDARROWSINLINE + if (&hidden_button_check() ne 'yes') { + $inlinebuttons .= (<<ENDINLINEICONS); +$inlineremote[61] $inlineremote[63] +$inlineremote[71] $inlineremote[72] $inlineremote[73] +$inlineremote[81] $inlineremote[82] $inlineremote[83] +$inlineremote[91] $inlineremote[92] $inlineremote[93]</td></tr> +ENDINLINEICONS + } + } else { + if ($inlineremote[21] ne '' || $inlineremote[23] ne '') { + $inlinebuttons=(<<ENDFIRSTLINE); <tr><td>$inlineremote[21]</td><td> </td><td>$inlineremote[23]</td></tr> -<tr><td>$inlineremote[61]</td><td>$inlineremote[62]</td><td>$inlineremote[63]</td></tr> -<tr><td>$inlineremote[71]</td><td>$inlineremote[72]</td><td>$inlineremote[73]</td></tr> -<tr><td>$inlineremote[81]</td><td>$inlineremote[82]</td><td>$inlineremote[83]</td></tr> -<tr><td>$inlineremote[91]</td><td>$inlineremote[92]</td><td>$inlineremote[93]</td></tr> -ENDINLINE - } +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"; +<tr><td>$inlineremote["${row}1"]</td><td>$inlineremote["${row}2"]</td><td>$inlineremote["${row}3"]</td></tr> +ENDLINE + } + } + } + } + } } $result =(<<ENDREGTEXT); <script type="text/javascript"> // BEGIN LON-CAPA Internal </script> $timesync -$newmail $tablestart $inlinebuttons $tableend +$newmail <script type="text/javascript"> // END LON-CAPA Internal </script> @@ -756,12 +808,19 @@ sub load_remote_msg { <p>$link</p> ENDREMOTEFORM } + +sub get_menu_name { + my $hostid = $Apache::lonnet::perlvar{'lonHostID'}; + $hostid =~ s/\W//g; + return 'LCmenu'.$hostid; +} + # ================================================================= Reopen menu sub reopenmenu { if (($env{'browser.interface'} eq 'textual') || ($env{'environment.remote'} eq 'off')) { return ''; } - my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'}; + my $menuname = &get_menu_name(); my $nothing = &Apache::lonhtmlcommon::javascript_nothing(); return('window.open('.$nothing.',"'.$menuname.'","",false);'); } @@ -774,16 +833,17 @@ sub open { ($env{'environment.remote'} eq 'off')) { return '<script type="text/javascript">self.name="loncapaclient";</script>'; } - my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'}; - unless (shift eq 'unix') { + my $menuname = &get_menu_name(); + +# unless (shift eq 'unix') { # resizing does not work on linux because of virtual desktop sizes - $returnval.=(<<ENDRESIZE); -if (window.screen) { - self.resizeTo(screen.availWidth-215,screen.availHeight-55); - self.moveTo(190,15); -} -ENDRESIZE - } +# $returnval.=(<<ENDRESIZE); +#if (window.screen) { +# self.resizeTo(screen.availWidth-215,screen.availHeight-55); +# self.moveTo(190,15); +#} +#ENDRESIZE +# } $returnval.=(<<ENDOPEN); window.status='Opening LON-CAPA Remote Control'; var menu=window.open("/res/adm/pages/menu.html","$menuname", @@ -842,16 +902,17 @@ sub switch { } } else { # Inline Remote + if ($env{'environment.icons'} ne 'classic') { + $img=~s/\.gif$/\.png/; + } if ($nobreak==2) { return ''; } my $text=$top.' '.$bot; $text=~s/\s*\-\s*//gs; - my $lonhttpdPort=$Apache::lonnet::perlvar{'lonhttpdPort'}; - if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; } my $pic= - '<img alt="'.$text.'" src="http://'.$ENV{'HTTP_HOST'}. - ':'.$lonhttpdPort.'/res/adm/pages/'.$img.'" align="'. - ($nobreak==3?'right':'left').'" />'; + '<img alt="'.$text.'" src="'. + &Apache::loncommon::lonhttpdurl('/res/adm/pages/'.$img). + '" align="'.($nobreak==3?'right':'left').'" />'; if ($env{'browser.interface'} eq 'faketextual') { # Accessibility if ($nobreak==3) { @@ -863,19 +924,23 @@ sub switch { $inlineremote[$idx]="\n<tr>". '<td class="LC_menubuttons_img" align="left">'. '<a href="javascript:'.$act.';">'.$pic.'</a></td> - <td class="LC_menubuttons_text" align="left">'.$text.'</td>'; + <td class="LC_menubuttons_text" align="left"><a class="LC_menubuttons_link" href="javascript:'.$act.';"><span class="LC_menubuttons_inline_text">'.$text.'</span></a></td>'; } else { $inlineremote[$idx]="\n<tr>". '<td class="LC_menubuttons_img" align="left">'. '<a href="javascript:'.$act.';">'.$pic. '</a></td><td class="LC_menubuttons_text" colspan="3">'. - $desc.'</td></tr>'; + '<a class="LC_menubuttons_link" href="javascript:'.$act.';"><span class="LC_menubuttons_inline_text">'.$desc.'</span></a></td></tr>'; } } else { # Inline Menu - $inlineremote[$idx]= - '<a href="javascript:'.$act.';">'.$pic. - '</a><span class="LC_menubuttons_inline_text">'.$desc.'</span>'; + if ($env{'environment.icons'} eq 'iconsonly') { + $inlineremote[$idx]='<a title="'.$desc.'" href="javascript:'.$act.';">'.$pic.'</a>'; + } else { + $inlineremote[$idx]= + '<a class="LC_menubuttons_link" href="javascript:'.$act.';">'.$pic. + '<span class="LC_menubuttons_inline_text">'.$desc.'</span></a>'; + } } } return ''; @@ -896,7 +961,7 @@ sub secondlevel { } sub openmenu { - my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'}; + my $menuname = &get_menu_name(); if (($env{'browser.interface'} eq 'textual') || ($env{'environment.remote'} eq 'off')) { return ''; } my $nothing = &Apache::lonhtmlcommon::javascript_nothing(); @@ -904,18 +969,16 @@ sub openmenu { } sub inlinemenu { - @inlineremote=(); - undef @inlineremote; - %category_members=(); - undef %category_members; + undef(@inlineremote); + undef(%category_members); &rawconfig(1); - my $output='<table><tr>'; + my $output='<table id="LC_mainmenu"><tr>'; for (my $col=1; $col<=2; $col++) { - $output.='<td>'; + $output.='<td class="LC_mainmenu_column">'; for (my $row=1; $row<=8; $row++) { foreach my $cat (keys(%category_members)) { if ($category_positions{$cat} ne "$col,$row") { next; } - $output.='<table id="LC_menubuttons_mainmenu"><tr><td colspan="4" class="LC_menu_category">'.&mt($category_names{$cat}).'</td></tr>'; + $output.='<table id="LC_menubuttons_mainmenu"><tr><td colspan="4" class="LC_menubuttons_category">'.&mt($category_names{$cat}).'</td></tr>'; my %active=(); foreach my $menu_item (split(/\:/,$category_members{$cat})) { if ($inlineremote[$menu_item]) { @@ -948,6 +1011,7 @@ sub rawconfig { my $uname=$env{'user.name'}; my $udom=$env{'user.domain'}; my $adv=$env{'user.adv'}; + my $show_course=&show_course(); my $author=$env{'user.author'}; my $crs=''; if ($env{'request.course.id'}) { @@ -967,6 +1031,7 @@ sub rawconfig { $prt=~s/\$udom/$udom/g; $prt=~s/\$crs/$crs/g; $prt=~s/\$requested_domain/$requested_domain/g; + if ($category_names{$cat}!~/\w/) { $cat='oth'; } my $type = &Apache::loncommon::course_type(); if ($type eq 'Group') { $desc = &convert_menu_function($desc,$type); @@ -986,6 +1051,16 @@ sub rawconfig { $output.=&secondlevel( $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc,$cat); } + } elsif ($pro eq 'shc') { + if ($show_course) { + $output.=&secondlevel( + $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc,$cat); + } + } elsif ($pro eq 'nsc') { + if (!$show_course) { + $output.=&secondlevel( + $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc,$cat); + } } elsif (($pro=~/^p(\w+)/) && ($prt)) { if (&Apache::lonnet::allowed($1,$prt)) { $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat); @@ -1047,7 +1122,7 @@ sub rawconfig { sub close { if (($env{'browser.interface'} eq 'textual') || ($env{'environment.remote'} eq 'off')) { return ''; } - my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'}; + my $menuname = &get_menu_name(); return(<<ENDCLOSE); <script type="text/javascript"> window.status='Accessing Remote Control'; @@ -1231,7 +1306,7 @@ function annotate() { '$start_page_annotate' +"<form name='goannotate' target='Annotator' method='post' " +"action='/adm/annotations'>" - +"<input type='hidden' name='urlnew' value='"+currentURL+"' />" + +"<input type='hidden' name='symbnew' value='"+currentSymb+"' />" +"<\\/form>" +'$end_page_annotate'); annotator.document.close(); @@ -1315,6 +1390,16 @@ sub convert_menu_function { return $rolename; } +sub hidden_button_check { + my $hidden; + if ($env{'request.course.id'} eq '') { + return; + } + if ($env{'request.role.adv'}) { + return; + } + return &Apache::lonnet::EXT('resource.0.buttonshide'); +} # ================================================================ Main Program