Diff for /loncom/homework/structuretags.pm between versions 1.512.2.24.2.4 and 1.512.2.24.2.14

version 1.512.2.24.2.4, 2023/09/06 22:46:09 version 1.512.2.24.2.14, 2024/03/01 17:05:45
Line 273  sub homework_js { Line 273  sub homework_js {
     }      }
     return &Apache::loncommon::resize_textarea_js().      return &Apache::loncommon::resize_textarea_js().
            &Apache::loncommon::colorfuleditor_js().             &Apache::loncommon::colorfuleditor_js().
            &setmode_javascript().             &Apache::lonxml::setmode_javascript().
  <<"JS";   <<"JS";
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  // <![CDATA[
Line 385  var postsubmit = '$postsubmit'; Line 385  var postsubmit = '$postsubmit';
 JS  JS
 }  }
   
 sub setmode_javascript {  
     return <<"ENDSCRIPT";  
 <script type="text/javascript">  
 // <![CDATA[  
 function setmode(form,probmode) {  
     var initial = form.problemmode.value;  
     form.problemmode.value = probmode;  
     form.submit();  
     form.problemmode.value = initial;  
 }  
 // ]]>  
 </script>  
 ENDSCRIPT  
 }  
   
 sub page_start {  sub page_start {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$name,      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$name,
  $extra_head)=@_;   $extra_head)=@_;
Line 421  sub page_start { Line 406  sub page_start {
     if (&Apache::lonhtmlcommon::htmlareabrowser()) {      if (&Apache::lonhtmlcommon::htmlareabrowser()) {
         my %textarea_args;          my %textarea_args;
         if (($env{'request.state'} ne 'construct') ||          if (($env{'request.state'} ne 'construct') ||
             ($env{'environment.nocodemirror'})) {              (&Apache::loncommon::nocodemirror())) {
             %textarea_args = (              %textarea_args = (
                                 dragmath => 'math',                                  dragmath => 'math',
                               );                                );
Line 529  sub page_start { Line 514  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 Authoring Space              unless ($env{'form.inhibitmenu'} eq 'yes') {
         &Apache::lonhtmlcommon::clear_breadcrumbs();                  # Breadcrumbs for Authoring Space
         &Apache::lonhtmlcommon::add_breadcrumb({                  &Apache::lonhtmlcommon::clear_breadcrumbs();
             'text'  => 'Authoring Space',                  &Apache::lonhtmlcommon::add_breadcrumb({
             'href'  => &Apache::loncommon::authorspace($env{'request.uri'}),                      'text'  => 'Authoring Space',
         });                      'href'  => &Apache::loncommon::authorspace($env{'request.uri'}),
         # breadcrumbs (and tools) will be created                   });
         # in start_page->bodytag->innerregister                  # breadcrumbs (and tools) will be created 
                   # in start_page->bodytag->innerregister
   
 # FIXME Where are we?  # FIXME Where are we?
 #        &Apache::lonhtmlcommon::add_breadcrumb({  #                &Apache::lonhtmlcommon::add_breadcrumb({
 #            'text'  => 'Problem Editing', # 'Problem Testing'  #                    'text'  => 'Problem Editing', # 'Problem Testing'
 #            'href'  => '',  #                    'href'  => '',
 #        });  #               });
         $pageheader =&Apache::loncommon::head_subbox(                  $pageheader = &Apache::loncommon::head_subbox(
                 &Apache::loncommon::CSTR_pageheader());                                   &Apache::loncommon::CSTR_pageheader());
  }      }
           }
     } elsif (!defined($found{'body'})) {      } elsif (!defined($found{'body'})) {
  my %add_entries;   my %add_entries;
  my $background=&Apache::lonxml::get_param('background',$parstack,   my $background=&Apache::lonxml::get_param('background',$parstack,
Line 708  sub setup_rndseed { Line 695  sub setup_rndseed {
             }              }
             $env{'form.'.$Apache::inputtags::part.'.rndseed'}=$rndseed;              $env{'form.'.$Apache::inputtags::part.'.rndseed'}=$rndseed;
         }          }
  if ( ($env{'form.resetdata'} eq &mt('New Problem Variation')   if ( ($env{'form.resetdata'} eq 'new_problem_variation'
       && $env{'form.submitted'} eq 'yes')  ||        && $env{'form.submitted'} eq 'yes')  ||
     $env{'form.newrandomization'} eq &mt('New Randomization')) {      $env{'form.newrandomization'} eq &mt('New Randomization')) {
     srand(time);      srand(time);
Line 791  sub problem_edit_action_button { Line 778  sub problem_edit_action_button {
   
 sub problem_edit_buttons {  sub problem_edit_buttons {
    my ($mode)=@_;     my ($mode)=@_;
      my %editors = &Apache::loncommon::permitted_editors();
 # Buttons that save  # Buttons that save
    my $result = '<div style="float:right">';     my $result = '<div style="float:right">';
    if ($mode eq 'editxml') {     if ($mode eq 'editxml') {
        $result.=&problem_edit_action_button('subsaveedit','saveeditxml','s','Save and EditXML');         if ($editors{'xml'}) {
              $result.=&problem_edit_action_button('subsaveedit','saveeditxml','s','Save and EditXML');
          }
        $result.=&problem_edit_action_button('subsaveview','saveviewxml','v','Save and View');         $result.=&problem_edit_action_button('subsaveview','saveviewxml','v','Save and View');
    } else {     } else {
        $result.=&problem_edit_action_button('subsaveedit','saveedit','s','Save and Edit');         if ($editors{'edit'}) {
              $result.=&problem_edit_action_button('subsaveedit','saveedit','s','Save and Edit');
          }
        $result.=&problem_edit_action_button('subsaveview','saveview','v','Save and View');         $result.=&problem_edit_action_button('subsaveview','saveview','v','Save and View');
    }     }
    $result.="\n</div>\n";     $result.="\n</div>\n";
Line 805  sub problem_edit_buttons { Line 797  sub problem_edit_buttons {
    $result .= '<div>'.     $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);         if ($editors{'edit'}) {
              $result.=&problem_edit_action_button('subedit','edit','e','Edit',1);
          }
          if ($editors{'daxe'}) {
              $result.=&problem_edit_action_button('subdaxe','daxe','w','Edit with Daxe',1);
          }
        $result.=&problem_edit_action_button('subundo','undoxml','u','Undo',1);         $result.=&problem_edit_action_button('subundo','undoxml','u','Undo',1);
        if ($env{'environment.nocodemirror'}) {         if (&Apache::loncommon::nocodemirror()) {
            $result.=&Apache::lonhtmlcommon::dragmath_button("LC_editxmltext",1);             $result.=&Apache::lonhtmlcommon::dragmath_button("LC_editxmltext",1);
        }         }
    } else {     } else {
        $result.=&problem_edit_action_button('subeditxml','editxml','x','EditXML',1);         if ($editors{'xml'}) {
              $result.=&problem_edit_action_button('subeditxml','editxml','x','EditXML',1);
          }
          if ($editors{'daxe'}) {
              $result.=&problem_edit_action_button('subdaxe','daxe','w','Edit with Daxe',1);
          }
        $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>";
Line 825  sub problem_edit_header { Line 827  sub problem_edit_header {
         <div class="LC_edit_problem_header">          <div class="LC_edit_problem_header">
         <div class="LC_edit_problem_header_title">          <div class="LC_edit_problem_header_title">
         '.&mt('Problem Editing').$mode.&Apache::loncommon::help_open_menu('Problem Editing','Problem_Editor_XML_Index',5,'Authoring').'          '.&mt('Problem Editing').$mode.&Apache::loncommon::help_open_menu('Problem Editing','Problem_Editor_XML_Index',5,'Authoring').'
          </div><div class="LC_edit_actionbar" id="actionbar">'.          </div><div class="LC_edit_actionbar" id="actionbar">'.
          '<input type="hidden" name="problemmode" value="saveedit" />'.          '<input type="hidden" name="problemmode" value="saveedit" />'.
          &problem_edit_buttons();          &problem_edit_buttons();
   
     $return .= '</div></div>' . &Apache::lonxml::message_location();      $return .= '</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" />
Line 884  sub option { Line 886  sub option {
   
 sub problem_web_to_edit_header {  sub problem_web_to_edit_header {
     my ($rndseed)=@_;      my ($rndseed)=@_;
       my %editors = &Apache::loncommon::permitted_editors();
     my $result .= '<div class="LC_edit_problem_header">';      my $result .= '<div class="LC_edit_problem_header">';
   
     if (!$Apache::lonhomework::parsing_a_task) {      if (!$Apache::lonhomework::parsing_a_task) {
Line 983  $show_all Line 986  $show_all
      </div>       </div>
      <input type="submit" name="changeproblemmode" value="'.&mt("Change View").'" />       <input type="submit" name="changeproblemmode" value="'.&mt("Change View").'" />
      <input type="submit" name="clear_style_file" accesskey="d" value="'.&mt('Show Default View').'" />       <input type="submit" name="clear_style_file" accesskey="d" value="'.&mt('Show Default View').'" />
      <input type="submit" name="resetdata" accesskey="r" value="'.&mt('Reset Submissions').'" />       <button type="submit" name="resetdata" accesskey="r" value="reset_submissions">
        '.&mt('Reset Submissions').'</button>
    </div>     </div>
    <hr />     <hr />
    <div class="LC_edit_problem_header_randomize_row">     <div class="LC_edit_problem_header_randomize_row">
Line 1012  $show_all Line 1016  $show_all
    <hr />     <hr />
    <div>';     <div>';
     $result.='<input type="hidden" name="problemmode" value="view" />';      $result.='<input type="hidden" name="problemmode" value="view" />';
     $result .= '<input type="button" name="submitmode" accesskey="e" value="'.&mt('Edit').'" '.      if ($editors{'edit'}) {
                'onclick="javascript:setmode(this.form,'."'edit'".')" />';          $result .= '<input type="button" name="submitmode" accesskey="e" value="'.&mt('Edit').'" '.
     $result .= '<input type="button" name="submitmode" accesskey="x" value="'.&mt('EditXML').'" '.                     'onclick="javascript:setmode(this.form,'."'edit'".')" />';
                'onclick="javascript:setmode(this.form,'."'editxml'".')" />';      }
       if ($editors{'xml'}) {
           $result .= '<input type="button" name="submitmode" accesskey="x" value="'.&mt('EditXML').'" '.
                      'onclick="javascript:setmode(this.form,'."'editxml'".')" />';
       }
       if (($editors{'daxe'}) &&
           ($env{'browser.type'} ne 'explorer' || $env{'browser.version'} > 9)) {
           my $uri = $env{'request.uri'};
           my $daxeurl = '/daxepage'.$uri;
           $result .= '<input type="button" accesskey="w" value="'.&mt('Edit with Daxe').'" '.
                      'onclick="javascript:setmode(this.form,'."'daxe'".')" />';
       }
     $result.='      $result.='
    </div>     </div>
    <hr />     <hr />
Line 1042  sub initialize_storage { Line 1057  sub initialize_storage {
  || $Apache::lonhomework::type eq 'practice') {   || $Apache::lonhomework::type eq 'practice') {
   
  my $namespace = $symb || $env{'request.uri'};   my $namespace = $symb || $env{'request.uri'};
  if ($env{'form.resetdata'} eq &mt('Reset Submissions') ||          if ($env{'form.resetdata'} eq 'reset_submissions' ||
     ($env{'form.resetdata'} eq &mt('New Problem Variation')              ($env{'form.resetdata'} eq 'new_problem_variation'
      && $env{'form.submitted'} eq 'yes') ||       && $env{'form.submitted'} eq 'yes') ||
     $env{'form.newrandomization'} eq &mt('New Randomization')) {      $env{'form.newrandomization'} eq &mt('New Randomization')) {
     &Apache::lonnet::tmpreset($namespace,'',$domain,$name);      &Apache::lonnet::tmpreset($namespace,'',$domain,$name);
Line 1383  sub needs_linkprot_passback { Line 1398  sub needs_linkprot_passback {
                             $lti_in_use = $domlti{$itemnum};                              $lti_in_use = $domlti{$itemnum};
                         }                          }
                         my ($state,$others,$listed,$scope,$protect,$display,$target,$exit) = split(/,/,$deeplink);                          my ($state,$others,$listed,$scope,$protect,$display,$target,$exit) = split(/,/,$deeplink);
                         my $passback;                          my ($passback,$pbscope);
                         if ($scope eq 'resource') {                          if ($scope eq 'res') {
                             if ($deeplink_symb eq $symb) {                              if ($deeplink_symb eq $symb) {
                                 $passback = 1;                                  $passback = 1;
                                   $pbscope = 'resource';
                             }                              }
                         } elsif ($scope eq 'map') {                          } elsif ($scope eq 'map') {
                             if (&Apache::lonnet::clutter($deeplink_map) eq $map) {                              if (&Apache::lonnet::clutter($deeplink_map) eq $map) {
                                 $passback = 1;                                  $passback = 1;
                                   $pbscope = 'nonrec';
                               }
                           } elsif ($scope eq 'rec') {
                               if (&Apache::lonnet::clutter($deeplink_map) eq $map) {
                                   $passback = 1;
                                   $pbscope = 'map';
                               } else {
                                   my @recurseup = &Apache::lonnet::get_map_hierarchy($map,$env{'request.course.id'});
                                   if (grep(/^\Q$deeplink_map\E$/,@recurseup)) {
                                       $passback = 1;
                                       $pbscope = 'map';
                                   }
                             }                              }
                         } elsif ($scope eq 'recurse') {  
 #FIXME check if $deeplink_map contains $map  
                             $passback = 1;  
                         }                          }
                         return ($passback,$scope,$deeplink_map,$deeplink_symb,$crsdef,$itemnum,$lti_in_use);                          return ($passback,$pbscope,$deeplink_map,$deeplink_symb,$crsdef,$itemnum,$lti_in_use);
                     }                      }
                 }                  }
             }              }
Line 1538  sub store_aggregates { Line 1563  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.');
           }
           $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.');
           } elsif ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') {
               $msg.=&mt('Problem is not open to be viewed. It')." $accessmsg";
           } else {
               $msg.=&mt('Problem is not open to be viewed.');
           }
           $msg .= " \\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 $check = &Apache::bridgetask::check_in('problem',undef,undef,
                                                         $slot_name);
               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 1766  sub start_problem { Line 1884  sub start_problem {
  ($result,$form_tag_start,$probpartlist) =   ($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')) || {      } elsif ((($target eq 'grade') && ($Apache::lonhomework::type eq 'randomizetry')) ||
              ($target eq 'answer')) {                  ($target eq 'answer')) {
         my ($symb)= &Apache::lonnet::whichuser();          my ($symb)= &Apache::lonnet::whichuser();
         if ($symb ne '') {          if ($symb ne '') {
             my $navmap = Apache::lonnavmaps::navmap->new();              my $navmap = Apache::lonnavmaps::navmap->new();
Line 1789  sub start_problem { Line 1907  sub start_problem {
         $target eq 'tex') {          $target eq 'tex') {
   
         my ($symb)= &Apache::lonnet::whichuser();          my ($symb)= &Apache::lonnet::whichuser();
         ($status,$accessmsg,$slot_name,$slot,$ipused) =          ($status,$accessmsg,$slot_name,$slot) =
             &Apache::lonhomework::check_slot_access('0','problem',$symb,$probpartlist);              &Apache::lonhomework::check_slot_access('0','problem',$symb,$probpartlist);
         push (@Apache::inputtags::status,$status);          push (@Apache::inputtags::status,$status);
     }       } 
Line 1831  sub start_problem { Line 1949  sub start_problem {
             }              }
     $form_tag_start.='<input type="hidden" name="rndseed" value="'.      $form_tag_start.='<input type="hidden" name="rndseed" value="'.
  $rndseedval.'" />'.   $rndseedval.'" />'.
     '<input type="submit" name="resetdata"      '<button type="submit" name="resetdata"
                              value="'.&mt('New Problem Variation').'" />';                          value="new_problem_variation">'.&mt('New Problem Variation').'</button>';
     if (exists($env{'form.username'})) {      if (exists($env{'form.username'})) {
  $form_tag_start.=   $form_tag_start.=
     '<input type="hidden" name="username"      '<input type="hidden" name="username"
Line 1884  sub start_problem { Line 2002  sub start_problem {
     ( $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 (($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,'',$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') {  
                     if ($firstaccres) {  
                         $msg .= '<p class="LC_error">'.  
                                 &mt('A problem occurred when trying to start the timer.').'</p>';  
                     }  
     $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.');    
  }  
  $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') {  
  &Apache::bridgetask::proctor_check_auth($slot_name,$slot,  
  'problem');  
     }  
  } 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  
                         &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) {                  if ($resource_due) {
                     my $time_left = $resource_due - time();                      my $time_left = $resource_due - time();
Line 1975  sub start_problem { Line 2029  sub start_problem {
       '<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
     if ($env{'request.state'} eq "construct") {      if ($env{'request.state'} eq "construct") {
  $result.= &problem_web_to_edit_header($env{'form.rndseed'});                  if ($env{'form.inhibitmenu'} eq 'yes') {
                       # error messages can be useful in any case
                       $result.= &Apache::lonxml::message_location();
                   } else {
       $result.= &problem_web_to_edit_header($env{'form.rndseed'});
                   }
                 if ($Apache::lonhomework::type eq 'practice') {                  if ($Apache::lonhomework::type eq 'practice') {
                     $result.= '<input type="submit" name="resetdata" '.                      $result.= '<button type="submit" name="resetdata" '.
                               'value="'.&mt('New Problem Variation').'" />'.                                'value="new_problem_variation">'.&mt('New Problem Variation').'</button>'.
                               &practice_problem_header().'<hr />';                                &practice_problem_header().'<hr />';
                 } elsif ($Apache::lonhomework::type eq 'randomizetry') {                  } elsif ($Apache::lonhomework::type eq 'randomizetry') {
                     my $reqtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::part.randomizeontries");                      my $reqtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::part.randomizeontries");
Line 2005  sub start_problem { Line 2064  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 2246  ENDJS Line 2303  ENDJS
     # computation:      # computation:
     #      #
     if ($target eq 'web') {      if ($target eq 'web') {
         $result .= &Apache::lonhtmlcommon::set_compute_end_time();          $result .= &Apache::lonhtmlcommon::dash_to_minus_js().
                      &Apache::lonhtmlcommon::set_compute_end_time();
         #          #
         # Closing tags delayed so any <script></script> tags           # Closing tags delayed so any <script></script> tags 
         # not in head can appear inside body, for valid xhtml.          # not in head can appear inside body, for valid xhtml.
Line 2285  sub start_library { Line 2343  sub start_library {
   '<input type="hidden" name="submitted" value="yes" />';    '<input type="hidden" name="submitted" value="yes" />';
  $result.=&problem_web_to_edit_header($rndseed);   $result.=&problem_web_to_edit_header($rndseed);
         if ($Apache::lonhomework::type eq 'practice') {          if ($Apache::lonhomework::type eq 'practice') {
             $result.= '<input type="submit" name="resetdata" '.              $result.= '<button type="submit" name="resetdata" '.
                       'value="'.&mt('New Problem Variation').'" />'.                        'value="new_problem_variation">'.&mt('New Problem Variation').'</button>'.
                       &practice_problem_header().'<hr />';                        &practice_problem_header().'<hr />';
         }          }
     }      }
Line 3238  sub end_startouttext { Line 3296  sub end_startouttext {
                  .&Apache::edit::deletelist($target,$token)                   .&Apache::edit::deletelist($target,$token)
                  .'</span></td>'                   .'</span></td>'
          .'<td><span id="math_'.$areaid.'">';           .'<td><span id="math_'.$areaid.'">';
  if ($env{'environment.nocodemirror'}) {   if (&Apache::loncommon::nocodemirror()) {
     $result.=&Apache::lonhtmlcommon::dragmath_button($areaid,1);      $result.=&Apache::lonhtmlcommon::dragmath_button($areaid,1);
  } else {   } else {
     $result.='&nbsp;';      $result.='&nbsp;';

Removed from v.1.512.2.24.2.4  
changed lines
  Added in v.1.512.2.24.2.14


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