Diff for /loncom/homework/grades.pm between versions 1.85 and 1.86

version 1.85, 2003/04/19 09:02:57 version 1.86, 2003/04/21 18:39:43
Line 1108  KEYWORDS Line 1108  KEYWORDS
     my @col_fullnames;      my @col_fullnames;
     my ($classlist,$fullname);      my ($classlist,$fullname);
     if ($ENV{'form.handgrade'} eq 'yes') {      if ($ENV{'form.handgrade'} eq 'yes') {
  my @col_list;  
  ($classlist,undef,$fullname) = &getclasslist('all','0');   ($classlist,undef,$fullname) = &getclasslist('all','0');
  for (keys (%$handgrade)) {   for (keys (%$handgrade)) {
     my $ncol = &Apache::lonnet::EXT('resource.'.$_.      my $ncol = &Apache::lonnet::EXT('resource.'.$_.
Line 1117  KEYWORDS Line 1116  KEYWORDS
     next if ($ncol <= 0);      next if ($ncol <= 0);
             s/\_/\./g;              s/\_/\./g;
             next if ($record{'resource.'.$_.'.collaborators'} eq '');              next if ($record{'resource.'.$_.'.collaborators'} eq '');
             my (@colList) = split(/,?\s+/,              my @goodcollaborators = ();
                                    $record{'resource.'.$_.'.collaborators'});              my @badcollaborators  = ();
             my @collaborators = ();      foreach (split(/,?\s+/,$record{'resource.'.$_.'.collaborators'})) { 
     foreach (@colList) { #pre-filter list - throw out submitter   $_ =~ s/[\$\^\(\)]//g;
    next if ($_ eq '');
  my ($co_name,$co_dom) = split /\@|:/,$_;   my ($co_name,$co_dom) = split /\@|:/,$_;
  $co_dom = $udom if (! defined($co_dom));   $co_dom = $udom if (! defined($co_dom) || $co_dom =~ /^domain$/i);
  next if ($co_name eq $uname && $co_dom eq $udom);   next if ($co_name eq $uname && $co_dom eq $udom);
  push @collaborators, $_;   # Doing this grep allows 'fuzzy' specification
    my @Matches = grep /^$co_name:$co_dom$/i,keys %$classlist;
    if (! scalar(@Matches)) {
       push @badcollaborators,$_;
    } else {
       push @goodcollaborators, @Matches;
    }
     }      }
             my (@badcollaborators);              if (scalar(@goodcollaborators) != 0) {
             if (scalar(@collaborators) != 0) {  
                 $result.='<b>Collaborators: </b>';                  $result.='<b>Collaborators: </b>';
                 foreach my $collaborator (@collaborators) {                  foreach (@goodcollaborators) {
                     my ($co_name,$co_dom) = split /\@|:/,$collaborator;      my ($lastname,$givenn) = split(/,/,$$fullname{$_});
                     $co_dom = $udom if (! defined($co_dom));      push @col_fullnames, $givenn.' '.$lastname;
                     # Doing this grep allows 'fuzzy' specification      $result.=$$fullname{$_}.'&nbsp; &nbsp; &nbsp;';
                     my @Matches = grep /^$co_name:$co_dom$/i,   }
                     keys %$classlist;  
     if (! scalar(@Matches)) {  
                         push @badcollaborators,':'.$collaborator.':';  
                         next;  
                     }  
                     push @col_list, @Matches;  
                     foreach (@Matches) {  
                         my ($lastname,$givenn) = split(/,/,$$fullname{$_});  
                         push @col_fullnames, $givenn.' '.$lastname;  
                         $result.=$$fullname{$_}.'&nbsp; &nbsp; &nbsp;';  
                     }  
                 }  
                 $result.='<br />'."\n";                  $result.='<br />'."\n";
                 if (scalar(@badcollaborators) > 0) {   $result.='<input type="hidden" name="collaborator'.$counter.
                     $result.='<table border="0"><tr bgcolor="#ffbbbb"><td>';      '" value="'.(join ':',@goodcollaborators).'" />'."\n";
                     $result.='This student has submitted ';      }
                     if (scalar(@badcollaborators) == 1) {      if (scalar(@badcollaborators) > 0) {
                         $result .= 'an invalid collaborator';   $result.='<table border="0"><tr bgcolor="#ffbbbb"><td>';
                     } else {   $result.='This student has submitted ';
                         $result .= 'invalid collaborators';   $result.=(scalar(@badcollaborators) == 1) ? 'an invalid collaborator' : 'invalid collaborators';
                     }   $result .= ': '.join(', ',@badcollaborators);
                     $result .= ': '.join(', ',@badcollaborators);   $result .= '</td></tr></table>';
     $result .= '</td></tr></table>';                       }         
                 }      if (scalar(@badcollaborators > $ncol)) {
                 if (scalar(@collaborators > $ncol)) {   $result .= '<table border="0"><tr bgcolor="#ffbbbb"><td>';
                     $result .= '<table border="0"><tr bgcolor="#ffbbbb"><td>';   $result .= 'This student has submitted too many '.
                     $result .= 'This student has submitted too many '.      'collaborators.  Maximum is '.$ncol.'.';
                         'collaborators.  Maximum is '.$ncol;   $result .= '</td></tr></table>';
                     $result .= '</td></tr></table>';      }
                 }  
                 $result.='<input type="hidden" name="collaborator'.$counter.  
                     '" value="'.(join ':',@col_list).'" />'."\n";  
             }  
  }   }
     }      }
     $request->print($result."\n");      $request->print($result."\n");
Line 1246  KEYWORDS Line 1235  KEYWORDS
  my $lastone = pop @col_fullnames;   my $lastone = pop @col_fullnames;
  $msgfor .= ', '.(join ', ',@col_fullnames).' and '.$lastone.'.';   $msgfor .= ', '.(join ', ',@col_fullnames).' and '.$lastone.'.';
     }      }
     $msgfor =~ s/\'/\\'/g;      $msgfor =~ s/\'/\\'/g; #\'
     $result.='<tr><td bgcolor="#ffffff">'."\n".      $result.='<tr><td bgcolor="#ffffff">'."\n".
  '&nbsp;<a href="javascript:msgCenter(document.SCORE,'.$counter.   '&nbsp;<a href="javascript:msgCenter(document.SCORE,'.$counter.
  ',\''.$msgfor.'\')"; TARGET=_self>'.   ',\''.$msgfor.'\')"; TARGET=_self>'.
Line 1444  sub processHandGrade { Line 1433  sub processHandGrade {
  $ENV{'course.'.$ENV{'request.course.id'}.'.num'});   $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
   
     # Called by Save & Refresh from Highlight Attribute Window      # Called by Save & Refresh from Highlight Attribute Window
       my (undef,undef,$fullname) = &getclasslist($ENV{'form.section'},'0');
     if ($ENV{'form.refresh'} eq 'on') {      if ($ENV{'form.refresh'} eq 'on') {
  my $ctr = 0;   my ($ctr,$total) = (0,0);
  $ENV{'form.NTSTU'}=$ngrade;  
  while ($ctr < $ngrade) {   while ($ctr < $ngrade) {
     ($ENV{'form.student'},$ENV{'form.userdom'}) = split(/:/,$ENV{'form.unamedom'.$ctr});      $total++ if  $ENV{'form.unamedom'.$ctr} ne '';
     &submission($request,$ctr,$ngrade-1);      $ctr++;
    }
    $ENV{'form.NTSTU'}=$ngrade;
    $ctr = 0;
    while ($ctr < $total) {
       my $processUser = $ENV{'form.unamedom'.$ctr};
       ($ENV{'form.student'},$ENV{'form.userdom'}) = split(/:/,$processUser);
       $ENV{'form.fullname'} = $$fullname{$processUser};
       &submission($request,$ctr,$total-1);
     $ctr++;      $ctr++;
  }   }
  return '';   return '';
Line 1465  sub processHandGrade { Line 1462  sub processHandGrade {
  $laststu = $firststu if ($ctr > $ngrade);   $laststu = $firststu if ($ctr > $ngrade);
     }      }
   
     my (undef,undef,$fullname) = &getclasslist($ENV{'form.section'},'0');  
     my (@parsedlist,@nextlist);      my (@parsedlist,@nextlist);
     my ($nextflg) = 0;      my ($nextflg) = 0;
     foreach (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) {      foreach (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) {
Line 2211  sub csvuploadmap_footer { Line 2207  sub csvuploadmap_footer {
 ENDPICK  ENDPICK
 }  }
   
   sub upcsvScores_form {
       my ($request) = shift;
       my ($symb,$url)=&get_symb_and_url($request);
       if (!$symb) {return '';}
       my $result =<<CSVFORMJS;
   <script type="text/javascript" language="javascript">
       function checkUpload(formname) {
    if (formname.upfile.value == "") {
       alert("Please use the browse button to select a file from your local directory.");
       return false;
    }
    formname.submit();
       }
       </script>
   CSVFORMJS
       $ENV{'form.probTitle'} = &Apache::lonnet::gettitle($symb);
       $result.='<br /><table width=100% border=0><tr><td bgcolor="#777777">'."\n";
       $result.='<table width=100% border=0><tr bgcolor="#e6ffff"><td>'."\n";
       $result.='&nbsp;<b>Specify a file containing the class scores for problem - '.$ENV{'form.probTitle'}.
    '.</b></td></tr>'."\n";
       $result.='<tr bgcolor=#ffffe6><td>'."\n";
       my $upfile_select=&Apache::loncommon::upfile_select_html();
       $result.=<<ENDUPFORM;
   <form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload" target="LONcatInfo">
   <input type="hidden" name="symb" value="$symb" />
   <input type="hidden" name="url" value="$url" />
   <input type="hidden" name="command" value="csvuploadmap" />
   <input type="hidden" name="probTitle" value="$ENV{'form.probTitle'}" />
   <input type="hidden" name="saveState"  value="$ENV{'form.saveState'}" />
   $upfile_select
   <br /><input type="button" onClick="javascript:checkUpload(this.form);" value="Upload Scores" />
   
   </form>
   ENDUPFORM
       $result.='</td></tr></table>'."\n";
       $result.='</td></tr></table><br /><br />'."\n";
       $result.=&show_grading_menu_form($symb,$url);
   
       return $result;
   }
   
   
 sub csvuploadmap {  sub csvuploadmap {
     my ($request)= @_;      my ($request)= @_;
     my ($symb,$url)=&get_symb_and_url($request);      my ($symb,$url)=&get_symb_and_url($request);
Line 3124  sub gradingmenu { Line 3162  sub gradingmenu {
  var cmd = formname.command;   var cmd = formname.command;
  formname.saveState.value = "saveCmd="+radioSelection(cmd)+":saveSec="+pullDownSelection(formname.section)+   formname.saveState.value = "saveCmd="+radioSelection(cmd)+":saveSec="+pullDownSelection(formname.section)+
     ":saveSub="+radioSelection(formname.submitonly)+":saveStatus="+pullDownSelection(formname.status);      ":saveSub="+radioSelection(formname.submitonly)+":saveStatus="+pullDownSelection(formname.status);
  if (cmd[0].checked || cmd[1].checked || cmd[2].checked || cmd[4].checked) formname.submit();   if (cmd[0].checked || cmd[1].checked || cmd[2].checked || cmd[3].checked || cmd[4].checked) formname.submit();
   
  if (cmd[3].checked) browseAndUpload();  
   
  if (cmd[5].checked) {   if (cmd[5].checked) {
     if (!checkReceiptNo(formname,'notOK')) { return false;}      if (!checkReceiptNo(formname,'notOK')) { return false;}
     formname.submit();      formname.submit();
Line 3176  sub gradingmenu { Line 3211  sub gradingmenu {
  }   }
     }      }
   
     function browseAndUpload() {  
  bNLoad = window.open('', 'BrowseAndUpload', 'toolbar=no,location=no,scrollbars=no,width=550,height=200,screenx=100,screeny=75');  
  bNLoad.focus();  
  var lDoc = bNLoad.document;  
  lDoc.write("<html><head>");  
  lDoc.write("<title>Browse And Upload</title>");  
   
  lDoc.write("<script language=javascript>");  
  lDoc.write("function checkUpload(formname) {");  
   
  lDoc.write("  if (formname.upfile.value == \\"\\") {");  
  lDoc.write("     alert(\\"Please use the browse button to select a file from your local directory.\\");");  
  lDoc.write("     return false;");  
  lDoc.write("   }");  
  lDoc.write("   var openformname = opener.document.gradingMenu;");  
  lDoc.write("   formname.saveState.value = \\"saveCmd=\\"+opener.radioSelection(openformname.command)+\\":saveSec=\\"+opener.pullDownSelection(openformname.section)+\\":saveSub=\\"+opener.radioSelection(openformname.submitonly)+\\":saveStatus=\\"+opener.pullDownSelection(openformname.status);");  
  lDoc.write("   document.gradesupload.submit();");  
  lDoc.write("   if (navigator.appName !=\\"Netscape\\") {self.close()};");  
  lDoc.write("   setTimeout('self.close()',750)");   
  lDoc.write("}");  
   
  lDoc.write("<");  
  lDoc.write("/script>");  
   
  lDoc.write("</head><body bgcolor=white>");  
  lDoc.write("<form method=\\"post\\" enctype=\\"multipart/form-data\\" action=\\"/adm/grades\\" name=\\"gradesupload\\" target=\\"LONcatInfo\\">");  
  lDoc.write("<input type=\\"hidden\\" name=\\"symb\\"       value=\\"$symb\\">");  
  lDoc.write("<input type=\\"hidden\\" name=\\"url\\"        value=\\"$url\\">");  
  lDoc.write("<input type=\\"hidden\\" name=\\"probTitle\\"  value=\\"$probTitle\\">");  
  lDoc.write("<input type=\\"hidden\\" name=\\"saveState\\"  value=\\"\\">");  
  lDoc.write("<input type=\\"hidden\\" name=\\"command\\"    value=\\"csvuploadmap\\">");  
   
  lDoc.write("<font color=\\"green\\" size=+1>&nbsp;<b>Specify a file containing the class scores for problem - $probTitle</b></font><br><br>");  
   
  lDoc.write("<table border=0 width=100%><tr><td bgcolor=\\"#777777\\">");  
  lDoc.write("<table border=0 width=100%><tr bgcolor=\\"#ddffff\\">");  
  lDoc.write("<td>");  
  lDoc.write("<input type=\\"file\\" name=\\"upfile\\" size=\\"50\\" />");  
  lDoc.write("<br />Type: <select name=\\"upfiletype\\">");  
         lDoc.write("<option value=\\"csv\\">CSV (comma separated values, spreadsheet)</option>");  
         lDoc.write("<option value=\\"space\\">Space separated</option>");  
         lDoc.write("<option value=\\"tab\\">Tabulator separated</option>");  
         lDoc.write("<option value=\\"xml\\">HTML/XML</option>");  
         lDoc.write("</select>");  
         lDoc.write("</td></tr></table>");  
         lDoc.write("</td></tr></table>&nbsp;");  
         lDoc.write("<input type=\\"button\\" value=\\"Upload Scores\\" onClick=\\"javascript:checkUpload(this.form)\\">&nbsp;&nbsp;");  
         lDoc.write("<input type=\\"button\\" value=\\"Cancel\\" onClick=\\"self.close()\\"><br><br>");  
         lDoc.write("</form>");  
         lDoc.write("</body></html>");  
   }  
 </script>  </script>
 GRADINGMENUJS  GRADINGMENUJS
   
Line 3288  GRADINGMENUJS Line 3272  GRADINGMENUJS
  ($saveSub eq 'all' ? 'checked' : '').' /> everybody</td></tr>'."\n".   ($saveSub eq 'all' ? 'checked' : '').' /> everybody</td></tr>'."\n".
   
  '<tr bgcolor="#ffffe6"valign="top"><td colspan="2">'.   '<tr bgcolor="#ffffe6"valign="top"><td colspan="2">'.
  '<input type="radio" name="command" value="csvupload" '.   '<input type="radio" name="command" value="csvform" '.
  ($saveCmd eq 'csvupload' ? 'checked' : '').'> '.   ($saveCmd eq 'csvform' ? 'checked' : '').'> '.
  'Upload scores from file</td></tr>'."\n";   'Upload scores from file</td></tr>'."\n";
   
     $result.='<tr bgcolor="#ffffe6"valign="top"><td colspan="2">'.      $result.='<tr bgcolor="#ffffe6"valign="top"><td colspan="2">'.

Removed from v.1.85  
changed lines
  Added in v.1.86


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