Diff for /loncom/xml/lonxml.pm between versions 1.109 and 1.129

version 1.109, 2001/08/10 15:49:46 version 1.129, 2001/09/14 20:18:13
Line 13 Line 13
 # 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  # 7/27 H. K. Ng
 # 8/7,8/9,8/10 Gerd Kortemeyer  # 8/7,8/9,8/10,8/11,8/15,8/16,8/17,8/18,8/20,8/23,8/24 Gerd Kortemeyer
   
 package Apache::lonxml;   package Apache::lonxml; 
 use vars   use vars 
Line 113  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)) {
                    my $message=$contrib{$idx.':message'};
                    $message=~s/\n/\<br \/\>/g;
                    if ($message) {
                     if ($hidden) {
         $message='<font color="#888888">'.$message.'</font>';
                     }
                   my $sender='Anonymous';                    my $sender='Anonymous';
                   if ((!$contrib{$idx.':anonymous'}) || ($seeid)) {                    if ((!$contrib{$idx.':anonymous'}) || ($seeid)) {
                       $sender=$contrib{$idx.':sendername'}.' at '.                        $sender=$contrib{$idx.':sendername'}.' at '.
       $contrib{$idx.':senderdomain'};        $contrib{$idx.':senderdomain'};
                       if ($contrib{$idx.':anonymous'}) {                        if ($contrib{$idx.':anonymous'}) {
   $sender.=' (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> ('.    $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 135  sub xmlend { Line 152  sub xmlend {
     return $discussion.'</html>';      return $discussion.'</html>';
 }  }
   
   sub tokeninputfield {
       my $defhost=$Apache::lonnet::perlvar{'lonHostID'};
       $defhost=~tr/a-z/A-Z/;
       return (<<ENDINPUTFIELD)
   <script>
       function updatetoken() {
    var comp=new Array;
           var barcode=unescape(document.tokeninput.barcode.value);
           comp=barcode.split('*');
           if (typeof(comp[0])!="undefined") {
       document.tokeninput.codeone.value=comp[0];
    }
           if (typeof(comp[1])!="undefined") {
       document.tokeninput.codetwo.value=comp[1];
    }
           if (typeof(comp[2])!="undefined") {
               comp[2]=comp[2].toUpperCase();
       document.tokeninput.codethree.value=comp[2];
    }
           document.tokeninput.barcode.value='';
       }  
   </script>
   <form method="post" name="tokeninput">
   <table border="2" bgcolor="#FFFFBB">
   <tr><th>DocID Checkin</th></tr>
   <tr><td>
   <table>
   <tr>
   <td>Scan in Barcode</td>
   <td><input type="text" size="22" name="barcode" 
   onChange="updatetoken()"/></td>
   </tr>
   <tr><td><i>or</i> Type in DocID</td>
   <td>
   <input type="text" size="5" name="codeone" />
   <b><font size="+2">*</font></b>
   <input type="text" size="5" name="codetwo" />
   <b><font size="+2">*</font></b>
   <input type="text" size="10" name="codethree" value="$defhost" 
   onChange="this.value=this.value.toUpperCase()" />
   </td></tr>
   </table>
   </td></tr>
   <tr><td><input type="submit" value="Check in DocID" /></td></tr>
   </table>
   </form>
   ENDINPUTFIELD
   }
   
   sub maketoken {
       my ($symb,$tuname,$tudom,$tcrsid)=@_;
       unless ($symb) {
    $symb=&Apache::lonnet::symbread();
       }
       unless ($tuname) {
    $tuname=$ENV{'user.name'};
           $tudom=$ENV{'user.domain'};
           $tcrsid=$ENV{'request.course.id'};
       }
   
       return &Apache::lonnet::checkout($symb,$tuname,$tudom,$tcrsid);
   }
   
   sub printtokenheader {
       my ($target,$token,$symb,$tuname,$tudom,$tcrsid)=@_;
       unless ($token) { return ''; }
   
       unless ($symb) {
    $symb=&Apache::lonnet::symbread();
       }
       unless ($tuname) {
    $tuname=$ENV{'user.name'};
           $tudom=$ENV{'user.domain'};
           $tcrsid=$ENV{'request.course.id'};
       }
   
       my %reply=&Apache::lonnet::get('environment',
                 ['firstname','middlename','lastname','generation'],
                 $tudom,$tuname);
       my $plainname=$reply{'firstname'}.' '. 
                     $reply{'middlename'}.' '.
                     $reply{'lastname'}.' '.
     $reply{'generation'};
   
       if ($target eq 'web') {
    return 
    '<img align="right" src="/cgi-bin/barcode.gif?encode='.$token.'" />'.
                  'Checked out for '.$plainname.
                  '<br />User: '.$tuname.' at '.$tudom.
          '<br />CourseID: '.$tcrsid.
                  '<br />DocID: '.$token.
                  '<br />Time: '.localtime().'<hr />';
       } else {
           return $token;
       }
   }
   
 sub fontsettings() {  sub fontsettings() {
     my $headerstring='';      my $headerstring='';
     if (($ENV{'browser.os'} eq 'mac') && (!$ENV{'browser.mathml'})) {       if (($ENV{'browser.os'} eq 'mac') && (!$ENV{'browser.mathml'})) { 
Line 146  sub fontsettings() { Line 260  sub fontsettings() {
   
 sub registerurl {  sub registerurl {
     my $forcereg=shift;      my $forcereg=shift;
     if ($Apache::lonxml::registered) { return ''; }      if ($Apache::lonxml::registered && !$forcereg) { return ''; }
     $Apache::lonxml::registered=1;      $Apache::lonxml::registered=1;
     if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) {      if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) {
         my $hwkadd='';          my $hwkadd='';
Line 209  ENDPARM Line 323  ENDPARM
   menu=window.open("","LONCAPAmenu");    menu=window.open("","LONCAPAmenu");
           menu.currentStale=1;            menu.currentStale=1;
           menu.switchbutton            menu.switchbutton
             (3,1,'reload.gif','return','location','go(currentURL)');               (3,1,'reload.gif','return','location','go(currentURL)');
           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 294  sub xmlparse { Line 408  sub xmlparse {
   
  my $finaloutput = &inner_xmlparse($target,\@stack,\@parstack,\@pars,   my $finaloutput = &inner_xmlparse($target,\@stack,\@parstack,\@pars,
    $safeeval,\%style_for_target);     $safeeval,\%style_for_target);
    if ($ENV{'request.uri'}) {
       &writeallows($ENV{'request.uri'});
    }
  return $finaloutput;   return $finaloutput;
 }  }
   
Line 308  sub htmlclean { Line 424  sub htmlclean {
   
     my $output= $tree->as_HTML(undef,' ');      my $output= $tree->as_HTML(undef,' ');
             
     $output=~s/\<(br|hr|img)([^\>\/]*)\>/\<$1$2 \/\>/gis;      $output=~s/\<(br|hr|img|meta|allow)([^\>\/]*)\>/\<$1$2 \/\>/gis;
     $output=~s/\<\/(br|hr|img)\>//gis;      $output=~s/\<\/(br|hr|img|meta|allow)\>//gis;
     unless ($full) {      unless ($full) {
        $output=~s/\<[\/]*(body|head|html)\>//gis;         $output=~s/\<[\/]*(body|head|html)\>//gis;
     }      }
Line 321  sub htmlclean { Line 437  sub htmlclean {
   
 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?');  
   my $finaloutput = '';    my $finaloutput = '';
   my $result;    my $result;
   my $token;    my $token;
Line 543  sub setup_globals { Line 658  sub setup_globals {
   my ($target)=@_;    my ($target)=@_;
   $Apache::lonxml::registered = 0;    $Apache::lonxml::registered = 0;
   @Apache::lonxml::pwd=();    @Apache::lonxml::pwd=();
     @Apache::lonxml::extlinks=();
   if ($target eq 'meta') {    if ($target eq 'meta') {
     $Apache::lonxml::redirection = 0;      $Apache::lonxml::redirection = 0;
     $Apache::lonxml::metamode = 1;      $Apache::lonxml::metamode = 1;
     $Apache::lonxml::evaluate = 1;      $Apache::lonxml::evaluate = 1;
     $Apache::lonxml::import = 0;      $Apache::lonxml::import = 0;
     } elsif ($target eq 'answer') {
       $Apache::lonxml::redirection = 0;
       $Apache::lonxml::metamode = 1;
       $Apache::lonxml::evaluate = 1;
       $Apache::lonxml::import = 1;
   } elsif ($target eq 'grade') {    } elsif ($target eq 'grade') {
     &startredirection;      &startredirection;
     $Apache::lonxml::metamode = 0;      $Apache::lonxml::metamode = 0;
Line 624  sub init_safespace { Line 745  sub init_safespace {
 #need to inspect this class of ops  #need to inspect this class of ops
 # $safeeval->deny(":base_orig");  # $safeeval->deny(":base_orig");
   $safeinit .= ';$external::target="'.$target.'";';    $safeinit .= ';$external::target="'.$target.'";';
   $safeinit .= ';$external::randomseed='.&Apache::lonnet::rndseed().';';    my $rndseed;
     my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser();
     $rndseed=&Apache::lonnet::rndseed($symb,$courseid,$domain,$name);
     $safeinit .= ';$external::randomseed='.$rndseed.';';
   &Apache::run::run($safeinit,$safeeval);    &Apache::run::run($safeinit,$safeeval);
 }  }
   
Line 759  sub parstring { Line 883  sub parstring {
 }  }
   
 sub writeallows {  sub writeallows {
       unless ($#extlinks>=0) { return; }
     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=();
     map {      map {
        $httpref{'httpref.'.         $httpref{'httpref.'.
          &Apache::lonnet::hreflocation($thisdir,$_)}=$thisurl;              } @extlinks;           &Apache::lonnet::hreflocation($thisdir,$_)}=$thisurl;
       } @extlinks;
       @extlinks=();
     &Apache::lonnet::appenv(%httpref);      &Apache::lonnet::appenv(%httpref);
 }  }
   
Line 914  ENDNOTFOUND Line 1044  ENDNOTFOUND
   unless ($ENV{'request.state'} eq 'published') {    unless ($ENV{'request.state'} eq 'published') {
       $result=&inserteditinfo($result,$filecontents);        $result=&inserteditinfo($result,$filecontents);
   }    }
     
     writeallows($request->uri);
   
   $request->print($result);    $request->print($result);
   
   writeallows($request->uri);  
   return OK;    return OK;
 }  }
     
Line 1002  sub description { Line 1133  sub description {
   my ($token)=@_;    my ($token)=@_;
   return $insertlist{$insertlist{"$token->[1].num"}.'.description'};    return $insertlist{$insertlist{"$token->[1].num"}.'.description'};
 }  }
   
   # ----------------------------------------------------------------- whichuser
   # returns a list of $symb, $courseid, $domain, $name that is correct for
   # calls to lonnet functions for this setup.
   # - looks for form.grade_ parameters
   sub whichuser {
     my $symb=&Apache::lonnet::symbread();
     my $courseid=$ENV{'request.course.id'};
     my $domain=$ENV{'user.domain'};
     my $name=$ENV{'user.name'};
     if (defined($ENV{'form.grade_symb'})) {
       my $tmp_courseid=$ENV{'form.grade_courseid'};
       my $allowed=&Apache::lonnet::allowed('mgr',$tmp_courseid);
       if ($allowed) {
         $symb=$ENV{'form.grade_symb'};
         $courseid=$ENV{'form.grade_courseid'};
         $domain=$ENV{'form.grade_domain'};
         $name=$ENV{'form.grade_username'};
       }
     }
     return ($symb,$courseid,$domain,$name);
   }
   
 1;  1;
 __END__  __END__
   

Removed from v.1.109  
changed lines
  Added in v.1.129


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