Diff for /loncom/homework/structuretags.pm between versions 1.527 and 1.539

version 1.527, 2015/01/19 15:35:53 version 1.539, 2015/09/14 13:45:19
Line 224  sub end_tex { Line 224  sub end_tex {
 }  }
   
 sub homework_js {  sub homework_js {
       my ($postsubmit,$timeout);
       if (($env{'request.course.id'}) && ($env{'request.state'} ne 'construct')) {
           my $crstype;
           if (&Apache::loncommon::course_type() eq 'Community') {
               $crstype = 'community';
           } else {
               if ($env{'course.'.$env{'request.course.id'}.'.internal.coursecode'}) {
                   $crstype = 'official';
               } elsif ($env{'course.'.$env{'request.course.id'}.'.internal.textbook'}) {
                   $crstype = 'textbook';
               } else {
                   $crstype = 'unofficial';
               }
           }
           $postsubmit = $env{'course.'.$env{'request.course.id'}.'.internal.postsubmit'};
           if ($postsubmit eq '') {
               my %domdefs = &Apache::lonnet::get_domain_defaults($env{'course.'.$env{'request.course.id'}.'.domain'});
               $postsubmit = $domdefs{'postsubmit'};
               unless ($postsubmit eq 'off') {
                   $timeout = $domdefs{$crstype.'postsubtimeout'};
               }
           } elsif ($postsubmit eq '0') {
               $postsubmit = 'off';
           } elsif ($postsubmit eq '1') {
               $postsubmit = 'on';
               $timeout = $env{'course.'.$env{'request.course.id'}.'.internal.postsubtimeout'};
               if ($timeout eq '') {
                   my %domdefs = &Apache::lonnet::get_domain_defaults($env{'course.'.$env{'request.course.id'}.'.domain'});
                   $timeout = $domdefs{$crstype.'postsubtimeout'};
               }
           }
           if ($timeout eq '') {
               $timeout = 60;
           }
       } else {
           my %domdefs = &Apache::lonnet::get_domain_defaults($env{'request.role.domain'});
           $postsubmit = $domdefs{'postsubmit'};
           unless ($postsubmit eq 'off') {
               $timeout = 60;
           }
       }
       my $jstimeout = 0;
       if ($timeout) {
           $jstimeout = 1000 * $timeout;
       }
     return &Apache::loncommon::resize_textarea_js().      return &Apache::loncommon::resize_textarea_js().
                 &Apache::loncommon::colorfuleditor_js().                  &Apache::loncommon::colorfuleditor_js().
            &setmode_javascript().             &setmode_javascript().
  <<'JS';   <<"JS";
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  // <![CDATA[
 function setSubmittedPart (part,prefix) {  function setSubmittedPart (part,prefix) {
Line 242  function setSubmittedPart (part,prefix) Line 287  function setSubmittedPart (part,prefix)
     }      }
 }  }
   
   function disableAutoComplete (id) {
       var field = document.getElementById(id);
       if (field != null && field != undefined){
           if ('autocomplete' in field) {
               field.autocomplete = "off";
           } else {
               field.setAttribute("autocomplete", "off");
           }
       }
   }
   
 function image_response_click (which, e) {  function image_response_click (which, e) {
     init_geometry();      init_geometry();
     if (!e) { e = window.event; } //IE      if (!e) { e = window.event; } //IE
Line 258  function image_response_click (which, e) Line 314  function image_response_click (which, e)
   
 var submithandled = 0;  var submithandled = 0;
 var keypresshandled = 0;  var keypresshandled = 0;
   var postsubmit = '$postsubmit';
   
 $(document).ready(function(){  \$(document).ready(function(){
     if (postsubmit != 'off') {    
     $(document).keypress(function(event){      \$(document).keypress(function(event){
         var keycode = (event.keyCode ? event.keyCode : event.which);          var keycode = (event.keyCode ? event.keyCode : event.which);
         if ((keycode == '13') && (keypresshandled == 0)) {          if ((keycode == '13') && (keypresshandled == 0)) {
             if ( $( document.activeElement ).hasClass("LC_textline") ) {              if ( \$( document.activeElement ).hasClass("LC_textline") ) {
                 keypresshandled = 1;                  keypresshandled = 1;
                 var idsArray = $( document.activeElement ).attr("id").split(/HWVAL_/);                  var idsArray = \$( document.activeElement ).attr("id").split(/HWVAL_/);
                 if (idsArray.length) {                  if (idsArray.length) {
                     event.preventDefault();                      event.preventDefault();
                     var itemsArray = idsArray[1].split(/_/);                      var itemsArray = idsArray[1].split(/_/);
                     var buttonId = idsArray[0]+'submit_'+itemsArray[0];                      var buttonId = idsArray[0]+'submit_'+itemsArray[0];
                     $("#"+buttonId).trigger("click");                      \$("#"+buttonId).trigger("click");
                 }                  }
             }              }
         }          }
     });      });
   
     $(document).delegate('form :submit', 'click', function( event ) {      \$(document).delegate('form :submit', 'click', function( event ) {
         if ( $( this ).hasClass( "LC_hwk_submit" ) ) {          if ( \$( this ).hasClass( "LC_hwk_submit" ) ) {
             var buttonId = this.id;              var buttonId = this.id;
               var timeout = $jstimeout;
             if (submithandled == 0) {              if (submithandled == 0) {
                 submithandled = 1;                  submithandled = 1;
                 $( "#msg_"+buttonId ).css({"display": "inline","background-color": "#87cefa",                  \$( "#msg_"+buttonId ).css({"display": "inline","background-color": "#87cefa",
                                            "color": "black","padding": "2px"}) ;                                             "color": "black","padding": "2px"}) ;
                 if (( $(this.form).id == "LC_page" ) && ($('input[name="all_submit"]').length )) {                  if (( \$(this.form).id == "LC_page" ) && (\$('input[name="all_submit"]').length )) {
                     if (buttonId != "all_submit") {                      if (buttonId != "all_submit") {
                         $( ".LC_status_"+buttonId ).hide();                          \$( ".LC_status_"+buttonId ).hide();
                         if (( "#"+buttonId+"_pressed" ).length) {                          if (( "#"+buttonId+"_pressed" ).length) {
                             $( "#"+buttonId+"_pressed" ).val( "1" );                              \$( "#"+buttonId+"_pressed" ).val( "1" );
                         }                          }
                     }                      }
                 } else {                  } else {
                     $( ".LC_status_"+buttonId ).hide();                      \$( ".LC_status_"+buttonId ).hide();
                 }                  }
                 $(this.form).submit();                  \$(this.form).submit();
                 $( ".LC_hwk_submit" ).prop( "disabled", true);                  \$( ".LC_hwk_submit" ).prop( "disabled", true);
                 $( ".LC_textline" ).prop( "readonly", "readonly");                  \$( ".LC_textline" ).prop( "readonly", "readonly");
                 event.preventDefault();                  event.preventDefault();
   
                   if (timeout > 0) {
                       setTimeout(function(){
                                          \$( "#msg_"+buttonId ).css({"display": "none"});
                                          if (( \$(this.form).id == "LC_page" ) && (\$('input[name="all_submit"]').length )) {
                                              if (buttonId != "all_submit") {
                                                  if (( "#"+buttonId+"_pressed" ).length) {
                                                      \$( "#"+buttonId+"_pressed" ).val( "" );
                                                  }
                                              }
                                          }
                                          \$( ".LC_hwk_submit" ).prop( "disabled", false);
                                          \$( ".LC_textline" ).prop( "readonly", false);
                                          submithandled = 0;
                                          keypresshandled = 0;
                                        }, timeout);
                   }
                 return true;                  return true;
             }              }
         }          }
     });      });
     }
 });  });
   
 // ]]>  // ]]>
Line 347  sub page_start { Line 423  sub page_start {
         $extra_head .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args);          $extra_head .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args);
     }      }
     my $is_task = ($env{'request.uri'} =~ /\.task$/);      my $is_task = ($env{'request.uri'} =~ /\.task$/);
     my $needs_upload;      my ($needs_upload,$partlist);
     my ($symb)= &Apache::lonnet::whichuser();      my ($symb)= &Apache::lonnet::whichuser();
     my ($map,$resid,$resurl)=&Apache::lonnet::decode_symb($symb);      my ($map,$resid,$resurl)=&Apache::lonnet::decode_symb($symb);
     if ($is_task) {      if ($is_task) {
Line 365  sub page_start { Line 441  sub page_start {
                     unless ($is_page) {                      unless ($is_page) {
                         $needs_upload = 1;                          $needs_upload = 1;
                     }                      }
                       if ((ref($tagstack) eq 'ARRAY') && ($tagstack->[-1] eq 'problem')) {
                           my $res = $navmap->getBySymb($symb);
                           if (ref($res)) {
                               $partlist = $res->parts();
                           }
                       }
                 }                  }
             }              }
         } else {          } else {
Line 376  sub page_start { Line 458  sub page_start {
                     if (ref($mapres)) {                      if (ref($mapres)) {
                         $is_page = $mapres->is_page();                          $is_page = $mapres->is_page();
                     }                      }
                     unless ($is_page) {                      if ($is_page) {
                           if ((ref($tagstack) eq 'ARRAY') && ($tagstack->[-1] eq 'problem')) {
                               my $res = $navmap->getBySymb($symb);
                               if (ref($res)) {
                                   $partlist = $res->parts();
                               }
                           }
                       } else {
                         my $res = $navmap->getBySymb($symb);                          my $res = $navmap->getBySymb($symb);
                         if (ref($res)) {                          if (ref($res)) {
                             my $partlist = $res->parts();                              $partlist = $res->parts();
                             if (ref($partlist) eq 'ARRAY') {                              if (ref($partlist) eq 'ARRAY') {
                                 foreach my $part (@{$partlist}) {                                  foreach my $part (@{$partlist}) {
                                     my @types = $res->responseType($part);                                      my @types = $res->responseType($part);
Line 401  sub page_start { Line 490  sub page_start {
             }              }
         }          }
         if ($needs_upload) {          if ($needs_upload) {
             $extra_head .= &Apache::lonhtmlcommon::file_submissionchk_js();              $extra_head .= &Apache::lonhtmlcommon::file_submissionchk_js()
                               .'<script type="text/javascript" 
                                   src="/res/adm/includes/file_upload.js"></script>';
         }          }
     }      }
   
Line 515  sub page_start { Line 606  sub page_start {
  "\t".'<input type="hidden" name="symb" value="'.$symb.'" />'."\n";   "\t".'<input type="hidden" name="symb" value="'.$symb.'" />'."\n";
  }   }
     }      }
     return ($page_start,$form_tag_start);      return ($page_start,$form_tag_start,$partlist);
 }  }
   
 #use Time::HiRes();  #use Time::HiRes();
Line 546  sub get_resource_name { Line 637  sub get_resource_name {
 }  }
   
 sub setup_rndseed {  sub setup_rndseed {
     my ($safeeval,$target)=@_;      my ($safeeval,$target,$probpartlist)=@_;
     my ($symb)=&Apache::lonnet::whichuser();      my ($symb)=&Apache::lonnet::whichuser();
     my ($questiontype,$set_safespace,$rndseed);      my ($questiontype,$set_safespace,$rndseed);
     if ($target eq 'analyze') {      if ($target eq 'analyze') {
Line 607  sub setup_rndseed { Line 698  sub setup_rndseed {
         }          }
         unless (($target eq 'analyze') && (defined($rndseed))) {          unless (($target eq 'analyze') && (defined($rndseed))) {
             $rndseed=&Apache::lonnet::rndseed();              $rndseed=&Apache::lonnet::rndseed();
             my $curr_try = $Apache::lonhomework::history{"resource.$Apache::inputtags::part.tries"};              my $partfortries = $Apache::inputtags::part;
               if (ref($probpartlist) eq 'ARRAY') {
                   if ((@{$probpartlist} == 1) && ($probpartlist->[0] ne $Apache::inputtags::part)) {
                       $partfortries = $probpartlist->[0];
                   }
               }
               my $curr_try = $Apache::lonhomework::history{"resource.$partfortries.tries"};
             if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') {              if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') {
                 $curr_try ++;                  $curr_try ++;
             }              }
Line 615  sub setup_rndseed { Line 712  sub setup_rndseed {
                 $rndseed = $1;                  $rndseed = $1;
             }              }
             if ($curr_try) {              if ($curr_try) {
                 my $reqtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::part.randomizeontries");                  my $reqtries = &Apache::lonnet::EXT("resource.$partfortries.randomizeontries");
                 if (($reqtries =~ /^\d+$/) && ($reqtries > 1)) {                  if (($reqtries =~ /^\d+$/) && ($reqtries > 1)) {
                     my $inc = int(($curr_try-1)/$reqtries);                      my $inc = int(($curr_try-1)/$reqtries);
                     $rndseed += $inc;                      $rndseed += $inc;
Line 625  sub setup_rndseed { Line 722  sub setup_rndseed {
             }              }
         }          }
         $set_safespace = 1;          $set_safespace = 1;
           if ($target eq 'grade') {
               $Apache::lonhomework::rawrndseed = $rndseed;
           }
     }      }
     if ($set_safespace) {      if ($set_safespace) {
         if ($safeeval) {          if ($safeeval) {
Line 654  sub problem_edit_action_button { Line 754  sub problem_edit_action_button {
   
 sub problem_edit_buttons {  sub problem_edit_buttons {
    my ($mode)=@_;     my ($mode)=@_;
   # Buttons that save
      my $result = '<div style="float:right">';
      if ($mode eq 'editxml') {
          $result.=&problem_edit_action_button('subsaveedit','saveeditxml','s','Save and EditXML');
          $result.=&problem_edit_action_button('subsaveview','saveviewxml','v','Save and View');
      } else {
          $result.=&problem_edit_action_button('subsaveedit','saveedit','s','Save and Edit');
          $result.=&problem_edit_action_button('subsaveview','saveview','v','Save and View');
      }
      $result.="\n</div>\n";
 # Buttons that do not save  # Buttons that do not save
    my $result='<div class="LC_edit_problem_discards">'.     $result .= '<div>'.
               &problem_edit_action_button('subdiscview','discard','d','Discard Edits and View',1);                &problem_edit_action_button('subdiscview','discard','d','Discard Edits and View',1);
    if ($mode eq 'editxml') {     if ($mode eq 'editxml') {
        $result.=&problem_edit_action_button('subedit','edit','e','Edit',1);         $result.=&problem_edit_action_button('subedit','edit','e','Edit',1);
Line 666  sub problem_edit_buttons { Line 776  sub problem_edit_buttons {
        $result.=&problem_edit_action_button('subundo','undo','u','Undo',1);         $result.=&problem_edit_action_button('subundo','undo','u','Undo',1);
    }     }
    $result.="\n</div>";     $result.="\n</div>";
 # Buttons that save  
    $result.='<div class="LC_edit_problem_saves">';  
    if ($mode eq 'editxml') {  
        $result.=&problem_edit_action_button('subsaveedit','saveeditxml','s','Save and EditXML');  
        $result.=&problem_edit_action_button('subsaveview','saveviewxml','v','Save and View');  
    } else {  
        $result.=&problem_edit_action_button('subsaveedit','saveedit','s','Save and Edit');  
        $result.=&problem_edit_action_button('subsaveview','saveview','v','Save and View');  
    }  
    $result.="\n</div>\n";  
    return $result;     return $result;
 }  }
   
 sub insert_menu_datastructure {  
   
  my $template_menu = &template_dropdown_datastructure();  
  my $responseblock_menu = &responseblock_dropdown_datastructure();  
  my $conditional_scripting = &conditional_scripting_datastructure();  
  my $misc = &misc_datastructure();  
   
  my @menu = ($template_menu, $responseblock_menu, $conditional_scripting, $misc);  
  return \@menu;  
   
 }  
   
 sub template_dropdown_datastructure {  
     # gathering the all templates and their path, title, category and help topic  
     my @templates = &Apache::lonhomework::get_template_list('problem');  
     # template category => title  
     my %tmplthash = ();  
     # template title => path  
     my %tmpltcontent = ();  
   
     foreach my $template (@templates){  
         # put in hash if the template is not empty  
         unless ($template->[1] eq ''){  
             push(@{$tmplthash{$template->[2]}}, $template->[1]);  
             push(@{$tmpltcontent{$template->[1]}},$template->[0]);  
         }  
     }  
   
  my $catList = [];  
     foreach my $cat (sort keys %tmplthash) {  
  my $catItems = [];  
         foreach my $title (sort @{$tmplthash{$cat}}) {  
             my $path = $tmpltcontent{$title}->[0];  
             my $code;  
             open(FH, "<$path");  
             while(<FH>){  
                 $code.= $_ unless $_ =~ /(<problem>)|(<\/problem>)/;  
             }  
             close(FH);  
   
  if ($code ne '') {  
  my $href = 'javascript:insertText(\'' . &convert_for_js(&HTML::Entities::encode($code)) . '\')';  
  my $currItem = [$href, $title, undef];  
  push @{$catItems}, $currItem;  
  }  
         }  
  push @{$catList}, [$catItems, $cat, undef];  
     }  
   
  my $templDropdown = [$catList, &mt("Complete Problem Templates"), undef];  
     return $templDropdown;  
 }  
   
 sub responseblock_dropdown_datastructure {  
   
  my $mathCat = [  
  [  
  ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_formularesponse())) . "\')", &mt("Formula Response"), undef],  
  ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_functionplotresponse())) . "\')", &mt("Function Plot Response"), undef],  
  ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_mathresponse())) . "\')", &mt("Math Response"), undef],  
  ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_numericalresponse())) . "\')", &mt("Numerical Response"), undef]  
  ],   
  &mt("Math"),   
  undef  
  ];  
   
  my $miscCat = [  
  [  
             ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_imageresponse())) . "\')", &mt("Click on Image"), undef],  
             ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_customresponse())) . "\')", &mt("Custom Response"), undef],  
             ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_externalresponse())) . "\')", &mt("External Response"), undef],  
             ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_matchresponse())) . "\')", &mt("Match Response"), undef],  
             ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_radiobuttonresponse())) . "\')", &mt("One out of N Statement"), undef],  
             ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_optionresponse())) . "\')", &mt("Optionresponse"), undef],   
  ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_rankresponse())) . "\')", &mt("Rank Values"), undef]  
  ],  
  &mt("Misc"),  
  undef  
  ];  
   
  my $chemCat = [  
  [  
  ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_reactionresponse())) . "\')", &mt("Chemical Reaction"), undef],  
  ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_organicresponse())) . "\')", &mt("Organic Structure"), undef]  
  ],  
  &mt("Chemical"),  
  undef  
  ];  
   
  my $textCat = [  
  [  
  ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_stringresponse())) . "\')", &mt("String Response"), undef],  
  ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_essayresponse())) . "\')", &mt("Essay"), undef]  
  ],  
  &mt("Text"),  
  undef  
  ];  
   
  my $cats = [[$mathCat, $miscCat, $chemCat, $textCat], &mt("Response Types"), undef];  
  return $cats;  
 }  
   
   
 sub conditional_scripting_datastructure {  
 # TODO: corresponding routines should be used for the javascript:insertText parts  
 # instead of the placeholder routine default_xml_tag with the tags  
 # e.g. &default_xml_tag("postanswerdate") should be replaced with a routine which  
 # returns the corresponding content for this case  
   
 #TODO translated is currently temporarily here, another solution should be found where the  
 # needed string can be retrieved  
   
  my $translatedTag = '  
 <translated>  
     <lang which="en"></lang>  
     <lang which="default"></lang>  
 </translated>';  
   
  my $cat = [  
  [  
  ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode($translatedTag)) . "\')", &mt("Translated Tag"), undef],  
  ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&default_xml_tag("block"))) . "\')", &mt("Conditional Block"), undef],  
  ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&default_xml_tag("postanswerdate"))) . "\')", &mt("After Answer Block"), undef],  
  ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&default_xml_tag("preduedate"))) . "\')", &mt("Before Due Date Block"), undef],  
  ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&default_xml_tag("solved"))) . "\')", &mt("Block For After Solved"), undef],  
  ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&default_xml_tag("notsolved"))) . "\')", &mt("Block For When Not Solved"), undef]  
  ],  
  &mt("Contitional Scripting"),  
  undef  
  ];  
   
  return $cat;  
 }  
   
 sub misc_datastructure {  
   
  my $graphicalCat = [  
  [  
  ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_img())) . "\')", &mt("Image"), undef],  
  ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::lonplot::insert_gnuplot())) . "\')", &mt("GNU Plot"), undef],  
  ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_organicstructure())) . "\')", &mt("Organic Structure"), undef]  
  ],  
  "Graphical",  
  undef  
  ];  
   
  my $advancedCat = [  
  [  
  ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_script())) . "\')", &mt("Script Block"), undef],  
  ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&default_xml_tag("allow"))) . "\')", &mt("File Dependencies"), undef],  
  ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&default_xml_tag("import"))) . "\')", &mt("Import a File"), undef],  
  ["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::londefdef::insert_meta())) . "\')", &mt("Custom Metadata"), undef]  
  ],  
  "advanced",  
  undef  
  ];  
   
  my $cats = [[$graphicalCat, $advancedCat], &mt("misc"), undef];  
  return $cats;  
 }  
   
 # helper routine for the datastructure building subroutines  
 sub default_xml_tag {  
  my ($tag) = @_;  
  return "\n<$tag></$tag>";  
 }  
   
   
 sub helpmenu_datastructure {  
   
  my $width = 500;  
  my $height = 600;  
   
  my $helpers = [  
  ['Problem_LON-CAPA_Functions', &mt('Script Functions')],  
  ['Greek_Symbols', &mt('Greek Symbols')],  
   ['Other_Symbols', &mt('Other Symbols')],  
  ['Authoring_Output_Tags', &mt('Output Tags')],  
  ['Authoring_Multilingual_Problems',   
  &mt('How to create problems in different languages')]  
  ];  
   
  my $help_structure = [];  
   
  foreach my $count (0..(scalar(@{$helpers})-1)) {  
  my $filename = $helpers->[$count]->[0];  
  my $title = $helpers->[$count]->[1];  
  my $href = &HTML::Entities::encode("javascript:openMyModal('/adm/help/$filename.hlp',$width,$height,'yes');");  
  push @{$help_structure}, [$href, $title, undef];  
  }  
   
  return $help_structure;  
 }  
   
 # we need substitution to not break javascript code  
 sub convert_for_js {  
     my $return = shift;  
         $return =~ s|script|ESCAPEDSCRIPT|g;  
         $return =~ s|\n|\\r\\n|g;  
         $return =~ s|'|\\'|g;  
  $return =~ s|&#39;|\\&#39;|g;  
     return $return;  
 }  
   
 sub problem_edit_header {  sub problem_edit_header {
     my ($mode)=@_;      my ($mode)=@_;
     my $return = '<input type="hidden" name="submitted" value="edit" />'.      my $return = '<input type="hidden" name="submitted" value="edit" />'.
Line 894  sub problem_edit_header { Line 790  sub problem_edit_header {
         '<input type="hidden" name="problemmode" value="saveedit" />'.          '<input type="hidden" name="problemmode" value="saveedit" />'.
         &problem_edit_buttons();          &problem_edit_buttons();
   
     $return.='<hr style="clear:both;visibility:hidden;" />      $return .= '</div></div>' . &Apache::lonxml::message_location();
     </div></div>'  
     .&Apache::lonxml::message_location();  
     $return .= '<link rel="stylesheet" href="/adm/codemirror/codemirror-combined.css" />      $return .= '<link rel="stylesheet" href="/adm/codemirror/codemirror-combined.css" />
     <script type="text/javascript" src="/adm/codemirror/codemirror-compressed-colorful.js"></script>';      <script type="text/javascript" src="/adm/codemirror/codemirror-compressed-colorful.js"></script>';
   
Line 909  sub problem_edit_header { Line 803  sub problem_edit_header {
                         $(\'.LC_edit_actionbar\').scrollToFixed(                          $(\'.LC_edit_actionbar\').scrollToFixed(
                             {                              {
                                 fixed: function(){                                  fixed: function(){
                                     $(this).find(\'.LC_edit_actionbar\').css(\'height\', \'31px\');                                      //$(this).find(\'.LC_edit_actionbar\').css(\'height\', \'31px\');
                                       $(this).find(\'.LC_edit_actionbar\');
                                 }                                  }
                             }                              }
                         );                          );
Line 1383  sub store_aggregates { Line 1278  sub store_aggregates {
             } else {              } else {
                 $anoncounter{$symb."\0".$part} = 1;                  $anoncounter{$symb."\0".$part} = 1;
             }              }
             my $needsrelease = $Apache::lonnet::needsrelease{'parameter:type:'.$Apache::lonhomework::results{'resource.'.$part.'.type'}};              my $needsrelease = $Apache::lonnet::needsrelease{'parameter:type:'.$Apache::lonhomework::results{'resource.'.$part.'.type'}.':'};
             if ($needsrelease) {                 if ($needsrelease) {
                 my $curr_required = $env{'course.'.$env{'request.course.id'}.'.internal.releaserequired'};                  my $curr_required = $env{'course.'.$env{'request.course.id'}.'.internal.releaserequired'};
                 if ($curr_required eq '') {                  if ($curr_required eq '') {
                     &Apache::lonnet::update_released_required($needsrelease);                      &Apache::lonnet::update_released_required($needsrelease);
Line 1495  sub init_problem_globals { Line 1390  sub init_problem_globals {
     @Apache::inputtags::importlist = ();      @Apache::inputtags::importlist = ();
     @Apache::inputtags::previous=();      @Apache::inputtags::previous=();
     @Apache::inputtags::previous_version=();      @Apache::inputtags::previous_version=();
       $Apache::inputtags::leniency='';
     $Apache::structuretags::printanswer='No';      $Apache::structuretags::printanswer='No';
     @Apache::structuretags::whileconds=();      @Apache::structuretags::whileconds=();
     @Apache::structuretags::whilebody=();      @Apache::structuretags::whilebody=();
Line 1510  sub reset_problem_globals { Line 1406  sub reset_problem_globals {
     undef(%Apache::lonhomework::history);      undef(%Apache::lonhomework::history);
     undef(%Apache::lonhomework::results);      undef(%Apache::lonhomework::results);
     undef($Apache::inputtags::part);      undef($Apache::inputtags::part);
       undef($Apache::inputtags::leniency);
     if ($type eq 'Task') {      if ($type eq 'Task') {
         undef($Apache::inputtags::slot_name);          undef($Apache::inputtags::slot_name);
       } elsif ($type eq 'problem') {
           undef($Apache::lonhomework::rawrndseed);
     }      }
 #don't undef this, lonhomework.pm takes care of this, we use this to   #don't undef this, lonhomework.pm takes care of this, we use this to 
 #detect if we try to do 2 problems in one file  #detect if we try to do 2 problems in one file
Line 1613  sub start_problem { Line 1512  sub start_problem {
     my $resource_due;      my $resource_due;
   
     my $name= &get_resource_name($parstack,$safeeval);      my $name= &get_resource_name($parstack,$safeeval);
     my ($result,$form_tag_start,$slot_name,$slot);      my ($result,$form_tag_start,$slot_name,$slot,$probpartlist);
   
     if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||      if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
         $target eq 'tex') {          $target eq 'tex') {
         if ($env{'form.markaccess'}) {          if ($env{'form.markaccess'}) {
             my @interval=&Apache::lonnet::EXT("resource.0.interval");              my @interval=&Apache::lonnet::EXT("resource.0.interval");
             &Apache::lonnet::set_first_access($interval[1],$interval[0]);              my ($timelimit) = split(/_/,$interval[0]);
               &Apache::lonnet::set_first_access($interval[1],$timelimit);
         }          }
   
         ($status,$accessmsg,$slot_name,$slot) =          ($status,$accessmsg,$slot_name,$slot) =
Line 1629  sub start_problem { Line 1529  sub start_problem {
   
     if ($target eq 'web' || $target eq 'webgrade' || $target eq 'tex'      if ($target eq 'web' || $target eq 'webgrade' || $target eq 'tex'
  || $target eq 'edit') {   || $target eq 'edit') {
  ($result,$form_tag_start) =   ($result,$form_tag_start,$probpartlist) =
     &page_start($target,$token,$tagstack,$parstack,$parser,$safeeval,      &page_start($target,$token,$tagstack,$parstack,$parser,$safeeval,
  $name);   $name);
       } elsif (($target eq 'grade') && ($Apache::lonhomework::type eq 'randomizetry')) {
           my ($symb)= &Apache::lonnet::whichuser();
           my $navmap = Apache::lonnavmaps::navmap->new();
           if (ref($navmap)) {
               my $res = $navmap->getBySymb($symb);
               if (ref($res)) {
                   $probpartlist = $res->parts();
               }
           }
     }      }
   
     if ($target eq 'tex' and $env{'request.symb'} =~ m/\.page_/) {$result='';}      if ($target eq 'tex' and $env{'request.symb'} =~ m/\.page_/) {$result='';}
Line 1641  sub start_problem { Line 1550  sub start_problem {
  $target eq 'tex') {   $target eq 'tex') {
   
  #handle rand seed in construction space   #handle rand seed in construction space
  my $rndseed=&setup_rndseed($safeeval,$target);   my $rndseed=&setup_rndseed($safeeval,$target,$probpartlist);
           if (($target eq 'grade') && &Apache::response::submitted()) {
               if ($Apache::lonhomework::type eq 'randomizetry') {
                   $Apache::lonhomework::results{'resource.0.rndseed'}=$rndseed;
               } else {
                   my @parts;
                   if (ref($probpartlist) eq 'ARRAY') {
                       @parts = @{$probpartlist};
                   }
                   unless (@parts) {
                       $Apache::lonhomework::results{'resource.0.rndseed'}=$Apache::lonhomework::rawrndseed;
                   }
               }
           }
  my ($symb)=&Apache::lonnet::whichuser();   my ($symb)=&Apache::lonnet::whichuser();
   
  if ($env{'request.state'} ne "construct" &&    if ($env{'request.state'} ne "construct" && 
Line 2689  sub start_part { Line 2611  sub start_part {
     my $id= &Apache::lonxml::get_id($parstack,$safeeval);      my $id= &Apache::lonxml::get_id($parstack,$safeeval);
     $Apache::inputtags::part=$id;      $Apache::inputtags::part=$id;
     push(@Apache::inputtags::partlist,$id);      push(@Apache::inputtags::partlist,$id);
       $Apache::inputtags::leniency='';
     @Apache::inputtags::response=();      @Apache::inputtags::response=();
     @Apache::inputtags::previous=();      @Apache::inputtags::previous=();
     @Apache::inputtags::previous_version=();      @Apache::inputtags::previous_version=();
Line 2698  sub start_part { Line 2621  sub start_part {
     my $hidden=&Apache::loncommon::check_if_partid_hidden($Apache::inputtags::part);      my $hidden=&Apache::loncommon::check_if_partid_hidden($Apache::inputtags::part);
     my $newtype=&Apache::lonnet::EXT("resource.$id.type");      my $newtype=&Apache::lonnet::EXT("resource.$id.type");
     if ($newtype) { $Apache::lonhomework::type=$newtype; }      if ($newtype) { $Apache::lonhomework::type=$newtype; }
       if ($Apache::lonhomework::type eq 'randomizetry') {
           my $rndseed=&setup_rndseed($safeeval,$target);
           if (($target eq 'grade') && &Apache::response::submitted()) {
               $Apache::lonhomework::results{"resource.$id.rndseed"}=$rndseed;
           }
       } elsif (($target eq 'grade') && &Apache::response::submitted()) {
           $Apache::lonhomework::results{"resource.$id.rndseed"}=$Apache::lonhomework::rawrndseed;
       }
     my $in_order_show=&ordered_show_check();      my $in_order_show=&ordered_show_check();
     my $expression='$external::part=\''.$Apache::inputtags::part.'\';';      my $expression='$external::part=\''.$Apache::inputtags::part.'\';';
     $expression.='$external::type=\''.$Apache::lonhomework::type.'\';';      $expression.='$external::type=\''.$Apache::lonhomework::type.'\';';
Line 2846  sub end_part { Line 2777  sub end_part {
     }      }
     pop @Apache::inputtags::status;      pop @Apache::inputtags::status;
     $Apache::inputtags::part='';      $Apache::inputtags::part='';
       $Apache::inputtags::leniency='';
     $Apache::lonhomework::type = $Apache::lonhomework::default_type;      $Apache::lonhomework::type = $Apache::lonhomework::default_type;
     return $result;      return $result;
 }  }

Removed from v.1.527  
changed lines
  Added in v.1.539


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