Diff for /loncom/homework/lonhomework.pm between versions 1.321 and 1.330

version 1.321, 2010/09/27 22:15:32 version 1.330, 2011/11/14 00:20:39
Line 129  sub get_target { Line 129  sub get_target {
     return ('web');      return ('web');
  }   }
     } elsif ($env{'request.state'} eq "construct") {      } elsif ($env{'request.state'} eq "construct") {
   #
   # We are in construction space, editing and testing problems
   #
  if ( defined($env{'form.grade_target'}) ) {   if ( defined($env{'form.grade_target'}) ) {
     return ($env{'form.grade_target'});      return ($env{'form.grade_target'});
  }   }
  if ( defined($env{'form.preview'})) {   if ( defined($env{'form.preview'})) {
     if ( defined($env{'form.submitted'})) {      if ( defined($env{'form.submitted'})) {
   #
   # We are doing a problem preview
   #
  return ('grade', 'web');   return ('grade', 'web');
     } else {      } else {
  return ('web');   return ('web');
     }      }
  } else {   } else {
     if ($env{'form.problemstate'} eq 'WEB_GRADE') {      if ($env{'form.problemstate'} eq 'WEB_GRADE') {
  #$env{'form.webgrade'} = 'yes';  
  return ('grade','webgrade','answer');   return ('grade','webgrade','answer');
     } elsif (($env{'form.problemmode'} eq 'view') ||              } elsif ($env{'form.problemmode'} eq 'view') {
      ($env{'form.problemmode'} eq 'discard')) {                  return ('grade','web','answer');
  if ( defined($env{'form.submitted'}) &&      } elsif ($env{'form.problemmode'} eq 'saveview') {
      (!defined($env{'form.resetdata'})) &&                  return ('modified','web','answer');
      (!defined($env{'form.newrandomization'}))) {              } elsif ($env{'form.problemmode'} eq 'discard') {
     return ('grade', 'web','answer');                  return ('web','answer');
  } else {              } elsif (($env{'form.problemmode'} eq 'saveedit') ||
     return ('web','answer');                       ($env{'form.problemmode'} eq 'undo')) {
  }                  return ('modified','no_output_web','edit');
     } elsif ($env{'form.problemmode'} eq 'edit') {              } elsif ($env{'form.problemmode'} eq 'edit') {
  if ( $env{'form.submitted'} eq 'edit' ) {   return ('no_output_web','edit');
     if ( $env{'form.submitbutton'} eq &mt('Save and View') ) {  
  return ('modified','web','answer');  
     } else {  
  return ('modified','no_output_web','edit');  
     }  
  } else {  
     return ('no_output_web','edit');  
  }  
     } else {      } else {
  return ('web');   return ('web');
     }      }
  }          }
   #
   # End of Construction Space
   #
     }      }
   #
   # Huh? We are nowhere, so do nothing.
   #
     return ();      return ();
 }  }
   
Line 260  sub check_slot_access { Line 263  sub check_slot_access {
     }      }
     if ($slotstatus eq 'NEEDS_CHECKIN' &&      if ($slotstatus eq 'NEEDS_CHECKIN' &&
  &proctor_checked_in($slot_name,$returned_slot,$type)) {   &proctor_checked_in($slot_name,$returned_slot,$type)) {
  &Apache::lonxml::debug("protoctor checked in");   &Apache::lonxml::debug("proctor checked in");
  $slotstatus='CAN_ANSWER';   $slotstatus=$status;
     }      }
   
     my ($is_correct,$got_grade,$checkedin);      my ($is_correct,$got_grade,$checkedin);
Line 373  sub check_access { Line 376  sub check_access {
     $date=&mt("can not be accessed from your location.");      $date=&mt("can not be accessed from your location.");
     return($status,$date);      return($status,$date);
  }   }
    if ($env{'form.grade_imsexport'}) {
               if (($env{'request.course.id'}) && 
                   (&Apache::lonnet::allowed('mdc',$env{'request.course.id'}))) {
                   return ('SHOW_ANSWER');
               }
           }
  foreach my $temp ("opendate","duedate","answerdate") {   foreach my $temp ("opendate","duedate","answerdate") {
     $lastdate = $date;      $lastdate = $date;
     if ($temp eq 'duedate') {      if ($temp eq 'duedate') {
Line 431  sub check_access { Line 439  sub check_access {
  if ( $tries eq '' ) { $tries = '0'; }   if ( $tries eq '' ) { $tries = '0'; }
  if ( $maxtries eq '' &&    if ( $maxtries eq '' && 
      $env{'request.state'} ne 'construct') { $maxtries = '2'; }        $env{'request.state'} ne 'construct') { $maxtries = '2'; } 
    $Apache::lonhomework::results{'resource.'.$id.'.maxtries'}=$maxtries;
  if ($maxtries && $tries >= $maxtries) { $status = 'CANNOT_ANSWER'; }   if ($maxtries && $tries >= $maxtries) { $status = 'CANNOT_ANSWER'; }
  # if (correct and show prob status) or excused then CANNOT_ANSWER   # if (correct and show prob status) or excused then CANNOT_ANSWER
  if(($Apache::lonhomework::history{"resource.$id.solved"}=~/^correct/   if(($Apache::lonhomework::history{"resource.$id.solved"}=~/^correct/
     &&      &&
     &show_problem_status())      &show_problem_status()
               &&
               $Apache::lonhomework::history{"resource.$id.awarded"}==1)
    ||     ||
    $Apache::lonhomework::history{"resource.$id.solved"}=~/^excused/) {     $Apache::lonhomework::history{"resource.$id.solved"}=~/^excused/) {
     $status = 'CANNOT_ANSWER';      $status = 'CANNOT_ANSWER';
Line 628  sub setupheader { Line 639  sub setupheader {
   
 sub handle_save_or_undo {  sub handle_save_or_undo {
     my ($request,$problem,$result) = @_;      my ($request,$problem,$result) = @_;
   
     my $file    = &Apache::lonnet::filelocation("",$request->uri);      my $file    = &Apache::lonnet::filelocation("",$request->uri);
     my $filebak =$file.".bak";      my $filebak =$file.".bak";
     my $filetmp =$file.".tmp";      my $filetmp =$file.".tmp";
     my $error=0;      my $error=0;
     if ($env{'form.Undo'} eq &mt('undo')) {      if (($env{'form.problemmode'} eq 'undo') || ($env{'form.problemmode'} eq 'undoxml')) {
  my $error=0;   my $error=0;
  if (!&File::Copy::copy($file,$filetmp)) { $error=1; }   if (!&File::Copy::copy($file,$filetmp)) { $error=1; }
  if ((!$error) && (!&File::Copy::copy($filebak,$file))) { $error=1; }   if ((!$error) && (!&File::Copy::copy($filebak,$file))) { $error=1; }
Line 655  sub handle_save_or_undo { Line 667  sub handle_save_or_undo {
  }   }
     } else {      } else {
         &Apache::lonnet::correct_line_ends($result);          &Apache::lonnet::correct_line_ends($result);
   
  my $fs=Apache::File->new(">$filebak");   my $fs=Apache::File->new(">$filebak");
  if (defined($fs)) {   if (defined($fs)) {
     print $fs $$problem;      print $fs $$problem;
Line 685  sub analyze_header { Line 698  sub analyze_header {
     my $js = &Apache::structuretags::setmode_javascript();      my $js = &Apache::structuretags::setmode_javascript();
   
     # Breadcrumbs      # Breadcrumbs
     my $brcrum = [{'href' => &Apache::loncommon::authorspace(),      my $brcrum = [{'href' => &Apache::loncommon::authorspace($request->uri),
                    'text' => 'Construction Space'},                     'text' => 'Construction Space'},
                   {'href' => '',                    {'href' => '',
                    'text' => 'Problem Testing'},                     'text' => 'Problem Testing'},
Line 891  sub editxmlmode { Line 904  sub editxmlmode {
     my $problem=&Apache::lonnet::getfile($file);      my $problem=&Apache::lonnet::getfile($file);
     if ($problem eq -1) {      if ($problem eq -1) {
  &Apache::lonxml::error(   &Apache::lonxml::error(
             '<b> '              '<p class="LC_error">'
            .&mt('Unable to find [_1]',             .&mt('Unable to find [_1]',
                 '<span class="LC_filename">'.$file.'</span>')                  '<span class="LC_filename">'.$file.'</span>')
            .'</b>');             .'</p>');
   
  $problem='';   $problem='';
     }      }
     if (defined($env{'form.editxmltext'}) || defined($env{'form.Undo'})) {  
       if (($env{'form.problemmode'} eq 'saveeditxml') ||
           ($env{'form.problemmode'} eq 'saveviewxml') || 
           ($env{'form.problemmode'} eq 'undoxml')) {
  my $error=&handle_save_or_undo($request,\$problem,   my $error=&handle_save_or_undo($request,\$problem,
        \$env{'form.editxmltext'});         \$env{'form.editxmltext'});
  if (!$error) { $problem=&Apache::lonnet::getfile($file); }   if (!$error) { $problem=&Apache::lonnet::getfile($file); }
     }      }
     &Apache::lonhomework::showhashsubset(\%env,'^form');      &Apache::lonhomework::showhashsubset(\%env,'^form');
     if ( $env{'form.submitbutton'} eq &mt('Save and View') ) {      if ($env{'form.problemmode'} eq 'saveviewxml') {
  &Apache::lonhomework::showhashsubset(\%env,'^form');   &Apache::lonhomework::showhashsubset(\%env,'^form');
  $env{'form.problemmode'}='view';   $env{'form.problemmode'}='view';
  &renderpage($request,$file);   &renderpage($request,$file);
Line 918  sub editxmlmode { Line 934  sub editxmlmode {
     &Apache::loncommon::resize_textarea_js().      &Apache::loncommon::resize_textarea_js().
             &Apache::structuretags::setmode_javascript().              &Apache::structuretags::setmode_javascript().
             &Apache::lonhtmlcommon::dragmath_js("EditMathPopup");              &Apache::lonhtmlcommon::dragmath_js("EditMathPopup");
  my $dragmath_button =   
             &Apache::lonhtmlcommon::dragmath_button("LC_editxmltext",1);  
   
     # Breadcrumbs      # Breadcrumbs
     my $brcrum = [{'href' => &Apache::loncommon::authorspace(),      my $brcrum = [{'href' => &Apache::loncommon::authorspace($request->uri),
                    'text' => 'Construction Space'},                     'text' => 'Construction Space'},
                   {'href' => '',                    {'href' => '',
                    'text' => 'Problem Editing'}];                     'text' => 'Problem Editing'}];
Line 934  sub editxmlmode { Line 948  sub editxmlmode {
     'add_entries'      => {      'add_entries'      => {
  'onresize' => q[resize_textarea('LC_editxmltext','LC_aftertextarea')],   'onresize' => q[resize_textarea('LC_editxmltext','LC_aftertextarea')],
  'onload'   => q[resize_textarea('LC_editxmltext','LC_aftertextarea')],   'onload'   => q[resize_textarea('LC_editxmltext','LC_aftertextarea')],
                                     },                                                                    },
                                                 'bread_crumbs' => $brcrum,                                                  'bread_crumbs' => $brcrum,
 });                                               });
   
     $result=$start_page      $result=$start_page
            .&Apache::loncommon::head_subbox(             .&Apache::loncommon::head_subbox(
Line 951  sub editxmlmode { Line 965  sub editxmlmode {
                 </td><td align="right">                  </td><td align="right">
                   '.&Apache::loncommon::helpLatexCheatsheet('Problem_LON-CAPA_Functions','Script Functions').'                    '.&Apache::loncommon::helpLatexCheatsheet('Problem_LON-CAPA_Functions','Script Functions').'
                 </td></tr>                  </td></tr>
               </table>                </table>';
               <div class="LC_edit_problem_discards">  
                 <input type="hidden" name="problemmode" value="editxml" />           $result.='<input type="hidden" name="problemmode" value="saveedit" />'.
                     &Apache::structuretags::problem_edit_buttons('editxml');
                 <input type="button" name="submitmode" accesskey="d" value="'.&mt('Discard Edits and View').'" '.           
                 'onclick="javascript:setmode(this.form,'."'discard'".')" />           $result.='<hr style="clear:both;" />'.&Apache::lonxml::message_location().'</div>'.  
                 <input type="button" '.&Apache::edit::submit_ask_anyway('setmode(this.form,'."'edit'".')').'name="submitmode" accesskey="e" value="'.&mt('Edit').'" />                    '<textarea '.&Apache::edit::element_change_detection().
                 <input type="submit" name="Undo" accesskey="u" value="'.&mt('undo').'" />  
                 '.$dragmath_button.'  
               </div>  
               <div class="LC_edit_problem_saves">  
                 <input type="submit" name="submitbutton" accesskey="s" value="'.&mt('Save').'"  />  
                 <input type="submit" name="submitbutton" accesskey="v" value="'.&mt('Save and View').'" />  
               </div>  
               <hr style="clear:both;" />  
       '.&Apache::lonxml::message_location().'  
             </div>  
             '  . '  
             <textarea '.&Apache::edit::element_change_detection().  
               ' rows="'.$rows.'" cols="'.$cols.'" style="width:100%" '.                ' rows="'.$rows.'" cols="'.$cols.'" style="width:100%" '.
       ' name="editxmltext" id="LC_editxmltext">'.        ' name="editxmltext" id="LC_editxmltext">'.
       &HTML::Entities::encode($problem,'<>&"').'</textarea>        &HTML::Entities::encode($problem,'<>&"').'</textarea>
Line 1012  sub renderpage { Line 1014  sub renderpage {
     $problem='';      $problem='';
     my $filename=(split('/',$file))[-1];      my $filename=(split('/',$file))[-1];
     my $error =      my $error =
  "<b> ".&mt('Unable to find [_1]',   '<p class="LC_error">'
                  .&mt('Unable to find [_1]',
    '<span class="LC_filename">'.$filename.'</span>')     '<span class="LC_filename">'.$filename.'</span>')
  ."</b>";   ."</p>";
     $result.=      $result.=
  &Apache::loncommon::simple_error_page($request,'Not available',   &Apache::loncommon::simple_error_page($request,'Not available',
       $error);        $error);
Line 1096  sub get_template_list { Line 1099  sub get_template_list {
     my $count = 0;      my $count = 0;
     my $currentcategory='';      my $currentcategory='';
     my $first = 1;      my $first = 1;
       my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'};
     foreach my $file (@files) {      foreach my $file (@files) {
  next if ($file->[1] !~ /\S/);   next if ($file->[1] !~ /\S/);
         if ($file->[2] ne $currentcategory) {          if ($file->[2] ne $currentcategory) {
Line 1119  sub get_template_list { Line 1123  sub get_template_list {
            $result.=&Apache::loncommon::help_open_topic($file->[3]);             $result.=&Apache::loncommon::help_open_topic($file->[3]);
         }          }
         my $filename=$file->[0];          my $filename=$file->[0];
         $filename=~s/^\/home\/httpd\/html//;          $filename=~s{^\Q$londocroot\E}{};
         $result.=' <span class="LC_fontsize_small">'          $result.=' <span class="LC_fontsize_small">'
                 .'<a href="'.$filename.'?inhibitmenu=yes" target="sample">'.&mt('Example').'</a>'                  .'<a href="'.$filename.'?inhibitmenu=yes" target="sample">'.&mt('Example').'</a>'
                 .'</span><br />'."\n";                  .'</span><br />'."\n";
Line 1155  sub newproblem { Line 1159  sub newproblem {
  &renderpage($request,$dest);   &renderpage($request,$dest);
     } else {      } else {
  my $url=&HTML::Entities::encode($request->uri,'<>&"');   my $url=&HTML::Entities::encode($request->uri,'<>&"');
  my $shownurl=$url;  
  $shownurl=~s-^/~-/priv/-;  
  my $dest = &Apache::lonnet::filelocation("",$request->uri);   my $dest = &Apache::lonnet::filelocation("",$request->uri);
  my $errormsg;   my $errormsg;
  my $instructions;   my $instructions;
         my $brcrum = [{'href' => &Apache::loncommon::authorspace(),          my $brcrum = [{'href' => &Apache::loncommon::authorspace($request->uri),
                        'text' => 'Construction Space'},                         'text' => 'Construction Space'},
                       {'href' => '',                        {'href' => '',
                        'text' => "Create New $extension"}];                         'text' => "Create New $extension"}];
Line 1175  sub newproblem { Line 1177  sub newproblem {
        .'<h1>'.&mt("Creating a new $extension resource.")."</h1>         .'<h1>'.&mt("Creating a new $extension resource.")."</h1>
 $errormsg  $errormsg
 ".&mt("The requested file [_1] currently does not exist.",  ".&mt("The requested file [_1] currently does not exist.",
       '<span class="LC_filename">'.$shownurl.'</span>').'        '<span class="LC_filename">'.$url.'</span>').'
 <p class="LC_info">  <p class="LC_info">
 '.&mt("To create a new $extension, select a template from the".  '.&mt("To create a new $extension, select a template from the".
       " list below. Then click on the \"Create $extension\" button.").'        " list below. Then click on the \"Create $extension\" button.").'
Line 1246  sub handler { Line 1248  sub handler {
  #first visit to problem in construction space   #first visit to problem in construction space
  $env{'form.problemmode'}= 'view';   $env{'form.problemmode'}= 'view';
  &renderpage($request,$file);   &renderpage($request,$file);
     } elsif ($env{'form.problemmode'} eq 'editxml') {      } elsif (($env{'form.problemmode'} eq 'editxml') || 
                        ($env{'form.problemmode'} eq 'saveeditxml') ||
                        ($env{'form.problemmode'} eq 'saveviewxml') ||
                        ($env{'form.problemmode'} eq 'undoxml')) {
  &editxmlmode($request,$file);   &editxmlmode($request,$file);
     } elsif ($env{'form.problemmode'} eq 'calcanswers') {      } elsif ($env{'form.problemmode'} eq 'calcanswers') {
  &analyze($request,$file);   &analyze($request,$file);

Removed from v.1.321  
changed lines
  Added in v.1.330


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