Diff for /loncom/xml/lonxml.pm between versions 1.505.2.6 and 1.531.2.1

version 1.505.2.6, 2011/11/15 17:43:20 version 1.531.2.1, 2012/05/10 19:08:33
Line 113  use Apache::lonr(); Line 113  use Apache::lonr();
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonhtmlcommon();  use Apache::lonhtmlcommon();
 use Apache::functionplotresponse();  use Apache::functionplotresponse();
   use Apache::lonnavmaps();
   
 #====================================   Main subroutine: xmlparse    #====================================   Main subroutine: xmlparse  
   
Line 210  sub xmlend { Line 211  sub xmlend {
     my $discussion;      my $discussion;
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
    ['LONCAPA_INTERNAL_no_discussion']);     ['LONCAPA_INTERNAL_no_discussion']);
     if (! exists($env{'form.LONCAPA_INTERNAL_no_discussion'}) ||      if (
         $env{'form.LONCAPA_INTERNAL_no_discussion'} ne 'true') {             (   (!exists($env{'form.LONCAPA_INTERNAL_no_discussion'})) 
               || ($env{'form.LONCAPA_INTERNAL_no_discussion'} ne 'true')
              ) 
           && ($env{'form.inhibitmenu'} ne 'yes')
          ) {
         $discussion=&Apache::lonfeedback::list_discussion($mode,$status);          $discussion=&Apache::lonfeedback::list_discussion($mode,$status);
     }      }
     if ($target eq 'tex') {      if ($target eq 'tex') {
Line 223  sub xmlend { Line 228  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 396  sub xmlparse { Line 306  sub xmlparse {
  &clean_safespace($safeeval);   &clean_safespace($safeeval);
   
  if (@script_var_displays) {   if (@script_var_displays) {
      $finaloutput .= join('',@script_var_displays);       my $scriptoutput = join('',@script_var_displays);
        $finaloutput=~s{(</body>\s*</html>)\s*$}{$scriptoutput$1}s;
      undef(@script_var_displays);       undef(@script_var_displays);
  }   }
  &init_state();   &init_state();
Line 572  sub inner_xmlparse { Line 483  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 ($target eq 'modified') {
 # if modfied, handle startpart and endpart  # if modfied, handle startpart and endpart
      $finaloutput=~s/\<startpartmarker[^\>]*\>(.*)\<endpartmarker[^\>]*\>/<part>$1<\/part>/gs;       $finaloutput=~s/\<startpartmarker[^\>]*\>(.*)\<endpartmarker[^\>]*\>/<part>$1<\/part>/gs;
   }    }    
   return $finaloutput;    return $finaloutput;
 }  }
   
Line 738  sub setup_globals { Line 649  sub setup_globals {
   
 sub init_safespace {  sub init_safespace {
   my ($target,$safeeval,$safehole,$safeinit) = @_;    my ($target,$safeeval,$safehole,$safeinit) = @_;
   $safeeval->deny_only(':dangerous');  
   $safeeval->reval('use Math::Complex;');    $safeeval->reval('use Math::Complex;');
     $safeeval->reval('use LaTeX::Table;');
     $safeeval->deny_only(':dangerous');
   $safeeval->permit_only(":default");    $safeeval->permit_only(":default");
   $safeeval->permit("entereval");    $safeeval->permit("entereval");
   $safeeval->permit(":base_math");    $safeeval->permit(":base_math");
Line 886  sub init_safespace { Line 798  sub init_safespace {
   $safehole->wrap(\&Apache::functionplotresponse::fpr_f,$safeeval,'&fpr_f');    $safehole->wrap(\&Apache::functionplotresponse::fpr_f,$safeeval,'&fpr_f');
   $safehole->wrap(\&Apache::functionplotresponse::fpr_dfdx,$safeeval,'&fpr_dfdx');    $safehole->wrap(\&Apache::functionplotresponse::fpr_dfdx,$safeeval,'&fpr_dfdx');
   $safehole->wrap(\&Apache::functionplotresponse::fpr_d2fdx2,$safeeval,'&fpr_d2fdx2');    $safehole->wrap(\&Apache::functionplotresponse::fpr_d2fdx2,$safeeval,'&fpr_d2fdx2');
     $safehole->wrap(\&Apache::functionplotresponse::fpr_vectorcoords,$safeeval,'&fpr_vectorcoords');
     $safehole->wrap(\&Apache::functionplotresponse::fpr_objectcoords,$safeeval,'&fpr_objectcoords');
     $safehole->wrap(\&Apache::functionplotresponse::fpr_vectorlength,$safeeval,'&fpr_vectorlength');
     $safehole->wrap(\&Apache::functionplotresponse::fpr_vectorangle,$safeeval,'&fpr_vectorangle');
   
 #  use Data::Dumper;  #  use Data::Dumper;
 #  $safehole->wrap(\&Data::Dumper::Dumper,$safeeval,'&LONCAPA_INTERNAL_Dumper');  #  $safehole->wrap(\&Data::Dumper::Dumper,$safeeval,'&LONCAPA_INTERNAL_Dumper');
Line 938  sub initialize_rndseed { Line 854  sub initialize_rndseed {
 sub default_homework_load {  sub default_homework_load {
     my ($safeeval)=@_;      my ($safeeval)=@_;
     &Apache::lonxml::debug('Loading default_homework');      &Apache::lonxml::debug('Loading default_homework');
     my $default=&Apache::lonnet::getfile('/home/httpd/html/res/adm/includes/default_homework.lcpm');      my $default=&Apache::lonnet::getfile($Apache::lonnet::perlvar{'lonIncludes'}.
                                            '/default_homework.lcpm');
     if ($default eq -1) {      if ($default eq -1) {
  &Apache::lonxml::error("<b>Unable to find <i>default_homework.lcpm</i></b>");   &Apache::lonxml::error("<b>Unable to find <i>default_homework.lcpm</i></b>");
     } else {      } else {
Line 1108  the current 'bubble line number' is stor Line 1025  the current 'bubble line number' is stor
 The value of it is stored in $Apache:lonxml::counter when live and  The value of it is stored in $Apache:lonxml::counter when live and
 stored back to env after done.  stored back to env after done.
   
 =item &increment_counter($increment);  =item &increment_counter($increment, $part_response);
   
 Increments the internal counter environment variable a specified amount  Increments the internal counter environment variable a specified amount
   
Line 1585  sub renderingoptions { Line 1502  sub renderingoptions {
            {&Apache::lonlocal::texthash             {&Apache::lonlocal::texthash
                (''        => '',                 (''        => '',
                 'tth'     => 'tth (TeX to HTML)',                  'tth'     => 'tth (TeX to HTML)',
                 'jsMath'  => 'jsMath',    'jsMath'  => 'jsMath',
                 'mimetex' => 'mimetex (Convert to Images)')}).                  'mimetex' => 'mimetex (Convert to Images)')}).
      '</span>';       '</span>';
     return $output;      return $output;
 }  }
   
 sub inserteditinfo {  sub inserteditinfo {
       my ($filecontents, $filetype, $filename)=@_;        my ($filecontents,$filetype,$filename,$symb,$itemtitle) = @_;
       $filecontents = &HTML::Entities::encode($filecontents,'<>&"');        $filecontents = &HTML::Entities::encode($filecontents,'<>&"');
       my $xml_help = '';        my $xml_help = '';
       my $initialize='';        my $initialize='';
       my $textarea_id = 'filecont';        my $textarea_id = 'filecont';
       my $dragmath_button;        my ($dragmath_button,$deps_button);
       my ($add_to_onload, $add_to_onresize);        my ($add_to_onload, $add_to_onresize);
       $initialize=&Apache::lonhtmlcommon::spellheader();        $initialize=&Apache::lonhtmlcommon::spellheader();
       if (($filetype eq 'html') && (&Apache::lonhtmlcommon::htmlareabrowser())) {        if (($filetype eq 'html') && (&Apache::lonhtmlcommon::htmlareabrowser())) {
           my $lang = &Apache::lonhtmlcommon::htmlarea_lang();    my $lang = &Apache::lonhtmlcommon::htmlarea_lang();
           my %textarea_args = (            my %textarea_args = (
                                 fullpage => 'true',                                  fullpage => 'true',
                                 dragmath => 'math',                                  dragmath => 'math',
                               );                                );
           $initialize .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args);            $initialize .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args); 
       }        }
       $initialize .= (<<FULLPAGE);        $initialize .= (<<FULLPAGE);
 <script type="text/javascript">  <script type="text/javascript">
Line 1618  sub inserteditinfo { Line 1535  sub inserteditinfo {
 </script>  </script>
 FULLPAGE  FULLPAGE
       if ($filetype eq 'html') {        if ($filetype eq 'html') {
             if ($symb) {
                 $deps_button = &Apache::lonhtmlcommon::dependencies_button()."\n";
                 $initialize .= 
                     &Apache::lonhtmlcommon::dependencycheck_js($symb,$itemtitle)."\n";
             }
           $dragmath_button = '<span id="math_filecont">'.&Apache::lonhtmlcommon::dragmath_button('filecont',1).'</span>';            $dragmath_button = '<span id="math_filecont">'.&Apache::lonhtmlcommon::dragmath_button('filecont',1).'</span>';
           $initialize .= "\n".&Apache::lonhtmlcommon::dragmath_js('EditMathPopup');            $initialize .= "\n".&Apache::lonhtmlcommon::dragmath_js('EditMathPopup');
       }        }
Line 1662  $initialize Line 1584  $initialize
     <div class="LC_edit_problem_discards">      <div class="LC_edit_problem_discards">
       <input type="submit" name="discardview" accesskey="d" value="$lt{'dv'}" />        <input type="submit" name="discardview" accesskey="d" value="$lt{'dv'}" />
       <input type="submit" name="Undo" accesskey="u" value="$lt{'un'}" />        <input type="submit" name="Undo" accesskey="u" value="$lt{'un'}" />
       $htmlerror $dragmath_button        $htmlerror $deps_button $dragmath_button
     </div>      </div>
     <div class="LC_edit_problem_saves">      <div class="LC_edit_problem_saves">
       <input type="submit" name="savethisfile" accesskey="s" value="$lt{'st'}" />        <input type="submit" name="savethisfile" accesskey="s" value="$lt{'st'}" />
Line 1845  ENDNOTFOUND Line 1767  ENDNOTFOUND
                               '<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 $brcrum;                  if ($env{'request.state'} eq 'construct') {
                     if ($env{'request.state'} eq 'construct') {                      $brcrum = [{'href' => &Apache::loncommon::authorspace($request->uri),
                         $brcrum = [{'href' => &Apache::loncommon::authorspace(),                                  'text' => 'Construction Space'},
                                     'text' => 'Construction Space'},                                 {'href' => '',
                                    {'href' => '',                                  'text' => $breadcrumbtext}];
                                     'text' => $breadcrumbtext}];  
                     } else {  
                         $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();  
                 } 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 1875  ENDNOTFOUND Line 1793  ENDNOTFOUND
     unless ($env{'request.state'} eq 'published') {      unless ($env{'request.state'} eq 'published') {
  if ($env{'form.editmode'} && (!($env{'form.viewmode'})) && (!($env{'form.discardview'})))   if ($env{'form.editmode'} && (!($env{'form.viewmode'})) && (!($env{'form.discardview'})))
  {   {
     my $displayfile=$request->uri;              my ($displayfile,$url,$symb,$itemtitle);
     $displayfile=~s/^\/[^\/]*//;      $displayfile=$request->uri;
               if ($request->uri =~ m{^/uploaded/}) {
                   ($symb,$itemtitle,$displayfile) = 
                       &get_courseupload_hierarchy($request->uri);
               } else {
           $displayfile=~s/^\/[^\/]*//;
               }
   
     my ($edit_info, $add_to_onload, $add_to_onresize)=      my ($edit_info, $add_to_onload, $add_to_onresize)=
  &inserteditinfo($filecontents,$filetype,$displayfile);   &inserteditinfo($filecontents,$filetype,$displayfile,$symb,$itemtitle);
   
     my %options =       my %options = 
  ('add_entries' =>   ('add_entries' =>
Line 1888  ENDNOTFOUND Line 1812  ENDNOTFOUND
             my $header;              my $header;
             if ($env{'request.state'} eq 'construct') {              if ($env{'request.state'} eq 'construct') {
                 $options{'bread_crumbs'} = [{                  $options{'bread_crumbs'} = [{
                             'href' => &Apache::loncommon::authorspace(),                              'href' => &Apache::loncommon::authorspace($request->uri),
                             'text' => 'Construction Space'},                              'text' => 'Construction Space'},
                            {'href' => '',                             {'href' => '',
                             'text' => $breadcrumbtext}];                              'text' => $breadcrumbtext}];
                 $header = &Apache::loncommon::head_subbox(                  $header = &Apache::loncommon::head_subbox(
                               &Apache::loncommon::CSTR_pageheader());                                &Apache::loncommon::CSTR_pageheader());
             }              }
     if ($env{'environment.remote'} ne 'off') {  
  $options{'bgcolor'}   = '#FFFFFF';  
  $options{'only_body'} = 1;  
     }  
     my $js =      my $js =
  &Apache::edit::js_change_detection().   &Apache::edit::js_change_detection().
  &Apache::loncommon::resize_textarea_js();   &Apache::loncommon::resize_textarea_js();
Line 1933  sub display_title { Line 1853  sub display_title {
     return $result;      return $result;
 }  }
   
   sub get_courseupload_hierarchy {
       my ($url) = @_;
       my ($symb,$itemtitle,$displaypath);
       if ($env{'request.course.id'}) {
           $symb = &Apache::lonnet::symbread();
           my ($map,$id,$res)=&Apache::lonnet::decode_symb($symb);
           my $navmap=Apache::lonnavmaps::navmap->new;
           if (ref($navmap)) {
               my $res = $navmap->getBySymb($symb);
               if (ref($res)) {
                   my @pathitems =
                       &Apache::loncommon::get_folder_hierarchy($navmap,$map,1);
                   $itemtitle = $res->compTitle();
                   push(@pathitems,$itemtitle);
                   $displaypath = join(' &raquo; ',@pathitems);
               }
           }
       }
       return ($symb,$itemtitle,$displaypath);
   }
   
 sub debug {  sub debug {
     if ($Apache::lonxml::debug eq "1") {      if ($Apache::lonxml::debug eq "1") {
  $|=1;   $|=1;
Line 1949  sub debug { Line 1890  sub debug {
 }  }
   
 sub show_error_warn_msg {  sub show_error_warn_msg {
     if ($env{'request.filename'} eq '/home/httpd/html/res/lib/templates/simpleproblem.problem' &&      if (($env{'request.filename'} eq 
  &Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {           $Apache::lonnet::perlvar{'lonDocRoot'}.'/res/lib/templates/simpleproblem.problem') &&
           (&Apache::lonnet::allowed('mdc',$env{'request.course.id'}))) {
  return 1;   return 1;
     }      }
     return (($Apache::lonxml::debug eq 1) ||      return (($Apache::lonxml::debug eq 1) ||
Line 2014  sub error { Line 1956  sub error {
     my @userlist;      my @userlist;
     foreach (keys %users) {      foreach (keys %users) {
  my ($user,$domain) = split(/:/, $_);   my ($user,$domain) = split(/:/, $_);
  push(@userlist,"$user\@$domain");   push(@userlist,"$user:$domain");
  my $key=$declutter.'_'.$user.'_'.$domain;   my $key=$declutter.'_'.$user.'_'.$domain;
  my %lastnotified=&Apache::lonnet::get('nohist_xmlerrornotifications',   my %lastnotified=&Apache::lonnet::get('nohist_xmlerrornotifications',
       [$key],        [$key],
Line 2037  sub error { Line 1979  sub error {
  $errormsg=&mt("An error occurred while processing this resource. The instructor has been notified.");   $errormsg=&mt("An error occurred while processing this resource. The instructor has been notified.");
     }      }
  }   }
  push(@Apache::lonxml::error_messages,"<b>$errormsg</b> <br />");   push(@Apache::lonxml::error_messages,"<span class=\"LC_warning\">$errormsg</span><br />");
     }      }
 }  }
   
Line 2145  sub register_insert_xml { Line 2087  sub register_insert_xml {
     while (my $token = $parser->get_token()) {      while (my $token = $parser->get_token()) {
  if ($token->[0] eq 'S') {   if ($token->[0] eq 'S') {
     my $key;      my $key;
     if      ($token->[1] eq 'tag') {      if ($token->[1] eq 'tag') {
  $tag = $token->[2]{'name'};   $tag = $token->[2]{'name'};
  $insertlist{$tagnum.'.tag'} = $tag;                  if (defined($tag)) {
  $insertlist{$tag.'.num'}   = $tagnum;      $insertlist{$tagnum.'.tag'} = $tag;
  push(@alltags,$tag);      $insertlist{$tag.'.num'}   = $tagnum;
       push(@alltags,$tag);
                   }
     } elsif ($in_help && $token->[1] eq 'file') {      } elsif ($in_help && $token->[1] eq 'file') {
  $key = $tag.'.helpfile';   $key = $tag.'.helpfile';
     } elsif ($in_help && $token->[1] eq 'description') {      } elsif ($in_help && $token->[1] eq 'description') {
Line 2284  sub get_tag { Line 2228  sub get_tag {
 =item &print_pdf_radiobutton(fieldname, value)  =item &print_pdf_radiobutton(fieldname, value)
   
 Returns a latexline to generate a PDF-Form-Radiobutton.  Returns a latexline to generate a PDF-Form-Radiobutton.
 Note: Radiobuttons with equal names are automaticly grouped  Note: Radiobuttons with equal names are automaticly grouped 
       in a selection-group.        in a selection-group.
   
 $fieldname: PDF internalname of the radiobutton(group)  $fieldname: PDF internalname of the radiobutton(group)

Removed from v.1.505.2.6  
changed lines
  Added in v.1.531.2.1


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