Diff for /loncom/xml/lonxml.pm between versions 1.103 and 1.111

version 1.103, 2001/07/27 00:18:59 version 1.111, 2001/08/11 20:16:10
Line 12 Line 12
 # 6/2,6/3,6/8,6/9 Gerd Kortemeyer  # 6/2,6/3,6/8,6/9 Gerd Kortemeyer
 # 6/12,6/13 H. K. Ng  # 6/12,6/13 H. K. Ng
 # 6/16 Gerd Kortemeyer  # 6/16 Gerd Kortemeyer
   # 7/27 H. K. Ng
   # 8/7,8/9,8/10,8/11 Gerd Kortemeyer
   
 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);
 use strict;  use strict;
 use HTML::TokeParser;  use HTML::TokeParser;
   use HTML::TreeBuilder;
 use Safe;  use Safe;
 use Safe::Hole;  use Safe::Hole;
 use Math::Cephes qw(:trigs :hypers :bessels erf erfc);  use Math::Cephes qw(:trigs :hypers :bessels erf erfc);
Line 94  sub xmlbegin { Line 97  sub xmlbegin {
 sub xmlend {  sub xmlend {
     my $discussion='';      my $discussion='';
     if ($ENV{'request.course.id'}) {      if ($ENV{'request.course.id'}) {
          my $crs='/'.$ENV{'request.course.id'};
          if ($ENV{'request.course.sec'}) {
             $crs.='_'.$ENV{'request.course.sec'};
          }                 
          $crs=~s/\_/\//g;
          my $seeid=&Apache::lonnet::allowed('rin',$crs);
        my $symb=&Apache::lonnet::symbread();         my $symb=&Apache::lonnet::symbread();
        if ($symb) {         if ($symb) {
           my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'},            my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'},
Line 104  sub xmlend { Line 113  sub xmlend {
                   '<address><hr /><h2>Course Discussion of Resource</h2>';                    '<address><hr /><h2>Course Discussion of Resource</h2>';
               my $idx;                my $idx;
               for ($idx=1;$idx<=$contrib{'version'};$idx++) {                for ($idx=1;$idx<=$contrib{'version'};$idx++) {
                   my $message=$contrib{$idx.':message'};   my $hidden=($contrib{'hidden'}=~/\.$idx\./);
                   $message=~s/\n/\<br \/\>/g;   unless (($hidden) && (!$seeid)) {
   $discussion.='<p><b>'.$contrib{$idx.':sendername'}.' at '.                   my $message=$contrib{$idx.':message'};
       $contrib{$idx.':senderdomain'}.'</b> ('.                   $message=~s/\n/\<br \/\>/g;
                    if ($message) {
                     if ($hidden) {
         $message='<font color="#888888">'.$message.'</font>';
                     }
                     my $sender='Anonymous';
                     if ((!$contrib{$idx.':anonymous'}) || ($seeid)) {
                         $sender=$contrib{$idx.':sendername'}.' at '.
         $contrib{$idx.':senderdomain'};
                         if ($contrib{$idx.':anonymous'}) {
     $sender.=' (anonymous)';
                         }
                         if ($seeid) {
     if ($hidden) {
                                $sender.=' <a href="/adm/feedback?unhide='.
    $symb.':::'.$idx.'">Make Visible</a>';
                             } else {
                                $sender.=' <a href="/adm/feedback?hide='.
    $symb.':::'.$idx.'">Hide</a>';
     }
                         }                   
                     }
     $discussion.='<p><b>'.$sender.'</b> ('.
                       localtime($contrib{$idx.':timestamp'}).                        localtime($contrib{$idx.':timestamp'}).
                       '):<blockquote>'.$message.                        '):<blockquote>'.$message.
                       '</blockquote></p>';                         '</blockquote></p>';
           }
                  } 
               }                }
               $discussion.='</address>';                $discussion.='</address>';
           }            }
Line 131  sub fontsettings() { Line 164  sub fontsettings() {
 sub registerurl {  sub registerurl {
     my $forcereg=shift;      my $forcereg=shift;
     if ($Apache::lonxml::registered) { return ''; }      if ($Apache::lonxml::registered) { return ''; }
       $Apache::lonxml::registered=1;
     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_URI'}=~/\.(problem|exam|quiz|assess|survey|form)$/) {
Line 168  ENDPARM Line 202  ENDPARM
           menu.currentStale=0;            menu.currentStale=0;
           menu.clearbut(3,1);            menu.clearbut(3,1);
           menu.switchbutton            menu.switchbutton
          (6,3,'catalog.gif','catalog','info','catalog_info()');
             menu.switchbutton
        (8,1,'eval.gif','evaluate','this','gopost("/adm/evaluate",currentURL)');         (8,1,'eval.gif','evaluate','this','gopost("/adm/evaluate",currentURL)');
           menu.switchbutton            menu.switchbutton
     (8,2,'fdbk.gif','feedback','on this','gopost("/adm/feedback",currentURL)');      (8,2,'fdbk.gif','feedback','on this','gopost("/adm/feedback",currentURL)');
Line 196  ENDPARM Line 232  ENDPARM
           menu.clearbut(7,3);            menu.clearbut(7,3);
           menu.menucltim=menu.setTimeout(            menu.menucltim=menu.setTimeout(
  'clearbut(2,1);clearbut(2,3);clearbut(8,1);clearbut(8,2);clearbut(8,3);'+   'clearbut(2,1);clearbut(2,3);clearbut(8,1);clearbut(8,2);clearbut(8,3);'+
  'clearbut(9,1);clearbut(9,2);clearbut(9,3);',   'clearbut(9,1);clearbut(9,2);clearbut(9,3);clearbut(6,3)',
   2000);    2000);
   
       }        }
Line 279  sub xmlparse { Line 315  sub xmlparse {
  return $finaloutput;   return $finaloutput;
 }  }
   
   sub htmlclean {
       my ($raw,$full)=@_;
   
       my $tree = HTML::TreeBuilder->new;
       $tree->ignore_unknown(0);
       
       $tree->parse($raw);
   
       my $output= $tree->as_HTML(undef,' ');
        
       $output=~s/\<(br|hr|img|meta|allow)([^\>\/]*)\>/\<$1$2 \/\>/gis;
       $output=~s/\<\/(br|hr|img|meta|allow)\>//gis;
       unless ($full) {
          $output=~s/\<[\/]*(body|head|html)\>//gis;
       }
   
       $tree = $tree->delete;
   
       return $output;
   }
   
 sub inner_xmlparse {  sub inner_xmlparse {
   my ($target,$stack,$parstack,$pars,$safeeval,$style_for_target)=@_;    my ($target,$stack,$parstack,$pars,$safeeval,$style_for_target)=@_;
   &Apache::lonxml::debug('Reentrant parser starting, again?');    &Apache::lonxml::debug('Reentrant parser starting, again?');
Line 720  sub parstring { Line 777  sub parstring {
   
 sub writeallows {  sub writeallows {
     my $thisurl='/res/'.&Apache::lonnet::declutter(shift);      my $thisurl='/res/'.&Apache::lonnet::declutter(shift);
       if ($ENV{'httpref.'.$thisurl}) {
    $thisurl=$ENV{'httpref.'.$thisurl};
       }
     my $thisdir=$thisurl;      my $thisdir=$thisurl;
     $thisdir=~s/\/[^\/]+$//;      $thisdir=~s/\/[^\/]+$//;
     my %httpref=();      my %httpref=();
Line 807  SIMPLECONTENT Line 867  SIMPLECONTENT
 <form method="post">  <form method="post">
 <textarea cols="80" rows="40" name="filecont">$filecontents</textarea>  <textarea cols="80" rows="40" name="filecont">$filecontents</textarea>
 <br />  <br />
 <input type="submit" name="savethisfile" value="Save this file" />  <input type="submit" name="attemptclean" 
          value="Save and then attempt to clean HTML" />
   <input type="submit" name="savethisfile" value="Save this" />
 </form>  </form>
 ENDFOOTER  ENDFOOTER
       $result=~s/(\<body[^\>]*\>)/$1$editheader/is;        $result=~s/(\<body[^\>]*\>)/$1$editheader/is;
Line 838  sub handler { Line 900  sub handler {
 # Edit action? Save file.  # Edit action? Save file.
 #  #
   unless ($ENV{'request.state'} eq 'published') {    unless ($ENV{'request.state'} eq 'published') {
       if ($ENV{'form.savethisfile'}) {        if (($ENV{'form.savethisfile'}) || ($ENV{'form.attemptclean'})) {
   &storefile($file,$ENV{'form.filecont'});    &storefile($file,$ENV{'form.filecont'});
       }        }
   }    }
Line 858  sub handler { Line 920  sub handler {
 ENDNOTFOUND  ENDNOTFOUND
     $filecontents='';      $filecontents='';
   } else {    } else {
         unless ($ENV{'request.state'} eq 'published') {
            if ($ENV{'form.attemptclean'}) {
       $filecontents=&htmlclean($filecontents,1);
            }
         }
     $result = &Apache::lonxml::xmlparse($target,$filecontents,'',%mystyle);      $result = &Apache::lonxml::xmlparse($target,$filecontents,'',%mystyle);
   }    }
   

Removed from v.1.103  
changed lines
  Added in v.1.111


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>