--- loncom/interface/loncommon.pm 2006/03/21 16:32:50 1.315
+++ loncom/interface/loncommon.pm 2006/04/09 16:43:43 1.328
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common routines
#
-# $Id: loncommon.pm,v 1.315 2006/03/21 16:32:50 albertel Exp $
+# $Id: loncommon.pm,v 1.328 2006/04/09 16:43:43 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -58,7 +58,6 @@ use strict;
use Apache::lonnet;
use GDBM_File;
use POSIX qw(strftime mktime);
-use Apache::Constants qw(:common :http :methods);
use Apache::lonmenu();
use Apache::lonlocal;
use HTML::Entities;
@@ -2737,10 +2736,15 @@ Inputs:
=item * $forcereg, if page should register as content page (relevant for
text interface only)
-=item * $customtitle, overrides the $title in some way ????
+=item * $customtitle, alternate text to use instead of $title
+ in the title box that appears, this text
+ is not auto translated like the $title is
=item * $notopbar, if true, keep the 'what is this' info but remove the
navigational links
+
+=item * $bgcolor, used to override the bg coor on a webpage to a specific value
+
=back
Returns: A uniform header for LON-CAPA web pages.
@@ -2798,7 +2802,8 @@ form, .inline { display: inline; }
style="margin-top: 0px;$addstyle" $addentries>
END
&Apache::lontexconvert::jsMath_reset();
- if ($env{'environment.texengine'} eq 'jsMath') {
+ if ($env{'environment.texengine'} eq 'jsMath' ||
+ $env{'form.texengine'} eq 'jsMath' ) {
$bodytag.=&Apache::lontexconvert::jsMath_header();
}
@@ -2973,6 +2978,9 @@ Returns a uniform footer for LON-CAPA we
Inputs: $title - optional title for the head
$head_extra - optional extra HTML to put inside the
$args - optional arguments
+ force_register - if is true call registerurl so the remote is
+ informed
+
redirect - array ref of seconds before redirect occurs
url to redirect to
(side effect of setting
@@ -2989,14 +2997,18 @@ sub headtag {
''.
&Apache::lonxml::fontsettings().
&Apache::lonhtmlcommon::htmlareaheaders();
-
+
+ if ($args->{'force_register'}) {
+ $result .= &Apache::lonmenu::registerurl(1);
+ }
+
if (ref($args->{'redirect'})) {
my ($time,$url) = @{$args->{'redirect'}};
$url = &Apache::lonenc::check_encrypt($url);
$env{'internal.head.redirect'} = $url;
$result.=<
-
+
ADDMETA
}
if (!defined($title)) {
@@ -3004,7 +3016,6 @@ ADDMETA
}
$result .= ' LON-CAPA '.&mt($title).''.$head_extra;
-
return $result;
}
@@ -3041,8 +3052,8 @@ Inputs: $title - optional title for the
=cut
sub head {
- my ($title,$head_extra) = @_;
- return &headtag($title,$head_extra).&endheadtag();
+ my ($title,$head_extra,$args) = @_;
+ return &headtag($title,$head_extra,$args).&endheadtag();
}
=pod
@@ -3056,16 +3067,25 @@ Returns a complete .. sect
Inputs: $title - optional title for the page
$head_extra - optional extra HTML to incude inside the
$args - additional optional args supported are:
- only_body -> is true will set &bodytag() onlybodytag arg on
- no_nav_bar -> is true will set &bodytag() notopbar arg on
- add_entries -> additional attributes to add to the
- domain -> force to color decorate a page for a
- specific domain
- function -> force usage of a specific rolish color scheme
- redirect -> see &headtag()
- bgcolor -> override the default page bg color
- js_ready -> return a string ready for being used in
- a javascript writeln
+ only_body -> is true will set &bodytag() onlybodytag
+ arg on
+ no_nav_bar -> is true will set &bodytag() notopbar arg on
+ add_entries -> additional attributes to add to the
+ domain -> force to color decorate a page for a
+ specific domain
+ function -> force usage of a specific rolish color
+ scheme
+ redirect -> see &headtag()
+ bgcolor -> override the default page bg color
+ js_ready -> return a string ready for being used in
+ a javascript writeln
+ html_encode -> return a string ready for being used in
+ a html attribute
+ force_register -> if is true will turn on the &bodytag()
+ $forcereg arg
+ body_title -> alternate text to use instead of $title
+ in the title box that appears, this text
+ is not auto translated like the $title is
=back
@@ -3073,20 +3093,28 @@ Inputs: $title - optional title for the
sub start_page {
my ($title,$head_extra,$args) = @_;
+ #&Apache::lonnet::logthis("start_page ".join(':',caller(0)));
my %head_args;
- if (defined($args->{'redirect'})) {
- $head_args{'redirect'} = $args->{'redirect'};
+ foreach my $arg ('redirect','force_register') {
+ if (defined($args->{$arg})) {
+ $head_args{$arg} = $args->{$arg};
+ }
}
+
$env{'internal.start_page'}++;
my $result =
&Apache::lonxml::xmlbegin().
&headtag($title,$head_extra,\%head_args).&endheadtag().
- &bodytag($title, $args->{'function'}, $args->{'add_entries'},
- $args->{'only_body'},
- undef,undef,undef,$args->{'no_nav_bar'},$args->{'bgcolor'});
+ &bodytag($title,
+ $args->{'function'}, $args->{'add_entries'},
+ $args->{'only_body'}, $args->{'domain'},
+ $args->{'force_register'}, $args->{'body_title'},
+ $args->{'no_nav_bar'}, $args->{'bgcolor'});
if ($args->{'js_ready'}) {
- $result =~ s/[\n\r]/ /g;
- $result =~ s/'/\\'/g;
+ $result = &js_ready($result);
+ }
+ if ($args->{'html_encode'}) {
+ $result = &html_encode($result);
}
return $result;
}
@@ -3102,40 +3130,81 @@ Returns a complete sectio
Inputs: $args - additional optional args supported are:
js_ready -> return a string ready for being used in
a javascript writeln
+ html_encode -> return a string ready for being used in
+ a html attribute
=back
=cut
sub end_page {
my ($args) = @_;
+ #&Apache::lonnet::logthis("end_page ".join(':',caller(0)));
$env{'internal.end_page'}++;
my $result = &endbodytag()."\n";
if ($args->{'js_ready'}) {
- $result =~ s/[\n\r]/ /g;
- $result =~ s/'/\\'/g;
+ $result = &js_ready($result);
+ }
+ if ($args->{'html_encode'}) {
+ $result = &html_encode($result);
}
return $result;
}
+sub html_encode {
+ my ($result) = @_;
+
+ $result = &HTML::Entities::encode($result,'<>&"');
+
+ return $result;
+}
+sub js_ready {
+ my ($result) = @_;
+
+ $result =~ s/[\n\r]/ /xmsg;
+ $result =~ s/\\/\\\\/xmsg;
+ $result =~ s/'/\\'/xmsg;
+ $result =~ s{}{}xmsg;
+
+ return $result;
+}
+
sub validate_page {
if ( exists($env{'internal.start_page'})
- && $env{'internal.start_page'} > 1) {
- &Apache::lonnet::logthis('start_page called multiple times');
+ && $env{'internal.start_page'} > 1) {
+ &Apache::lonnet::logthis('start_page called multiple times '.
+ $env{'internal.start_page'}.' '.
+ $ENV{'request.filename'});
}
if ( exists($env{'internal.end_page'})
- && $env{'internal.end_page'} > 1) {
- &Apache::lonnet::logthis('end_page called multiple times');
+ && $env{'internal.end_page'} > 1) {
+ &Apache::lonnet::logthis('end_page called multiple times '.
+ $env{'internal.end_page'}.' '.
+ $env{'request.filename'});
}
if ( exists($env{'internal.start_page'})
&& ! exists($env{'internal.end_page'})) {
- &Apache::lonnet::logthis('start_page called without end_page');
+ &Apache::lonnet::logthis('start_page called without end_page '.
+ $env{'request.filename'});
}
if ( ! exists($env{'internal.start_page'})
&& exists($env{'internal.end_page'})) {
- &Apache::lonnet::logthis('end_page called without start_page');
+ &Apache::lonnet::logthis('end_page called without start_page'.
+ $env{'request.filename'});
}
}
+sub simple_error_page {
+ my ($r,$title,$msg) = @_;
+ my $page =
+ &Apache::loncommon::start_page($title).
+ &mt($msg).
+ &Apache::loncommon::end_page();
+ if (ref($r)) {
+ $r->print($page);
+ return;
+ }
+ return $page;
+}
###############################################
=pod
@@ -3620,8 +3689,22 @@ sub get_posted_cgi {
}
}
}
+#
+# Digested POSTed values
+#
+# Remember the way this was originally done (GET or POST)
+#
$env{'request.method'}=$ENV{'REQUEST_METHOD'};
- $r->method_number(M_GET);
+#
+# 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');
}