Diff for /loncom/homework/lonhomework.pm between versions 1.302 and 1.319

version 1.302, 2009/02/17 15:25:18 version 1.319, 2010/03/16 19:55:37
Line 170  sub setup_vars { Line 170  sub setup_vars {
 #  return ';$external::target='.$target.';';  #  return ';$external::target='.$target.';';
 }  }
   
 sub createmenu {  
     my ($which,$request)=@_;  
     if ($which eq 'grade') {  
  $request->print('<script language="JavaScript">   
           hwkmenu=window.open("/res/adm/pages/homeworkmenu.html","homeworkremote",  
                  "height=350,width=150,menubar=no");  
           </script>');  
     }  
 }  
   
 sub proctor_checked_in {  sub proctor_checked_in {
     my ($slot_name,$slot,$type)=@_;      my ($slot_name,$slot,$type)=@_;
     my @possible_proctors=split(",",$slot->{'proctor'});      my @possible_proctors=split(",",$slot->{'proctor'});
Line 297  sub check_slot_access { Line 287  sub check_slot_access {
  return ('WAITING_FOR_GRADE');   return ('WAITING_FOR_GRADE');
     }      }
   
     # no slot is currently open, and has been checked in for this version      # Previously used slot is no longer open, and has been checked in for this version.
     # previous slot is therefore CLOSED, so therefore the problem is      # However, the problem is not closed, and potentially, another slot might be
       # used to gain access to it to work on it, until the due date is reached, and the
       # problem then becomes CLOSED.  Therefore return the slotstatus - 
       # (which will be NOT_IN_SLOT).
     if (!defined($slot_name)      if (!defined($slot_name)
  && $checkedin    && $checkedin 
  && $type eq 'problem') {   && $type eq 'problem') {
  return ('CLOSED',$datemsg);          return ($slotstatus);
     }      }
   
     if ($slotstatus eq 'NOT_IN_A_SLOT'       if ($slotstatus eq 'NOT_IN_A_SLOT' 
Line 685  sub handle_save_or_undo { Line 678  sub handle_save_or_undo {
 sub analyze_header {  sub analyze_header {
     my ($request) = @_;      my ($request) = @_;
     my $js = &Apache::structuretags::setmode_javascript();      my $js = &Apache::structuretags::setmode_javascript();
     my $result =  
  &Apache::loncommon::start_page('Analyzing a problem',$js);  
   
       # Breadcrumbs
       my $brcrum = [{'href' => &Apache::loncommon::authorspace(),
                      'text' => 'Construction Space'},
                     {'href' => '',
                      'text' => 'Problem Testing'},
                     {'href' => '',
                      'text' => 'Analyzing a problem'}];
   
       my $result =
           &Apache::loncommon::start_page('Analyzing a problem',
                                          $js,
                                          {'bread_crumbs' => $brcrum,})
          .&Apache::loncommon::head_subbox(
                   &Apache::loncommon::CSTR_pageheader());
     $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="'.              '<input type="hidden" name="problemmode" value="'.
             $env{'form.problemmode'}.'" />'.              $env{'form.problemmode'}.'" />'.
Line 700  sub analyze_header { Line 705  sub analyze_header {
             'onclick="javascript:setmode(this.form,'."'editxml'".')" />              'onclick="javascript:setmode(this.form,'."'editxml'".')" />
             <input type="button" name="submitmode" value="'.&mt('Edit').'" '.              <input type="button" name="submitmode" value="'.&mt('Edit').'" '.
             'onclick="javascript:setmode(this.form,'."'edit'".')" />              'onclick="javascript:setmode(this.form,'."'edit'".')" />
             <hr class="LC_edit_problem_divide" />              <hr />
             <input type="button" name="submitmode" value="'.&mt("View").'" '.              <input type="button" name="submitmode" value="'.&mt("View").'" '.
             'onclick="javascript:setmode(this.form,'."'view'".')" />              'onclick="javascript:setmode(this.form,'."'view'".')" />
             <hr class="LC_edit_problem_divide" />              <hr />
             </div>              </div>
             </form>';              </form>';
     &Apache::lonxml::add_messages(\$result);      &Apache::lonxml::add_messages(\$result);
Line 777  sub analyze { Line 782  sub analyze {
     }      }
     &Apache::lonhtmlcommon::Update_PrgWin($request,\%prog_state,      &Apache::lonhtmlcommon::Update_PrgWin($request,\%prog_state,
   &mt('Analyzing Results'));    &mt('Analyzing Results'));
     $request->print('<hr class="LC_edit_problem_divide" />'.&mt('List of possible answers').': ');      $request->print('<hr />'
                      .'<h3>'
                      .&mt('List of possible answers')
                      .'</h3>'
       );
     foreach my $part (sort(keys(%allparts))) {      foreach my $part (sort(keys(%allparts))) {
  if (defined(@{ $overall{$part.'.answer'} })) {   if (defined(@{ $overall{$part.'.answer'} })) {
     for (my $i=0;$i<scalar(@{ $overall{$part.'.answer'} });$i++) {      for (my $i=0;$i<scalar(@{ $overall{$part.'.answer'} });$i++) {
  my $num_cols=scalar(@{ $overall{$part.'.answer'}[$i][0] });   my $num_cols=scalar(@{ $overall{$part.'.answer'}[$i][0] });
  $request->print('<table class="thinborder"><tr><th colspan="'.($num_cols+1).'">'.&mt('Part').' '.$part);                  $request->print(&Apache::loncommon::start_data_table()
                                  .&Apache::loncommon::start_data_table_header_row()
                                  .'<th colspan="'.($num_cols+1).'">'
                                  .&mt('Part').' '.$part
                   );
  if (scalar(@{ $overall{$part.'.answer'} }) > 1) {   if (scalar(@{ $overall{$part.'.answer'} }) > 1) {
     $request->print(&mt(' Answer [_1]',$i+1));      $request->print(' '.&mt('Answer [_1]',$i+1));
  }   }
  $request->print('</th></tr>');   $request->print('</th>'
                                  .&Apache::loncommon::end_data_table_header_row()
                   );
  my %frequency;   my %frequency;
  foreach my $answer (sort {$a->[0] <=> $b->[0]} (@{ $overall{$part.'.answer'}[$i] })) {   foreach my $answer (sort {$a->[0] <=> $b->[0]} (@{ $overall{$part.'.answer'}[$i] })) {
     $frequency{join("\0",@{ $answer })}++;      $frequency{join("\0",@{ $answer })}++;
  }   }
  $request->print('<tr><th colspan="'.($num_cols).'">'.&mt('Answer').'</th><th>'.&mt('Frequency').'<br />('                  $request->print(&Apache::loncommon::start_data_table_header_row()
  .&mt('click for example').')</th></tr>');                                 .'<th colspan="'.($num_cols).'">'.&mt('Answer').'</th>'
                                  .'<th>'.&mt('Frequency').'<br />'
                                  .'('.&mt('click for example').')</th>'
                                  .&Apache::loncommon::end_data_table_header_row()
                   );
  foreach my $answer (sort {(split("\0",$a))[0] <=> (split("\0",$b))[0]} (keys(%frequency))) {   foreach my $answer (sort {(split("\0",$a))[0] <=> (split("\0",$b))[0]} (keys(%frequency))) {
     $request->print('<tr><td class="center">'.                      $request->print(&Apache::loncommon::start_data_table_row()
     join('</td><td class="center">',split("\0",$answer)).                                     .'<td>'
     '</td><td class="center"><a href="'.$request->uri.'?rndseed='.$seedexample{join("\0",$part,$i,$answer)}.'">'.$frequency{$answer}.                                     .join('</td><td>',split("\0",$answer))
     '</a></td></tr>');     .'</td>'
                                      .'<td>'
                                      .'<a href="'.$request->uri.'?rndseed='.$seedexample{join("\0",$part,$i,$answer)}.'">'.$frequency{$answer}.'</a>'
      .'</td>'
                                      .&Apache::loncommon::end_data_table_row()
                       );
  }   }
  $request->print('</table>');                  $request->print(&Apache::loncommon::end_data_table());
     }      }
  } else {   } else {
     $request->print('<p>'.&mt('Response').' '.$part.' '.              $request->print('<p class="LC_warning">'
     &mt('is not analyzable at this time').'</p>');                             .&mt('Response [_1] is not analyzable at this time.',$part)
      .'</p>'
               );
  }   }
     }      }
     if (scalar(keys(%allparts)) == 0 ) {      if (scalar(keys(%allparts)) == 0 ) {
  $request->print('<p>'.&mt('Found no analyzable responses in this problem, currently only Numerical, Formula and String response styles are supported.').'</p>');          $request->print('<p class="LC_warning">'
                          .&mt('Found no analyzable responses in this problem.'
                              .' Currently only Numerical, Formula and String response styles are supported.')
                          .'</p>'
           );
     }      }
     &Apache::lonhtmlcommon::Close_PrgWin($request,\%prog_state);      &Apache::lonhtmlcommon::Close_PrgWin($request,\%prog_state);
     &analyze_footer($request);      &analyze_footer($request);
Line 855  sub editxmlmode { Line 885  sub editxmlmode {
     my $result;      my $result;
     my $problem=&Apache::lonnet::getfile($file);      my $problem=&Apache::lonnet::getfile($file);
     if ($problem eq -1) {      if ($problem eq -1) {
  &Apache::lonxml::error("<b> ".&mt('Unable to find').   &Apache::lonxml::error(
        " <i>$file</i></b>");              '<b> '
              .&mt('Unable to find [_1]',
                   '<span class="LC_filename">'.$file.'</span>')
              .'</b>');
   
  $problem='';   $problem='';
     }      }
     if (defined($env{'form.editxmltext'}) || defined($env{'form.Undo'})) {      if (defined($env{'form.editxmltext'}) || defined($env{'form.Undo'})) {
Line 871  sub editxmlmode { Line 905  sub editxmlmode {
  &renderpage($request,$file);   &renderpage($request,$file);
     } else {      } else {
  my ($rows,$cols) = &Apache::edit::textarea_sizes(\$problem);   my ($rows,$cols) = &Apache::edit::textarea_sizes(\$problem);
  my $xml_help = '<table><tr><td>'.  
     &Apache::loncommon::helpLatexCheatsheet("Problem_Editor_XML_Index",  
     "Problem Editing Help").  
     '</td><td>'.  
        &Apache::loncommon::help_open_menu(undef,undef,5,'Authoring').  
                 '</td></tr></table>';  
  if ($cols > 80) { $cols = 80; }   if ($cols > 80) { $cols = 80; }
  if ($cols < 70) { $cols = 70; }   if ($cols < 70) { $cols = 70; }
  if ($rows < 20) { $rows = 20; }   if ($rows < 20) { $rows = 20; }
Line 885  sub editxmlmode { Line 913  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 $only_body =  ($env{'environment.remote'} eq 'off')? 0 : 1;  
  my $dragmath_button =    my $dragmath_button = 
             &Apache::lonhtmlcommon::dragmath_button("LC_editxmltext",1);              &Apache::lonhtmlcommon::dragmath_button("LC_editxmltext",1);
   
       # Breadcrumbs
       my $brcrum = [{'href' => &Apache::loncommon::authorspace(),
                      'text' => 'Construction Space'},
                     {'href' => '',
                      'text' => 'Problem Editing'}];
   
  my $start_page =    my $start_page = 
     &Apache::loncommon::start_page(&mt("EditXML [_1]",$file),$js,      &Apache::loncommon::start_page(&mt("EditXML [_1]",$file),$js,
    {'no_auto_mt_title' => 1,     {'no_auto_mt_title' => 1,
     'only_body'        => $only_body,      'only_body'        => 0,
     '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')],
     }});                                      },
  $result.=$start_page.                                                  'bread_crumbs' => $brcrum,
     &renderpage($request,$file,['no_output_web'],1).  });
             '<form '.&Apache::edit::form_change_detection().' name="lonhomework" method="POST" action="'.  
       $result=$start_page
              .&Apache::loncommon::head_subbox(
                   &Apache::loncommon::CSTR_pageheader());
    $result.=&renderpage($request,$file,['no_output_web'],1).
               '<form '.&Apache::edit::form_change_detection().' name="lonhomework" method="post" action="'.
     &HTML::Entities::encode($env{'request.uri'},'<>&"').'">'.      &HTML::Entities::encode($env{'request.uri'},'<>&"').'">'.
     &Apache::structuretags::remember_problem_state().'      &Apache::structuretags::remember_problem_state().'
             <div class="LC_edit_problem_editxml_header">              <div class="LC_edit_problem_editxml_header">
               <table class="LC_edit_problem_header_title"><tr><td>                <table class="LC_edit_problem_header_title"><tr><td>
                '.&mt('Problem Editing').&Apache::loncommon::help_open_topic('Problem_Editor_XML_Index').'                 <h2>'.&mt('Problem Editing').' '.&Apache::loncommon::help_open_topic('Problem_Editor_XML_Index').'</h2>
                 </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>
Line 921  sub editxmlmode { Line 960  sub editxmlmode {
                 <input type="submit" name="submitbutton" accesskey="s" value="'.&mt('Save').'"  />                  <input type="submit" name="submitbutton" accesskey="s" value="'.&mt('Save').'"  />
                 <input type="submit" name="submitbutton" 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 style="clear:both;" />
       '.&Apache::lonxml::message_location().'        '.&Apache::lonxml::message_location().'
             </div>              </div>
             '  . '              '  . '
Line 969  sub renderpage { Line 1008  sub renderpage {
     my $filename=(split('/',$file))[-1];      my $filename=(split('/',$file))[-1];
     my $error =      my $error =
  "<b> ".&mt('Unable to find [_1]',   "<b> ".&mt('Unable to find [_1]',
    ' <span class="LC_filename">'.$filename.'</span>')     '<span class="LC_filename">'.$filename.'</span>')
  ."</b>";   ."</b>";
     $result.=      $result.=
  &Apache::loncommon::simple_error_page($request,'Not available',   &Apache::loncommon::simple_error_page($request,'Not available',
Line 1051  sub get_template_list { Line 1090  sub get_template_list {
     }      }
     my $count = 0;      my $count = 0;
     my $currentcategory='';      my $currentcategory='';
       my $first = 1;
     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) {
            $currentcategory=$file->[2];             $currentcategory=$file->[2];
            if ((!$seconddiv) && ($count >= $midpoint)) {             if ((!$seconddiv) && ($count >= $midpoint)) {
                $result .= '</div>'."\n".'<div class="LC_left_float">'."\n";                 $result .= '</div></div>'."\n".'<div class="LC_left_float">'."\n";
                $seconddiv = 1;                 $seconddiv = 1;
              } elsif (!$first) {
                  $result.='</div>'."\n";
              } else {
                  $first = 0;
            }             }
            $result.='<h3>'.$currentcategory.'</h3>';             $result.= '<div class="LC_Box">'."\n"
                       .'<h3 class="LC_hcell">'.$currentcategory.'</h3>'."\n";
            $count++;             $count++;
         }          }
  $result .=   $result .=
Line 1070  sub get_template_list { Line 1115  sub get_template_list {
         }          }
         my $filename=$file->[0];          my $filename=$file->[0];
         $filename=~s/^\/home\/httpd\/html//;          $filename=~s/^\/home\/httpd\/html//;
         $result.=' <font size="-2"><a href="'.$filename.'" target="sample">'.&mt('Example').'</font></a><br />'."\n";          $result.=' <span class="LC_fontsize_small">'
                   .'<a href="'.$filename.'?inhibitmenu=yes" target="sample">'.&mt('Example').'</a>'
                   .'</span><br />'."\n";
         $count ++;          $count ++;
     }      }
     if ($numfiles > 0) {      if ($numfiles > 0) {
         $result .= '</div>'."\n".'<div class="LC_clear_float_footer"></div>'."\n";          $result .= '</div></div>'."\n".'<div class="LC_clear_float_footer"></div>'."\n";
     }      }
     return $result;      return $result;
 }  }
Line 1108  sub newproblem { Line 1155  sub newproblem {
  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(),
                          'text' => 'Construction Space'},
                         {'href' => '',
                          'text' => "Create New $extension"}];
  my $start_page =    my $start_page = 
     &Apache::loncommon::start_page("Create New $extension");              &Apache::loncommon::start_page("Create New $extension",
  $request->print("                                             undef,
 $start_page                                             {'bread_crumbs' => $brcrum,});
 <h1>".&mt("Creating a new $extension resource.")."</h1>   $request->print(
           $start_page
          .&Apache::loncommon::head_subbox(
                   &Apache::loncommon::CSTR_pageheader())
          .'<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.",
       "<tt>$shownurl</tt>")."        '<span class="LC_filename">'.$shownurl.'</span>').'
 <p>  <p class="LC_info">
 <b>  '.&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.")."</b>  </p><div><form action="'.$url.'" method="post">');
 </p><form action=\"$url\" method=\"POST\">");  
   
  if (defined($templatelist)) {   if (defined($templatelist)) {
     $request->print($templatelist);      $request->print($templatelist);
  }   }
  $request->print('<br /><input type="submit" name="newfile" value="'.   $request->print('<br /><input type="submit" name="newfile" value="'.
  &mt("Create $extension").'" />');   &mt("Create $extension").'" />');
  $request->print("</form></p>".&Apache::loncommon::end_page());   $request->print('</form></div>'.&Apache::loncommon::end_page());
     }      }
     return;      return;
 }  }
Line 1140  sub update_construct_style { Line 1194  sub update_construct_style {
  && !defined($env{'form.newrandomization'})) {   && !defined($env{'form.newrandomization'})) {
  if ((!$env{'form.style_file'} && $env{'construct.style'})   if ((!$env{'form.style_file'} && $env{'construct.style'})
     ||$env{'form.clear_style_file'}) {      ||$env{'form.clear_style_file'}) {
     &Apache::lonnet::delenv('construct\\.style');      &Apache::lonnet::delenv('construct.style');
  } elsif ($env{'form.style_file'}    } elsif ($env{'form.style_file'} 
     && $env{'construct.style'} ne $env{'form.style_file'}) {      && $env{'construct.style'} ne $env{'form.style_file'}) {
     &Apache::lonnet::appenv({'construct.style' =>       &Apache::lonnet::appenv({'construct.style' => 

Removed from v.1.302  
changed lines
  Added in v.1.319


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