--- loncom/interface/lonmenu.pm 2006/07/19 10:52:27 1.199 +++ loncom/interface/lonmenu.pm 2007/04/17 15:45:03 1.215 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines to control the menu # -# $Id: lonmenu.pm,v 1.199 2006/07/19 10:52:27 albertel Exp $ +# $Id: lonmenu.pm,v 1.215 2007/04/17 15:45:03 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -44,14 +44,15 @@ use Apache::lonhtmlcommon(); use Apache::loncommon(); use Apache::lonenc(); use Apache::lonlocal; -use lib '/home/httpd/lib/perl/'; -use LONCAPA; +use LONCAPA qw(:DEFAULT :match); -use vars qw(@desklines $readdesk); +use vars qw(@desklines %category_names %category_members %category_positions $readdesk); my @inlineremote; + + # ================================================================ Little texts sub initlittle { @@ -62,6 +63,7 @@ sub initlittle { 'Roles':'Courses'), 'docs' => 'Course Documents', 'exit' => 'Exit', + 'login' => 'Log In', 'launch' => 'Launch Remote Control', 'groups' => 'Groups', 'gdoc' => 'Group Documents', @@ -176,8 +178,8 @@ ENDMAINMENU $logo - - $lt{'exit'} + + $lt{'login'} @@ -405,7 +407,7 @@ sub innerregister { my $desc = "Enter my resource construction space"; # Set defaults for co-authors if ($env{'request.role'} =~ /^ca/) { - ($cadom,$caname)=($env{'request.role'}=~/(\w+)\/(\w+)$/); + ($cadom,$caname)=($env{'request.role'}=~/($match_domain)\/($match_username)$/); ($top,$bottom) = ('co con-','struct'); $action = "go('/priv/".$caname."');"; $desc = "Enter construction space as co-author"; @@ -427,7 +429,7 @@ sub innerregister { my $cfudom=''; if ($env{'request.filename'}) { my $file=&Apache::lonnet::declutter($env{'request.filename'}); - $file=~s/^(\w+)\/(\w+)/\/priv\/$2/; + $file=~s/^($match_domain)\/($match_username)/\/priv\/$2/; # Check that the user has permission to edit this resource ($cfuname,$cfudom)=&Apache::loncacc::constructaccess($file,$1); if (defined($cfudom)) { @@ -443,7 +445,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); @@ -461,26 +463,28 @@ sub innerregister { $is_const_dir = 1; } else { $currdir =~ s#[^/]+$##; + my $cleandisfn = &Apache::loncommon::escape_single($thisdisfn); + my $esc_currdir = &Apache::loncommon::escape_single($currdir); $menuitems=(<'.$text.''; } else { - $inlineremote[10*$row+$col]="\n
". + $inlineremote[$idx]="\n
". $desc.' '.$text.''; } } 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; @@ -843,27 +858,27 @@ sub switch { if ($env{'browser.interface'} eq 'faketextual') { # Accessibility if ($nobreak==3) { - $inlineremote[10*$row+$col]="\n". + $inlineremote[$idx]="\n". ''.$text. ''. ''.$pic.''; } elsif ($nobreak) { - $inlineremote[10*$row+$col]="\n". + $inlineremote[$idx]="\n". ''. ''.$pic.' - '.$text.''; + '.$text.''; } else { - $inlineremote[10*$row+$col]="\n". + $inlineremote[$idx]="\n". ''. ''.$pic. ''. - $desc.''; + ''.$desc.''; } } else { # Inline Menu - $inlineremote[10*$row+$col]= - ''.$pic. - ''.$desc.''; + $inlineremote[$idx]= + ''.$pic. + ''.$desc.''; } } return ''; @@ -872,12 +887,12 @@ sub switch { sub secondlevel { my $output=''; my - ($uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc)=@_; + ($uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc,$cat)=@_; if ($prt eq 'any') { - $output.=switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc); + $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat); } elsif ($prt=~/^r(\w+)/) { if ($rol eq $1) { - $output.=switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc); + $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat); } } return $output; @@ -892,10 +907,32 @@ sub openmenu { } sub inlinemenu { - @inlineremote=(); - undef @inlineremote; + undef(@inlineremote); + undef(%category_members); &rawconfig(1); - return join('',map { (defined($_)?$_:'') } @inlineremote); + my $output=''; + for (my $col=1; $col<=2; $col++) { + $output.='"; + } + $output.="
'; + for (my $row=1; $row<=8; $row++) { + foreach my $cat (keys(%category_members)) { + if ($category_positions{$cat} ne "$col,$row") { next; } + $output.=''; + my %active=(); + foreach my $menu_item (split(/\:/,$category_members{$cat})) { + if ($inlineremote[$menu_item]) { + $active{$menu_item}=1; + } + } + foreach my $item (sort(keys(%active))) { + $output.=$inlineremote[$item]; + } + $output.='
'.&mt($category_names{$cat}).'
'; + } + } + $output.="
"; + return $output; } sub rawconfig { @@ -926,11 +963,12 @@ sub rawconfig { my $rol=$env{'request.role'}; my $requested_domain = $env{'request.role.domain'}; foreach my $line (@desklines) { - my ($row,$col,$pro,$prt,$img,$top,$bot,$act,$desc)=split(/\:/,$line); + my ($row,$col,$pro,$prt,$img,$top,$bot,$act,$desc,$cat)=split(/\:/,$line); $prt=~s/\$uname/$uname/g; $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); @@ -939,29 +977,29 @@ sub rawconfig { $output.=&clear($row,$col); } elsif ($pro eq 'any') { $output.=&secondlevel( - $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc); + $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc,$cat); } elsif ($pro eq 'smp') { unless ($adv) { $output.=&secondlevel( - $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc); + $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc,$cat); } } elsif ($pro eq 'adv') { if ($adv) { $output.=&secondlevel( - $uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc); + $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); + $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat); } } elsif ($pro eq 'course') { if ($env{'request.course.fn'}) { - $output.=switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc); + $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat); } } elsif ($pro =~ /^courseenv_(.*)$/) { my $key = $1; if ($env{'course.'.$env{'request.course.id'}.'.'.$key}) { - $output.=switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc); + $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat); } } elsif ($pro =~ /^course_(.*)$/) { # Check for permissions inside of a course @@ -969,7 +1007,7 @@ sub rawconfig { (&Apache::lonnet::allowed($1,$env{'request.course.id'}. ($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:'')) )) { - $output.=switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc); + $output.=&switch($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$cat); } } elsif ($pro eq 'author') { if ($author) { @@ -980,7 +1018,7 @@ sub rawconfig { my $caname=$env{'user.name'}; if ($prt eq 'rca') { ($cadom,$caname)= - ($env{'request.role'}=~/(\w+)\/(\w+)$/); + ($env{'request.role'}=~/($match_domain)\/($match_username)$/); } $act =~ s/\$caname/$caname/g; my $home = &Apache::lonnet::homeserver($caname,$cadom); @@ -988,8 +1026,8 @@ sub rawconfig { my @ids=&Apache::lonnet::current_machine_ids(); foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } } if ($allowed) { - $output.=switch($caname,$cadom, - $row,$col,$img,$top,$bot,$act,$desc); + $output.=&switch($caname,$cadom, + $row,$col,$img,$top,$bot,$act,$desc,$cat); } } } @@ -1068,13 +1106,16 @@ sub utilityfunctions { 'add_entries' => { 'onload' => 'javascript:document.goannotate.submit();'}}); + my $end_page_annotate = + &Apache::loncommon::end_page({'js_ready' => 1}); + my $start_page_bookmark = &Apache::loncommon::start_page('Bookmarks',undef, {'only_body' => 1, 'js_ready' => 1, 'bgcolor' => '#BBBBBB',}); - my $end_page = + my $end_page_bookmark = &Apache::loncommon::end_page({'js_ready' => 1}); return (<" +"" +"<\\/form>" - +'$end_page'); + +'$end_page_annotate'); annotator.document.close(); } @@ -1216,7 +1257,7 @@ function set_bookmark() { +"value='Save' /> <\\/center><\\/td>" +"<\\/tr><\\/table><\\/form><\\/center>" - +'$end_page' ); + +'$end_page_bookmark' ); bmquery.document.close(); } @@ -1288,7 +1329,11 @@ BEGIN { $configline=(split(/\#/,$configline))[0]; $configline=~s/^\s+//; chomp($configline); - if ($configline) { + if ($configline=~/^cat\:/) { + my @entries=split(/\:/,$configline); + $category_positions{$entries[2]}=$entries[1]; + $category_names{$entries[2]}=$entries[3]; + } elsif ($configline) { push(@desklines,$configline); } }