version 1.161, 2002/03/22 17:52:20
|
version 1.175, 2002/05/29 16:22:09
|
Line 60
|
Line 60
|
|
|
package Apache::lonxml; |
package Apache::lonxml; |
use vars |
use vars |
qw(@pwd @outputstack $redirection $import @extlinks $metamode $evaluate %insertlist @namespace); |
qw(@pwd @outputstack $redirection $import @extlinks $metamode $evaluate %insertlist @namespace $prevent_entity_encode); |
use strict; |
use strict; |
use HTML::TokeParser(); |
use HTML::LCParser(); |
use HTML::TreeBuilder(); |
use HTML::TreeBuilder(); |
use HTML::Entities(); |
use HTML::Entities(); |
use Safe(); |
use Safe(); |
Line 129 $evaluate = 1;
|
Line 129 $evaluate = 1;
|
# stores the list of active tag namespaces |
# stores the list of active tag namespaces |
@namespace=(); |
@namespace=(); |
|
|
|
# if 0 all high ASCII characters will be encoded into HTML Entities |
|
$prevent_entity_encode=0; |
|
|
# has the dynamic menu been updated to know about this resource |
# has the dynamic menu been updated to know about this resource |
$Apache::lonxml::registered=0; |
$Apache::lonxml::registered=0; |
|
|
|
# a pointer the the Apache request object |
|
$Apache::lonxml::request=''; |
|
|
sub xmlbegin { |
sub xmlbegin { |
my $output=''; |
my $output=''; |
if ($ENV{'browser.mathml'}) { |
if ($ENV{'browser.mathml'}) { |
Line 176 sub xmlend {
|
Line 182 sub xmlend {
|
} |
} |
my $sender='Anonymous'; |
my $sender='Anonymous'; |
if ((!$contrib{$idx.':anonymous'}) || ($seeid)) { |
if ((!$contrib{$idx.':anonymous'}) || ($seeid)) { |
$sender=$contrib{$idx.':sendername'}.' at '. |
$sender=$contrib{$idx.':plainname'}.' ('. |
$contrib{$idx.':senderdomain'}; |
$contrib{$idx.':sendername'}.' at '. |
|
$contrib{$idx.':senderdomain'}.')'; |
if ($contrib{$idx.':anonymous'}) { |
if ($contrib{$idx.':anonymous'}) { |
$sender.=' (anonymous)'; |
$sender.=' [anonymous] '. |
|
$contrib{$idx.':screenname'}; |
} |
} |
if ($seeid) { |
if ($seeid) { |
if ($hidden) { |
if ($hidden) { |
Line 190 sub xmlend {
|
Line 198 sub xmlend {
|
$symb.':::'.$idx.'">Hide</a>'; |
$symb.':::'.$idx.'">Hide</a>'; |
} |
} |
} |
} |
|
} else { |
|
if ($contrib{$idx.':screenname'}) { |
|
$sender='<i>'.$contrib{$idx.':screenname'}.'</i>'; |
|
} |
} |
} |
$discussion.='<p><b>'.$sender.'</b> ('. |
$discussion.='<p><b>'.$sender.'</b> ('. |
localtime($contrib{$idx.':timestamp'}). |
localtime($contrib{$idx.':timestamp'}). |
Line 320 sub registerurl {
|
Line 332 sub registerurl {
|
my $target = shift; |
my $target = shift; |
my $result = ''; |
my $result = ''; |
if (($ENV{'request.publicaccess'}) || |
if (($ENV{'request.publicaccess'}) || |
($ENV{'REQUEST_URI'} eq '/res/adm/pages/menu.html')) { |
(!&Apache::lonnet::is_on_map($ENV{'REQUEST_URI'}))) { |
return |
return |
'<script>function LONCAPAreg(){} function LONCAPAstale(){}</script>'; |
'<script>function LONCAPAreg(){} function LONCAPAstale(){}</script>'; |
} |
} |
Line 328 sub registerurl {
|
Line 340 sub registerurl {
|
$Apache::lonxml::registered=1; |
$Apache::lonxml::registered=1; |
my $nothing=''; |
my $nothing=''; |
if ($ENV{'browser.type'} eq 'explorer') { $nothing='javascript:void(0);'; } |
if ($ENV{'browser.type'} eq 'explorer') { $nothing='javascript:void(0);'; } |
|
my $timesync='menu.clock.setTime(1000*'.time.');'; |
if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) { |
if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) { |
my $hwkadd=''; |
my $hwkadd=''; |
if ($ENV{'REQUEST_URI'}=~/\.(problem|exam|quiz|assess|survey|form)$/) { |
if ($ENV{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form)$/) { |
if (&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'})) { |
if (&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'})) { |
$hwkadd.=(<<ENDSUBM); |
$hwkadd.=(<<ENDSUBM); |
menu.switchbutton |
menu.switchbutton(7,1,'subm.gif','view sub','missions','gocmd("/adm/grades","submission")'); |
(7,1,'subm.gif','view sub','missions', |
|
'gocmd("/adm/grades","submission")'); |
|
ENDSUBM |
ENDSUBM |
} |
} |
if (&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'})) { |
if (&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'})) { |
$hwkadd.=(<<ENDGRDS); |
$hwkadd.=(<<ENDGRDS); |
menu.switchbutton |
menu.switchbutton(7,2,'pgrd.gif','problem','grades','gocmd("/adm/grades","gradingmenu")'); |
(7,2,'pgrd.gif','problem','grades', |
|
'gocmd("/adm/grades","viewgrades")'); |
|
ENDGRDS |
ENDGRDS |
} |
} |
if (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'})) { |
if (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'})) { |
$hwkadd.=(<<ENDPARM); |
$hwkadd.=(<<ENDPARM); |
menu.switchbutton |
menu.switchbutton(7,3,'pparm.gif','problem','parms','gocmd("/adm/parmset","set")'); |
(7,3,'pparm.gif','problem','parms', |
|
'gocmd("/adm/parmset","set")'); |
|
ENDPARM |
ENDPARM |
} |
} |
} |
} |
Line 361 ENDPARM
|
Line 368 ENDPARM
|
function LONCAPAreg() { |
function LONCAPAreg() { |
menu=window.open("$nothing","LONCAPAmenu","",false); |
menu=window.open("$nothing","LONCAPAmenu","",false); |
menu.clearTimeout(menu.menucltim); |
menu.clearTimeout(menu.menucltim); |
|
$timesync |
menu.currentURL=window.location.pathname; |
menu.currentURL=window.location.pathname; |
|
menu.reloadURL=window.location.pathname; |
menu.currentStale=0; |
menu.currentStale=0; |
menu.clearbut(3,1); |
menu.clearbut(3,1); |
menu.switchbutton |
menu.switchbutton |
Line 388 ENDPARM
|
Line 397 ENDPARM
|
function LONCAPAstale() { |
function LONCAPAstale() { |
menu=window.open("$nothing","LONCAPAmenu","",false); |
menu=window.open("$nothing","LONCAPAmenu","",false); |
menu.currentStale=1; |
menu.currentStale=1; |
menu.switchbutton |
if (menu.reloadURL!='' && menu.reloadURL!= null) { |
(3,1,'reload.gif','return','location','go(currentURL)'); |
menu.switchbutton |
|
(3,1,'reload.gif','return','location','go(reloadURL)'); |
|
} |
menu.clearbut(7,1); |
menu.clearbut(7,1); |
menu.clearbut(7,2); |
menu.clearbut(7,2); |
menu.clearbut(7,3); |
menu.clearbut(7,3); |
Line 412 ENDREGTHIS
|
Line 423 ENDREGTHIS
|
|
|
function LONCAPAreg() { |
function LONCAPAreg() { |
menu=window.open("$nothing","LONCAPAmenu","",false); |
menu=window.open("$nothing","LONCAPAmenu","",false); |
|
$timesync |
menu.currentStale=1; |
menu.currentStale=1; |
menu.clearbut(2,1); |
menu.clearbut(2,1); |
menu.clearbut(2,3); |
menu.clearbut(2,3); |
Line 440 ENDDONOTREGTHIS
|
Line 452 ENDDONOTREGTHIS
|
# Inputs are the name of the html form being used |
# Inputs are the name of the html form being used |
# and the name of the element the selected URL should |
# and the name of the element the selected URL should |
# be placed in. |
# be placed in. |
|
# openbrowser also takes arguments only and omit, which are |
|
# comma deliminated lists of file extensions to (only) show |
|
# or omit. |
|
# Here we also set currentURL=null. |
$result .=<<"ENDBROWSERSCRIPT"; |
$result .=<<"ENDBROWSERSCRIPT"; |
<script> |
<script> |
|
menu.currentURL=null; |
var editbrowser; |
var editbrowser; |
function openbrowser(formname,elementname) { |
function openbrowser(formname,elementname,only,omit) { |
var url = '/res/?'; |
var url = '/res/?'; |
if (editbrowser == null) { |
if (editbrowser == null) { |
url += 'launch=1&'; |
url += 'launch=1&'; |
Line 451 ENDDONOTREGTHIS
|
Line 468 ENDDONOTREGTHIS
|
url += 'catalogmode=interactive&'; |
url += 'catalogmode=interactive&'; |
url += 'mode=edit&'; |
url += 'mode=edit&'; |
url += 'form=' + formname + '&'; |
url += 'form=' + formname + '&'; |
|
if (only != null) { |
|
url += 'only=' + only + '&'; |
|
} |
|
if (omit != null) { |
|
url += 'omit=' + omit + '&'; |
|
} |
url += 'element=' + elementname + ''; |
url += 'element=' + elementname + ''; |
var title = 'Browser'; |
var title = 'Browser'; |
var options = 'scrollbars=1,resizable=1,menubar=0'; |
var options = 'scrollbars=1,resizable=1,menubar=0'; |
Line 497 sub printalltags {
|
Line 520 sub printalltags {
|
} |
} |
|
|
sub xmlparse { |
sub xmlparse { |
my ($target,$content_file_string,$safeinit,%style_for_target) = @_; |
my ($request,$target,$content_file_string,$safeinit,%style_for_target) = @_; |
|
|
&setup_globals($target); |
&setup_globals($request,$target); |
#&printalltags(); |
#&printalltags(); |
my @pars = (); |
my @pars = (); |
my $pwd=$ENV{'request.filename'}; |
my $pwd=$ENV{'request.filename'}; |
Line 613 sub inner_xmlparse {
|
Line 636 sub inner_xmlparse {
|
#evaluate variable refs in result |
#evaluate variable refs in result |
if ($result ne "") { |
if ($result ne "") { |
if ( $#$parstack > -1 ) { |
if ( $#$parstack > -1 ) { |
if ($Apache::lonxml::redirection) { |
$result=&Apache::run::evaluate($result,$safeeval,$$parstack[-1]); |
$Apache::lonxml::outputstack['-1'] .= |
|
&Apache::run::evaluate($result,$safeeval,$$parstack['-1']); |
|
} else { |
|
$finaloutput .= &Apache::run::evaluate($result,$safeeval, |
|
$$parstack['-1']); |
|
} |
|
} else { |
} else { |
$finaloutput .= &Apache::run::evaluate($result,$safeeval,''); |
$result= &Apache::run::evaluate($result,$safeeval,''); |
} |
} |
$result = ''; |
} |
} |
# Encode any high ASCII characters |
|
if (!$Apache::lonxml::prevent_entity_encode) { |
|
$result=&HTML::Entities::encode($result,"\200-\377"); |
|
} |
|
if ($Apache::lonxml::redirection) { |
|
$Apache::lonxml::outputstack['-1'] .= $result; |
|
} else { |
|
$finaloutput.=$result; |
|
} |
|
$result = ''; |
|
|
if ($token->[0] eq 'E') { |
if ($token->[0] eq 'E') { |
&end_tag($stack,$parstack,$token); |
&end_tag($stack,$parstack,$token); |
} |
} |
Line 637 sub inner_xmlparse {
|
Line 664 sub inner_xmlparse {
|
# $finaloutput.=&endredirection; |
# $finaloutput.=&endredirection; |
# } |
# } |
|
|
|
|
if (($ENV{'QUERY_STRING'}) && ($target eq 'web')) { |
if (($ENV{'QUERY_STRING'}) && ($target eq 'web')) { |
$finaloutput=&afterburn($finaloutput); |
$finaloutput=&afterburn($finaloutput); |
} |
} |
Line 779 sub callsub {
|
Line 807 sub callsub {
|
} |
} |
|
|
sub setup_globals { |
sub setup_globals { |
my ($target)=@_; |
my ($request,$target)=@_; |
|
$Apache::lonxml::request=$request; |
$Apache::lonxml::registered = 0; |
$Apache::lonxml::registered = 0; |
@Apache::lonxml::pwd=(); |
@Apache::lonxml::pwd=(); |
@Apache::lonxml::extlinks=(); |
@Apache::lonxml::extlinks=(); |
Line 808 sub setup_globals {
|
Line 837 sub setup_globals {
|
$Apache::lonxml::metamode = 0; |
$Apache::lonxml::metamode = 0; |
$Apache::lonxml::evaluate = 0; |
$Apache::lonxml::evaluate = 0; |
$Apache::lonxml::import = 0; |
$Apache::lonxml::import = 0; |
|
} elsif ($target eq 'analyze') { |
|
$Apache::lonxml::redirection = 0; |
|
$Apache::lonxml::metamode = 0; |
|
$Apache::lonxml::evaluate = 1; |
|
$Apache::lonxml::import = 1; |
} else { |
} else { |
$Apache::lonxml::redirection = 0; |
$Apache::lonxml::redirection = 0; |
$Apache::lonxml::metamode = 0; |
$Apache::lonxml::metamode = 0; |
Line 981 sub get_all_text {
|
Line 1015 sub get_all_text {
|
|
|
sub newparser { |
sub newparser { |
my ($parser,$contentref,$dir) = @_; |
my ($parser,$contentref,$dir) = @_; |
push (@$parser,HTML::TokeParser->new($contentref)); |
push (@$parser,HTML::LCParser->new($contentref)); |
$$parser['-1']->xml_mode('1'); |
$$parser['-1']->xml_mode('1'); |
if ( $dir eq '' ) { |
if ( $dir eq '' ) { |
push (@Apache::lonxml::pwd, $Apache::lonxml::pwd[$#Apache::lonxml::pwd]); |
push (@Apache::lonxml::pwd, $Apache::lonxml::pwd[$#Apache::lonxml::pwd]); |
Line 1104 BUTTONS
|
Line 1138 BUTTONS
|
<a name="editsection" /> |
<a name="editsection" /> |
<form method="post"> |
<form method="post"> |
<input type="hidden" name="editmode" value="Edit" /> |
<input type="hidden" name="editmode" value="Edit" /> |
$buttons |
$buttons<br /> |
<textarea cols="80" rows="40" name="filecont">$filecontents</textarea> |
<textarea cols="80" rows="40" name="filecont">$filecontents</textarea> |
$buttons |
<br />$buttons |
<br /> |
<br /> |
</form> |
</form> |
ENDFOOTER |
ENDFOOTER |
Line 1195 ENDNOTFOUND
|
Line 1229 ENDNOTFOUND
|
} |
} |
} |
} |
if (!$ENV{'form.editmode'} || $ENV{'form.viewmode'}) { |
if (!$ENV{'form.editmode'} || $ENV{'form.viewmode'}) { |
$result = &Apache::lonxml::xmlparse($target,$filecontents,'',%mystyle); |
$result = &Apache::lonxml::xmlparse($request,$target,$filecontents, |
|
'',%mystyle); |
} |
} |
} |
} |
|
|
Line 1225 sub debug {
|
Line 1260 sub debug {
|
|
|
sub error { |
sub error { |
if (($Apache::lonxml::debug eq 1) || ($ENV{'request.state'} eq 'construct') ) { |
if (($Apache::lonxml::debug eq 1) || ($ENV{'request.state'} eq 'construct') ) { |
print "<b>ERROR:</b>".join('<br />',@_)."<br />\n"; |
# If printing in construction space, put the error inside <pre></pre> |
|
print "<b>ERROR:</b>".join("\n",@_)."\n"; |
} else { |
} else { |
print "<b>An Error occured while processing this resource. The instructor has been notified.</b> <br />"; |
print "<b>An Error occured while processing this resource. The instructor has been notified.</b> <br />"; |
#notify author |
#notify author |