--- loncom/interface/loncommon.pm 2006/03/16 21:54:40 1.311 +++ 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.311 2006/03/16 21:54:40 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. @@ -2752,11 +2756,11 @@ other decorations will be returned. sub bodytag { my ($title,$function,$addentries,$bodyonly,$domain,$forcereg,$customtitle, - $notopbar)=@_; + $notopbar,$bgcolor)=@_; $title=&mt($title); $function = &get_users_function() if (!$function); my $img=&designparm($function.'.img',$domain); - my $pgbg=&designparm($function.'.pgbg',$domain); + my $pgbg= $bgcolor || &designparm($function.'.pgbg',$domain); my $tabbg=&designparm($function.'.tabbg',$domain); my $font=&designparm($function.'.font',$domain); my $link=&designparm($function.'.link',$domain); @@ -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(); } @@ -2953,6 +2958,12 @@ Inputs: none sub endbodytag { my $endbodytag=''; $endbodytag=&Apache::lontexconvert::jsMath_process()."\n".$endbodytag; + if ( exists( $env{'internal.head.redirect'} ) ) { + $endbodytag= + "
". + &mt('Continue').''. + $endbodytag; + } return $endbodytag; } @@ -2966,25 +2977,45 @@ 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 + $env{'internal.head.redirect'} to the url + redirected too) =back =cut sub headtag { - my ($title,$head_extra) = @_; + my ($title,$head_extra,$args) = @_; my $result = ''. &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)) { $title = 'The LearningOnline Network with CAPA'; } - $result .= ''.&mt($title).''.$head_extra; - + $result .= ' LON-CAPA '.&mt($title).''.$head_extra; return $result; } @@ -3021,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 @@ -3035,10 +3066,26 @@ 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 + $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 + 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 @@ -3046,11 +3093,30 @@ Inputs: $title - optional title for the sub start_page { my ($title,$head_extra,$args) = @_; - return + #&Apache::lonnet::logthis("start_page ".join(':',caller(0))); + my %head_args; + 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).&endheadtag(). - &bodytag($title,undef,$args->{'add_entries'},$args->{'only_body'}, - undef,undef,undef,$args->{'no_nav_bar'}); + &headtag($title,$head_extra,\%head_args).&endheadtag(). + &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 = &js_ready($result); + } + if ($args->{'html_encode'}) { + $result = &html_encode($result); + } + return $result; } =pod @@ -3061,14 +3127,83 @@ sub start_page { Returns a complete section for LON-CAPA web pages. -Inputs: None - +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 { - return &endbodytag."\n"; + my ($args) = @_; + #&Apache::lonnet::logthis("end_page ".join(':',caller(0))); + $env{'internal.end_page'}++; + my $result = &endbodytag()."\n"; + if ($args->{'js_ready'}) { + $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'}.' '. + $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'}.' '. + $env{'request.filename'}); + } + if ( exists($env{'internal.start_page'}) + && ! exists($env{'internal.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'. + $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; } ############################################### @@ -3554,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'); }