Diff for /loncom/xml/lonxml.pm between versions 1.494.4.5 and 1.509

version 1.494.4.5, 2010/10/01 14:21:55 version 1.509, 2010/06/05 19:37:01
Line 111  use Apache::loncacc(); Line 111  use Apache::loncacc();
 use Apache::lonmaxima();  use Apache::lonmaxima();
 use Apache::lonr();  use Apache::lonr();
 use Apache::lonlocal;  use Apache::lonlocal;
   use Apache::lonhtmlcommon();
   
 #====================================   Main subroutine: xmlparse    #====================================   Main subroutine: xmlparse  
   
Line 221  sub xmlend { Line 222  sub xmlend {
     return $discussion;      return $discussion;
 }  }
   
 sub tokeninputfield {  
     my $defhost=$Apache::lonnet::perlvar{'lonHostID'};  
     $defhost=~tr/a-z/A-Z/;  
     return (<<ENDINPUTFIELD)  
 <script type="text/javascript">  
     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" action="">  
 <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,$tsymb,$tcrsid,$tudom,$tuname)=@_;  
     unless ($token) { return ''; }  
   
     my ($symb,$courseid,$domain,$name) = &Apache::lonnet::whichuser();  
     unless ($tsymb) {  
  $tsymb=$symb;  
     }  
     unless ($tuname) {  
  $tuname=$name;  
         $tudom=$domain;  
         $tcrsid=$courseid;  
     }  
   
     my $plainname=&Apache::loncommon::plainname($tuname,$tudom);  
   
     if ($target eq 'web') {  
         my %idhash=&Apache::lonnet::idrget($tudom,($tuname));  
  return   
  '<img align="right" src="/cgi-bin/barcode.png?encode='.$token.'" />'.  
                &mt('Checked out for').' '.$plainname.  
                '<br />'.&mt('User').': '.$tuname.' at '.$tudom.  
        '<br />'.&mt('ID').': '.$idhash{$tuname}.  
        '<br />'.&mt('CourseID').': '.$tcrsid.  
        '<br />'.&mt('Course').': '.$env{'course.'.$tcrsid.'.description'}.  
                '<br />'.&mt('DocID').': '.$token.  
                '<br />'.&mt('Time').': '.&Apache::lonlocal::locallocaltime().'<hr />';  
     } else {  
         return $token;  
     }  
 }  
   
 sub printalltags {  sub printalltags {
   my $temp;    my $temp;
   foreach $temp (sort keys %Apache::lonxml::alltags) {    foreach $temp (sort keys %Apache::lonxml::alltags) {
Line 570  sub inner_xmlparse { Line 476  sub inner_xmlparse {
   }    }
   if (($ENV{'QUERY_STRING'}) && ($target eq 'web')) {    if (($ENV{'QUERY_STRING'}) && ($target eq 'web')) {
     $finaloutput=&afterburn($finaloutput);      $finaloutput=&afterburn($finaloutput);
     }
     if ($target eq 'modified') {
   # if modfied, handle startpart and endpart
        $finaloutput=~s/\<startpartmarker[^\>]*\>(.*)\<endpartmarker[^\>]*\>/<part>$1<\/part>/gs;
   }        }    
   return $finaloutput;    return $finaloutput;
 }  }
Line 1043  sub get_id { Line 953  sub get_id {
     my ($parstack,$safeeval)=@_;      my ($parstack,$safeeval)=@_;
     my $id= &Apache::lonxml::get_param('id',$parstack,$safeeval);      my $id= &Apache::lonxml::get_param('id',$parstack,$safeeval);
     if ($env{'request.state'} eq 'construct' && $id =~ /([._]|[^\w\d\s[:punct:]])/) {      if ($env{'request.state'} eq 'construct' && $id =~ /([._]|[^\w\d\s[:punct:]])/) {
  &error(&mt("ID [_1] contains invalid characters, IDs are only allowed to contain letters, numbers, spaces and -",'<tt>'.$id.'</tt>'));   &error(&mt('ID [_1] contains invalid characters. IDs are only allowed to contain letters, numbers, spaces and -','"<tt>'.$id.'</tt>"'));
     }      }
     if ($id =~ /^\s*$/) { $id = $Apache::lonxml::curdepth; }      if ($id =~ /^\s*$/) { $id = $Apache::lonxml::curdepth; }
     return $id;      return $id;
Line 1523  SIMPLECONTENT Line 1433  SIMPLECONTENT
   
 sub verify_html {  sub verify_html {
     my ($filecontents)=@_;      my ($filecontents)=@_;
     my ($is_html,$is_xml);      if ($filecontents!~/(?:\<|\&lt\;)(?:html|xml)[^\<]*(?:\>|\&gt\;)/is) {
     if ($filecontents =~/(?:\<|\&lt\;)\?xml[^\<]*\?(?:\>|\&gt\;)/is) {         return &mt('File does not have [_1] or [_2] starting tag','&lt;html&gt;','&lt;xml&gt;');
         $is_xml = 1;      }
     } elsif ($filecontents =~/(?:\<|\&lt\;)html(?:\s+[^\<]+|\s*)(?:\>|\&gt\;)/is) {      if ($filecontents!~/(?:\<|\&lt\;)\/(?:html|xml)(?:\>|\&gt\;)/is) {
         $is_html = 1;         return &mt('File does not have [_1] or [_2] ending tag','&lt;html&gt;','&lt;xml&gt;');
     }      }
     unless ($is_xml || $is_html) {      if ($filecontents!~/(?:\<|\&lt\;)(?:body|frameset)[^\<]*(?:\>|\&gt\;)/is) {
         return &mt('File does not have [_1] or [_2] starting tag','&lt;html&gt;','&lt;?xml ?&gt;');         return &mt('File does not have [_1] or [_2] starting tag','&lt;body&gt;','&lt;frameset&gt;');
     }      }
     if ($is_html) {      if ($filecontents!~/(?:\<|\&lt\;)\/(?:body|frameset)[^\<]*(?:\>|\&gt\;)/is) {
         if ($filecontents!~/(?:\<|\&lt\;)\/html(?:\>|\&gt\;)/is) {         return &mt('File does not have [_1] or [_2] ending tag','&lt;body&gt;','&lt;frameset&gt;');
             return &mt('File does not have [_1] ending tag','&lt;html&gt;');  
         }  
         if ($filecontents!~/(?:\<|\&lt\;)(?:body|frameset)[^\<]*(?:\>|\&gt\;)/is) {  
             return &mt('File does not have [_1] or [_2] starting tag','&lt;body&gt;','&lt;frameset&gt;');  
         }  
         if ($filecontents!~/(?:\<|\&lt\;)\/(?:body|frameset)[^\<]*(?:\>|\&gt\;)/is) {  
             return &mt('File does not have [_1] or [_2] ending tag','&lt;body&gt;','&lt;frameset&gt;');  
         }  
     }      }
     return '';      return '';
 }  }
Line 1624  FULLPAGE Line 1526  FULLPAGE
     }      }
 </script>  </script>
 FULLPAGE  FULLPAGE
           if ($filetype eq 'html') {            if ($filetype eq 'html' || $filetype eq 'tex') {
               $initialize .= "\n".&Apache::lonhtmlcommon::dragmath_js('EditMathPopup');                $initialize .= "\n".&Apache::lonhtmlcommon::dragmath_js('EditMathPopup');
               $dragmath_button = &Apache::lonhtmlcommon::dragmath_button('filecont',1);                $dragmath_button = &Apache::lonhtmlcommon::dragmath_button('filecont',1);
           }            }
Line 1638  FULLPAGE Line 1540  FULLPAGE
       }        }
   
       my $titledisplay=&display_title();        my $titledisplay=&display_title();
         my $wysiwyglink;
       my %lt=&Apache::lonlocal::texthash('st' => 'Save and Edit',        my %lt=&Apache::lonlocal::texthash('st' => 'Save and Edit',
  'vi' => 'Save and View',   'vi' => 'Save and View',
  'dv' => 'Discard Edits and View',   'dv' => 'Discard Edits and View',
Line 1652  FULLPAGE Line 1555  FULLPAGE
           if ($htmlerror) {            if ($htmlerror) {
               $htmlerror='<span class="LC_error">'.$htmlerror.'</span>';                $htmlerror='<span class="LC_error">'.$htmlerror.'</span>';
           }            }
             if (&Apache::lonhtmlcommon::htmlareabrowser()) {
                 if (&Apache::lonhtmlcommon::htmlareablocked()) {
                     $wysiwyglink = &Apache::lonhtmlcommon::enablelink($textarea_id);
                 } else {
                     $wysiwyglink = &Apache::lonhtmlcommon::disablelink($textarea_id);
                 }
             }
       }        }
       my $editfooter=(<<ENDFOOTER);        my $editfooter=(<<ENDFOOTER);
 $initialize  $initialize
Line 1676  $initialize Line 1586  $initialize
   </div>    </div>
   <textarea $textarea_events style="width:100%" cols="80" rows="44" name="filecont" id="filecont">$filecontents</textarea>    <textarea $textarea_events style="width:100%" cols="80" rows="44" name="filecont" id="filecont">$filecontents</textarea>
   <div id="LC_aftertextarea">    <div id="LC_aftertextarea">
       $wysiwyglink
     <br />      <br />
     $titledisplay      $titledisplay
   </div>    </div>
Line 1724  sub handler { Line 1635  sub handler {
  $request->set_last_modified(&Apache::lonnet::metadata($request->uri,   $request->set_last_modified(&Apache::lonnet::metadata($request->uri,
       'lastrevisiondate'));        'lastrevisiondate'));
     }      }
     # Embedded Flash movies (e.g., from Camtasia) served from https will not display in IE      # Embedded Flash movies from Camtasia served from https will not display in IE
     #   if XML config file has expired from cache.      #   if XML config file has expired from cache.    
     if ($ENV{'SERVER_PORT'} == 443) {      if ($ENV{'SERVER_PORT'} == 443) {
         if ($request->uri =~ /\.xml$/) {          if ($request->uri =~ /\.xml$/) {
             my ($httpbrowser,$clientbrowser) =              my ($httpbrowser,$clientbrowser) =
Line 1745  sub handler { Line 1656  sub handler {
   
   
     my $file=&Apache::lonnet::filelocation("",$request->uri);      my $file=&Apache::lonnet::filelocation("",$request->uri);
     my $filetype;      my ($filetype,$breadcrumbtext);
     if ($file =~ /\.(sty|css|js|txt)$/) {      if ($file =~ /\.(sty|css|js|txt|tex)$/) {
  $filetype=$1;   $filetype=$1;
     } else {      } else {
  $filetype='html';   $filetype='html';
     }      }
       if ($filetype eq 'sty') {
           $breadcrumbtext = 'Style File Editor';
       } elsif ($filetype eq 'js') {
           $breadcrumbtext = 'Javascript Editor';
       } elsif ($filetype eq 'css') {
           $breadcrumbtext = 'CSS Editor';
       } elsif ($filetype eq 'txt') {
           $breadcrumbtext = 'Text Editor';
       } elsif ($filetype eq 'tex') {
           $breadcrumbtext = 'TeX Editor';
       } else {
           $breadcrumbtext = 'HTML Editor';
       }
   
 #  #
 # Edit action? Save file.  # Edit action? Save file.
Line 1770  sub handler { Line 1694  sub handler {
     if ($filecontents eq -1) {      if ($filecontents eq -1) {
  my $start_page=&Apache::loncommon::start_page('File Error');   my $start_page=&Apache::loncommon::start_page('File Error');
  my $end_page=&Apache::loncommon::end_page();   my $end_page=&Apache::loncommon::end_page();
  my $fnf=&mt('File not found');          my $errormsg='<p class="LC_error">'
                       .&mt('File not found: [_1]'
                           ,'<span class="LC_filename">'.$file.'</span>')
                       .'</p>';
  $result=(<<ENDNOTFOUND);   $result=(<<ENDNOTFOUND);
 $start_page  $start_page
 <b>$fnf: $file</b>  $errormsg
 $end_page  $end_page
 ENDNOTFOUND  ENDNOTFOUND
         $filecontents='';          $filecontents='';
Line 1782  ENDNOTFOUND Line 1709  ENDNOTFOUND
  $filecontents=&createnewsty();   $filecontents=&createnewsty();
             } elsif ($filetype eq 'js') {              } elsif ($filetype eq 'js') {
                 $filecontents=&createnewjs();                  $filecontents=&createnewjs();
             } elsif (($filetype ne 'css') && ($filetype ne 'txt')) {              } elsif ($filetype ne 'css' && $filetype ne 'txt' && $filetype ne 'tex') {
  $filecontents=&createnewhtml();   $filecontents=&createnewhtml();
     }      }
     $env{'form.editmode'}='Edit'; #force edit mode      $env{'form.editmode'}='Edit'; #force edit mode
Line 1806  ENDNOTFOUND Line 1733  ENDNOTFOUND
     # up if it did      # up if it did
         &Apache::structuretags::reset_problem_globals();          &Apache::structuretags::reset_problem_globals();
         &Apache::lonhomework::finished_parsing();          &Apache::lonhomework::finished_parsing();
               } elsif ($filetype eq 'tex') {
                   $result = &Apache::lontexconvert::converted(\$filecontents,
                                 $env{'form.texengine'});
                   if ($env{'form.return_only_error_and_warning_counts'}) {
                       if (&verify_html('<html><body>'.$result.'</body></html>')) {
                           $errorcount++;
                       }
                       $result = "$errorcount:$warningcount";
                   }
             } else {              } else {
                 $result = $filecontents;                  $result = $filecontents;
             }              }
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
     ['rawmode']);      ['rawmode']);
     if ($env{'form.rawmode'}) { $result = $filecontents; }      if ($env{'form.rawmode'}) { $result = $filecontents; }
     if ($filetype ne 'html') {              if (($filetype ne 'html') && 
                 my $nochgview = 1;                   (!$env{'form.return_only_error_and_warning_counts'})) {
  my $controls =                  my $nochgview = 1;
     ($env{'request.state'} eq 'construct') ? &Apache::londefdef::edit_controls($nochgview)                  my $controls = '';
                                            : '';                      if ($env{'request.state'} eq 'construct') {
                 if ($filetype ne 'sty') {                          $controls = &Apache::loncommon::head_subbox(
                                           &Apache::loncommon::CSTR_pageheader()
                                          .&Apache::londefdef::edit_controls($nochgview));
                       }
                   if ($filetype ne 'sty' && $filetype ne 'tex') {
                     $result =~ s/</&lt;/g;                      $result =~ s/</&lt;/g;
                     $result =~ s/>/&gt;/g;                      $result =~ s/>/&gt;/g;
                     $result = '<table class="LC_sty_begin">'.                      $result = '<table class="LC_sty_begin">'.
                               '<tr><td><b><pre>'.$result.                                '<tr><td><b><pre>'.$result.
                               '</pre></b></td></tr></table>';                                '</pre></b></td></tr></table>';
                 }                  }
                 if ($env{'environment.remote'} eq 'off') {                  my $brcrum;
                     my %options = ('bgcolor' => '#FFFFFF');                  if ($env{'request.state'} eq 'construct') {
     $result =                       $brcrum = [{'href' => &Apache::loncommon::authorspace(),
         &Apache::loncommon::start_page(undef,undef,\%options).                                  'text' => 'Construction Space'},
         $controls.                                 {'href' => '',
         $result.                                  'text' => $breadcrumbtext}];
         &Apache::loncommon::end_page();  
                 } else {                  } else {
                     $result = $controls.$result;                      $brcrum = ''; # FIXME: Where are we?
                 }                  }
                   my %options = ('bread_crumbs' => $brcrum,
                                  'bgcolor'      => '#FFFFFF');
                   $result =
                       &Apache::loncommon::start_page(undef,undef,\%options)
                      .$controls
                      .$result
                      .&Apache::loncommon::end_page();
             }              }
  }          }
     }      }
   
 #  #
Line 1852  ENDNOTFOUND Line 1798  ENDNOTFOUND
   
     my %options =       my %options = 
  ('add_entries' =>   ('add_entries' =>
                    {'onresize' => $add_to_onresize,                     {'onresize'     => $add_to_onresize,
     'onload'   => $add_to_onload,   });                      'onload'       => $add_to_onload,   });
               my $header;
     if ($env{'environment.remote'} ne 'off') {              if ($env{'request.state'} eq 'construct') {
  $options{'bgcolor'}   = '#FFFFFF';                  $options{'bread_crumbs'} = [{
  $options{'only_body'} = 1;                              'href' => &Apache::loncommon::authorspace(),
     }                              'text' => 'Construction Space'},
                              {'href' => '',
                               'text' => $breadcrumbtext}];
                   $header = &Apache::loncommon::head_subbox(
                                 &Apache::loncommon::CSTR_pageheader());
               }
     my $js =      my $js =
  &Apache::edit::js_change_detection().   &Apache::edit::js_change_detection().
  &Apache::loncommon::resize_textarea_js();   &Apache::loncommon::resize_textarea_js();
     my $start_page = &Apache::loncommon::start_page(undef,$js,      my $start_page = &Apache::loncommon::start_page(undef,$js,
     \%options);      \%options);
     $result=$start_page.              $result = $start_page
  &Apache::lonxml::message_location().                       .$header
  $edit_info.                       .&Apache::lonxml::message_location()
  &Apache::loncommon::end_page();                       .$edit_info
                        .&Apache::loncommon::end_page();
         }          }
     }      }
     if ($filetype eq 'html') { &writeallows($request->uri); }      if ($filetype eq 'html') { &writeallows($request->uri); }
       
     &Apache::lonxml::add_messages(\$result);      &Apache::lonxml::add_messages(\$result);
     $request->print($result);      $request->print($result);
           
Line 2240  sub get_tag { Line 2192  sub get_tag {
   
 =pod  =pod
   
 =item &print_pdf_radiobutton(fieldname, value,  text)  =item &print_pdf_radiobutton(fieldname, value)
   
 Returns a latexline to generate a PDF-Form-Radiobutton with Text.  Returns a latexline to generate a PDF-Form-Radiobutton.
   Note: Radiobuttons with equal names are automaticly grouped 
         in a selection-group.
   
 $fieldname: PDF internalname of the radiobutton  $fieldname: PDF internalname of the radiobutton(group)
 $value:     Value of radiobutton (read when dumping the PDF data)  $value:     Value of radiobutton
 $text:      Text on the rightside of the radiobutton  
   
 =cut  =cut
 sub print_pdf_radiobutton {  sub print_pdf_radiobutton {
     my $result = '';      my ($fieldname, $value) = @_;
     my ($fieldName, $value, $text) = @_;      return '\radioButton[\symbolchoice{circle}]{'
     $result .= '\begin{tabularx}{\textwidth}{p{0cm}X}'."\n";             .$fieldname.'}{10bp}{10bp}{'.$value.'}';
     $result .= '\radioButton[\symbolchoice{circle}]{'.   
                $fieldName.'}{10bp}{10bp}{'.$value.'}&'.$text."\n";  
     $result .= '\end{tabularx}' . "\n";  
     $result .= '\hspace{2mm}' . "\n";  
     return $result;  
 }  }
   
   

Removed from v.1.494.4.5  
changed lines
  Added in v.1.509


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