Diff for /loncom/homework/lonhomework.pm between versions 1.283 and 1.289

version 1.283, 2007/11/10 01:38:21 version 1.289, 2008/01/15 03:09:09
Line 137  sub get_target { Line 137  sub get_target {
     if ($env{'form.problemstate'} eq 'WEB_GRADE') {      if ($env{'form.problemstate'} eq 'WEB_GRADE') {
  #$env{'form.webgrade'} = 'yes';   #$env{'form.webgrade'} = 'yes';
  return ('grade','webgrade','answer');   return ('grade','webgrade','answer');
     } elsif ( $env{'form.problemmode'} eq &mt('View') ||      } elsif (($env{'form.problemmode'} eq 'view') ||
  $env{'form.problemmode'} eq &mt('Discard Edits and View')) {       ($env{'form.problemmode'} eq 'discard')) {
  if ( defined($env{'form.submitted'}) &&   if ( defined($env{'form.submitted'}) &&
      (!defined($env{'form.resetdata'})) &&       (!defined($env{'form.resetdata'})) &&
      (!defined($env{'form.newrandomization'}))) {       (!defined($env{'form.newrandomization'}))) {
Line 146  sub get_target { Line 146  sub get_target {
  } else {   } else {
     return ('web','answer');      return ('web','answer');
  }   }
     } elsif ( $env{'form.problemmode'} eq &mt('Edit') ||      } elsif ($env{'form.problemmode'} eq 'edit') {
       $env{'form.problemmode'} eq 'Edit') {  
  if ( $env{'form.submitted'} eq 'edit' ) {   if ( $env{'form.submitted'} eq 'edit' ) {
     if ( $env{'form.submit'} eq &mt('Save and View') ) {      if ( $env{'form.submitbutton'} eq &mt('Save and View') ) {
  return ('modified','web','answer');   return ('modified','web','answer');
     } else {      } else {
  return ('modified','no_output_web','edit');   return ('modified','no_output_web','edit');
Line 292  sub check_slot_access { Line 291  sub check_slot_access {
  }   }
     }      }
   
     my @slots=      my $availablestudent = &Apache::lonnet::EXT("resource.0.availablestudent");
  (split(':',&Apache::lonnet::EXT("resource.0.availablestudent")),      my $available = &Apache::lonnet::EXT("resource.0.available");
  split(':',&Apache::lonnet::EXT("resource.0.available")));      my @slots= (split(':',$availablestudent),split(':',$available));
   
 #    if (!@slots) {  #    if (!@slots) {
 # return ($status,$datemsg);  # return ($status,$datemsg);
Line 421  sub check_access { Line 420  sub check_access {
     &Apache::lonxml::debug("symb:".$symb);      &Apache::lonxml::debug("symb:".$symb);
     #if ($env{'request.state'} ne "construct" && $symb ne '') {      #if ($env{'request.state'} ne "construct" && $symb ne '') {
     if ($env{'request.state'} ne "construct") {      if ($env{'request.state'} ne "construct") {
  my $allowed=&check_ip_acc(&Apache::lonnet::EXT("resource.$id.acc"));          my $idacc = &Apache::lonnet::EXT("resource.$id.acc");
    my $allowed=&check_ip_acc($idacc);
  if (!$allowed && ($Apache::lonhomework::browse ne 'F')) {   if (!$allowed && ($Apache::lonhomework::browse ne 'F')) {
     $status='INVALID_ACCESS';      $status='INVALID_ACCESS';
     $date=&mt("can not be accessed from your location.");      $date=&mt("can not be accessed from your location.");
Line 494  sub check_access { Line 494  sub check_access {
    $Apache::lonhomework::history{"resource.$id.solved"}=~/^excused/) {     $Apache::lonhomework::history{"resource.$id.solved"}=~/^excused/) {
     $status = 'CANNOT_ANSWER';      $status = 'CANNOT_ANSWER';
  }   }
    if ($status eq 'CANNOT_ANSWER'
       && &show_answer_problem_status()) {
       $status = 'SHOW_ANSWER';
    }
     }      }
     if ($status eq 'CAN_ANSWER' || $status eq 'CANNOT_ANSWER') {      if ($status eq 'CAN_ANSWER' || $status eq 'CANNOT_ANSWER') {
  my $interval=&Apache::lonnet::EXT("resource.$id.interval");   my @interval=&Apache::lonnet::EXT("resource.$id.interval");
  &Apache::lonxml::debug("looking for interval $interval");   &Apache::lonxml::debug("looking for interval @interval");
  if ($interval) {   if ($interval[0]) {
     my $first_access=&Apache::lonnet::get_first_access('map');      my $first_access=&Apache::lonnet::get_first_access($interval[1]);
     &Apache::lonxml::debug("looking for accesstime $first_access");      &Apache::lonxml::debug("looking for accesstime $first_access");
     if (!$first_access) {      if (!$first_access) {
  $status='NOT_YET_VIEWED';   $status='NOT_YET_VIEWED';
  my $due_date = &due_date($id);   my $due_date = &due_date($id);
  my $seconds_left = $due_date - time;   my $seconds_left = $due_date - time;
  if ($seconds_left > $interval || $due_date eq '') {   if ($seconds_left > $interval[0] || $due_date eq '') {
     $seconds_left = $interval;      $seconds_left = $interval[0];
  }   }
  $datemsg=&seconds_to_human_length($seconds_left);   $datemsg=&seconds_to_human_length($seconds_left);
     }      }
Line 532  sub check_access { Line 536  sub check_access {
 sub due_date {  sub due_date {
     my ($part_id,$symb,$udom,$uname)=@_;      my ($part_id,$symb,$udom,$uname)=@_;
     my $date;      my $date;
     my $interval= &Apache::lonnet::EXT("resource.$part_id.interval",$symb,      my @interval= &Apache::lonnet::EXT("resource.$part_id.interval",$symb,
        $udom,$uname);         $udom,$uname);
     &Apache::lonxml::debug("looking for interval $part_id $symb $interval");      &Apache::lonxml::debug("looking for interval $part_id $symb @interval");
     my $due_date= &Apache::lonnet::EXT("resource.$part_id.duedate",$symb,      my $due_date= &Apache::lonnet::EXT("resource.$part_id.duedate",$symb,
        $udom,$uname);         $udom,$uname);
     &Apache::lonxml::debug("looking for due_date $part_id $symb $due_date");      &Apache::lonxml::debug("looking for due_date $part_id $symb $due_date");
     if ($interval =~ /\d+/) {      if ($interval[0] =~ /\d+/) {
  my $first_access=&Apache::lonnet::get_first_access('map',$symb);   my $first_access=&Apache::lonnet::get_first_access($interval[1],$symb);
  &Apache::lonxml::debug("looking for first_access $first_access");   &Apache::lonxml::debug("looking for first_access $first_access ($interval[1])");
  if (defined($first_access)) {   if (defined($first_access)) {
     $interval = $first_access+$interval;      my $interval = $first_access+$interval[0];
     $date = (!$due_date || $interval < $due_date) ? $interval      $date = (!$due_date || $interval < $due_date) ? $interval
                                                           : $due_date;                                                            : $due_date;
  } else {   } else {
Line 684  sub handle_save_or_undo { Line 688  sub handle_save_or_undo {
     my $error=0;      my $error=0;
     if ($env{'form.Undo'} eq &mt('undo')) {      if ($env{'form.Undo'} eq &mt('undo')) {
  my $error=0;   my $error=0;
  if (!copy($file,$filetmp)) { $error=1; }   if (!&File::Copy::copy($file,$filetmp)) { $error=1; }
  if ((!$error) && (!copy($filebak,$file))) { $error=1; }   if ((!$error) && (!&File::Copy::copy($filebak,$file))) { $error=1; }
  if ((!$error) && (!move($filetmp,$filebak))) { $error=1; }   if ((!$error) && (!&File::Copy::move($filetmp,$filebak))) { $error=1; }
  if (!$error) {   if (!$error) {
     &Apache::lonxml::info("<p><b>".      &Apache::lonxml::info("<p><b>".
   &mt("Undid changes, Switched [_1] and [_2]",    &mt("Undid changes, Switched [_1] and [_2]",
Line 739  sub handle_save_or_undo { Line 743  sub handle_save_or_undo {
   
 sub analyze_header {  sub analyze_header {
     my ($request) = @_;      my ($request) = @_;
       my $js = &Apache::structuretags::setmode_javascript();
     my $result =      my $result =
  &Apache::loncommon::start_page('Analyzing a problem',undef);   &Apache::loncommon::start_page('Analyzing a problem',$js);
   
     $result .=       $result .= 
  &Apache::lonxml::message_location().'   &Apache::lonxml::message_location().'
             <form name="lonhomework" method="POST" action="'.              <form name="lonhomework" method="POST" action="'.
     &HTML::Entities::encode($env{'request.uri'},'<>&"').'">'.      &HTML::Entities::encode($env{'request.uri'},'<>&"').'">'.
               '<input type="hidden" name="problemmode" value="'.
               $env{'form.problemmode'}.'" />'.
     &Apache::structuretags::remember_problem_state().'      &Apache::structuretags::remember_problem_state().'
             <div class="LC_edit_problem_analyze_header">              <div class="LC_edit_problem_analyze_header">
             <input type="submit" name="problemmode" value="'.&mt("EditXML").'" />              <input type="button" name="submitmode" value="'.&mt("EditXML").'" '.
             <input type="submit" name="problemmode" value="'.&mt('Edit').'" />              'onclick="javascript:setmode(this.form,'."'editxml'".')" />
               <input type="button" name="submitmode" value="'.&mt('Edit').'" '.
               'onclick="javascript:setmode(this.form,'."'edit'".')" />
             <hr class="LC_edit_problem_divide" />              <hr class="LC_edit_problem_divide" />
               <input type="button" name="submitmode" value="'.&mt("View").'" '.
             <input type="submit" name="submit" value="'.&mt("View").'" />              'onclick="javascript:setmode(this.form,'."'view'".')" />
             <hr class="LC_edit_problem_divide" />              <hr class="LC_edit_problem_divide" />
             </div>              </div>
             </form>';              </form>';
Line 883  sub analyze { Line 892  sub analyze {
   
     sub show_problem_status {      sub show_problem_status {
  return ($show_problem_status eq 'yes'   return ($show_problem_status eq 'yes'
    || $show_problem_status eq 'answer'
  || $show_problem_status eq '');   || $show_problem_status eq '');
     }      }
           
Line 893  sub analyze { Line 903  sub analyze {
     sub show_no_problem_status {      sub show_no_problem_status {
  return ($show_problem_status eq 'no_feedback_ever');   return ($show_problem_status eq 'no_feedback_ever');
     }      }
     
       sub show_answer_problem_status {
    return ($show_problem_status eq 'answer');
       }
 }  }
   
 sub editxmlmode {  sub editxmlmode {
Line 910  sub editxmlmode { Line 924  sub editxmlmode {
  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.submit'} eq &mt('Save and View') ) {      if ( $env{'form.submitbutton'} eq &mt('Save and View') ) {
  &Apache::lonhomework::showhashsubset(\%env,'^form');   &Apache::lonhomework::showhashsubset(\%env,'^form');
  $env{'form.problemmode'}='View';   $env{'form.problemmode'}='view';
  &renderpage($request,$file);   &renderpage($request,$file);
     } else {      } else {
  my ($rows,$cols) = &Apache::edit::textarea_sizes(\$problem);   my ($rows,$cols) = &Apache::edit::textarea_sizes(\$problem);
Line 927  sub editxmlmode { Line 941  sub editxmlmode {
  if ($rows < 20) { $rows = 20; }   if ($rows < 20) { $rows = 20; }
  my $js =   my $js =
     &Apache::edit::js_change_detection().       &Apache::edit::js_change_detection(). 
     &Apache::loncommon::resize_textarea_js();      &Apache::loncommon::resize_textarea_js().
               &Apache::structuretags::setmode_javascript();
  my $only_body =  ($env{'environment.remote'} eq 'off')? 0 : 1;   my $only_body =  ($env{'environment.remote'} eq 'off')? 0 : 1;
  my $start_page =    my $start_page = 
     &Apache::loncommon::start_page(&mt("EditXML [_1]",$file),$js,      &Apache::loncommon::start_page(&mt("EditXML [_1]",$file),$js,
Line 937  sub editxmlmode { Line 952  sub editxmlmode {
  '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')],
     }});      }});
   
  $result.=$start_page.   $result.=$start_page.
     &renderpage($request,$file,['no_output_web'],1).      &renderpage($request,$file,['no_output_web'],1).
             '<form '.&Apache::edit::form_change_detection().' name="lonhomework" method="POST" action="'.              '<form '.&Apache::edit::form_change_detection().' name="lonhomework" method="POST" action="'.
Line 951  sub editxmlmode { Line 965  sub editxmlmode {
                 </td></tr>                  </td></tr>
               </table>                </table>
               <div class="LC_edit_problem_discards">                <div class="LC_edit_problem_discards">
                 <input type="hidden" name="problemmode" value="'.&mt('EditXML').'" />                  <input type="hidden" name="problemmode" value="editxml" />
                 <input type="submit" name="problemmode" accesskey="d" value="'.&mt('Discard Edits and View').'" />                  <input type="button" name="submitmode" accesskey="d" value="'.&mt('Discard Edits and View').'" '.
                 <input type="submit" '.&Apache::edit::submit_ask_anyway().'name="problemmode" accesskey="e" value="'.&mt('Edit').'" />                  'onclick="javascript:setmode(this.form,'."'discard'".')" />
                   <input type="button" '.&Apache::edit::submit_ask_anyway('setmode(this.form,'."'edit'".')').'name="submitmode" accesskey="e" value="'.&mt('Edit').'" />
                 <input type="submit" name="Undo" accesskey="u" value="'.&mt('undo').'" />                  <input type="submit" name="Undo" accesskey="u" value="'.&mt('undo').'" />
               </div>                </div>
               <div class="LC_edit_problem_saves">                <div class="LC_edit_problem_saves">
                 <input type="submit" name="submit" accesskey="s" value="'.&mt('Save').'" />                  <input type="submit" name="submitbutton" accesskey="s" value="'.&mt('Save').'"  />
                 <input type="submit" name="submit" accesskey="v" value="'.&mt('Save and View').'" />                  <input type="submit" name="submitbutton" accesskey="v" value="'.&mt('Save and View').'" />
               </div>                </div>
               <hr class="LC_edit_problem_divide" />                <hr class="LC_edit_problem_divide" />
       '.&Apache::lonxml::message_location().'        '.&Apache::lonxml::message_location().'
Line 1073  sub get_template_list { Line 1088  sub get_template_list {
      '/templates/*.'.$glob_extension);       '/templates/*.'.$glob_extension);
     @files = map {[$_,&mt(&Apache::lonnet::metadata($_, 'title'))]} (@files);      @files = map {[$_,&mt(&Apache::lonnet::metadata($_, 'title'))]} (@files);
     @files = sort {$a->[1] cmp $b->[1]} (@files);      @files = sort {$a->[1] cmp $b->[1]} (@files);
       my ($midpoint,$seconddiv,$numfiles);
       $numfiles = 0;
       foreach my $file (@files) {
           next if ($file->[1] !~ /\S/);
           $numfiles ++;
       }
       if ($numfiles > 0) {
           $result = '<div class="LC_left_float">';
           $midpoint = int($numfiles/2);
           if ($numfiles%2) {
               $midpoint ++;
           }
       }
       my $count = 0;
     foreach my $file (@files) {      foreach my $file (@files) {
  next if ($file->[1] !~ /\S/);   next if ($file->[1] !~ /\S/);
  $result .=   $result .=
     '<label><input type="radio" name="template" value="'.$file->[0].'" />'.      '<label><input type="radio" name="template" value="'.$file->[0].'" />'.
     $file->[1].'</label><br />';      $file->[1].'</label><br />'."\n";
           $count ++;
           if ((!$seconddiv) && ($count >= $midpoint)) {
               $result .= '</div>'."\n".'<div class="LC_left_float">'."\n";
               $seconddiv = 1;
           }
       }
       if ($numfiles > 0) {
           $result .= '</div>'."\n".'<div class="LC_clear_float_footer"></div>'."\n";
     }      }
     return $result;      return $result;
 }  }
Line 1137  $errormsg Line 1174  $errormsg
   
 sub update_construct_style {  sub update_construct_style {
     if ($env{'request.state'} eq "construct"      if ($env{'request.state'} eq "construct"
  && $env{'form.problemmode'} eq &mt('View')    && $env{'form.problemmode'} eq 'view' 
  &&  defined($env{'form.submitted'})   &&  defined($env{'form.submitted'})
  && !defined($env{'form.resetdata'})   && !defined($env{'form.resetdata'})
  && !defined($env{'form.newrandomization'})) {   && !defined($env{'form.newrandomization'})) {
Line 1160  sub handler { Line 1197  sub handler {
     $Apache::lonxml::debug=$env{'user.debug'};      $Apache::lonxml::debug=$env{'user.debug'};
     $env{'request.uri'}=$request->uri;      $env{'request.uri'}=$request->uri;
     &setuppermissions();      &setuppermissions();
     # some times multiple problemmodes are submitted, need to select  
     # the last one  
     if ( defined($env{'form.problemmode'}) && ref($env{'form.problemmode'}) ) {  
  my $mode=$env{'form.problemmode'}->[-1];  
  undef $env{'form.problemmode'};  
  $env{'form.problemmode'}=$mode;  
     }  
   
     my $file=&Apache::lonnet::filelocation("",$request->uri);      my $file=&Apache::lonnet::filelocation("",$request->uri);
   
Line 1195  sub handler { Line 1225  sub handler {
     ['problemmode']);      ['problemmode']);
     if (!(defined $env{'form.problemmode'})) {      if (!(defined $env{'form.problemmode'})) {
  #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 &mt('EditXML') ||      } elsif ($env{'form.problemmode'} eq 'editxml') {
      $env{'form.problemmode'} eq 'EditXML') {  
  &editxmlmode($request,$file);   &editxmlmode($request,$file);
     } elsif ($env{'form.problemmode'} eq &mt('Calculate answers')) {      } elsif ($env{'form.problemmode'} eq 'calcanswers') {
  &analyze($request,$file);   &analyze($request,$file);
     } else {      } else {
  &update_construct_style();   &update_construct_style();

Removed from v.1.283  
changed lines
  Added in v.1.289


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