[LON-CAPA-cvs] cvs: loncom /homework grades.pm
ng
lon-capa-cvs@mail.lon-capa.org
Mon, 21 Apr 2003 18:39:43 -0000
This is a MIME encoded message
--ng1050950383
Content-Type: text/plain
ng Mon Apr 21 14:39:43 2003 EDT
Modified files:
/loncom/homework grades.pm
Log:
fix bug 1330 plus display problems with good/bad collaborators.
--ng1050950383
Content-Type: text/plain
Content-Disposition: attachment; filename="ng-20030421143943.txt"
Index: loncom/homework/grades.pm
diff -u loncom/homework/grades.pm:1.85 loncom/homework/grades.pm:1.86
--- loncom/homework/grades.pm:1.85 Sat Apr 19 05:02:57 2003
+++ loncom/homework/grades.pm Mon Apr 21 14:39:43 2003
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# The LON-CAPA Grading handler
#
-# $Id: grades.pm,v 1.85 2003/04/19 09:02:57 albertel Exp $
+# $Id: grades.pm,v 1.86 2003/04/21 18:39:43 ng Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1108,7 +1108,6 @@
my @col_fullnames;
my ($classlist,$fullname);
if ($ENV{'form.handgrade'} eq 'yes') {
- my @col_list;
($classlist,undef,$fullname) = &getclasslist('all','0');
for (keys (%$handgrade)) {
my $ncol = &Apache::lonnet::EXT('resource.'.$_.
@@ -1117,56 +1116,46 @@
next if ($ncol <= 0);
s/\_/\./g;
next if ($record{'resource.'.$_.'.collaborators'} eq '');
- my (@colList) = split(/,?\s+/,
- $record{'resource.'.$_.'.collaborators'});
- my @collaborators = ();
- foreach (@colList) { #pre-filter list - throw out submitter
+ my @goodcollaborators = ();
+ my @badcollaborators = ();
+ foreach (split(/,?\s+/,$record{'resource.'.$_.'.collaborators'})) {
+ $_ =~ s/[\$\^\(\)]//g;
+ next if ($_ eq '');
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);
- 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(@collaborators) != 0) {
+ if (scalar(@goodcollaborators) != 0) {
$result.='<b>Collaborators: </b>';
- foreach my $collaborator (@collaborators) {
- my ($co_name,$co_dom) = split /\@|:/,$collaborator;
- $co_dom = $udom if (! defined($co_dom));
- # Doing this grep allows 'fuzzy' specification
- 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{$_}.' ';
- }
- }
+ foreach (@goodcollaborators) {
+ my ($lastname,$givenn) = split(/,/,$$fullname{$_});
+ push @col_fullnames, $givenn.' '.$lastname;
+ $result.=$$fullname{$_}.' ';
+ }
$result.='<br />'."\n";
- if (scalar(@badcollaborators) > 0) {
- $result.='<table border="0"><tr bgcolor="#ffbbbb"><td>';
- $result.='This student has submitted ';
- if (scalar(@badcollaborators) == 1) {
- $result .= 'an invalid collaborator';
- } else {
- $result .= 'invalid collaborators';
- }
- $result .= ': '.join(', ',@badcollaborators);
- $result .= '</td></tr></table>';
- }
- if (scalar(@collaborators > $ncol)) {
- $result .= '<table border="0"><tr bgcolor="#ffbbbb"><td>';
- $result .= 'This student has submitted too many '.
- 'collaborators. Maximum is '.$ncol;
- $result .= '</td></tr></table>';
- }
- $result.='<input type="hidden" name="collaborator'.$counter.
- '" value="'.(join ':',@col_list).'" />'."\n";
- }
+ $result.='<input type="hidden" name="collaborator'.$counter.
+ '" value="'.(join ':',@goodcollaborators).'" />'."\n";
+ }
+ if (scalar(@badcollaborators) > 0) {
+ $result.='<table border="0"><tr bgcolor="#ffbbbb"><td>';
+ $result.='This student has submitted ';
+ $result.=(scalar(@badcollaborators) == 1) ? 'an invalid collaborator' : 'invalid collaborators';
+ $result .= ': '.join(', ',@badcollaborators);
+ $result .= '</td></tr></table>';
+ }
+ if (scalar(@badcollaborators > $ncol)) {
+ $result .= '<table border="0"><tr bgcolor="#ffbbbb"><td>';
+ $result .= 'This student has submitted too many '.
+ 'collaborators. Maximum is '.$ncol.'.';
+ $result .= '</td></tr></table>';
+ }
}
}
$request->print($result."\n");
@@ -1246,7 +1235,7 @@
my $lastone = pop @col_fullnames;
$msgfor .= ', '.(join ', ',@col_fullnames).' and '.$lastone.'.';
}
- $msgfor =~ s/\'/\\'/g;
+ $msgfor =~ s/\'/\\'/g; #\'
$result.='<tr><td bgcolor="#ffffff">'."\n".
' <a href="javascript:msgCenter(document.SCORE,'.$counter.
',\''.$msgfor.'\')"; TARGET=_self>'.
@@ -1444,12 +1433,20 @@
$ENV{'course.'.$ENV{'request.course.id'}.'.num'});
# Called by Save & Refresh from Highlight Attribute Window
+ my (undef,undef,$fullname) = &getclasslist($ENV{'form.section'},'0');
if ($ENV{'form.refresh'} eq 'on') {
- my $ctr = 0;
- $ENV{'form.NTSTU'}=$ngrade;
+ my ($ctr,$total) = (0,0);
while ($ctr < $ngrade) {
- ($ENV{'form.student'},$ENV{'form.userdom'}) = split(/:/,$ENV{'form.unamedom'.$ctr});
- &submission($request,$ctr,$ngrade-1);
+ $total++ if $ENV{'form.unamedom'.$ctr} ne '';
+ $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++;
}
return '';
@@ -1465,7 +1462,6 @@
$laststu = $firststu if ($ctr > $ngrade);
}
- my (undef,undef,$fullname) = &getclasslist($ENV{'form.section'},'0');
my (@parsedlist,@nextlist);
my ($nextflg) = 0;
foreach (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) {
@@ -2211,6 +2207,48 @@
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.=' <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 {
my ($request)= @_;
my ($symb,$url)=&get_symb_and_url($request);
@@ -3124,10 +3162,7 @@
var cmd = formname.command;
formname.saveState.value = "saveCmd="+radioSelection(cmd)+":saveSec="+pullDownSelection(formname.section)+
":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[3].checked) browseAndUpload();
-
+ if (cmd[0].checked || cmd[1].checked || cmd[2].checked || cmd[3].checked || cmd[4].checked) formname.submit();
if (cmd[5].checked) {
if (!checkReceiptNo(formname,'notOK')) { return false;}
formname.submit();
@@ -3176,57 +3211,6 @@
}
}
- 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> <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> ");
- lDoc.write("<input type=\\"button\\" value=\\"Upload Scores\\" onClick=\\"javascript:checkUpload(this.form)\\"> ");
- lDoc.write("<input type=\\"button\\" value=\\"Cancel\\" onClick=\\"self.close()\\"><br><br>");
- lDoc.write("</form>");
- lDoc.write("</body></html>");
- }
</script>
GRADINGMENUJS
@@ -3288,8 +3272,8 @@
($saveSub eq 'all' ? 'checked' : '').' /> everybody</td></tr>'."\n".
'<tr bgcolor="#ffffe6"valign="top"><td colspan="2">'.
- '<input type="radio" name="command" value="csvupload" '.
- ($saveCmd eq 'csvupload' ? 'checked' : '').'> '.
+ '<input type="radio" name="command" value="csvform" '.
+ ($saveCmd eq 'csvform' ? 'checked' : '').'> '.
'Upload scores from file</td></tr>'."\n";
$result.='<tr bgcolor="#ffffe6"valign="top"><td colspan="2">'.
--ng1050950383--