# The LearningOnline Network with CAPA # Routines to control the menu # # $Id: lonmenu.pm,v 1.24 2002/07/15 19:45:18 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); # =============================================================== Open the menu sub open { my $returnval=''; 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)=@_; my $openwin=&openmenu(); return(< var swmenu=$openwin swmenu.switchbutton($row,$col,"$imgsrc","$texttop","$textbot","$action"); ENDSMENU } # ================================================================== Raw Config sub clear { my ($row,$col)=@_; return qq(swmenu.clearbut($row,$col);); } sub switch { my ($uname,$udom,$row,$col,$img,$top,$bot,$act)=@_; $act=~s/\$uname/$uname/g; $act=~s/\$udom/$udom/g; return "\n". qq(swmenu.switchbutton($row,$col,"$img","$top","$bot","$act");); } sub secondlevel { my $output=''; my ($uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act)=@_; if ($prt eq 'any') { $output.=switch($uname,$udom,$row,$col,$img,$top,$bot,$act); } elsif ($prt=~/^r(\w+)/) { if ($rol eq $1) { $output.=switch($uname,$udom,$row,$col,$img,$top,$bot,$act); } } return $output; } sub openmenu { if ($ENV{'browser.type'} eq 'explorer') { return "window.open('javascript:void(0);','LONCAPAmenu');"; } else { return "window.open('','LONCAPAmenu');"; } } 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'}; foreach (@desklines) { my ($row,$col,$pro,$prt,$img,$top,$bot,$act)=split(/\:/,$_); $prt=~s/\$uname/$uname/g; $prt=~s/\$udom/$udom/g; $prt=~s/\$crs/$crs/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); } elsif ($pro eq 'smp') { unless ($adv) { $output.=&secondlevel( $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act); } } elsif ($pro eq 'adv') { if ($adv) { $output.=&secondlevel( $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act); } } elsif (($pro=~/p(\w+)/) && ($prt)) { if (&Apache::lonnet::allowed($1,$prt)) { $output.=switch($uname,$udom,$row,$col,$img,$top,$bot,$act); } } elsif ($pro eq 'author') { if ($author) { if (($prt eq 'rca') && ($ENV{'request.role'}=~/^ca/)) { # Check that we are on the correct machine my ($cadom,$caname)= ($ENV{'request.role'}=~/(\w+)\/(\w+)$/); my $home = &Apache::lonnet::homeserver($caname,$cadom); if ($home eq $r->dir_config('lonHostID')) { $output.=switch($caname,$cadom, $row,$col,$img,$top,$bot,$act); } } elsif ($prt eq 'any') { my $home = &Apache::lonnet::homeserver ($ENV{'user.name'},$ENV{'user.domain'}); if ($home eq $r->dir_config('lonHostID')) { $output.=switch ($ENV{'user.name'},$ENV{'user.domain'}, $row,$col,$img,$top,$bot,$act); } } } } } $output.="swmenu.syncclock(1000*".time.");"; return $output; } # ======================================================================= Close sub close { return(< menu=window.open("/adm/rat/empty.html","LONCAPAmenu", "height=350,width=150,scrollbars=no,menubar=no"); 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__