Diff for /loncom/homework/grades.pm between versions 1.26 and 1.28

version 1.26, 2002/05/21 02:29:22 version 1.28, 2002/06/20 21:21:16
Line 94  sub listStudents { Line 94  sub listStudents {
   my $cnum=$ENV{"course.$ENV{'request.course.id'}.num"};    my $cnum=$ENV{"course.$ENV{'request.course.id'}.num"};
   my $hostver=unpack("%32C*",$Apache::lonnet::perlvar{'lonHostID'});    my $hostver=unpack("%32C*",$Apache::lonnet::perlvar{'lonHostID'});
   $request->print(<<ENDHEADER);    $request->print(<<ENDHEADER);
 <h1>Verify a Submission Receipt Issued by this Server</h1>  <h2><font color="#339933">Verify a Submission Receipt Issued by this Server</font></h2>
 <form action="/adm/grades" method="post">  <form action="/adm/grades" method="post">
 <tt>$hostver-<input type="text" name="receipt" size="4"></tt>  <tt>$hostver-<input type="text" name="receipt" size="4"></tt>
 <input type="submit" name="submit" value="Verify">  <input type="submit" name="submit" value="Verify">
Line 110  ENDHEADER Line 110  ENDHEADER
   }    }
   $request->print(<<ENDTABLEST);    $request->print(<<ENDTABLEST);
 </form>  </form>
 <h1>Show Student Submissions on Assessment</h1>  <h2><font color="#339933">Show Student Submissions on Assessment</font></h2>
 <table border="1">  
 <tr><th>Username</th><th>Domain</th><th>Name</th><th>&nbsp;</th></tr>  <table border=0><tr><td bgcolor=#990404>
   <table border=0>
   <tr bgcolor=#e6ffff><td><b>Username</b></td><td><b>Name</b></td><td><b>Domain</b></td><td>&nbsp;</td></tr>
 ENDTABLEST  ENDTABLEST
   my (%classlist) = &getclasslist($cdom,$cnum,'0');    my (%classlist) = &getclasslist($cdom,$cnum,'0');
   foreach my $student ( sort(@{ $classlist{'allids'} }) ) {    foreach my $student ( sort(@{ $classlist{'allids'} }) ) {
Line 125  ENDTABLEST Line 127  ENDTABLEST
       my ($tmp) = keys(%name);        my ($tmp) = keys(%name);
       if ($tmp !~ /^(con_lost|error|no_such_host)/i) {        if ($tmp !~ /^(con_lost|error|no_such_host)/i) {
  $fullname=$name{'lastname'}.$name{'generation'};   $fullname=$name{'lastname'}.$name{'generation'};
  if ($fullname =~ /[^\s]+/) { $fullname.=','; }   if ($fullname =~ /[^\s]+/) { $fullname.=', '; }
  $fullname.=$name{'firstname'}.' '.$name{'middlename'};   $fullname.=$name{'firstname'}.' '.$name{'middlename'};
       }        }
       if ( $Apache::grades::viewgrades eq 'F' ) {        if ( $Apache::grades::viewgrades eq 'F' ) {
   $request->print("\n".'<tr>'."<td>$sname</td><td>$sdom</td><td>$fullname</td><td>".    $request->print("\n".'<tr bgcolor=#ffffe6>'."<td>$sname</td><td>$fullname</td><td>$sdom</td><td>".
   '<form action="/adm/grades" method="post">');    '<form action="/adm/grades" method="post">');
   if ($ENV{'form.url'}) {    if ($ENV{'form.url'}) {
     $request->print(      $request->print(
Line 144  ENDTABLEST Line 146  ENDTABLEST
   $request->print(    $request->print(
              '<input type="hidden" name="student" value="'.$sname.'" />');               '<input type="hidden" name="student" value="'.$sname.'" />');
   $request->print(    $request->print(
                '<input type="hidden" name="fullname" value="'.$fullname.'" />');
     $request->print(
              '<input type="hidden" name="domain" value="'.$sdom.'" />');               '<input type="hidden" name="domain" value="'.$sdom.'" />');
   $request->print(    $request->print(
                          '<input type="submit" name="submit" value="View" />');                           '<input type="submit" name="submit" value="View" />');
   $request->print('</form></td></tr>');    $request->print('</td></tr></form>');
   #  $request->print('</form></td></tr>');
       }        }
   }    }
   $request->print('</table>');    $request->print('</table></td></tr></table>');
 }  }
   
   
Line 207  sub viewstudentgrade { Line 212  sub viewstudentgrade {
   my ($url,$symb,$courseid,$student,@parts) = @_;    my ($url,$symb,$courseid,$student,@parts) = @_;
   my $result ='';    my $result ='';
   my $cellclr = '"#ffffdd"';    my $cellclr = '"#ffffdd"';
   my ($stuname,$domain) = split(/:/,$student);    my ($username,$domain) = split(/:/,$student);
   
   my %record=&Apache::lonnet::restore($symb,$courseid,$domain,$stuname);    my (@requests) = ('lastname','firstname','middlename','generation');
     my (%name) = &Apache::lonnet::get('environment',\@requests,$domain,$username);
     my %record=&Apache::lonnet::restore($symb,$courseid,$domain,$username);
     my $fullname=$name{'lastname'}.$name{'generation'};
     if ($fullname =~ /[^\s]+/) { $fullname.=', '; }
     $fullname.=$name{'firstname'}.' '.$name{'middlename'};
   
   $result.="<tr><td bgcolor=$cellclr>$stuname</td><td bgcolor=$cellclr align=\"middle\">$domain</td>\n";    $result.="<tr bgcolor=$cellclr><td>$username</td><td>$fullname</td><td align=\"middle\">$domain</td>\n";
   foreach my $part (@parts) {    foreach my $part (@parts) {
     my ($temp,$part,$type)=split(/_/,$part);      my ($temp,$part,$type)=split(/_/,$part);
     #print "resource.$part.$type = ".$record{"resource.$part.$type"}." <br />\n";      #print "resource.$part.$type = ".$record{"resource.$part.$type"}." <br />\n";
     if ($type eq 'awarded') {      if ($type eq 'awarded') {
       my $score=$record{"resource.$part.$type"};        my $score=$record{"resource.$part.$type"};
       $result.="<td bgcolor=$cellclr align=\"middle\"><input type=\"text\" name=\"GRADE.$student.$part.$type\" value=\"$score\" size=\"4\" /></td>\n";        $result.="<td align=\"middle\"><input type=\"text\" name=\"GRADE.$student.$part.$type\" value=\"$score\" size=\"4\" /></td>\n";
     } elsif ($type eq 'tries') {      } elsif ($type eq 'tries') {
       my $score=$record{"resource.$part.$type"};        my $score=$record{"resource.$part.$type"};
       $result.="<td bgcolor=$cellclr align=\"middle\"><input type=\"text\" name=\"GRADE.$student.$part.$type\" value=\"$score\" size=\"4\" /></td>\n"        $result.="<td align=\"middle\"><input type=\"text\" name=\"GRADE.$student.$part.$type\" value=\"$score\" size=\"4\" /></td>\n"
     } elsif ($type eq 'solved') {      } elsif ($type eq 'solved') {
       my $score=$record{"resource.$part.$type"};        my $score=$record{"resource.$part.$type"};
       $result.="<td bgcolor=$cellclr align=\"middle\"><select name=\"GRADE.$student.$part.$type\">\n";        $result.="<td align=\"middle\"><select name=\"GRADE.$student.$part.$type\">\n";
       if ($score =~ /^correct/) {        if ($score =~ /^correct/) {
  $result.="<option selected=\"on\">correct</option>\n<option>incorrect</option>\n<option>excused</option>\n<option>ungraded</option>\n<option>nothing</option>\n";   $result.="<option selected=\"on\">correct</option>\n<option>incorrect</option>\n<option>excused</option>\n<option>ungraded</option>\n<option>nothing</option>\n";
       } elsif ($score =~ /^incorrect/) {        } elsif ($score =~ /^incorrect/) {
Line 311  sub submission { Line 321  sub submission {
   if ($symb eq '') { $request->print("Unable to handle ambiguous references:$url:."); return ''; }    if ($symb eq '') { $request->print("Unable to handle ambiguous references:$url:."); return ''; }
   my $answer=&Apache::loncommon::get_previous_attempt($symb,$uname,$udom,    my $answer=&Apache::loncommon::get_previous_attempt($symb,$uname,$udom,
       $ENV{'request.course.id'});        $ENV{'request.course.id'});
   my $result="<h2> Submission Record </h2>  $uname:$udom for $url <br />".$answer;    my $result='<h2><font color="#339933">Submission Record</font></h2>';
     $result.='<b>Username : </b>'.$uname.'<br><b>Fullname : </b>'.$ENV{'form.fullname'}.'<br><b>Domain : </b>'.$udom.'<br><b>Resource : </b>'.$url.' <br />'.$answer;
   my $rendered=&Apache::loncommon::get_student_view($symb,$uname,$udom,    my $rendered=&Apache::loncommon::get_student_view($symb,$uname,$udom,
    $ENV{'request.course.id'});     $ENV{'request.course.id'});
   $result.="Student's view of the problem:<br /> $rendered <br /> Correct answer:<br />";    $result.="Student's view of the problem:<br /> $rendered <br /> Correct answer:<br />";
Line 336  sub gradingmenu { Line 347  sub gradingmenu {
   my ($request) = @_;    my ($request) = @_;
   my ($symb,$url)=&get_symb_and_url($request);    my ($symb,$url)=&get_symb_and_url($request);
   if (!$symb) {return '';}    if (!$symb) {return '';}
   my $result='<h2>Select a grading method</h2><br />';  
     my $result='<h2>&nbsp;<font color="#339933">Select a Grading Method</font></h2><br />';
     $result.='<table width=100% border=0><tr><td bgcolor=#990404>'."\n";
     $result.='<table width=100% border=0><tr><td bgcolor=#e6ffff>'."\n";
     $result.='&nbsp;<b>Resource :</b> '.$url.'</td></tr>'."\n";
     $result.='<tr bgcolor=#ffffe6><td>'."\n";
   $result.='<form action="/adm/grades" method="post">'."\n".    $result.='<form action="/adm/grades" method="post">'."\n".
      '<input type="hidden" name="symb" value="'.$symb.'" />'."\n".       '<input type="hidden" name="symb" value="'.$symb.'" />'."\n".
       '<input type="hidden" name="url" value="'.$url.'" />'."\n".        '<input type="hidden" name="url" value="'.$url.'" />'."\n".
  '<input type="hidden" name="command" value="viewgrades" />'."\n".   '<input type="hidden" name="command" value="viewgrades" />'."\n".
   '<input type="submit" name="submit" value="View/Edit Entire Class" />'."\n".    '<input type="submit" name="submit" value="View/Edit Entire Class" />'."\n".
     '</form>';      '</form>'."\n";
   $result.='<form action="/adm/grades" method="post">'."\n".    $result.='<form action="/adm/grades" method="post">'."\n".
      '<input type="hidden" name="symb" value="'.$symb.'" />'."\n".       '<input type="hidden" name="symb" value="'.$symb.'" />'."\n".
       '<input type="hidden" name="url" value="'.$url.'" />'."\n".        '<input type="hidden" name="url" value="'.$url.'" />'."\n".
  '<input type="hidden" name="command" value="csvupload" />'."\n".   '<input type="hidden" name="command" value="csvupload" />'."\n".
   '<input type="submit" name="submit" value="Upload Scores" />'."\n".    '<input type="submit" name="submit" value="Upload Scores" />'."\n".
     '</form>';      '</form>'."\n";
   $result.='<form action="/adm/grades" method="post">'."\n".    $result.='<form action="/adm/grades" method="post">'."\n".
      '<input type="hidden" name="symb" value="'.$symb.'" />'."\n".       '<input type="hidden" name="symb" value="'.$symb.'" />'."\n".
       '<input type="hidden" name="url" value="'.$url.'" />'."\n".        '<input type="hidden" name="url" value="'.$url.'" />'."\n".
  '<input type="hidden" name="command" value="submission" />'."\n".   '<input type="hidden" name="command" value="submission" />'."\n".
   '<input type="submit" name="submit" value="View/Edit Student" />'."\n".    '<input type="submit" name="submit" value="View/Edit Student" />'."\n".
     '</form>';      '</form>'."\n";
     $result.='</td></tr></table>'."\n";
     $result.='</td></tr></table>'."\n";
   return $result;    return $result;
 }  }
   
Line 375  sub viewgrades { Line 393  sub viewgrades {
   #get list of parts for this problem    #get list of parts for this problem
   my (@parts) = &getpartlist($url);    my (@parts) = &getpartlist($url);
   
   $request->print ("<h2><font color=\"#339966\">Manual Grading</font></h2>");    $request->print ("<h2><font color=\"#339933\">Manual Grading</font></h2>");
   
   #start the form    #start the form
   $result = '<form action="/adm/grades" method="post">'."\n".    $result = '<form action="/adm/grades" method="post">'."\n".
Line 383  sub viewgrades { Line 401  sub viewgrades {
       '<input type="hidden" name="url" value="'.$url.'" />'."\n".        '<input type="hidden" name="url" value="'.$url.'" />'."\n".
  '<input type="hidden" name="command" value="editgrades" />'."\n".   '<input type="hidden" name="command" value="editgrades" />'."\n".
   '<input type="submit" name="submit" value="Submit Changes" />'."\n".    '<input type="submit" name="submit" value="Submit Changes" />'."\n".
     '<table border=0><tr><td bgcolor="#999999">'."\n".      '<table border=0><tr><td bgcolor="#990404">'."\n".
      '<table border=0>'."\n".       '<table border=0>'."\n".
       '<tr><td bgcolor='.$headerclr.'>UserId</td><td bgcolor='.$headerclr.'>Domain</td>'."\n";        '<tr bgcolor='.$headerclr.'><td><b>Username</b></td><td><b>Name</b></td><td><b>Domain</b></td>'."\n";
   foreach my $part (@parts) {    foreach my $part (sort(@parts)) {
      my $display=&Apache::lonnet::metadata($url,$part.'.display');       my $display=&Apache::lonnet::metadata($url,$part.'.display');
      if  (!$display) { $display = &Apache::lonnet::metadata($url,$part.'.name'); }       if  (!$display) { $display = &Apache::lonnet::metadata($url,$part.'.name'); }
      $result.='<td bgcolor='.$headerclr.'>'.$display.'</td>'."\n";       $result.='<td><b>'.$display.'</b></td>'."\n";
    }     }
   $result.="</tr>";    $result.='</tr>';
   #get info for each student    #get info for each student
   foreach my $student ( sort(@{ $classlist{'allids'} }) ) {    foreach my $student ( sort(@{ $classlist{'allids'} }) ) {
     $result.=&viewstudentgrade($url,$symb,$ENV{'request.course.id'},$student,@parts);      $result.=&viewstudentgrade($url,$symb,$ENV{'request.course.id'},$student,@parts);
Line 449  ENDUPFORM Line 467  ENDUPFORM
   return $result;    return $result;
 }  }
   
   sub csvupload_javascript_reverse_associate {
     return(<<ENDPICK);
     function verify(vf) {
       var foundsomething=0;
       var founduname=0;
       var founddomain=0;
       for (i=0;i<=vf.nfields.value;i++) {
         tw=eval('vf.f'+i+'.selectedIndex');
         if (i==0 && tw!=0) { founduname=1; }
         if (i==1 && tw!=0) { founddomain=1; }
         if (i!=0 && i!=1 && tw!=0) { foundsomething=1; }
       }
       if (founduname==0 || founddomain==0) {
         alert('You need to specify at both the username and domain');
         return;
       }
       if (foundsomething==0) {
         alert('You need to specify at least one grading field');
         return;
       }
       vf.submit();
     }
     function flip(vf,tf) {
       var nw=eval('vf.f'+tf+'.selectedIndex');
       var i;
       for (i=0;i<=vf.nfields.value;i++) {
         //can not pick the same destination field for both name and domain
         if (((i ==0)||(i ==1)) && 
             ((tf==0)||(tf==1)) && 
             (i!=tf) &&
             (eval('vf.f'+i+'.selectedIndex')==nw)) {
           eval('vf.f'+i+'.selectedIndex=0;')
         }
       }
     }
   ENDPICK
   }
   
   sub csvupload_javascript_forward_associate {
     return(<<ENDPICK);
     function verify(vf) {
       var foundsomething=0;
       var founduname=0;
       var founddomain=0;
       for (i=0;i<=vf.nfields.value;i++) {
         tw=eval('vf.f'+i+'.selectedIndex');
         if (tw==1) { founduname=1; }
         if (tw==2) { founddomain=1; }
         if (tw>2) { foundsomething=1; }
       }
       if (founduname==0 || founddomain==0) {
         alert('You need to specify at both the username and domain');
         return;
       }
       if (foundsomething==0) {
         alert('You need to specify at least one grading field');
         return;
       }
       vf.submit();
     }
     function flip(vf,tf) {
       var nw=eval('vf.f'+tf+'.selectedIndex');
       var i;
       //can not pick the same destination field twice
       for (i=0;i<=vf.nfields.value;i++) {
         if ((i!=tf) && (eval('vf.f'+i+'.selectedIndex')==nw)) {
           eval('vf.f'+i+'.selectedIndex=0;')
         }
       }
     }
   ENDPICK
   }
   
 sub csvuploadmap_header {  sub csvuploadmap_header {
   my ($request,$symb,$url,$datatoken,$distotal)= @_;    my ($request,$symb,$url,$datatoken,$distotal)= @_;
   my $result;    my $result;
   my $javascript;    my $javascript;
   if ($ENV{'form.upfile_associate'} eq 'reverse') {    if ($ENV{'form.upfile_associate'} eq 'reverse') {
 #    $javascript=&csv_upload_javascript_reverse_associate();      $javascript=&csvupload_javascript_reverse_associate();
   } else {    } else {
 #    $javascript=&csv_upload_javascript_forward_associate();      $javascript=&csvupload_javascript_forward_associate();
   }    }
   my $javascript_validations;#=&javascript_validations($krbdefdom);  
   $request->print(<<ENDPICK);    $request->print(<<ENDPICK);
 <form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload">  <form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload">
 <h3>Uploading Class Grades for resource $url</h3>  <h3>Uploading Class Grades for resource $url</h3>
Line 481  to this page if the data selected is ins Line 571  to this page if the data selected is ins
 <hr />  <hr />
 <script type="text/javascript" language="Javascript">  <script type="text/javascript" language="Javascript">
 $javascript  $javascript
 $javascript_validations  
 </script>  </script>
 ENDPICK  ENDPICK
   return '';    return '';
Line 491  ENDPICK Line 580  ENDPICK
 sub csvupload_fields {  sub csvupload_fields {
   my ($url) = @_;    my ($url) = @_;
   my (@parts) = &getpartlist($url);    my (@parts) = &getpartlist($url);
   my @fields;    my @fields=(['username','Student Username'],['domain','Student Domain']);
   foreach my $part (@parts) {    foreach my $part (sort(@parts)) {
     my @datum;      my @datum;
     my $display=&Apache::lonnet::metadata($url,$part.'.display');      my $display=&Apache::lonnet::metadata($url,$part.'.display');
     my $name=&Apache::lonnet::metadata($url,$part.'.name');      my $name=$part;
     if  (!$display) { $display = $name; }      if  (!$display) { $display = $name; }
     @datum=($name,$display);      @datum=($name,$display);
     push(@fields,\@datum);      push(@fields,\@datum);
Line 549  sub csvuploadmap { Line 638  sub csvuploadmap {
   return '';    return '';
 }  }
   
   sub csvuploadassign {
     my ($request)= @_;
     my ($symb,$url)=&get_symb_and_url($request);
     if (!$symb) {return '';}
     &Apache::loncommon::load_tmp_file($request);
     my @gradedata=&Apache::loncommon::upfile_record_sep();
     my @keyfields = split(/\,/,$ENV{'form.keyfields'});
     my %fields=();
     for (my $i=0; $i<=$ENV{'form.nfields'}; $i++) {
       if ($ENV{'form.upfile_associate'} eq 'reverse') {
         if ($ENV{'form.f'.$i} ne 'none') {
    $fields{$keyfields[$i]}=$ENV{'form.f'.$i};
         }
       } else {
         if ($ENV{'form.f'.$i} ne 'none') {
    $fields{$ENV{'form.f'.$i}}=$keyfields[$i];
         }
       }
     }
     $request->print('<h3>Assigning Grades</h3>');
     &Apache::lonhomework::showhash(('1'=>\@keyfields));
     &Apache::lonhomework::showhash(%fields);
     my $courseid=$ENV{'request.course.id'};
     my $cdom=$ENV{"course.$courseid.domain"};
     my $cnum=$ENV{"course.$courseid.num"};
     my (%classlist) = &getclasslist($cdom,$cnum,'1');
     foreach my $student ( sort(@{ $classlist{'allids'} }) ) {
       my %newhash;
       foreach my $grade (@gradedata) {
         my %entries=&Apache::loncommon::record_sep($grade);
         foreach my $dest (keys(%fields)) {
   
         }
       }
     }
   }
   
 sub send_header {  sub send_header {
   my ($request)= @_;    my ($request)= @_;
   $request->print(&Apache::lontexconvert::header());    $request->print(&Apache::lontexconvert::header());

Removed from v.1.26  
changed lines
  Added in v.1.28


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