version 1.8.4.12, 2010/12/05 19:43:10
|
version 1.14, 2025/03/25 01:02:59
|
Line 31
|
Line 31
|
# browser.interface - if this is 'textual', it overrides the second parameter |
# browser.interface - if this is 'textual', it overrides the second parameter |
# and goes to screen reader PDA mode |
# and goes to screen reader PDA mode |
# |
# |
# environment.remote - if this is 'on', the routines controll the remote |
|
# control, otherwise they render the main window controls; ignored it |
|
# browser.interface is 'textual' |
|
# |
|
|
|
package Apache::lonmainmenu; |
package Apache::lonmainmenu; |
|
|
use strict; |
use strict; |
use Apache::Constants qw(:common); |
use Apache::Constants qw(:common REDIRECT); |
use Apache::loncommon(); |
use Apache::loncommon(); |
use Apache::lonnet; |
use Apache::lonnet; |
use Apache::lonmenu(); |
use Apache::lonmenu(); |
use Apache::lonlocal; |
use Apache::lonlocal; |
use LONCAPA qw(:DEFAULT :match); |
|
|
|
sub handler { |
sub handler { |
my $r = shift; |
my $r = shift; |
|
|
|
# Check for critical messages and redirect if present. |
|
my ($redirect,$url) = &Apache::loncommon::critical_redirect(300,'menu'); |
|
if ($redirect) { |
|
&Apache::loncommon::content_type($r,'text/html'); |
|
$r->header_out(Location => $url); |
|
return REDIRECT; |
|
} |
|
|
&Apache::loncommon::no_cache($r); |
&Apache::loncommon::no_cache($r); |
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->send_http_header; |
$r->send_http_header; |
return OK if $r->header_only; |
return OK if $r->header_only; |
|
|
my $custommenu = &Apache::loncommon::needs_gci_custom(); |
|
my $cid = $env{'request.course.id'}; |
|
|
|
my %cicourses; |
|
my $udom = $env{'user.domain'}; |
|
my %allnums = &Apache::loncommon::get_faculty_cnums(); |
|
if (($udom ne '') && (ref($allnums{$udom}) eq 'HASH')) { |
|
foreach my $key (%{$allnums{$udom}}) { |
|
$cicourses{$udom.'_'.$key} = $allnums{$udom}->{$key}; |
|
} |
|
} |
|
|
|
if (($custommenu && $cid ne '' && ($cicourses{$cid} || $env{'request.role'} !~ m{^cc\./\Q$udom\Etest/})) || |
|
($cid ne '' && $env{'user.domain'} =~ /^\w+citest$/)) { |
|
$r->internal_redirect('/adm/navmaps'); |
|
return OK; |
|
} |
|
|
|
my $form; |
|
if ($env{'environment.remote'} ne 'off') { |
|
$form=&Apache::lonmenu::serverform(); |
|
} |
|
|
|
my $script_tag; |
|
if ($env{'environment.remote'} ne 'off') { |
|
my $utility=&Apache::lonmenu::utilityfunctions('/adm/menu'); |
|
$script_tag=(<<ENDSCRIPT); |
|
<script type="text/javascript"> |
|
$utility |
|
</script> |
|
ENDSCRIPT |
|
} |
|
# ---- Print the screen, pretend to be in text mode to generate text-based menu |
# ---- Print the screen, pretend to be in text mode to generate text-based menu |
# temporarily set interface to "faketextual" and remote to "off", which renders |
# temporarily set interface to "faketextual" and remote to "off", which renders |
# the main menu |
# the main menu |
$env{'browser.interface'}='faketextual'; |
$env{'browser.interface'}='faketextual'; |
$env{'environment.remote'}='off'; |
|
|
|
# Breadcrumbs |
# |
my ($nocrumbs,$args); |
# If menu collection is in effect in course context, determine if Main Menu |
if ($custommenu) { |
# will be shown. |
if ($env{'request.course.id'}) { |
# |
unless ($cicourses{$env{'request.course.id'}}) { |
my $showmenu = 1; |
$nocrumbs = 1; |
my $deeplinkmenu; |
|
if ($env{'request.course.id'}) { |
|
(my $menucoll,$deeplinkmenu,my $menuref) = |
|
&Apache::loncommon::menucoll_in_effect(); |
|
if (($menucoll) && (ref($menuref) eq 'HASH')) { |
|
if ($menuref->{'main'} eq 'n') { |
|
$showmenu = 0; |
} |
} |
} else { |
|
$nocrumbs = 1; |
|
} |
} |
} |
} |
unless ($nocrumbs) { |
my $js; |
my $brcrum = []; |
my $args = { 'bread_crumbs' => 1 }; |
$args = {bread_crumbs => $brcrum}; |
if ($showmenu) { |
|
$js = <<"END"; |
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
function formatMenuText() { |
|
var textArray = document.getElementsByClassName("LC_menu_text"); |
|
if (textArray.length > 0) { |
|
var singleLineHeight = textArray[0].offsetHeight; |
|
for (var i=1; i<textArray.length; i++) { |
|
if (textArray[i].offsetHeight > singleLineHeight) { |
|
var el = textArray[i].previousElementSibling; |
|
el.style.cssFloat = "left"; |
|
el.style.marginRight = "5px"; |
|
} |
|
} |
} |
} |
$r->print(&Apache::loncommon::start_page('Main Menu',$script_tag,$args)); |
} |
|
// ]]> |
my ($rolecount,$numcourses) = (0,0); |
</script> |
my $now = time; |
END |
unless (($custommenu) || ($env{'user.domain'} =~ /^\w+citest$/)) { |
$args->{'add_entries'} = { 'onload' => 'javascript:formatMenuText();' }; |
foreach my $envkey (keys(%env)) { |
|
next unless ($envkey =~ /^user\.role\./); |
|
my ($start,$end) = split(/\./,$env{$envkey}); |
|
if (($start eq '' || $start <= $now) && ($end eq '' || $end > $now)) { |
|
$rolecount ++; |
|
} |
|
} |
|
} |
} |
if ($custommenu) { |
|
$r->print(&Apache::lonmenu::inlinemenu('gcicustom').$form); |
$r->print(&Apache::loncommon::start_page( 'Main Menu',$js,$args). |
} elsif (!$rolecount) { |
'<div class="LC_landmark" role="main">'); |
$r->print(&Apache::lonmenu::inlinemenu('gcinorole').$form); |
# |
} else { |
# If menu collection is in effect in course context, and Main Menu is |
$r->print(&Apache::lonmenu::inlinemenu().$form); |
# not included, display message in place of usual menu items. |
|
# |
|
unless ($showmenu) { |
|
my $nomenumsg; |
|
my $crstype = &Apache::loncommon::course_type(); |
|
if ($deeplinkmenu) { |
|
$nomenumsg = &mt('Page unavailable'); |
|
} else { |
|
$nomenumsg = &mt("Main Menu page is unavailable in this $crstype"); |
|
} |
|
$r->print('<h1 class="LC_heading_3">'.$nomenumsg.'</h1>'. |
|
'</div>'.&Apache::loncommon::end_page()); |
|
return OK; |
} |
} |
$r->print(&Apache::loncommon::end_page()); |
# |
|
# A span with class of LC_menu_text needs to be first item with that class. |
|
# It will be used by formatMenuText() to determine the offsetHeight for a single line. |
|
# |
|
$r->print('<span class="LC_menu_text"> </span>'. |
|
&Apache::lonmenu::inlinemenu(). |
|
'</div>'.&Apache::loncommon::end_page()); |
return OK; |
return OK; |
} |
} |
|
|
|
|
1; |
1; |
__END__ |
__END__ |
|
|