version 1.239.4.5, 2009/05/15 20:36:17
|
version 1.244, 2008/11/19 19:43:08
|
Line 36
|
Line 36
|
# browser.interface is 'textual' |
# browser.interface is 'textual' |
# |
# |
|
|
|
=head1 NAME |
|
|
|
Apache::lonmenu |
|
|
|
=head1 SYNOPSIS |
|
|
|
Coordinates the response to clicking an image. |
|
|
|
This is part of the LearningOnline Network with CAPA project |
|
described at http://www.lon-capa.org. |
|
|
|
=head1 SUBROUTINES |
|
|
|
=over |
|
|
|
=item show_course() |
|
|
|
Little texts |
|
|
|
=item initlittle() |
|
|
|
=item menubuttons() |
|
|
|
This gets called at the top of the body section |
|
|
|
=item show_return_link() |
|
|
|
=item registerurl() |
|
|
|
This gets called in the header section |
|
|
|
=item innerregister() |
|
|
|
This gets called in order to register a URL, both with the Remote |
|
and in the body of the document |
|
|
|
=item loadevents() |
|
|
|
=item unloadevents() |
|
|
|
=item startupremote() |
|
|
|
=item setflags() |
|
|
|
=item maincall() |
|
|
|
=item load_remote_msg() |
|
|
|
=item get_menu_name() |
|
|
|
=item reopenmenu() |
|
|
|
=item open() |
|
|
|
Open the menu |
|
|
|
=item clear() |
|
|
|
=item switch() |
|
|
|
Switch a button or create a link |
|
Switch acts on the javascript that is executed when a button is clicked. |
|
The javascript is usually similar to "go('/adm/roles')" or "cstrgo(..)". |
|
|
|
=item secondlevel() |
|
|
|
=item openmenu() |
|
|
|
=item inlinemenu() |
|
|
|
=item rawconfig() |
|
|
|
=item close() |
|
|
|
=item footer() |
|
|
|
=item utilityfunctions() |
|
|
|
=item serverform() |
|
|
|
=item constspaceform() |
|
|
|
=item get_nav_status() |
|
|
|
=item convert_menu_function() |
|
|
|
FIXME this needs to move into mydesktab and the other locations |
|
the text is generated |
|
|
|
=item hidden_button_check() |
|
|
|
=item roles_selector() |
|
|
|
=item jump_to_role() |
|
|
|
=back |
|
|
|
=cut |
|
|
package Apache::lonmenu; |
package Apache::lonmenu; |
|
|
use strict; |
use strict; |
Line 53 my @inlineremote;
|
Line 152 my @inlineremote;
|
|
|
|
|
|
|
# ================================================================ Little texts |
|
sub show_course { |
sub show_course { |
my $course = !$env{'user.adv'}; |
my $course = !$env{'user.adv'}; |
if (!$env{'user.adv'}) { |
if (!$env{'user.adv'}) { |
Line 84 sub initlittle {
|
Line 182 sub initlittle {
|
); |
); |
} |
} |
|
|
# ============================= This gets called at the top of the body section |
|
|
|
sub menubuttons { |
sub menubuttons { |
my $forcereg=shift; |
my $forcereg=shift; |
my $registration=shift; |
my $registration=shift; |
Line 297 sub show_return_link {
|
Line 393 sub show_return_link {
|
)); |
)); |
} |
} |
|
|
# ====================================== This gets called in the header section |
|
|
|
sub registerurl { |
sub registerurl { |
my ($forcereg) = @_; |
my ($forcereg) = @_; |
Line 322 sub registerurl {
|
Line 417 sub registerurl {
|
return $result.$force_title; |
return $result.$force_title; |
} |
} |
|
|
# =========== This gets called in order to register a URL, both with the Remote |
|
# =========== and in the body of the document |
|
|
|
sub innerregister { |
sub innerregister { |
my ($forcereg, $titletable) = @_; |
my ($forcereg, $titletable) = @_; |
my $result = ''; |
my $result = ''; |
Line 515 c&8&2
|
Line 607 c&8&2
|
s&8&3&prt.gif&prepare[_1]&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document |
s&8&3&prt.gif&prepare[_1]&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document |
s&9&1&sbkm.gif&set[_1]&bookmark[_2]&set_bookmark()&Set a bookmark for this resource&&1 |
s&9&1&sbkm.gif&set[_1]&bookmark[_2]&set_bookmark()&Set a bookmark for this resource&&1 |
ENDMENUITEMS |
ENDMENUITEMS |
my $currentURL = &Apache::loncommon::get_symb(); |
|
my ($symb_old,$symb_old_enc) = &Apache::loncommon::clean_symb($currentURL); |
my $currentURL = &Apache::loncommon::get_symb(); |
my $annotation = &Apache::loncommon::get_annotation($symb_old,$symb_old_enc); |
my ($symb_old,$symb_old_enc) = &Apache::loncommon::clean_symb($currentURL); |
$menuitems.="s&9&3&"; |
my $annotation = &Apache::loncommon::get_annotation($symb_old,$symb_old_enc); |
if (length($annotation) > 0){ |
$menuitems.="s&9&3&"; |
$menuitems.="anot2.gif"; |
if(length($annotation) > 0){ |
} else { |
$menuitems.="anot2.gif"; |
$menuitems.="anot.gif"; |
}else{ |
} |
$menuitems.="anot.gif"; |
$menuitems.="&anno-[_1]&tations[_1]&annotate()&"; |
} |
$menuitems.="Make notes and annotations about this resource&&1\n"; |
$menuitems.="&anno-[_1]&tations[_1]&annotate()&"; |
|
$menuitems.="Make notes and annotations about this resource&&1\n"; |
|
|
unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme)(\?|$)/) { |
unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme)(\?|$)/) { |
if (!$env{'request.enc'}) { |
if (!$env{'request.enc'}) { |
Line 726 sub unloadevents() {
|
Line 819 sub unloadevents() {
|
return 'LONCAPAstale();'; |
return 'LONCAPAstale();'; |
} |
} |
|
|
# ============================================================= Start up remote |
|
|
|
sub startupremote { |
sub startupremote { |
my ($lowerurl)=@_; |
my ($lowerurl)=@_; |
Line 840 sub get_menu_name {
|
Line 932 sub get_menu_name {
|
return 'LCmenu'.$hostid; |
return 'LCmenu'.$hostid; |
} |
} |
|
|
# ================================================================= Reopen menu |
|
|
|
sub reopenmenu { |
sub reopenmenu { |
if (($env{'browser.interface'} eq 'textual') || |
if (($env{'browser.interface'} eq 'textual') || |
Line 850 sub reopenmenu {
|
Line 941 sub reopenmenu {
|
return('window.open('.$nothing.',"'.$menuname.'","",false);'); |
return('window.open('.$nothing.',"'.$menuname.'","",false);'); |
} |
} |
|
|
# =============================================================== Open the menu |
|
|
|
sub open { |
sub open { |
my $returnval=''; |
my $returnval=''; |
Line 1000 sub inlinemenu {
|
Line 1090 sub inlinemenu {
|
&rawconfig(1); |
&rawconfig(1); |
my $output='<table id="LC_mainmenu"><tr>'; |
my $output='<table id="LC_mainmenu"><tr>'; |
for (my $col=1; $col<=2; $col++) { |
for (my $col=1; $col<=2; $col++) { |
$output.='<td class="LC_mainmenu_column">'; |
$output.='<td class="LC_mainmenu_col_fieldset">'; |
for (my $row=1; $row<=8; $row++) { |
for (my $row=1; $row<=8; $row++) { |
foreach my $cat (keys(%category_members)) { |
foreach my $cat (keys(%category_members)) { |
if ($category_positions{$cat} ne "$col,$row") { next; } |
if ($category_positions{$cat} ne "$col,$row") { next; } |
$output.='<table id="LC_menubuttons_mainmenu"><tr><td colspan="4" class="LC_menubuttons_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>'; |
|
$output.='<fieldset id="LC_mainmenu_fieldset">'; |
|
$output.='<legend class="LC_mainmenu_fieldset_category">'.&mt($category_names{$cat}).'</legend>'; |
|
$output.='<table id="LC_menubuttons_mainmenu">'; |
my %active=(); |
my %active=(); |
foreach my $menu_item (split(/\:/,$category_members{$cat})) { |
foreach my $menu_item (split(/\:/,$category_members{$cat})) { |
if ($inlineremote[$menu_item]) { |
if ($inlineremote[$menu_item]) { |
Line 1013 sub inlinemenu {
|
Line 1106 sub inlinemenu {
|
} |
} |
foreach my $item (sort(keys(%active))) { |
foreach my $item (sort(keys(%active))) { |
$output.=$inlineremote[$item]; |
$output.=$inlineremote[$item]; |
|
&Apache::lonnet::logthis("item=$item output=$inlineremote[$item]"); |
} |
} |
$output.='</table>'; |
$output.='</table>'; |
|
$output.='</fieldset>'; |
} |
} |
} |
} |
$output.="</td>"; |
$output.="</td>"; |
Line 1131 sub rawconfig {
|
Line 1226 sub rawconfig {
|
} |
} |
} |
} |
} |
} |
} elsif ($pro eq 'tools') { |
|
my @tools = ('aboutme','blog','portfolio'); |
|
if (grep(/^\Q$prt\E$/,@tools)) { |
|
if (!&Apache::lonnet::usertools_access($env{'user.name'}, |
|
$env{'user.domain'},$prt)) { |
|
$output.=&clear($row,$col); |
|
next; |
|
} |
|
} |
|
$prt='any'; |
|
$output.=&secondlevel( |
|
$uname,$udom,$rol,$crs,$pub,$con,$row,$col,$prt,$img,$top,$bot,$act,$desc,$cat); |
|
} |
} |
} |
} |
unless (($env{'browser.interface'} eq 'textual') || |
unless (($env{'browser.interface'} eq 'textual') || |
Line 1444 sub hidden_button_check {
|
Line 1527 sub hidden_button_check {
|
sub roles_selector { |
sub roles_selector { |
my ($cdom,$cnum) = @_; |
my ($cdom,$cnum) = @_; |
my $now = time; |
my $now = time; |
my (%courseroles,%seccount); |
my (%courseroles,%seccount,%gotnosection); |
my $is_cc; |
my $is_cc; |
my $role_selector; |
my $role_selector; |
if ($env{'user.role.cc./'.$cdom.'/'.$cnum}) { |
if ($env{'user.role.cc./'.$cdom.'/'.$cnum}) { |
Line 1459 sub roles_selector {
|
Line 1542 sub roles_selector {
|
} |
} |
} |
} |
if ($is_cc) { |
if ($is_cc) { |
&get_all_courseroles($cdom,$cnum,\%courseroles,\%seccount); |
my %adv_roles = |
|
&Apache::lonnet::get_course_adv_roles($env{'request.course.id'},1); |
|
foreach my $role (keys(%adv_roles)) { |
|
my ($urole,$usec) = split(/:/,$role); |
|
if (!$gotnosection{$urole}) { |
|
$seccount{$urole} ++; |
|
$gotnosection{$urole} = 1; |
|
} |
|
if (ref($courseroles{$urole}) eq 'ARRAY') { |
|
if ($usec ne '') { |
|
if (!grep(/^Q$usec\E$/,@{$courseroles{$urole}})) { |
|
push(@{$courseroles{$urole}},$usec); |
|
$seccount{$urole} ++; |
|
} |
|
} |
|
} else { |
|
@{$courseroles{$urole}} = (); |
|
if ($usec ne '') { |
|
$seccount{$urole} ++; |
|
push(@{$courseroles{$urole}},$usec); |
|
} |
|
} |
|
} |
|
my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum); |
|
@{$courseroles{'st'}} = (); |
|
if (keys(%sections_count) > 0) { |
|
push(@{$courseroles{'st'}},keys(%sections_count)); |
|
} |
} else { |
} else { |
my %gotnosection; |
|
foreach my $item (keys(%env)) { |
foreach my $item (keys(%env)) { |
if ($item =~ m-^user\.role\.([^.]+)\./\Q$cdom\E/\Q$cnum\E/?(\w*)$-) { |
if ($item =~ m-^user\.role\.([^.]+)\./\Q$cdom\E/\Q$cnum\E/?(\w*)$-) { |
my $role = $1; |
my $role = $1; |
Line 1519 sub roles_selector {
|
Line 1628 sub roles_selector {
|
return $role_selector; |
return $role_selector; |
} |
} |
|
|
sub get_all_courseroles { |
|
my ($cdom,$cnum,$courseroles,$seccount) = @_; |
|
unless ((ref($courseroles) eq 'HASH') && (ref($seccount) eq 'HASH')) { |
|
return; |
|
} |
|
my ($result,$cached) = |
|
&Apache::lonnet::is_cached_new('getcourseroles',$cdom.'_'.$cnum); |
|
if (defined($cached)) { |
|
if (ref($result) eq 'HASH') { |
|
if ((ref($result->{'roles'}) eq 'HASH') && |
|
(ref($result->{'seccount'}) eq 'HASH')) { |
|
%{$courseroles} = %{$result->{'roles'}}; |
|
%{$seccount} = %{$result->{'seccount'}}; |
|
return; |
|
} |
|
} |
|
} |
|
my %gotnosection; |
|
my %adv_roles = |
|
&Apache::lonnet::get_course_adv_roles($env{'request.course.id'},1); |
|
foreach my $role (keys(%adv_roles)) { |
|
my ($urole,$usec) = split(/:/,$role); |
|
if (!$gotnosection{$urole}) { |
|
$seccount->{$urole} ++; |
|
$gotnosection{$urole} = 1; |
|
} |
|
if (ref($courseroles->{$urole}) eq 'ARRAY') { |
|
if ($usec ne '') { |
|
if (!grep(/^\Q$usec\E$/,@{$courseroles->{$urole}})) { |
|
push(@{$courseroles->{$urole}},$usec); |
|
$seccount->{$urole} ++; |
|
} |
|
} |
|
} else { |
|
@{$courseroles->{$urole}} = (); |
|
if ($usec ne '') { |
|
$seccount->{$urole} ++; |
|
push(@{$courseroles->{$urole}},$usec); |
|
} |
|
} |
|
} |
|
my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum,['st']); |
|
@{$courseroles->{'st'}} = (); |
|
if (keys(%sections_count) > 0) { |
|
push(@{$courseroles->{'st'}},keys(%sections_count)); |
|
$seccount->{'st'} = scalar(keys(%sections_count)); |
|
} |
|
my $rolehash = { |
|
'roles' => $courseroles, |
|
'seccount' => $seccount, |
|
}; |
|
&Apache::lonnet::do_cache_new('getcourseroles',$cdom.'_'.$cnum,$rolehash); |
|
return; |
|
} |
|
|
|
sub jump_to_role { |
sub jump_to_role { |
my ($cdom,$cnum,$seccount,$courseroles) = @_; |
my ($cdom,$cnum,$seccount,$courseroles) = @_; |
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |