# The LearningOnline Network with CAPA # Routines to control the menu # # $Id: lonmenu.pm,v 1.31 2003/01/29 15:22:06 www Exp $ # # Copyright Michigan State University Board of Trustees # # This file is part of the LearningOnline Network with CAPA (LON-CAPA). # # LON-CAPA is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # LON-CAPA is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with LON-CAPA; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # /home/httpd/html/adm/gpl.txt # # http://www.lon-capa.org/ # # (TeX Conversion Module # # 05/29/00,05/30 Gerd Kortemeyer) # # 10/05,05/28,05/30,06/01,06/08,06/09,07/04,08/07 Gerd Kortemeyer # 02/15/02 Matthew Hall package Apache::lonmenu; use strict; use Apache::lonnet; use Apache::File; use vars qw(@desklines $readdesk); # ================================================================= Reopen menu sub reopenmenu { my $nothing=''; my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'}; if ($ENV{'browser.type'} eq 'explorer') { $nothing='javascript:void(0);'; } return('window.open("'.$nothing.'","'.$menuname.'","",false);'); } # =============================================================== Open the menu sub open { my $returnval=''; my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'}; unless (shift eq 'unix') { # resizing does not work on linux because of virtual desktop sizes $returnval.=(<'.$returnval.''; } # ============================================================ Switch Menu Item sub switchmenu { my ($row,$col,$imgsrc,$texttop,$textbot,$action,$description)=@_; my $openwin=&openmenu(); return(< var swmenu=$openwin swmenu.switchbutton($row,$col,"$imgsrc","$texttop","$textbot","$action","$description"); ENDSMENU } # ================================================================== Raw Config sub clear { my ($row,$col)=@_; return qq(swmenu.clearbut($row,$col);); } # Switch acts on the javascript that is executed when a button is clicked. # The javascript is usually similar to "go('/adm/roles')" or "cstrgo(..)". sub switch { my ($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc)=@_; $act=~s/\$uname/$uname/g; $act=~s/\$udom/$udom/g; return "\n". qq(swmenu.switchbutton($row,$col,"$img","$top","$bot","$act","$desc");); } sub secondlevel { my $output=''; my ($uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc)=@_; if ($prt eq 'any') { $output.=switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc); } elsif ($prt=~/^r(\w+)/) { if ($rol eq $1) { $output.=switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc); } } return $output; } sub openmenu { my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'}; if ($ENV{'browser.type'} eq 'explorer') { return "window.open('javascript:void(0);','".$menuname."');"; } else { return "window.open('','".$menuname."');"; } } sub rawconfig { my $r = shift; my $output="var swmenu=".&openmenu(); my $uname=$ENV{'user.name'}; my $udom=$ENV{'user.domain'}; my $adv=$ENV{'user.adv'}; my $author=$ENV{'user.author'}; my $crs=''; if ($ENV{'request.course.id'}) { $crs='/'.$ENV{'request.course.id'}; if ($ENV{'request.course.sec'}) { $crs.='_'.$ENV{'request.course.sec'}; } $crs=~s/\_/\//g; } my $pub=($ENV{'request.state'} eq 'published'); my $con=($ENV{'request.state'} eq 'construct'); my $rol=$ENV{'request.role'}; my $requested_domain = $ENV{'request.role.domain'}; foreach (@desklines) { my ($row,$col,$pro,$prt,$img,$top,$bot,$act,$desc)=split(/\:/,$_); $prt=~s/\$uname/$uname/g; $prt=~s/\$udom/$udom/g; $prt=~s/\$crs/$crs/g; $prt=~s/\$requested_domain/$requested_domain/g; if ($pro eq 'clear') { $output.=&clear($row,$col); } elsif ($pro eq 'any') { $output.=&secondlevel( $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc); } elsif ($pro eq 'smp') { unless ($adv) { $output.=&secondlevel( $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc); } } elsif ($pro eq 'adv') { if ($adv) { $output.=&secondlevel( $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc); } } elsif (($pro=~/p(\w+)/) && ($prt)) { if (&Apache::lonnet::allowed($1,$prt)) { $output.=switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc); } } elsif ($pro eq 'course') { if ($ENV{'request.course.fn'}) { $output.=switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc); } } elsif ($pro eq 'author') { if ($author) { if ((($prt eq 'rca') && ($ENV{'request.role'}=~/^ca/)) || (($prt eq 'rau') && ($ENV{'request.role'}=~/^au/))) { # Check that we are on the correct machine my $cadom=$requested_domain; my $caname=$ENV{'user.name'}; if ($prt eq 'rca') { ($cadom,$caname)= ($ENV{'request.role'}=~/(\w+)\/(\w+)$/); } $act =~ s/\$caname/$caname/g; my $home = &Apache::lonnet::homeserver($caname,$cadom); if ($home eq $r->dir_config('lonHostID')) { $output.=switch($caname,$cadom, $row,$col,$img,$top,$bot,$act,$desc); } } } } } $output.="swmenu.syncclock(1000*".time.");"; return $output; } # ======================================================================= Close sub close { my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'}; return(< menu=window.open("/adm/rat/empty.html","$menuname", "height=350,width=150,scrollbars=no,menubar=no"); menu.autologout=0; menu.close(); ENDCLOSE } # ====================================================================== Footer sub footer { } # ================================================================ Main Program BEGIN { if (! defined($readdesk)) { { my $config=Apache::File->new($Apache::lonnet::perlvar{'lonTabDir'}. '/mydesk.tab'); while (my $configline=<$config>) { $configline=(split(/\#/,$configline))[0]; $configline=~s/^\s+//; chomp($configline); if ($configline) { $desklines[$#desklines+1]=$configline; } } } $readdesk='done'; } } 1; __END__