version 1.332, 2006/04/13 19:01:25
|
version 1.340, 2006/04/18 20:50:30
|
Line 61 use POSIX qw(strftime mktime);
|
Line 61 use POSIX qw(strftime mktime);
|
use Apache::lonmenu(); |
use Apache::lonmenu(); |
use Apache::lonlocal; |
use Apache::lonlocal; |
use HTML::Entities; |
use HTML::Entities; |
|
use Apache::lonhtmlcommon(); |
|
use Apache::loncoursedata(); |
|
|
my $readit; |
my $readit; |
|
|
Line 2751 Inputs:
|
Line 2753 Inputs:
|
=item * $notopbar, if true, keep the 'what is this' info but remove the |
=item * $notopbar, if true, keep the 'what is this' info but remove the |
navigational links |
navigational links |
|
|
=item * $bgcolor, used to override the bg coor on a webpage to a specific value |
=item * $bgcolor, used to override the bgcolor on a webpage to a specific value |
|
|
|
=item * $notitle, if true keep the nav controls, but remove the title bar |
|
|
|
|
=back |
=back |
|
|
Line 2764 other decorations will be returned.
|
Line 2769 other decorations will be returned.
|
|
|
sub bodytag { |
sub bodytag { |
my ($title,$function,$addentries,$bodyonly,$domain,$forcereg,$customtitle, |
my ($title,$function,$addentries,$bodyonly,$domain,$forcereg,$customtitle, |
$notopbar,$bgcolor)=@_; |
$notopbar,$bgcolor,$notitle)=@_; |
|
|
$title=&mt($title); |
$title=&mt($title); |
|
|
$function = &get_users_function() if (!$function); |
$function = &get_users_function() if (!$function); |
my $img=&designparm($function.'.img',$domain); |
my $img = &designparm($function.'.img',$domain); |
my $pgbg= $bgcolor || &designparm($function.'.pgbg',$domain); |
my $tabbg = &designparm($function.'.tabbg',$domain); |
my $tabbg=&designparm($function.'.tabbg',$domain); |
my $font = &designparm($function.'.font',$domain); |
my $font=&designparm($function.'.font',$domain); |
my $sidebg = &designparm($function.'.sidebg',$domain); |
my $link=&designparm($function.'.link',$domain); |
my $pgbg = $bgcolor || &designparm($function.'.pgbg',$domain); |
my $alink=&designparm($function.'.alink',$domain); |
|
my $vlink=&designparm($function.'.vlink',$domain); |
my %design = ( 'style' => 'margin-top: 0px', |
my $sidebg=&designparm($function.'.sidebg',$domain); |
'bgcolor' => $pgbg, |
# Accessibility font enhance |
'text' => $font, |
my $addstyle=''; |
'alink' => &designparm($function.'.alink',$domain), |
if ($env{'browser.fontenhance'} eq 'on') { |
'vlink' => &designparm($function.'.vlink',$domain), |
$addstyle=' font-size: x-large;'; |
'link' => &designparm($function.'.link',$domain),); |
} |
@$addentries{keys(%design)} = @design{keys(%design)}; |
|
|
# role and realm |
# role and realm |
my ($role,$realm) |
my ($role,$realm) |
=&Apache::lonnet::plaintext((split(/\./,$env{'request.role'}))[0]); |
=&Apache::lonnet::plaintext((split(/\./,$env{'request.role'}))[0]); |
Line 2808 form, .inline { display: inline; }
|
Line 2816 form, .inline { display: inline; }
|
.center { text-align: center; } |
.center { text-align: center; } |
.filename {font-family: monospace;} |
.filename {font-family: monospace;} |
</style> |
</style> |
<body bgcolor="$pgbg" text="$font" alink="$alink" vlink="$vlink" link="$link" |
<body $extra_body_attr> |
style="margin-top: 0px;$addstyle" $extra_body_attr> |
|
END |
END |
|
|
$bodytag .= &Apache::lontexconvert::init_math_support(); |
$bodytag .= &Apache::lontexconvert::init_math_support(); |
Line 2823 END
|
Line 2830 END
|
} elsif ($env{'browser.interface'} eq 'textual') { |
} elsif ($env{'browser.interface'} eq 'textual') { |
# Accessibility |
# Accessibility |
|
|
return $bodytag.&Apache::lonmenu::menubuttons($forcereg,'web', |
$bodytag.=&Apache::lonmenu::menubuttons($forcereg,$forcereg); |
$forcereg). |
if (!$notitle) { |
'<h1>LON-CAPA: '.$title.'</h1>'; |
$bodytag.='<h1>LON-CAPA: '.$title.'</h1>'; |
|
} |
|
return $bodytag; |
} elsif ($env{'environment.remote'} eq 'off') { |
} elsif ($env{'environment.remote'} eq 'off') { |
# No Remote |
# No Remote |
my $roleinfo=(<<ENDROLE); |
my $roleinfo=(<<ENDROLE); |
Line 2874 ENDROLE
|
Line 2883 ENDROLE
|
} |
} |
$forcereg=1; |
$forcereg=1; |
} |
} |
my $titletable = '<table bgcolor="'.$pgbg.'" width="100%" border="0" '. |
my $titletable; |
|
if (!$notitle) { |
|
$titletable = |
|
'<table bgcolor="'.$pgbg.'" width="100%" border="0" '. |
'cellspacing="3" cellpadding="3">'. |
'cellspacing="3" cellpadding="3">'. |
'<tr><td bgcolor="'.$tabbg.'">'. |
'<tr><td bgcolor="'.$tabbg.'">'. |
$titleinfo.'</td>'.$roleinfo.'</tr></table>'; |
$titleinfo.'</td>'.$roleinfo.'</tr></table>'; |
if ($env{'request.state'} eq 'construct') { |
} |
|
if ($env{'request.state'} eq 'construct') { |
if ($notopbar) { |
if ($notopbar) { |
$bodytag .= $titletable; |
$bodytag .= $titletable; |
} else { |
} else { |
$bodytag .= &Apache::lonmenu::menubuttons($forcereg,'web',$forcereg,$titletable); |
$bodytag .= &Apache::lonmenu::menubuttons($forcereg,$forcereg, |
|
$titletable); |
} |
} |
} else { |
} else { |
if ($notopbar) { |
if ($notopbar) { |
$bodytag .= $titletable; |
$bodytag .= $titletable; |
} else { |
} else { |
$bodytag .= &Apache::lonmenu::menubuttons($forcereg,'web',$forcereg). |
$bodytag .= &Apache::lonmenu::menubuttons($forcereg,$forcereg). |
$titletable; |
$titletable; |
} |
} |
} |
} |
Line 2915 ENDROLE
|
Line 2929 ENDROLE
|
# Explicit link to get inline menu |
# Explicit link to get inline menu |
my $menu='<br /><font size="2" face="Arial, Helvetica, sans-serif"> <a href="/adm/remote?action=collapse">'.&mt('Switch to Inline Menu Mode').'</a></font>'; |
my $menu='<br /><font size="2" face="Arial, Helvetica, sans-serif"> <a href="/adm/remote?action=collapse">'.&mt('Switch to Inline Menu Mode').'</a></font>'; |
# |
# |
|
if ($notitle) { |
|
return $bodytag; |
|
} |
return(<<ENDBODY); |
return(<<ENDBODY); |
$bodytag |
$bodytag |
<table width="100%" cellspacing="0" border="0" cellpadding="0"> |
<table width="100%" cellspacing="0" border="0" cellpadding="0"> |
Line 2953 sub make_attr_string {
|
Line 2970 sub make_attr_string {
|
} |
} |
|
|
if ($register) { |
if ($register) { |
$attr_ref->{'onload'} = &Apache::lonmenu::loadevents(). |
my ($on_load,$on_unload); |
$attr_ref->{'onload'}; |
foreach my $key (keys(%{$attr_ref})) { |
$attr_ref->{'onunload'} = &Apache::lonmenu::unloadevents(). |
if (lc($key) eq 'onload') { |
$attr_ref->{'onunload'}; |
$on_load.=$attr_ref->{$key}.';'; |
|
delete($attr_ref->{$key}); |
|
|
|
} elsif (lc($key) eq 'onunload') { |
|
$on_unload.=$attr_ref->{$key}.';'; |
|
delete($attr_ref->{$key}); |
|
} |
|
} |
|
$attr_ref->{'onload'} = |
|
&Apache::lonmenu::loadevents(). $on_load; |
|
$attr_ref->{'onunload'}= |
|
&Apache::lonmenu::unloadevents().$on_unload; |
|
} |
|
|
|
# Accessibility font enhance |
|
if ($env{'browser.fontenhance'} eq 'on') { |
|
my $style; |
|
foreach my $key (keys(%{$attr_ref})) { |
|
if (lc($key) eq 'style') { |
|
$style.=$attr_ref->{$key}.';'; |
|
delete($attr_ref->{$key}); |
|
} |
|
} |
|
$attr_ref->{'style'}=$style.'; font-size: x-large;'; |
} |
} |
|
|
|
if ($env{'browser.blackwhite'} eq 'on') { |
|
delete($attr_ref->{'font'}); |
|
delete($attr_ref->{'link'}); |
|
delete($attr_ref->{'alink'}); |
|
delete($attr_ref->{'vlink'}); |
|
delete($attr_ref->{'bgcolor'}); |
|
delete($attr_ref->{'background'}); |
|
} |
|
|
my $attr_string; |
my $attr_string; |
foreach my $attr (keys(%$attr_ref)) { |
foreach my $attr (keys(%$attr_ref)) { |
$attr_string .= " $attr=\"".$attr_ref->{$attr}.'" '; |
$attr_string .= " $attr=\"".$attr_ref->{$attr}.'" '; |
Line 3012 Inputs: $title - optional title for the
|
Line 3062 Inputs: $title - optional title for the
|
$args - optional arguments |
$args - optional arguments |
force_register - if is true call registerurl so the remote is |
force_register - if is true call registerurl so the remote is |
informed |
informed |
|
|
redirect - array ref of seconds before redirect occurs |
redirect - array ref of seconds before redirect occurs |
url to redirect to |
url to redirect to |
(side effect of setting |
(side effect of setting |
Line 3027 sub headtag {
|
Line 3076 sub headtag {
|
|
|
my $result = |
my $result = |
'<head>'. |
'<head>'. |
&Apache::lonxml::fontsettings(). |
&font_settings(). |
&Apache::lonhtmlcommon::htmlareaheaders(); |
&Apache::lonhtmlcommon::htmlareaheaders(); |
|
|
if ($args->{'force_register'}) { |
if ($args->{'force_register'}) { |
Line 3055 ADDMETA
|
Line 3104 ADDMETA
|
|
|
=over 4 |
=over 4 |
|
|
|
=item * &font_settings() |
|
|
|
Returns neccessary <meta> to set the proper encoding |
|
|
|
Inputs: none |
|
|
|
=back |
|
|
|
=cut |
|
|
|
sub font_settings { |
|
my $headerstring=''; |
|
if (($env{'browser.os'} eq 'mac') && (!$env{'browser.mathml'})) { |
|
$headerstring.= |
|
'<meta Content-Type="text/html; charset=x-mac-roman" />'; |
|
} elsif (!$env{'browser.mathml'} && $env{'browser.unicode'}) { |
|
$headerstring.= |
|
'<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'; |
|
} |
|
return $headerstring; |
|
} |
|
|
|
|
|
=pod |
|
|
|
=over 4 |
|
|
=item * &endheadtag() |
=item * &endheadtag() |
|
|
Returns a uniform </head> for LON-CAPA web pages. |
Returns a uniform </head> for LON-CAPA web pages. |
Line 3120 Inputs: $title - optional title for the
|
Line 3196 Inputs: $title - optional title for the
|
is not auto translated like the $title is |
is not auto translated like the $title is |
frameset -> if true will start with a <frameset> |
frameset -> if true will start with a <frameset> |
rather than <body> |
rather than <body> |
|
no_title -> if true the title bar won't be shown |
|
skip_phases -> hash ref of |
|
head -> skip the <html><head> generation |
|
body -> skip all <body> generation |
|
|
=back |
=back |
|
|
=cut |
=cut |
Line 3135 sub start_page {
|
Line 3216 sub start_page {
|
} |
} |
|
|
$env{'internal.start_page'}++; |
$env{'internal.start_page'}++; |
my $result = |
my $result; |
&Apache::lonxml::xmlbegin(). |
if (! exists($args->{'skip_phases'}{'head'}) ) { |
&headtag($title,$head_extra,\%head_args).&endheadtag(); |
$result.= |
if ($args->{'frameset'}) { |
&Apache::lonxml::xmlbegin(). |
my $attr_string = &make_attr_string($args->{'force_register'}, |
&headtag($title,$head_extra,\%head_args).&endheadtag(); |
$args->{'add_entries'}); |
} |
$result .= "\n<frameset $attr_string>\n"; |
|
} else { |
if (! exists($args->{'skip_phases'}{'body'}) ) { |
$result .= |
if ($args->{'frameset'}) { |
&bodytag($title, |
my $attr_string = &make_attr_string($args->{'force_register'}, |
$args->{'function'}, $args->{'add_entries'}, |
$args->{'add_entries'}); |
$args->{'only_body'}, $args->{'domain'}, |
$result .= "\n<frameset $attr_string>\n"; |
$args->{'force_register'}, $args->{'body_title'}, |
} else { |
$args->{'no_nav_bar'}, $args->{'bgcolor'}); |
$result .= |
|
&bodytag($title, |
|
$args->{'function'}, $args->{'add_entries'}, |
|
$args->{'only_body'}, $args->{'domain'}, |
|
$args->{'force_register'}, $args->{'body_title'}, |
|
$args->{'no_nav_bar'}, $args->{'bgcolor'}, |
|
$args->{'no_title'}); |
|
} |
} |
} |
|
|
if ($args->{'js_ready'}) { |
if ($args->{'js_ready'}) { |
$result = &js_ready($result); |
$result = &js_ready($result); |
} |
} |
Line 3184 sub end_page {
|
Line 3273 sub end_page {
|
#&Apache::lonnet::logthis("end_page ".join(':',caller(0))); |
#&Apache::lonnet::logthis("end_page ".join(':',caller(0))); |
$env{'internal.end_page'}++; |
$env{'internal.end_page'}++; |
my $result; |
my $result; |
|
if ($args->{'discussion'}) { |
|
my ($target,$parser); |
|
if (ref($args->{'discussion'})) { |
|
($target,$parser) =($args->{'discussion'}{'target'}, |
|
$args->{'discussion'}{'parser'}); |
|
} |
|
$result .= &Apache::lonxml::xmlend($target,$parser); |
|
} |
|
|
if ($args->{'frameset'}) { |
if ($args->{'frameset'}) { |
$result .= '</frameset>'; |
$result .= '</frameset>'; |
} else { |
} else { |
Line 3194 sub end_page {
|
Line 3292 sub end_page {
|
if ($args->{'js_ready'}) { |
if ($args->{'js_ready'}) { |
$result = &js_ready($result); |
$result = &js_ready($result); |
} |
} |
|
|
if ($args->{'html_encode'}) { |
if ($args->{'html_encode'}) { |
$result = &html_encode($result); |
$result = &html_encode($result); |
} |
} |
|
|
return $result; |
return $result; |
} |
} |
|
|
Line 3673 sub get_user_info {
|
Line 3773 sub get_user_info {
|
return; |
return; |
} |
} |
|
|
############################################### |
|
|
|
sub get_posted_cgi { |
|
my $r=shift; |
|
|
|
my $buffer; |
|
if ($r->header_in('Content-length')) { |
|
$r->read($buffer,$r->header_in('Content-length'),0); |
|
} |
|
unless ($buffer=~/^(\-+\w+)\s+Content\-Disposition\:\s*form\-data/si) { |
|
my @pairs=split(/&/,$buffer); |
|
my $pair; |
|
foreach $pair (@pairs) { |
|
my ($name,$value) = split(/=/,$pair); |
|
$value =~ tr/+/ /; |
|
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; |
|
$name =~ tr/+/ /; |
|
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; |
|
&add_to_env("form.$name",$value); |
|
} |
|
} else { |
|
my $contentsep=$1; |
|
my @lines = split (/\n/,$buffer); |
|
my $name=''; |
|
my $value=''; |
|
my $fname=''; |
|
my $fmime=''; |
|
my $i; |
|
for ($i=0;$i<=$#lines;$i++) { |
|
if ($lines[$i]=~/^$contentsep/) { |
|
if ($name) { |
|
chomp($value); |
|
if ($fname) { |
|
$env{"form.$name.filename"}=$fname; |
|
$env{"form.$name.mimetype"}=$fmime; |
|
} else { |
|
$value=~s/\s+$//s; |
|
} |
|
&add_to_env("form.$name",$value); |
|
} |
|
if ($i<$#lines) { |
|
$i++; |
|
$lines[$i]=~ |
|
/Content\-Disposition\:\s*form\-data\;\s*name\=\"([^\"]+)\"/i; |
|
$name=$1; |
|
$value=''; |
|
if ($lines[$i]=~/filename\=\"([^\"]+)\"/i) { |
|
$fname=$1; |
|
if |
|
($lines[$i+1]=~/Content\-Type\:\s*([\w\-\/]+)/i) { |
|
$fmime=$1; |
|
$i++; |
|
} else { |
|
$fmime=''; |
|
} |
|
} else { |
|
$fname=''; |
|
$fmime=''; |
|
} |
|
$i++; |
|
} |
|
} else { |
|
$value.=$lines[$i]."\n"; |
|
} |
|
} |
|
} |
|
# |
|
# Digested POSTed values |
|
# |
|
# Remember the way this was originally done (GET or POST) |
|
# |
|
$env{'request.method'}=$ENV{'REQUEST_METHOD'}; |
|
# |
|
# There may also be stuff in the query string |
|
# Tell subsequent handlers that this was GET, not POST, so they can access query string. |
|
# Also, unset POSTed content length to cover all tracks. |
|
# |
|
|
|
# This does not work, because M_GET is not defined (if it's defined, it is just 0). |
|
# Commenting out for now ... not sure if harm is done. |
|
# $r->method_number(M_GET); |
|
|
|
$r->method('GET'); |
|
$r->headers_in->unset('Content-length'); |
|
} |
|
|
|
=pod |
=pod |
|
|
=item * get_unprocessed_cgi($query,$possible_names) |
=item * get_unprocessed_cgi($query,$possible_names) |