Diff for /loncom/xml/lonxml.pm between versions 1.531.2.24 and 1.532

version 1.531.2.24, 2018/09/14 21:41:13 version 1.532, 2012/07/05 19:24:02
Line 69  use Safe(); Line 69  use Safe();
 use Safe::Hole();  use Safe::Hole();
 use Math::Cephes();  use Math::Cephes();
 use Math::Random();  use Math::Random();
 use Math::Calculus::Expression();  
 use Number::FormatEng();  
 use Opcode();  use Opcode();
 use POSIX qw(strftime);  use POSIX qw(strftime);
 use Time::HiRes qw( gettimeofday tv_interval );  use Time::HiRes qw( gettimeofday tv_interval );
Line 146  $metamode = 0; Line 144  $metamode = 0;
 # turns on and of run::evaluate actually derefencing var refs  # turns on and of run::evaluate actually derefencing var refs
 $evaluate = 1;  $evaluate = 1;
   
 # data structure for edit mode, determines what tags can go into what other tags  # data structure for eidt mode, determines what tags can go into what other tags
 %insertlist=();  %insertlist=();
   
 # stores the list of active tag namespaces  # stores the list of active tag namespaces
Line 230  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) {
         &Apache::lonxml::debug("$temp -- ".      &Apache::lonxml::debug("$temp -- ".
                                join(',',@{ $Apache::lonxml::alltags{$temp} }));    join(',',@{ $Apache::lonxml::alltags{$temp} }));
     }    }
 }  }
   
 sub xmlparse {  sub xmlparse {
Line 402  sub xmlparse { Line 306  sub xmlparse {
  &clean_safespace($safeeval);   &clean_safespace($safeeval);
   
  if (@script_var_displays) {   if (@script_var_displays) {
      if ($finaloutput =~ m{</body>\s*</html>\s*$}s) {       my $scriptoutput = join('',@script_var_displays);
          my $scriptoutput = join('',@script_var_displays);       $finaloutput=~s{(</body>\s*</html>)\s*$}{$scriptoutput$1}s;
          $finaloutput=~s{(</body>\s*</html>)\s*$}{$scriptoutput$1}s;  
      } else {  
          $finaloutput .= join('',@script_var_displays);  
      }  
      undef(@script_var_displays);       undef(@script_var_displays);
  }   }
  &init_state();   &init_state();
Line 442  sub latex_special_symbols { Line 342  sub latex_special_symbols {
     } else {      } else {
  $string=~s/\\/\\ensuremath{\\backslash}/g;   $string=~s/\\/\\ensuremath{\\backslash}/g;
  $string=~s/\\\%|\%/\\\%/g;   $string=~s/\\\%|\%/\\\%/g;
  $string=~s/\\\{|\{/\\{/g;   $string=~s/\\{|{/\\{/g;
  $string=~s/\\}|}/\\}/g;   $string=~s/\\}|}/\\}/g;
  $string=~s/\\ensuremath\\\{\\backslash\\}/\\ensuremath{\\backslash}/g;   $string=~s/\\ensuremath\\{\\backslash\\}/\\ensuremath{\\backslash}/g;
  $string=~s/\\\$|\$/\\\$/g;   $string=~s/\\\$|\$/\\\$/g;
  $string=~s/\\\_|\_/\\\_/g;   $string=~s/\\\_|\_/\\\_/g;
         $string=~s/([^\\]|^)(\~|\^)/$1\\$2\\strut /g;          $string=~s/([^\\]|^)(\~|\^)/$1\\$2\\strut /g;
Line 465  sub inner_xmlparse { Line 365  sub inner_xmlparse {
   my $result;    my $result;
   my $token;    my $token;
   my $dontpop=0;    my $dontpop=0;
   my $lastdontpop;  
   my $lastendtag;  
   my $startredirection = $Apache::lonxml::redirection;    my $startredirection = $Apache::lonxml::redirection;
   while ( $#$pars > -1 ) {    while ( $#$pars > -1 ) {
     while ($token = $$pars['-1']->get_token) {      while ($token = $$pars['-1']->get_token) {
Line 562  sub inner_xmlparse { Line 460  sub inner_xmlparse {
       }        }
       $result = '';        $result = '';
   
       if ($token->[0] eq 'E') {        if ($token->[0] eq 'E' && !$dontpop) {
           if ($dontpop) {   &end_tag($stack,$parstack,$token);
               $lastdontpop = $token;  
           } else {  
               $lastendtag = $token->[1];  
               &end_tag($stack,$parstack,$token);  
           }  
       }        }
       $dontpop=0;        $dontpop=0;
     }      }
     if ($#$pars > -1) {      if ($#$pars > -1) {
  pop @$pars;   pop @$pars;
  pop @Apache::lonxml::pwd;   pop @Apache::lonxml::pwd;
     }      }
   }    }
   
   if (($#$stack == 0) && ($stack->[0] eq 'physnet') && ($target eq 'web') &&  
       ($lastendtag eq 'LONCAPA_INTERNAL_TURN_STYLE_ON')) {  
        if ((ref($lastdontpop) eq 'ARRAY') && ($lastdontpop->[1] eq 'physnet')) {  
            &end_tag($stack,$parstack,$lastdontpop);  
        }  
    }  
   
   # if ($target eq 'meta') {    # if ($target eq 'meta') {
   #   $finaloutput.=&endredirection;    #   $finaloutput.=&endredirection;
   # }    # }
Line 763  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->reval('use Math::Complex;');
   $safeeval->reval('use LaTeX::Table;');    $safeeval->reval('use LaTeX::Table;');
   $safeeval->deny_only(':dangerous');    $safeeval->deny_only(':dangerous');
   $safeeval->reval('use LONCAPA::LCMathComplex;');  
   $safeeval->permit_only(":default");    $safeeval->permit_only(":default");
   $safeeval->permit("entereval");    $safeeval->permit("entereval");
   $safeeval->permit(":base_math");    $safeeval->permit(":base_math");
Line 916  sub init_safespace { Line 802  sub init_safespace {
   $safehole->wrap(\&Apache::functionplotresponse::fpr_objectcoords,$safeeval,'&fpr_objectcoords');    $safehole->wrap(\&Apache::functionplotresponse::fpr_objectcoords,$safeeval,'&fpr_objectcoords');
   $safehole->wrap(\&Apache::functionplotresponse::fpr_vectorlength,$safeeval,'&fpr_vectorlength');    $safehole->wrap(\&Apache::functionplotresponse::fpr_vectorlength,$safeeval,'&fpr_vectorlength');
   $safehole->wrap(\&Apache::functionplotresponse::fpr_vectorangle,$safeeval,'&fpr_vectorangle');    $safehole->wrap(\&Apache::functionplotresponse::fpr_vectorangle,$safeeval,'&fpr_vectorangle');
   $safehole->wrap(\&Math::Calculus::Expression::math_calculus_expression,$safeeval,'&math_calculus_expression');  
   $safehole->wrap(\&Number::FormatEng::format_eng,$safeeval,'&number_format_eng');  
   $safehole->wrap(\&Number::FormatEng::format_pref,$safeeval,'&number_format_pref');  
   
 #  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 927  sub init_safespace { Line 810  sub init_safespace {
   $safeeval->permit("require");    $safeeval->permit("require");
   $safeinit .= ';$external::target="'.$target.'";';    $safeinit .= ';$external::target="'.$target.'";';
   &Apache::run::run($safeinit,$safeeval);    &Apache::run::run($safeinit,$safeeval);
   my $rawrndseed = &initialize_rndseed($safeeval);    &initialize_rndseed($safeeval);
   if ($target eq 'grade') {  
       $Apache::lonhomework::rawrndseed = $rawrndseed;  
   }  
 }  }
   
 sub clean_safespace {  sub clean_safespace {
Line 969  sub initialize_rndseed { Line 849  sub initialize_rndseed {
     my $safeinit = '$external::randomseed="'.$rndseed.'";';      my $safeinit = '$external::randomseed="'.$rndseed.'";';
     &Apache::lonxml::debug("Setting rndseed to $rndseed");      &Apache::lonxml::debug("Setting rndseed to $rndseed");
     &Apache::run::run($safeinit,$safeeval);      &Apache::run::run($safeinit,$safeeval);
     return $rndseed;  
 }  }
   
 sub default_homework_load {  sub default_homework_load {
Line 1091  sub decreasedepth { Line 970  sub decreasedepth {
 sub get_id {  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\s\-])/) {       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; }
Line 1444  sub extlink { Line 1323  sub extlink {
     if (!$exact) {      if (!$exact) {
  $res=&Apache::lonnet::hreflocation($Apache::lonxml::pwd[-1],$res);   $res=&Apache::lonnet::hreflocation($Apache::lonxml::pwd[-1],$res);
     }      }
     push(@Apache::lonxml::extlinks,$res);      push(@Apache::lonxml::extlinks,$res)  
 }  }
   
 sub writeallows {  sub writeallows {
Line 1480  sub do_registered_ssi { Line 1359  sub do_registered_ssi {
   
 sub add_script_result {  sub add_script_result {
     my ($display) = @_;      my ($display) = @_;
     if ($display ne '') {      push(@script_var_displays, $display);
         push(@script_var_displays, $display);  
     }  
 }  }
   
 #  #
Line 1574  SIMPLECONTENT Line 1451  SIMPLECONTENT
   
 sub verify_html {  sub verify_html {
     my ($filecontents)=@_;      my ($filecontents)=@_;
     my ($is_html,$is_xml,$is_physnet);      my ($is_html,$is_xml);
     if ($filecontents =~/(?:\<|\&lt\;)\?xml[^\<]*\?(?:\>|\&gt\;)/is) {      if ($filecontents =~/(?:\<|\&lt\;)\?xml[^\<]*\?(?:\>|\&gt\;)/is) {
         $is_xml = 1;          $is_xml = 1;
     } elsif ($filecontents =~/(?:\<|\&lt\;)html(?:\s+[^\<]+|\s*)(?:\>|\&gt\;)/is) {      } elsif ($filecontents =~/(?:\<|\&lt\;)html(?:\s+[^\<]+|\s*)(?:\>|\&gt\;)/is) {
         $is_html = 1;          $is_html = 1;
     } elsif ($filecontents =~/(?:\<|\&lt\;)physnet[^\<]*(?:\>|\&gt\;)/is) {  
         $is_physnet = 1;  
     }      }
     unless ($is_xml || $is_html || $is_physnet) {      unless ($is_xml || $is_html) {
         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;html&gt;','&lt;?xml ?&gt;');
     }      }
     if ($is_html) {      if ($is_html) {
Line 1628  sub renderingoptions { Line 1503  sub renderingoptions {
                (''        => '',                 (''        => '',
                 'tth'     => 'tth (TeX to HTML)',                  'tth'     => 'tth (TeX to HTML)',
                 'MathJax' => 'MathJax',                  'MathJax' => 'MathJax',
     '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,$symb,$itemtitle,$folderpath,$uri,$action) = @_;        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,$deps_button,$context,$cnum,$cdom,$add_to_onload,        my ($dragmath_button,$deps_button);
           $add_to_onresize,$init_dragmath);        my ($add_to_onload, $add_to_onresize);
       $initialize=&Apache::lonhtmlcommon::spellheader();        $initialize=&Apache::lonhtmlcommon::spellheader();
       if ($filetype eq 'html') {        if (($filetype eq 'html') && (&Apache::lonhtmlcommon::htmlareabrowser())) {
           if ($env{'request.course.id'}) {    my $lang = &Apache::lonhtmlcommon::htmlarea_lang();
               $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};            my %textarea_args = (
               $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};                                  fullpage => 'true',
               if ($uri =~ m{^\Q/uploaded/$cdom/$cnum/portfolio/syllabus/\E}) {                                  dragmath => 'math',
                   $context = 'syllabus';                                );
               }            $initialize .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args); 
           }  
           if (&Apache::lonhtmlcommon::htmlareabrowser()) {  
       my $lang = &Apache::lonhtmlcommon::htmlarea_lang();  
               my %textarea_args = (  
                                     fullpage => 'true',  
                                     dragmath => 'math',  
                                   );  
               $initialize .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args);  
               if ($context eq 'syllabus') {  
                   $init_dragmath = "editmath_visibility('filecont','none')";  
               }  
           }  
       }        }
       $initialize .= (<<FULLPAGE);        $initialize .= (<<FULLPAGE);
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  // <![CDATA[
     function initDocument() {      function initDocument() {
  resize_textarea('$textarea_id','LC_aftertextarea');   resize_textarea('$textarea_id','LC_aftertextarea');
         $init_dragmath  
     }      }
 // ]]>  // ]]>
 </script>  </script>
 FULLPAGE  FULLPAGE
       my $textareaclass;  
       if ($filetype eq 'html') {        if ($filetype eq 'html') {
           if ($context eq 'syllabus') {            if ($symb) {
               $deps_button = &Apache::lonhtmlcommon::dependencies_button()."\n";  
               $initialize .=  
                   &Apache::lonhtmlcommon::dependencycheck_js(undef,&mt('Syllabus'),  
                                                              $uri,undef,  
                                                              "/public/$cdom/$cnum/syllabus").  
                   "\n";  
               if (&Apache::lonhtmlcommon::htmlareabrowser()) {  
                   $textareaclass = 'class="LC_richDefaultOn"';  
               }  
           } elsif ($symb || $folderpath) {  
               $deps_button = &Apache::lonhtmlcommon::dependencies_button()."\n";                $deps_button = &Apache::lonhtmlcommon::dependencies_button()."\n";
               $initialize .=                $initialize .= 
                   &Apache::lonhtmlcommon::dependencycheck_js($symb,$itemtitle,                    &Apache::lonhtmlcommon::dependencycheck_js($symb,$itemtitle)."\n";
                                                              undef,$folderpath,$uri)."\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 1697  FULLPAGE Line 1548  FULLPAGE
       $add_to_onresize = "resize_textarea('$textarea_id','LC_aftertextarea');";        $add_to_onresize = "resize_textarea('$textarea_id','LC_aftertextarea');";
   
       if ($filetype eq 'html') {        if ($filetype eq 'html') {
           my $not_author;    $xml_help=&Apache::loncommon::helpLatexCheatsheet();
           if ($uri =~ m{^/uploaded/}) {  
               $not_author = 1;  
           }  
   $xml_help=&Apache::loncommon::helpLatexCheatsheet(undef,undef,$not_author);  
       }        }
   
       my $titledisplay=&display_title();        my $titledisplay=&display_title();
         my $textareaclass;
       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 1720  FULLPAGE Line 1568  FULLPAGE
               $htmlerror='<span class="LC_error">'.$htmlerror.'</span>';                $htmlerror='<span class="LC_error">'.$htmlerror.'</span>';
           }            }
           if (&Apache::lonhtmlcommon::htmlareabrowser()) {            if (&Apache::lonhtmlcommon::htmlareabrowser()) {
               unless ($textareaclass) {                $textareaclass = 'class="LC_richDefaultOff"';
                   $textareaclass = 'class="LC_richDefaultOff"';  
               }  
           }            }
       }        }
       my $undo;  
       unless ($uri =~ m{^/uploaded/}) {  
           $undo = '<input type="submit" name="Undo" accesskey="u" value="'.$lt{'un'}.'" />'."\n";  
       }  
       my $editfooter=(<<ENDFOOTER);        my $editfooter=(<<ENDFOOTER);
 $initialize  $initialize
 <a name="editsection" />  <a name="editsection" />
 <form $form_events method="post" name="xmledit" action="$action">  <form $form_events method="post" name="xmledit">
   <div class="LC_edit_problem_editxml_header">    <div class="LC_edit_problem_editxml_header">
     <table class="LC_edit_problem_header_title"><tr><td>      <table class="LC_edit_problem_header_title"><tr><td>
         $filename          $filename
Line 1740  $initialize Line 1582  $initialize
         $xml_help          $xml_help
       </td></tr>        </td></tr>
     </table>      </table>
     <div>      <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'}" />
       $undo $htmlerror $deps_button $dragmath_button        <input type="submit" name="Undo" accesskey="u" value="$lt{'un'}" />
         $htmlerror $deps_button $dragmath_button
     </div>      </div>
     <div style="float:right">      <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'}" />
       <input type="submit" name="viewmode" accesskey="v" value="$lt{'vi'}" />        <input type="submit" name="viewmode" accesskey="v" value="$lt{'vi'}" />
     </div>      </div>
Line 1755  $initialize Line 1598  $initialize
     $titledisplay      $titledisplay
   </div>    </div>
 </form>  </form>
   </body>
 ENDFOOTER  ENDFOOTER
       return ($editfooter,$add_to_onload,$add_to_onresize);;        return ($editfooter,$add_to_onload,$add_to_onresize);;
 }  }
Line 1825  sub handler { Line 1669  sub handler {
     } else {      } else {
  $filetype='html';   $filetype='html';
     }      }
     unless ($env{'request.uri'}) {  
         $env{'request.uri'}=$request->uri;  
         &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},  
                                                 ['todocs']);  
     }  
     my ($cdom,$cnum);  
     if ($env{'request.course.id'}) {  
         $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};  
         $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};  
         if ($filetype eq 'html') {  
             if ($request->uri =~ m{^\Q/uploaded/$cdom/$cnum/portfolio/syllabus/\E.+$}) {  
                 if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {  
                     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},  
                                                             ['editmode']);  
                 }  
             }  
         }  
     }  
     if ($filetype eq 'sty') {      if ($filetype eq 'sty') {
         $breadcrumbtext = 'Style File Editor';          $breadcrumbtext = 'Style File Editor';
     } elsif ($filetype eq 'js') {      } elsif ($filetype eq 'js') {
Line 1869  sub handler { Line 1695  sub handler {
             }              }
  }   }
     }      }
     my $inhibit_menu;  
     my %mystyle;      my %mystyle;
     my $result = '';      my $result = '';
     my $filecontents=&Apache::lonnet::getfile($file);      my $filecontents=&Apache::lonnet::getfile($file);
Line 1927  ENDNOTFOUND Line 1752  ENDNOTFOUND
     &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 (($env{'request.state'} eq 'construct') &&  
                 (($filetype eq 'css') || ($filetype eq 'js')) && ($ENV{'HTTP_REFERER'})) {  
                 if ($ENV{'HTTP_REFERER'} =~ m{^https?\://[^\/]+/priv/$LONCAPA::match_domain/$LONCAPA::match_username/[^\?]+\.(x?html?|swf)(|\?)[^\?]*$}) {  
                     $inhibit_menu = 1;  
                 }  
             }  
             if (($filetype ne 'html') &&               if (($filetype ne 'html') && 
                 (!$env{'form.return_only_error_and_warning_counts'}) &&                  (!$env{'form.return_only_error_and_warning_counts'})) {
                 (!$inhibit_menu)) {  
                 my $nochgview = 1;                  my $nochgview = 1;
                 my $controls = '';                  my $controls = '';
                     if ($env{'request.state'} eq 'construct') {                      if ($env{'request.state'} eq 'construct') {
Line 1953  ENDNOTFOUND Line 1771  ENDNOTFOUND
                 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($request->uri),
                                 'text' => 'Authoring Space'},                                  'text' => 'Construction Space'},
                                {'href' => '',                                 {'href' => '',
                                 'text' => $breadcrumbtext}];                                  'text' => $breadcrumbtext}];
                 } else {                  } else {
Line 1973  ENDNOTFOUND Line 1791  ENDNOTFOUND
 #  #
 # Edit action? Insert editing commands  # Edit action? Insert editing commands
 #  #
     unless (($env{'request.state'} eq 'published') || ($inhibit_menu)) {      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,$url,$symb,$itemtitle,$action);              my ($displayfile,$url,$symb,$itemtitle);
     $displayfile=$request->uri;      $displayfile=$request->uri;
             if ($request->uri =~ m{^/uploaded/}) {              if ($request->uri =~ m{^/uploaded/}) {
                 if ($env{'request.course.id'}) {                  ($symb,$itemtitle,$displayfile) = 
                     if ($request->uri =~ m{^\Q/uploaded/$cdom/$cnum/supplemental/\E}) {                      &get_courseupload_hierarchy($request->uri);
                         &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},  
                                                                 ['folderpath','title']);  
                     } elsif ($request->uri =~ m{^\Q/uploaded/$cdom/$cnum/portfolio/syllabus/\E(.+)$}) {  
                         my $filename = $1;  
                         if ($1 eq 'loncapa.html') {  
                             $displayfile = &mt('Syllabus (minimal template)');  
                             $action = $request->uri.'?forceedit=1';  
                         } else {  
                             $displayfile = &mt('Syllabus file: [_1]',$1);  
                         }  
                         $itemtitle = &mt('Syllabus');  
                     }  
                 }  
                 unless ($itemtitle) {  
                     ($symb,$itemtitle,$displayfile) =   
                         &get_courseupload_hierarchy($request->uri,  
                                                     $env{'form.folderpath'},  
                                                     $env{'form.title'});  
                 }  
             } else {              } else {
         $displayfile=~s/^\/[^\/]*//;          $displayfile=~s/^\/[^\/]*//;
             }              }
   
     my ($edit_info, $add_to_onload, $add_to_onresize)=      my ($edit_info, $add_to_onload, $add_to_onresize)=
  &inserteditinfo($filecontents,$filetype,$displayfile,$symb,   &inserteditinfo($filecontents,$filetype,$displayfile,$symb,$itemtitle);
                                 $itemtitle,$env{'form.folderpath'},$request->uri,$action);  
   
     my %options =       my %options = 
  ('add_entries' =>   ('add_entries' =>
Line 2016  ENDNOTFOUND Line 1814  ENDNOTFOUND
             if ($env{'request.state'} eq 'construct') {              if ($env{'request.state'} eq 'construct') {
                 $options{'bread_crumbs'} = [{                  $options{'bread_crumbs'} = [{
                             'href' => &Apache::loncommon::authorspace($request->uri),                              'href' => &Apache::loncommon::authorspace($request->uri),
                             'text' => 'Authoring Space'},                              'text' => 'Construction Space'},
                            {'href' => '',                             {'href' => '',
                             'text' => $breadcrumbtext}];                              'text' => $breadcrumbtext}];
                 $header = &Apache::loncommon::head_subbox(                  $header = &Apache::loncommon::head_subbox(
Line 2051  sub display_title { Line 1849  sub display_title {
     $title = substr($title, rindex($title, '/') + 1);      $title = substr($title, rindex($title, '/') + 1);
  }   }
         $result = "<script type='text/javascript'>top.document.title = '$title - LON-CAPA "          $result = "<script type='text/javascript'>top.document.title = '$title - LON-CAPA "
                   .&mt('Authoring Space')."';</script>";                    .&mt('Construction Space')."';</script>";
     }      }
     return $result;      return $result;
 }  }
   
 sub get_courseupload_hierarchy {  sub get_courseupload_hierarchy {
     my ($url,$folderpath,$title) = @_;      my ($url) = @_;
     my ($symb,$itemtitle,$displaypath);      my ($symb,$itemtitle,$displaypath);
     if ($env{'request.course.id'}) {      if ($env{'request.course.id'}) {
         if ($folderpath =~ /^supplemental/) {          $symb = &Apache::lonnet::symbread($url);
             my @folders = split(/\&/,$folderpath);          my ($map,$id,$res)=&Apache::lonnet::decode_symb($symb);
             my @pathitems;          my $navmap=Apache::lonnavmaps::navmap->new;
             while (@folders) {          if (ref($navmap)) {
                 my $folder=shift(@folders);              my $res = $navmap->getBySymb($symb);
                 my $foldername=shift(@folders);              if (ref($res)) {
                 $foldername =~ s/\:(\d*)\:(\w*)\:(\w*):(\d*)\:?(\d*)$//;                  my @pathitems =
                 push(@pathitems,&unescape($foldername));                      &Apache::loncommon::get_folder_hierarchy($navmap,$map,1);
             }                  $itemtitle = $res->compTitle();
             if ($title) {                  push(@pathitems,$itemtitle);
                 push(@pathitems,&unescape($title));                  $displaypath = join(' &raquo; ',@pathitems);
             }  
             $displaypath = join(' &raquo; ',@pathitems);  
         } else {  
             $symb = &Apache::lonnet::symbread($url);  
             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);  
                 }  
             }              }
         }          }
     }      }
Line 2172  sub error { Line 1955  sub error {
     my $declutter=&Apache::lonnet::declutter($env{'request.filename'});      my $declutter=&Apache::lonnet::declutter($env{'request.filename'});
             my $baseurl = &Apache::lonnet::clutter($declutter);              my $baseurl = &Apache::lonnet::clutter($declutter);
     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;
Line 2242  sub add_messages { Line 2025  sub add_messages {
 }  }
   
 sub get_param {  sub get_param {
     my ($param,$parstack,$safeeval,$context,$case_insensitive, $noelide) = @_;      my ($param,$parstack,$safeeval,$context,$case_insensitive) = @_;
     if ( ! $context ) { $context = -1; }      if ( ! $context ) { $context = -1; }
     my $args ='';      my $args ='';
     if ( $#$parstack > (-2-$context) ) { $args=$$parstack[$context]; }      if ( $#$parstack > (-2-$context) ) { $args=$$parstack[$context]; }
     if ( ! $Apache::lonxml::usestyle ) {      if ( ! $Apache::lonxml::usestyle ) {
  $args=$Apache::lonxml::style_values.$args;   $args=$Apache::lonxml::style_values.$args;
     }      }
   
     if ($noelide) {  
         $args =~ s/'\$/'\\\$/g;  
     }  
   
     if ( ! $args ) { return undef; }      if ( ! $args ) { return undef; }
     if ( $case_insensitive ) {      if ( $case_insensitive ) {
  if ($args =~ s/(my (?:.*))(\$\Q$param\E[,\)])/$1.lc($2)/ei) {   if ($args =~ s/(my (?:.*))(\$\Q$param\E[,\)])/$1.lc($2)/ei) {
Line 2367  sub register_insert { Line 2145  sub register_insert {
   
 sub dump_insertlist {  sub dump_insertlist {
     my ($ext) = @_;      my ($ext) = @_;
     open(XML,">","/tmp/insertlist.xml.$ext");      open(XML,">/tmp/insertlist.xml.$ext");
     print XML ("<insertlist>");      print XML ("<insertlist>");
     my $i=0;      my $i=0;
   
Line 2425  sub description { Line 2203  sub description {
 sub helpinfo {  sub helpinfo {
     my ($token)=@_;      my ($token)=@_;
     my $tag = &get_tag($token);      my $tag = &get_tag($token);
     return ($insertlist{$tag.'.helpfile'}, &mt($insertlist{$tag.'.helpdesc'}));      return ($insertlist{$tag.'.helpfile'}, $insertlist{$tag.'.helpdesc'});
 }  }
   
 sub get_tag {  sub get_tag {

Removed from v.1.531.2.24  
changed lines
  Added in v.1.532


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