Diff for /loncom/homework/structuretags.pm between versions 1.497.2.3 and 1.523

version 1.497.2.3, 2011/12/12 12:07:45 version 1.523, 2014/11/21 18:04:57
Line 61  use Apache::lonlocal; Line 61  use Apache::lonlocal;
 use Apache::lonxml;  use Apache::lonxml;
 use Apache::londefdef;  use Apache::londefdef;
 use Apache::lonenc();  use Apache::lonenc();
   use Apache::loncommon();
 use Time::HiRes qw( gettimeofday tv_interval );  use Time::HiRes qw( gettimeofday tv_interval );
 use lib '/home/httpd/lib/perl/';  use lib '/home/httpd/lib/perl/';
 use LONCAPA;  use LONCAPA;
Line 69  BEGIN { Line 70  BEGIN {
     &Apache::lonxml::register('Apache::structuretags',('block','languageblock','translated','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startpartmarker','startouttext','endpartmarker','endouttext','simpleeditbutton','definetag'));      &Apache::lonxml::register('Apache::structuretags',('block','languageblock','translated','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startpartmarker','startouttext','endpartmarker','endouttext','simpleeditbutton','definetag'));
 }  }
   
   
   #---------------------------------------------------------------------------------
   # 
   #  This section of code deals with hyphenation management.
   #  We must do three things:
   #  - keep track fo the desired languages to alter the header.
   #  - provide hyphenation selection as needed by each language that appears in the
   #    text.
   #  - Provide the header text needed to make available the desired hyphenations.
   #
   #
   
   # Hash whose keys are the languages encountered in the document/resource.
   #
   
   my %languages_required;
   ##
   #   Given a language selection as input returns a chunk of LaTeX that
   #   selects the required hyphenator.
   #
   #  @param language - the language being selected.
   #  @return string
   #  @retval The LaTeX needed to select the hyphenation appropriate to the language. 
   #   
   sub select_hyphenation {
       my $language  = shift;
   
       $language = &Apache::loncommon::latexlanguage($language); # Translate -> latex language.
   
       # If there is no latex language there's not much we can do:
   
       if ($language) {
    &require_language($language);
    my $babel_hyphenation = "\\selectlanguage{$language}";
   
    return $babel_hyphenation;
       } else {
    return '';
       }
   }
   ##
   # Selects hyphenation based on the current problem metadata.
   # This requires that
   # - There is a language metadata item set for the problem.
   # - The language has a latex/babel hyphenation.
   #
   # @note: Uses &Apache::lonxml::request to locate the Uri associated with
   #        this problem.
   # @return string (possibly empty).
   # @retval If not empty an appropriate \selectlanguage{} directive.
   #
   sub select_metadata_hyphenation {
       my $uri      = $Apache::lonxml::request->uri;
       my $language = &Apache::lonnet::metadata($uri, 'language'); 
       my $latex_language = &Apache::loncommon::latexhyphenation($language);
       if ($latex_language) {
    return '\selectlanguage{'.$latex_language."}\n";
       }
       return ''; # no latex hyphenation or no lang metadata.
   }
   
   
   ##
   #  Clears the set of languages required by the document being rendered.
   #
   sub clear_required_languages {
       %languages_required = ();
   }
   ##
   # Allows an external client of this module to register a need for a language:
   #
   # @param LaTeX language required:
   #
   sub require_language {
       my $language = shift;
       $languages_required{$language} = 1;
   }
   
   ##
   # Provides the header for babel that indicates the languages
   # the document requires.
   # @return string
   # @retval \usepackage[lang1,lang2...]{babel}
   # @retval ''   if there are no languages_required.
   sub languages_header {
       my $header    ='';
       my @languages = (keys(%languages_required));
   
       # Only generate the header if there are languages:
   
       if (scalar @languages) {
    my $language_list = join(',', (@languages));
    $header  = '\usepackage['.$language_list."]{babel}\n";
       }
       return $header;
   }
   
   #----------------------------------------------------------------------------------
   
 sub start_web {  sub start_web {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     if ($target ne 'edit' && $target ne 'modified') {      if ($target ne 'edit' && $target ne 'modified') {
Line 154  function image_response_click (which, e) Line 254  function image_response_click (which, e)
     input_element.value = click;      input_element.value = click;
     img_element.src = '/adm/randomlabel.png?token='+token+'&clickdata='+click;      img_element.src = '/adm/randomlabel.png?token='+token+'&clickdata='+click;
 }  }
   
   var submithandled = 0;
   var keypresshandled = 0;
   
   $(document).ready(function(){
   
       $(document).keypress(function(event){
           var keycode = (event.keyCode ? event.keyCode : event.which);
           if ((keycode == '13') && (keypresshandled == 0)) {
               if ( $( document.activeElement ).hasClass("LC_textline") ) {
                   keypresshandled = 1;
                   var idsArray = $( document.activeElement ).attr("id").split(/HWVAL_/);
                   if (idsArray.length) {
                       event.preventDefault();
                       var itemsArray = idsArray[1].split(/_/);
                       var buttonId = idsArray[0]+'submit_'+itemsArray[0];
                       $("#"+buttonId).trigger("click");
                   }
               }
           }
       });
   
       $(document).delegate('form :submit', 'click', function( event ) {
           if ( $( this ).hasClass( "LC_hwk_submit" ) ) {
               var buttonId = this.id;
               if (submithandled == 0) {
                   submithandled = 1;
                   $( "#msg_"+buttonId ).css({"display": "inline","background-color": "#87cefa",
                                              "color": "black","padding": "2px"}) ;
                   if (( $(this.form).id == "LC_page" ) && ($('input[name="all_submit"]').length )) {
                       if (buttonId != "all_submit") {
                           $( ".LC_status_"+buttonId ).hide();
                           if (( "#"+buttonId+"_pressed" ).length) {
                               $( "#"+buttonId+"_pressed" ).val( "1" );
                           }
                       }
                   } else {
                       $( ".LC_status_"+buttonId ).hide();
                   }
                   $(this.form).submit();
                   $( ".LC_hwk_submit" ).prop( "disabled", true);
                   $( ".LC_textline" ).prop( "readonly", "readonly");
                   event.preventDefault();
                   return true;
               }
           }
       });
   });
   
 // ]]>  // ]]>
 </script>  </script>
 JS  JS
Line 279  sub page_start { Line 428  sub page_start {
     } elsif (!defined($found{'body'})       } elsif (!defined($found{'body'}) 
      && $env{'request.state'} eq 'construct') {       && $env{'request.state'} eq 'construct') {
  if ($target eq 'web' || $target eq 'edit') {   if ($target eq 'web' || $target eq 'edit') {
         # Breadcrumbs for Construction Space          # Breadcrumbs for Authoring Space
         &Apache::lonhtmlcommon::clear_breadcrumbs();          &Apache::lonhtmlcommon::clear_breadcrumbs();
         &Apache::lonhtmlcommon::add_breadcrumb({          &Apache::lonhtmlcommon::add_breadcrumb({
             'text'  => 'Construction Space',              'text'  => 'Authoring Space',
             'href'  => &Apache::loncommon::authorspace($env{'request.uri'}),              'href'  => &Apache::loncommon::authorspace($env{'request.uri'}),
         });          });
         # breadcrumbs (and tools) will be created           # breadcrumbs (and tools) will be created 
Line 314  sub page_start { Line 463  sub page_start {
         $body_args{'add_entries'}    = \%add_entries;          $body_args{'add_entries'}    = \%add_entries;
         if ( $env{'request.state'} eq   'construct') {          if ( $env{'request.state'} eq   'construct') {
             $body_args{'only_body'}  = 1;              $body_args{'only_body'}  = 1;
           } elsif ($target eq 'web') {
               $body_args{'print_suppress'} = 1;
         }          }
     }      }
     $body_args{'no_auto_mt_title'} = 1;      $body_args{'no_auto_mt_title'} = 1;
Line 353  sub page_start { Line 504  sub page_start {
         }          }
  $form_tag_start.='>'."\n";   $form_tag_start.='>'."\n";
   
  my $symb=&Apache::lonnet::symbread();  
  if ($symb =~ /\S/) {   if ($symb =~ /\S/) {
     $symb=      $symb=
  &HTML::Entities::encode(&Apache::lonenc::check_encrypt($symb));   &HTML::Entities::encode(&Apache::lonenc::check_encrypt($symb));
Line 538  sub problem_edit_header { Line 688  sub problem_edit_header {
 '.&Apache::lonxml::message_location().'  '.&Apache::lonxml::message_location().'
 </div>  </div>
 '.  '.
        '<table border="0" width="100%"><tr><td bgcolor="#F8F8F8">';         '<table id="LC_edit_problem_colorful" border="0" width="100%"><tr><td bgcolor="#F8F8F8">';
 }  }
   
 sub problem_edit_footer {  sub problem_edit_footer {
Line 611  sub problem_web_to_edit_header { Line 761  sub problem_web_to_edit_header {
 ".&mt("Problem Type:")."  ".&mt("Problem Type:")."
 <select name='problemtype'>  <select name='problemtype'>
   <option value=''></option>    <option value=''></option>
   ".&option('exam'   ,'problemtype').&mt("Exam Problem")."</option>    ".&option('exam'   ,'problemtype').&mt("Bubblesheet Exam Problem")."</option>
   ".&option('problem','problemtype').&mt("Homework Problem")."</option>    ".&option('problem','problemtype').&mt("Homework Problem")."</option>
   ".&option('survey' ,'problemtype').&mt("Survey Question")."</option>    ".&option('survey' ,'problemtype').&mt("Survey Question")."</option>
   ".&option('surveycred' ,'problemtype').&mt("Survey Question (with credit)")."</option>    ".&option('surveycred' ,'problemtype').&mt("Survey Question (with credit)")."</option>
Line 629  $show_all Line 779  $show_all
 <select name='problemstatus'>  <select name='problemstatus'>
   <option value=''></option>    <option value=''></option>
   ".&option('yes','problemstatus').&mt("Show Feedback")."</option>    ".&option('yes','problemstatus').&mt("Show Feedback")."</option>
   ".&option('no', 'problemstatus').&mt("Don't Show Incorect/Correct Feedback")."</option>    ".&option('no', 'problemstatus').&mt("Don't Show Incorrect/Correct Feedback")."</option>
   ".&option('no_feedback_ever', 'problemstatus').&mt("Don't Show Any Feedback")."</option>    ".&option('no_feedback_ever', 'problemstatus').&mt("Don't Show Any Feedback")."</option>
 </select>  </select>
 </span>  </span>
Line 747  sub initialize_storage { Line 897  sub initialize_storage {
   
 =item finalize_storage()  =item finalize_storage()
   
  Stores away the result has to a student's environment   Stores away the result hash to a student's environment
  checks form.grade_ for specific values, other wises stores   checks form.grade_ for specific values, otherwise stores
  to the running users environment   to the running user's environment.
  Will increment totals for attempts, students, and corrects   Will increment totals for attempts, students, and corrects
  if running user has student role.   if running user has student role.
   
Line 867  sub checkout_msg { Line 1017  sub checkout_msg {
  'resource'=>'The resource needs to be checked out',   'resource'=>'The resource needs to be checked out',
  'id_expln'=>'As a resource gets checked out, a unique timestamped ID is given to it, and a permanent record is left in the system.',   'id_expln'=>'As a resource gets checked out, a unique timestamped ID is given to it, and a permanent record is left in the system.',
                 'warning'=>'Checking out resources is subject to course policies, and may exclude future credit even if done erroneously.',                  'warning'=>'Checking out resources is subject to course policies, and may exclude future credit even if done erroneously.',
                 'checkout'=>'Check out Exam for Viewing',                  'checkout'=>'Check out Bubblesheet Exam for Viewing',
  'checkout?'=>'Check out Exam?');   'checkout?'=>'Check out Bubblesheet Exam?');
     my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'});      my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'});
     return (<<ENDCHECKOUT);      return (<<ENDCHECKOUT);
 <h2>$lt{'resource'}</h2>  <h2>$lt{'resource'}</h2>
Line 876  sub checkout_msg { Line 1026  sub checkout_msg {
 <p class="LC_warning">$lt{'warning'}</p>  <p class="LC_warning">$lt{'warning'}</p>
 <form name="checkout" method="post" action="$uri">  <form name="checkout" method="post" action="$uri">
 <input type="hidden" name="doescheckout" value="yes" />  <input type="hidden" name="doescheckout" value="yes" />
 <input type="button" name="checkoutbutton" value="$lt{'checkout'}" onClick="javascript:if (confirm('$lt{'checkout?'}')) { document.checkout.submit(); }" />  <input type="button" name="checkoutbutton" value="$lt{'checkout'}" onclick="javascript:if (confirm('$lt{'checkout?'}')) { document.checkout.submit(); }" />
 </form>  </form>
 ENDCHECKOUT  ENDCHECKOUT
 }  }
Line 890  sub firstaccess_msg { Line 1040  sub firstaccess_msg {
  my $foldertitle=&Apache::lonnet::gettitle($map);   my $foldertitle=&Apache::lonnet::gettitle($map);
           
  &Apache::lonxml::debug("map is $map title is $foldertitle");   &Apache::lonxml::debug("map is $map title is $foldertitle");
  $result .= "<h2>".&mt('The resources in "[_1]" are open for a limited time.'   $result .= "<h2>".&mt('The resources in "[_1]" are open for a limited time.',$foldertitle)."</h2>"
                              .' Once you click the "Show Resource" button below you have [_2] to complete all resources "[_1]".'                               .'<p>'.&mt('Once you click the "Show Resource" button below you have [_2] to complete all resources "[_1]".'
                              ,$foldertitle,$time)."</h2>";                               ,$foldertitle,$time)."</p>";
     } elsif ($interval[1] eq 'course') {      } elsif ($interval[1] eq 'course') {
  my $course = $env{'course.'.$env{'request.course.id'}.'.description'};   my $course = $env{'course.'.$env{'request.course.id'}.'.description'};
         $result .= "<h2>".&mt('The resources in "[_1]" are open for a limited time.'          $result .= "<h2>".&mt('The resources in "[_1]" are open for a limited time.',$course)."</h2>"
                              .' Once you click the "Show Resource" button below you have [_2] to complete all resources "[_1]".'                               .'<p>'.&mt('Once you click the "Show Resource" button below you have [_2] to complete all resources "[_1]".'
                              ,$course,$time)."</h2>";                               ,$course,$time)."</p>";
     } else {      } else {
  my $title=&Apache::lonnet::gettitle($symb);   my $title=&Apache::lonnet::gettitle($symb);
         $result .= "<h2>".&mt('This resource "[_1]" is open for a limited time.'          $result .= "<h2>".&mt('This resource "[_1]" is open for a limited time.',$title)."</h2>"
                              .' Once you click the "Show Resource" button below you have [_2] to complete this resource "[_1]".'                               .'<p>'.&mt('Once you click the "Show Resource" button below you have [_2] to complete this resource "[_1]".'
                              ,$title,$time)."</h2>";                               ,$title,$time)."</p>";
     }      }
     my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'});      my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'});
     my $buttontext = &mt('Show Resource');      my $buttontext = &mt('Show Resource');
Line 910  sub firstaccess_msg { Line 1060  sub firstaccess_msg {
     $result .= (<<ENDCHECKOUT);      $result .= (<<ENDCHECKOUT);
 <form name="markaccess" method="post" action="$uri">  <form name="markaccess" method="post" action="$uri">
 <input type="hidden" name="markaccess" value="yes" />  <input type="hidden" name="markaccess" value="yes" />
 <input type="button" name="accessbutton" value="$buttontext" onClick="javascript:if (confirm('$timertext')) { document.markaccess.submit(); }" />  <input type="button" name="accessbutton" value="$buttontext" onclick="javascript:if (confirm('$timertext')) { document.markaccess.submit(); }" />
 </form>  </form>
 ENDCHECKOUT  ENDCHECKOUT
     return $result;      return $result;
Line 960  sub reset_problem_globals { Line 1110  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);
       if ($type eq 'Task') {
           undef($Apache::inputtags::slot_name);
       }
 #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
 #   undef($Apache::lonhomework::parsing_a_problem);  #   undef($Apache::lonhomework::parsing_a_problem);
Line 1057  sub start_problem { Line 1210  sub start_problem {
     &Apache::run::run($expression,$safeeval);      &Apache::run::run($expression,$safeeval);
     my $status;      my $status;
     my $accessmsg;      my $accessmsg;
       my $resource_due;
   
     my $name= &get_resource_name($parstack,$safeeval);      my $name= &get_resource_name($parstack,$safeeval);
     my ($result,$form_tag_start);      my ($result,$form_tag_start,$slot_name,$slot);
   
       if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
           $target eq 'tex') {
           if ($env{'form.markaccess'}) {
               my @interval=&Apache::lonnet::EXT("resource.0.interval");
               &Apache::lonnet::set_first_access($interval[1],$interval[0]);
           }
   
           ($status,$accessmsg,$slot_name,$slot) =
               &Apache::lonhomework::check_slot_access('0','problem');
           push (@Apache::inputtags::status,$status);
       }
   
     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) =
Line 1072  sub start_problem { Line 1239  sub start_problem {
     if ($target eq 'analyze') { my $rndseed=&setup_rndseed($safeeval,$target); }      if ($target eq 'analyze') { my $rndseed=&setup_rndseed($safeeval,$target); }
     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'}) {  
     my @interval=&Apache::lonnet::EXT("resource.0.interval");  
     &Apache::lonnet::set_first_access($interval[1]);  
  }  
   
         ($status,$accessmsg,my $slot_name,my $slot) =  
             &Apache::lonhomework::check_slot_access('0','problem');  
         push (@Apache::inputtags::status,$status);  
   
  #handle rand seed in construction space   #handle rand seed in construction space
  my $rndseed=&setup_rndseed($safeeval,$target);   my $rndseed=&setup_rndseed($safeeval,$target);
Line 1129  sub start_problem { Line 1288  sub start_problem {
     ( $status eq 'BANNED') ||      ( $status eq 'BANNED') ||
     ( $status eq 'UNAVAILABLE') ||      ( $status eq 'UNAVAILABLE') ||
     ( $status eq 'NOT_IN_A_SLOT') ||      ( $status eq 'NOT_IN_A_SLOT') ||
               ( $status eq 'NOTRESERVABLE') ||
               ( $status eq 'RESERVABLE') ||
               ( $status eq 'RESERVABLE_LATER') ||
     ( $status eq 'INVALID_ACCESS')) {      ( $status eq 'INVALID_ACCESS')) {
     my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser,      my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser,
        $style);         $style);
     if ( $target eq "web" ) {      if ( $target eq "web" ) {
  my $msg;   my $msg;
  if ($status eq 'UNAVAILABLE') {   if ($status eq 'UNAVAILABLE') {
     $msg.='<h1>'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'</h1>';      $msg.='<p class="LC_error">'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'</p>';
                 } elsif ($status eq 'NOT_IN_A_SLOT') {                  } elsif ($status eq 'NOT_IN_A_SLOT') {
                     $msg.='<h1>'.&mt('You are not currently signed up to work at this time and/or place.').'</h1>';                      $msg.='<p class="LC_warning">'.&mt('You are not currently signed up to work at this time and/or place.').'</p>';
                   } elsif (($status eq 'RESERVABLE') || ($status eq 'RESERVABLE_LATER') ||
                            ($status eq 'NOTRESERVABLE')) {
                       $msg.='<p class="LC_warning">'.&mt('Access requires reservation to work at specific time/place.').'</p>';
  } elsif ($status ne 'NOT_YET_VIEWED') {   } elsif ($status ne 'NOT_YET_VIEWED') {
     $msg.='<h1>'.&mt('Not open to be viewed').'</h1>';      $msg.='<p class="LC_warning">'.&mt('Not open to be viewed').'</p>';
  }                  }
  if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') {   if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') {
     $msg.=&mt('The problem ').$accessmsg;      $msg.=&mt('The problem ').$accessmsg;
  } elsif ($status eq 'UNCHECKEDOUT') {   } elsif ($status eq 'UNCHECKEDOUT') {
Line 1149  sub start_problem { Line 1314  sub start_problem {
     $msg.=&firstaccess_msg($accessmsg,$symb);      $msg.=&firstaccess_msg($accessmsg,$symb);
  } elsif ($status eq 'NOT_IN_A_SLOT') {   } elsif ($status eq 'NOT_IN_A_SLOT') {
     $msg.=&Apache::bridgetask::add_request_another_attempt_button("Sign up for time to work");      $msg.=&Apache::bridgetask::add_request_another_attempt_button("Sign up for time to work");
                   } elsif ($status eq 'RESERVABLE') {
                       $msg.=&mt('Available to make a reservation.').' '.&mt('Reservation window closes [_1].',
                                 &Apache::lonnavmaps::timeToHumanString($accessmsg,'end')).
                             '<br />'.
                             &Apache::bridgetask::add_request_another_attempt_button("Sign up for time to work");
                   } elsif ($status eq 'RESERVABLE_LATER') {
                       $msg.=&mt('Window to make a reservation will open [_1].',
                                 &Apache::lonnavmaps::timeToHumanString($accessmsg,'start'));
                   } elsif ($status eq 'NOTRESERVABLE') {
                       $msg.=&mt('Not available to make a reservation.');  
  }   }
  $result.=$msg.'<br />';   $result.=$msg.'<br />';
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
Line 1173  sub start_problem { Line 1348  sub start_problem {
  'problem');   'problem');
     }      }
  } elsif ($target eq 'web') {   } elsif ($target eq 'web') {
     if ($status eq 'CAN_ANSWER'       if ($status eq 'CAN_ANSWER') {
  && $slot_name ne ''                  $resource_due = &Apache::lonhomework::due_date(0, $env{'request.symb'});
  && $Apache::lonhomework::history{'resource.0.checkedin'} eq '') {                  if ($slot_name ne '') {
  # unproctored slot access, self checkin                      my $checked_in =
  &Apache::bridgetask::check_in('problem',undef,undef,                          $Apache::lonhomework::history{'resource.0.checkedin'};
       $slot_name);                      if ($checked_in eq '') {
     }                          # unproctored slot access, self checkin
                           &Apache::bridgetask::check_in('problem',undef,undef,
                                                         $slot_name);
                           $checked_in =
                               $Apache::lonhomework::results{"resource.0.checkedin"};
                       }
                       if ((ref($slot) eq 'HASH') && ($checked_in ne '')) {
                           if ($slot->{'starttime'} < time()) {
                               if (!$resource_due) {
                                   $resource_due = $slot->{'endtime'};
                               } elsif ($slot->{'endtime'} < $resource_due) {
                                   $resource_due = $slot->{'endtime'};
                               }
                           }
                       }
                   }
                   if ($resource_due) {
                       my $time_left = $resource_due - time();
                       if ($resource_due && ($time_left > 0) && ($target eq 'web')) {
                           $result .= &Apache::lonhtmlcommon::set_due_date($resource_due);
                       }
                   }
               }
     $result.="\n $form_tag_start \t".      $result.="\n $form_tag_start \t".
       '<input type="hidden" name="submitted" value="yes" />';        '<input type="hidden" name="submitted" value="yes" />';
     # create a page header and exit      # create a page header and exit
Line 1209  sub start_problem { Line 1406  sub start_problem {
             }              }
  } elsif ($target eq 'tex') {   } elsif ($target eq 'tex') {
     $result .= 'INSERTTEXFRONTMATTERHERE';      $result .= 'INSERTTEXFRONTMATTERHERE';
       $result .= &select_metadata_hyphenation();
       
   
  }   }
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
Line 1265  sub end_problem { Line 1464  sub end_problem {
  }   }
  my $name_of_resourse= &Apache::lonxml::latex_special_symbols(&get_resource_name($parstack,$safeeval),'header');   my $name_of_resourse= &Apache::lonxml::latex_special_symbols(&get_resource_name($parstack,$safeeval),'header');
  my $begin_doc=' \typeout{STAMPOFPASSEDRESOURCESTART Resource <h2>"'.$name_of_resourse.'"</h2> located in <br /><small><b>'.$env{'request.uri'}.'</b></small><br /> STAMPOFPASSEDRESOURCEEND} \noindent ';   my $begin_doc=' \typeout{STAMPOFPASSEDRESOURCESTART Resource <h2>"'.$name_of_resourse.'"</h2> located in <br /><small><b>'.$env{'request.uri'}.'</b></small><br /> STAMPOFPASSEDRESOURCEEND} \noindent ';
    &clear_required_languages();
  my $toc_line='\vskip 1 mm\noindent '.$startminipage.   my $toc_line='\vskip 1 mm\noindent '.$startminipage.
     '\addcontentsline{toc}{subsection}{'.$name_of_resourse.'}';      '\addcontentsline{toc}{subsection}{'.$name_of_resourse.'}';
   
Line 1362  sub end_problem { Line 1562  sub end_problem {
  $result.="</form>";   $result.="</form>";
     }      }
     if ($target eq 'web') {      if ($target eq 'web') {
  $result.= &Apache::loncommon::end_page({'discussion' => 1});                  #
                   # Closing </body></html> not added by end_page().
                   # Added separately at end of this routine, after added
                   # <script></script> so document will be valid xhtml.
                   #
    $result.= &Apache::loncommon::end_page({'discussion' => 1,
    'notbody'    => 1});
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  my $endminipage = '';   my $endminipage = '';
  if (not $env{'form.problem_split'}=~/yes/) {   if (not $env{'form.problem_split'}=~/yes/) {
Line 1413  sub end_problem { Line 1619  sub end_problem {
   
     &reset_problem_globals('problem');      &reset_problem_globals('problem');
   
       #
       # This shouild be just above the return so that the
       # time put in the javascript is as late as possible in the
       # computation:
       #
       if ($target eq 'web') {
           $result .= &Apache::lonhtmlcommon::set_compute_end_time();
           #
           # Closing tags delayed so any <script></script> tags 
           # not in head can appear inside body, for valid xhtml.
           # 
           $result .= "</body>\n</html>";
       }
     return $result;      return $result;
 }  }
   
Line 1581  sub start_languageblock { Line 1800  sub start_languageblock {
   
         # Now loop over all languages in order of preference          # Now loop over all languages in order of preference
   
    my $render;
         foreach my $preferred_language (@preferred_languages) {          foreach my $preferred_language (@preferred_languages) {
   
     # If neither include/nor exlude is present the block is going      # If neither include/nor exlude is present the block is going
     # to get rendered.      # to get rendered.
   
            my $render=1;  
            my $found=0;             my $found=0;
                         $render=1;
   
    #  If include is specified,  don't render the block     #  If include is specified,  don't render the block
    #  unless the preferred language is included in the set.     #  unless the preferred language is included in the set.
   
Line 1716  sub end_languageblock { Line 1936  sub end_languageblock {
     my @possibilities = keys(%available_texts);      my @possibilities = keys(%available_texts);
     my $which =       my $which = 
  &Apache::loncommon::languages(\@possibilities) || 'default';   &Apache::loncommon::languages(\@possibilities) || 'default';
     $result = $available_texts{$which};      if ($target eq 'tex') {
    $result = &select_hyphenation($which);
       }
       $result .= $available_texts{$which};
       if ($target eq 'tex') {
    $result .= &select_metadata_hyphenation(); # Restore original language.
       }
  }   }
  undef(%available_texts);   undef(%available_texts);
  &Apache::lonxml::deregister('Apache::structuretags',('lang'));   &Apache::lonxml::deregister('Apache::structuretags',('lang'));
Line 1882  sub end_while { Line 2108  sub end_while {
     }      }
     $return = &Apache::run::run($code,$safeeval);      $return = &Apache::run::run($code,$safeeval);
  }   }
  if ($error) {          if ($error) {
     &Apache::lonxml::error('<pre>'.&mt('Code ran too long. It ran for more than').' '.$Apache::lonnet::perlvar{'lonScriptTimeout'}.' '.&mt('seconds occurred while running &lt;while&gt; on line').' '.$line.'</pre>');              &Apache::lonxml::error(
  }                  '<pre>'
                  .&mt('Code ran too long. It ran for more than [_1] seconds.',
                           $Apache::lonnet::perlvar{'lonScriptTimeout'})
                  .&mt('This occurred while running &lt;while&gt; on line [_1].',
                           $line)
                  .'</pre>');
           }
     } elsif ($target eq "edit") {      } elsif ($target eq "edit") {
  $result.= &Apache::edit::tag_end($target,$token,'');   $result.= &Apache::edit::tag_end($target,$token,'');
     }      }
Line 2321  sub start_problemtype { Line 2553  sub start_problemtype {
     ['hide','Hide']]      ['hide','Hide']]
    ,$token);     ,$token);
  $result .=&Apache::edit::checked_arg('When used as type(s):','for',   $result .=&Apache::edit::checked_arg('When used as type(s):','for',
      [ ['exam','Exam/Quiz Problem'],       [ ['exam','Bubblesheet Exam/Quiz Problem'],
        ['survey','Survey'],         ['survey','Survey'],
                                                ['surveycred','Survey (with credit)'],                                                 ['surveycred','Survey (with credit)'],
                                                ['anonsurvey','Anonymous Survey'],                                                 ['anonsurvey','Anonymous Survey'],
Line 2368  sub end_startouttext { Line 2600  sub end_startouttext {
                  .'<td><span class="LC_nobreak">'.&mt('Delete?').' '                   .'<td><span class="LC_nobreak">'.&mt('Delete?').' '
                  .&Apache::edit::deletelist($target,$token)                   .&Apache::edit::deletelist($target,$token)
                  .'</span></td>'                   .'</span></td>'
          .'<td align="left"><span id="math_'.$areaid.'" />'           .'<td><span id="math_'.$areaid.'">'
  .&Apache::lonhtmlcommon::dragmath_button($areaid,1)   .&Apache::lonhtmlcommon::dragmath_button($areaid,1)
  .'<span></td>'   .'</span></td>'
  .'<td>'   .'<td>'
  .&Apache::edit::insertlist($target,$token)   .&Apache::edit::insertlist($target,$token)
  .'</td>'   .'</td>'
          .'<td align="right" valign="top">' .           .'<td class="LC_edit_problem_latexhelper">' .
          &Apache::loncommon::helpLatexCheatsheet().           &Apache::loncommon::helpLatexCheatsheet().
  &Apache::edit::end_row().   &Apache::edit::end_row().
                  &Apache::edit::start_spanning_row()."\n".                   &Apache::edit::start_spanning_row()."\n".

Removed from v.1.497.2.3  
changed lines
  Added in v.1.523


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