Diff for /loncom/homework/structuretags.pm between versions 1.555 and 1.563

version 1.555, 2017/07/02 16:50:30 version 1.563, 2019/08/11 12:27:11
Line 366  var postsubmit = '$postsubmit'; Line 366  var postsubmit = '$postsubmit';
                 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).attr("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) {                      }
                             \$( "#"+buttonId+"_pressed" ).val( "1" );                      if (( "#"+buttonId+"_pressed" ).length) {
                         }                          \$( "#"+buttonId+"_pressed" ).val( "1" );
                     }                      }
                 } else {                  } else {
                     \$( ".LC_status_"+buttonId ).hide();                      \$( ".LC_status_"+buttonId ).hide();
Line 384  var postsubmit = '$postsubmit'; Line 384  var postsubmit = '$postsubmit';
                 if (timeout > 0) {                  if (timeout > 0) {
                     setTimeout(function(){                      setTimeout(function(){
                                        \$( "#msg_"+buttonId ).css({"display": "none"});                                         \$( "#msg_"+buttonId ).css({"display": "none"});
                                        if (( \$(this.form).id == "LC_page" ) && (\$('input[name="all_submit"]').length )) {                                         if (( \$(this.form).attr("id") == "LC_page" ) && (\$('input[name="all_submit"]').length )) {
                                            if (buttonId != "all_submit") {                                             if (( "#"+buttonId+"_pressed" ).length) {
                                                if (( "#"+buttonId+"_pressed" ).length) {                                                 \$( "#"+buttonId+"_pressed" ).val( "" );
                                                    \$( "#"+buttonId+"_pressed" ).val( "" );  
                                                }  
                                            }                                             }
                                        }                                         }
                                        \$( ".LC_hwk_submit" ).prop( "disabled", false);                                         \$( ".LC_hwk_submit" ).prop( "disabled", false);
Line 1117  sub finalize_storage { Line 1115  sub finalize_storage {
  delete(@Apache::lonhomework::results{@remove});   delete(@Apache::lonhomework::results{@remove});
  my ($symb,$courseid,$domain,$name) =    my ($symb,$courseid,$domain,$name) = 
     &Apache::lonnet::whichuser($given_symb);      &Apache::lonnet::whichuser($given_symb);
           my ($passback,$ltiscope,$ltimap,$ltisymb,$ltiref,$total,$possible,$dopassback);
  if ($env{'request.state'} eq 'construct'    if ($env{'request.state'} eq 'construct' 
     || $symb eq ''      || $symb eq ''
     || $Apache::lonhomework::type eq 'practice') {      || $Apache::lonhomework::type eq 'practice') {
Line 1126  sub finalize_storage { Line 1125  sub finalize_storage {
       $namespace,'',$domain,$name);        $namespace,'',$domain,$name);
     &Apache::lonxml::debug('Construct Store return message:'.$result);      &Apache::lonxml::debug('Construct Store return message:'.$result);
  } else {   } else {
             my ($laststore,$checkedparts,@parts,%postcorrect);              my ($laststore,$checkedparts,@parts,%postcorrect,%record);
             if (($env{'user.name'} eq $name) && ($env{'user.domain'} eq $domain) &&              if (($env{'user.name'} eq $name) && ($env{'user.domain'} eq $domain) &&
                 (!$Apache::lonhomework::scantronmode) && (!defined($env{'form.grade_symb'})) &&                  (!$Apache::lonhomework::scantronmode) && (!defined($env{'form.grade_symb'})) &&
                 (!defined($env{'form.grade_courseid'}))) {                  (!defined($env{'form.grade_courseid'}))) {
                   if ($env{'request.lti.login'}) {
                       my ($map)=&Apache::lonnet::decode_symb($symb);
                       $map = &Apache::lonnet::clutter($map);
                       ($passback,$ltiscope,$ltimap,$ltisymb,$ltiref) = 
                           &needs_lti_passback($courseid,$symb,$map);
                   }
                 if ($Apache::lonhomework::history{'version'}) {                  if ($Apache::lonhomework::history{'version'}) {
                     $laststore = $Apache::lonhomework::history{'version'}.'='.                      $laststore = $Apache::lonhomework::history{'version'}.'='.
                                  $Apache::lonhomework::history{'timestamp'};                                   $Apache::lonhomework::history{'timestamp'};
                 } else {                  } else {
                     $laststore = '0=0';                      $laststore = '0=0';
                 }                  }
                 my %record = &Apache::lonnet::restore($symb,$courseid,$domain,$name);                  %record = &Apache::lonnet::restore($symb,$courseid,$domain,$name);
                 if ($record{'version'}) {                  if ($record{'version'}) {
                     my ($newversion,$oldversion,$oldtimestamp);                      my ($newversion,$oldversion,$oldtimestamp);
                     if ($Apache::lonhomework::history{'version'}) {                      if ($Apache::lonhomework::history{'version'}) {
Line 1212  sub finalize_storage { Line 1217  sub finalize_storage {
                     }                      }
                 }                  }
             }              }
               if ($passback) {
                   foreach my $key (keys(%Apache::lonhomework::results)) {
                       if ($key =~ /^resource\.([^\.]+)\.solved$/) {
                           my $part = $1;
                           if ((($Apache::lonhomework::results{$key} =~ /^correct_/) ||
                               ($Apache::lonhomework::results{$key} eq 'incorrect_attempted')) &&
                               ($Apache::lonhomework::results{"resource.$part.tries"})) {
                               $dopassback = 1;
                               last;
                           }
                       }
                   }
               }
               if (($dopassback) && ($ltiscope eq 'resource') && ($ltisymb eq $symb)) {
                   $total = 0;
                   $possible = 0;
                   my $navmap = Apache::lonnavmaps::navmap->new();
                   if (ref($navmap)) {
                       my $res = $navmap->getBySymb($symb);
                       if (ref($res)) {
                           my $partlist = $res->parts();
                           if (ref($partlist) eq 'ARRAY') {
                               foreach my $part (@{$partlist}) {
                                   unless (exists($Apache::lonhomework::results{"resource.$part.solved"})) {
                                       next if ($Apache::lonhomework::record{"resource.$part.solved"} =~/^excused/);
                                       my $weight = &Apache::lonnet::EXT("resource.$part.weight",$symb);
                                       $possible += $weight;
                                       if (($record{'version'}) && (exists($record{"resource.$part.awarded"}))) {
                                           my $awarded = $record{"resource.$part.awarded"};
                                           if ($awarded) {
                                               $total += $weight * $awarded;
                                           }
                                       }
                                   }
                               }
                           }
                       }
                   }
                   foreach my $key (keys(%Apache::lonhomework::results)) {
                       if ($key =~ /^resource\.([^\.]+)\.awarded$/) {
                           my $part = $1;
                           my $weight = &Apache::lonnet::EXT("resource.$part.weight",$symb);
                           $possible += $weight;
                           my $awarded = $Apache::lonhomework::results{$key};
                           if ($awarded) {
                               $total += $weight * $awarded;
                           }
                       }
                   }
               }
     &Apache::lonxml::debug('Store return message:'.$result);      &Apache::lonxml::debug('Store return message:'.$result);
             &store_aggregates($symb,$courseid);              &store_aggregates($symb,$courseid);
               if ($dopassback) {
                   my $scoreformat = 'decimal';
                   if (ref($ltiref) eq 'HASH') {
                       if ($ltiref->{'scoreformat'} =~ /^(decimal|ratio|percentage)$/) {
                           $scoreformat = $1;
                       }
                   }
                   my $ltigrade = {
                                    'lti'      => $ltiref,
                                    'cid'      => $courseid,
                                    'uname'    => $env{'user.name'},
                                    'udom'     => $env{'user.domain'},
                                    'pbid'     => $env{'request.lti.passbackid'},
                                    'pburl'    => $env{'request.lti.passbackurl'},
                                    'scope'    => $ltiscope,
                                    'ltimap'   => $ltimap,
                                    'ltisymb'  => $ltisymb,
                                    'format'   => $scoreformat,
                                  };
                   if ($ltiscope eq 'resource') {
                       $ltigrade->{'total'} = $total;
                       $ltigrade->{'possible'} = $possible;
                   }
                   push(@Apache::lonhomework::ltipassback,$ltigrade);
               }
  }   }
     } else {      } else {
  &Apache::lonxml::debug('Nothing to store');   &Apache::lonxml::debug('Nothing to store');
Line 1221  sub finalize_storage { Line 1301  sub finalize_storage {
     return $result;      return $result;
 }  }
   
   sub needs_lti_passback {
       my ($courseid,$symb,$map) = @_;
       if (($env{'request.lti.passbackid'}) && ($env{'request.lti.passbackurl'})) {
           if ($courseid =~ /^($LONCAPA::match_domain)_($LONCAPA::match_courseid)$/) {
               my ($cdom,$cnum) = ($1,$2);
               my %lti = &Apache::lonnet::get_domain_lti($cdom,'provider');
               if (ref($lti{$env{'request.lti.login'}}) eq 'HASH') {
                   if ($lti{$env{'request.lti.login'}}{'passback'}) {
                       my ($ltiscope,$ltiuri,$ltisymb) =
                           &LONCAPA::ltiutils::lti_provider_scope($env{'request.lti.uri'},
                                                                  $cdom,$cnum,1);
                       my ($passback,$ltimap);
                       if ($ltiscope eq 'resource') {
                           if ($ltisymb eq $symb) {
                               $passback = 1;
                           }
                       } elsif ($ltiscope eq 'map') {
                           if ($ltiuri eq $map) {
                               $passback = 1;
                               $ltimap = $map;
                           }
                       } elsif ($ltiscope eq 'course') {
                           if (($env{'request.lti.uri'} eq "/$cdom/$cnum") || ($env{'request.lti.uri'} eq '')) {
                               $passback = 1;
                           }
                       }
                       return ($passback,$ltiscope,$ltimap,$ltisymb,$lti{$env{'request.lti.login'}});
                   }
               }
           }
       }
       return;
   }
   
 =pod  =pod
   
 =item check_correctness_changes()  =item check_correctness_changes()
Line 1355  sub store_aggregates { Line 1469  sub store_aggregates {
     }      }
 }  }
   
   sub access_status_msg {
       my ($mode,$status,$symb,$target,$ipused,$accessmsg) = @_;
       my $msg;
       if ($target eq 'web') {
           if ($status eq 'UNAVAILABLE') {
               $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') {
               $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') {
               $msg.='<p class="LC_warning">'.&mt('Not open to be viewed').'</p>';
           }
           if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') {
               $msg.=&mt('The problem ').$accessmsg;
           } elsif ($status eq 'UNCHECKEDOUT') {
               $msg.=&checkout_msg();
           } elsif ($status eq 'NOT_YET_VIEWED') {
               $msg.=&firstaccess_msg($accessmsg,$symb);
           } elsif ($status eq 'NOT_IN_A_SLOT') {
               $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.');
           } elsif ($status eq 'NEED_DIFFERENT_IP') {
               if ($ipused) {
                   $msg.=&mt('You must use the same computer ([_1]) you used when you first accessed this resource using your time/place-based reservation.',"IP: $ipused");
               } else {
                   $msg.=&mt('Each student must use a different computer to access this resource at this time and/or place.').'<br />'.
                         &mt('Somebody else has already used this particular computer for that purpose.');
               }
           }
           $msg.='<br />';
       } elsif ($target eq 'tex') {
           my $startminipage = ($env{'form.problem_split'}=~/yes/i)? ''
                                : '\begin{minipage}{\textwidth}';
   
           $msg ='\noindent \vskip 1 mm '.
                 $startminipage.'\vskip 0 mm';
           if ($status eq 'UNAVAILABLE') {
               $msg.=&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'\vskip 0 mm ';
           } else {
               $msg.=&mt('Problem is not open to be viewed. It')." $accessmsg \\vskip 0 mm ";
           }
       }
       return $msg;
   }
   
   sub checkin_prompt {
       my ($target,$slot_name,$slot,$type) = @_;
       my $result; 
       if ($target eq 'web') {
           $result = &Apache::bridgetask::proctor_validation_screen($slot);
       } elsif ($target eq 'grade') {
           if (!&Apache::bridgetask::proctor_check_auth($slot_name,$slot,$type)) {
               $result = &mt('An error occurred during check-in');
           }
       }
       return $result;
   }
   
   sub selfcheckin_resource {
       my ($resource_due,$slot_name,$slot,$symb) = @_;
       if ($slot_name ne '') {
           my $checked_in =
               $Apache::lonhomework::history{'resource.0.checkedin'};
           if ($checked_in eq '') {
               # unproctored slot access, self checkin
               my $needsiptied;
               if (ref($slot)) {
                   $needsiptied = $slot->{'iptied'};
               }
               my $check = &Apache::bridgetask::check_in('problem',undef,undef,
                                                         $slot_name,$needsiptied);
               if ($check =~ /^error: /) {
                   &Apache::lonnet::logthis("Error during self-checkin of problem (symb: $symb) using slot: $slot_name");
               } else {
                   $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'};
                   }
               }
           }
       }
       return $resource_due;
   }
   
 sub checkout_msg {  sub checkout_msg {
     my %lt=&Apache::lonlocal::texthash(       my %lt=&Apache::lonlocal::texthash( 
  'resource'=>'The resource needs to be checked out',   'resource'=>'The resource needs to be checked out',
Line 1561  sub start_problem { Line 1776  sub start_problem {
     my $ipused;      my $ipused;
   
     my $name= &get_resource_name($parstack,$safeeval);      my $name= &get_resource_name($parstack,$safeeval);
     my ($result,$form_tag_start,$slot_name,$slot,$probpartlist);      my ($result,$form_tag_start,$slot_name,$slot,$probpartlist,$firstaccres);
   
     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");
             my ($timelimit) = split(/_/,$interval[0]);              my ($timelimit) = split(/_/,$interval[0]);
             &Apache::lonnet::set_first_access($interval[1],$timelimit);              my $is_set = &Apache::lonnet::set_first_access($interval[1],$timelimit);
               unless (($is_set eq 'ok') || ($is_set eq 'already_set')) {
                   $firstaccres = $is_set;
               }
         }          }
     }      }
   
Line 1675  sub start_problem { Line 1893  sub start_problem {
             ( $status eq 'NEED_DIFFERENT_IP')) {              ( $status eq 'NEED_DIFFERENT_IP')) {
     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 (($status eq 'NOT_YET_VIEWED') && ($firstaccres)) {
  my $msg;                  $result .= '<p class="LC_error">'.
  if ($status eq 'UNAVAILABLE') {                             &mt('A problem occurred when trying to start the timer.').'</p>';
     $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') {              $result .= &access_status_msg('problem',$status,$symb,$target,$ipused,$accessmsg);
                     $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') {  
     $msg.='<p class="LC_warning">'.&mt('Not open to be viewed').'</p>';  
                 }  
  if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') {  
     $msg.=&mt('The problem ').$accessmsg;  
  } elsif ($status eq 'UNCHECKEDOUT') {  
     $msg.=&checkout_msg();  
  } elsif ($status eq 'NOT_YET_VIEWED') {  
     $msg.=&firstaccess_msg($accessmsg,$symb);  
  } elsif ($status eq 'NOT_IN_A_SLOT') {  
     $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.');    
  } elsif ($status eq 'NEED_DIFFERENT_IP') {  
                     if ($ipused) {  
                         $msg.=&mt('You must use the same computer ([_1]) you used when you first accessed this resource using your time/place-based reservation.',"IP: $ipused");  
                     } else {  
                         $msg.=&mt('Each student must use a different computer to access this resource at this time and/or place.').'<br />'.  
                               &mt('Somebody else has already used this particular computer for that purpose.');  
                     }  
                 }  
  $result.=$msg.'<br />';  
     } elsif ($target eq 'tex') {  
  my $startminipage = ($env{'form.problem_split'}=~/yes/i)? ''  
                     : '\begin{minipage}{\textwidth}';  
  $result.='\noindent \vskip 1 mm '.  
     $startminipage.'\vskip 0 mm';  
  if ($status eq 'UNAVAILABLE') {  
     $result.=&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'\vskip 0 mm ';  
  } else {  
     $result.=&mt('Problem is not open to be viewed. It')." $accessmsg \\vskip 0 mm ";  
  }  
     }  
  } elsif ($status eq 'NEEDS_CHECKIN') {   } elsif ($status eq 'NEEDS_CHECKIN') {
     my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser,      my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser,
        $style);         $style);
     if ($target eq 'web') {              $result .= &checkin_prompt($target,$slot_name,$slot,'problem');
  $result .=   
     &Apache::bridgetask::proctor_validation_screen($slot);  
     } elsif ($target eq 'grade') {  
  my $checkinresult = &Apache::bridgetask::proctor_check_auth($slot_name,$slot,  
                     'problem');  
                 if ($checkinresult = /^error:/) {  
                     $result .= 'error';  
                 }  
     }  
  } elsif ($target eq 'web') {   } elsif ($target eq 'web') {
     if ($status eq 'CAN_ANSWER') {      if ($status eq 'CAN_ANSWER') {
                 $resource_due = &Apache::lonhomework::due_date(0, $env{'request.symb'});                  $resource_due = &Apache::lonhomework::due_date(0, $env{'request.symb'});
                 if ($slot_name ne '') {                  if ($slot_name ne '') {
                     my $checked_in =                      $resource_due = &selfcheckin_resource($resource_due,$slot_name,$slot,
                         $Apache::lonhomework::history{'resource.0.checkedin'};                                                            $env{'request.symb'});
                     if ($checked_in eq '') {  
                         # unproctored slot access, self checkin  
                         my $needsiptied;  
                         if (ref($slot)) {  
                             $needsiptied = $slot->{'iptied'};  
                         }  
                         my $check = &Apache::bridgetask::check_in('problem',undef,undef,  
                                                                   $slot_name,$needsiptied);  
                         if ($check =~ /^error: /) {  
                             &Apache::lonnet::logthis("Error during self-checkin of problem (symb: $env{'request.symb'}) using slot: $slot_name");  
                         } else {  
                             $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) {                  if ($resource_due) {
                     my $time_left = $resource_due - time();                      my $time_left = $resource_due - time();
Line 1811  sub start_problem { Line 1951  sub start_problem {
  } elsif ($target eq 'tex') {   } elsif ($target eq 'tex') {
     $result .= 'INSERTTEXFRONTMATTERHERE';      $result .= 'INSERTTEXFRONTMATTERHERE';
     $result .= &select_metadata_hyphenation();      $result .= &select_metadata_hyphenation();
       
   
  }   }
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
  $result .= $form_tag_start.&problem_edit_header();   $result .= $form_tag_start.&problem_edit_header();
Line 2040  sub end_problem { Line 2178  sub end_problem {
     @Apache::inputtags::response=();      @Apache::inputtags::response=();
     $result=&Apache::response::mandatory_part_meta;      $result=&Apache::response::mandatory_part_meta;
  }   }
  $result.=&Apache::response::meta_part_order();   $result.=&Apache::response::meta_part_order('problem');
  $result.=&Apache::response::meta_response_order();   $result.=&Apache::response::meta_response_order();
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
  &Apache::lonxml::debug("in end_problem with $target, edit");   &Apache::lonxml::debug("in end_problem with $target, edit");
Line 2117  sub end_library { Line 2255  sub end_library {
      && ($#$tagstack eq 0 && $$tagstack[0] eq 'library')        && ($#$tagstack eq 0 && $$tagstack[0] eq 'library') 
      && $env{'request.state'} eq "construct") {       && $env{'request.state'} eq "construct") {
  $result.='</form>'.&Apache::loncommon::end_page({'discussion' => 1});   $result.='</form>'.&Apache::loncommon::end_page({'discussion' => 1});
       } elsif ($target eq 'meta') {
           $result.=&Apache::response::meta_part_order('library');
           $result.=&Apache::response::meta_response_order();
     }      }
     if ( $#$tagstack eq 0 && $$tagstack[0] eq 'library') {      if ( $#$tagstack eq 0 && $$tagstack[0] eq 'library') {
  &reset_problem_globals('library');   &reset_problem_globals('library');
Line 3147  sub end_simpleeditbutton { Line 3288  sub end_simpleeditbutton {
 }  }
   
 sub practice_problem_header {  sub practice_problem_header {
     return '<span class="LC_info"><h3>'.&mt('Practice Problem').'</h3></span>'.      return '<h3 class="LC_info">'.&mt('Practice Problem').'</h3>'.
            '<span class="LC_info">'.&mt('Submissions are not permanently recorded').             '<span class="LC_info">'.&mt('Submissions are not permanently recorded').
            '</span>';             '</span>';
 }  }
Line 3173  sub randomizetry_problem_header { Line 3314  sub randomizetry_problem_header {
             $text = &mt('A new variation will be generated after each try until correct or tries limit is reached.');              $text = &mt('A new variation will be generated after each try until correct or tries limit is reached.');
         }          }
     }      }
     return '<span class="LC_info"><h3>'.$header.'</h3></span>'.      return '<h3 class="LC_info">'.$header.'</h3>'.
            '<span class="LC_info">'.$text.'</span><hr />';             '<span class="LC_info">'.$text.'</span><hr />';
 }  }
   
Line 3204  sub randomizetry_part_header { Line 3345  sub randomizetry_part_header {
     if ($num > 1) {      if ($num > 1) {
         $output .= '<hr />';          $output .= '<hr />';
     }      }
     $output .=  '<span class="LC_info"><h4>'.$header.'</h4></span>'.      $output .=  '<h4 class="LC_info">'.$header.'</h4>'.
                   '<span class="LC_info">'.$text.'</span><br /><br />';                    '<span class="LC_info">'.$text.'</span><br /><br />';
     return $output;      return $output;
 }  }

Removed from v.1.555  
changed lines
  Added in v.1.563


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