Diff for /loncom/homework/grades.pm between versions 1.24 and 1.27

version 1.24, 2002/05/15 23:47:49 version 1.27, 2002/05/24 21:45:22
Line 118  ENDTABLEST Line 118  ENDTABLEST
   foreach my $student ( sort(@{ $classlist{'allids'} }) ) {    foreach my $student ( sort(@{ $classlist{'allids'} }) ) {
       my ($sname,$sdom) = split(/:/,$student);        my ($sname,$sdom) = split(/:/,$student);
   
       my $reply=&Apache::lonnet::reply('get:'.$sdom.':'.$sname.        my %name=&Apache::lonnet::get('environment', ['lastname','generation',
      ':environment:lastname&generation&firstname&middlename',      'firstname','middlename'],
       &Apache::lonnet::homeserver($sname,$sdom));      $sdom,$sname);
       #print "reply=$reply<br>";        my $fullname;
       my (@nameparts) = split /&/,$reply;        my ($tmp) = keys(%name);
 #      my $sfullname = $Apache::lonnet::unescape($nameparts[0]);        if ($tmp !~ /^(con_lost|error|no_such_host)/i) {
    $fullname=$name{'lastname'}.$name{'generation'};
    if ($fullname =~ /[^\s]+/) { $fullname.=','; }
    $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>@nameparts</td><td>".    $request->print("\n".'<tr>'."<td>$sname</td><td>$sdom</td><td>$fullname</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 319  sub submission { Line 322  sub submission {
   return $result;    return $result;
 }  }
   
 sub viewgrades {  sub get_symb_and_url {
   my ($request) = @_;   my ($request) = @_;
   my $result='';  
   
   #get resource reference  
   my $url=$ENV{'form.url'};    my $url=$ENV{'form.url'};
   $url=~s-^http://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--;    $url=~s-^http://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--;
   my $symb=$ENV{'form.symb'};    my $symb=$ENV{'form.symb'};
   if (!$symb) { $symb=&Apache::lonnet::symbread($url); }    if (!$symb) { $symb=&Apache::lonnet::symbread($url); }
   if ($symb eq '') { $request->print("Unable to handle ambiguous references:$url:."); return ''; }    if ($symb eq '') { $request->print("Unable to handle ambiguous references:$url:."); return ''; }
    return ($symb,$url);
   }
   
   sub gradingmenu {
     my ($request) = @_;
     my ($symb,$url)=&get_symb_and_url($request);
     if (!$symb) {return '';}
     my $result='<h2>Select a grading method</h2><br />';
     $result.='<form action="/adm/grades" method="post">'."\n".
        '<input type="hidden" name="symb" value="'.$symb.'" />'."\n".
         '<input type="hidden" name="url" value="'.$url.'" />'."\n".
    '<input type="hidden" name="command" value="viewgrades" />'."\n".
     '<input type="submit" name="submit" value="View/Edit Entire Class" />'."\n".
       '</form>';
     $result.='<form action="/adm/grades" method="post">'."\n".
        '<input type="hidden" name="symb" value="'.$symb.'" />'."\n".
         '<input type="hidden" name="url" value="'.$url.'" />'."\n".
    '<input type="hidden" name="command" value="csvupload" />'."\n".
     '<input type="submit" name="submit" value="Upload Scores" />'."\n".
       '</form>';
     $result.='<form action="/adm/grades" method="post">'."\n".
        '<input type="hidden" name="symb" value="'.$symb.'" />'."\n".
         '<input type="hidden" name="url" value="'.$url.'" />'."\n".
    '<input type="hidden" name="command" value="submission" />'."\n".
     '<input type="submit" name="submit" value="View/Edit Student" />'."\n".
       '</form>';
     return $result;
   }
   
   sub viewgrades {
     my ($request) = @_;
     my $result='';
   
     #get resource reference
     my ($symb,$url)=&get_symb_and_url($request);
     if (!$symb) {return '';}
   #get classlist    #get classlist
   my ($cdom,$cnum) = split(/_/,$ENV{'request.course.id'});    my ($cdom,$cnum) = split(/_/,$ENV{'request.course.id'});
   #print "Found $cdom:$cnum<br />";    #print "Found $cdom:$cnum<br />";
Line 351  sub viewgrades { Line 386  sub viewgrades {
     '<table border=0><tr><td bgcolor="#999999">'."\n".      '<table border=0><tr><td bgcolor="#999999">'."\n".
      '<table border=0>'."\n".       '<table border=0>'."\n".
       '<tr><td bgcolor='.$headerclr.'>UserId</td><td bgcolor='.$headerclr.'>Domain</td>'."\n";        '<tr><td bgcolor='.$headerclr.'>UserId</td><td bgcolor='.$headerclr.'>Domain</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 bgcolor='.$headerclr.'>'.$display.'</td>'."\n";
Line 395  sub editgrades { Line 430  sub editgrades {
   return $result;    return $result;
 }  }
   
   sub csvupload {
     my ($request)= @_;
     my $result;
     my ($symb,$url)=&get_symb_and_url($request);
     if (!$symb) {return '';}
     my $upfile_select=&Apache::loncommon::upfile_select_html();
     $result.=<<ENDUPFORM;
   <form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload">
   <input type="hidden" name="symb" value="$symb" />
   <input type="hidden" name="url" value="$url" />
   <input type="hidden" name="command" value="csvuploadmap" />
   <hr />
   <h3>Specify a file containing the class grades for resource $url</h3>
   $upfile_select
   <p><input type="submit" name="submit" value="Upload Grades" />
   ENDUPFORM
     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 {
     my ($request,$symb,$url,$datatoken,$distotal)= @_;
     my $result;
     my $javascript;
     if ($ENV{'form.upfile_associate'} eq 'reverse') {
       $javascript=&csvupload_javascript_reverse_associate();
     } else {
       $javascript=&csvupload_javascript_forward_associate();
     }
     $request->print(<<ENDPICK);
   <form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload">
   <h3>Uploading Class Grades for resource $url</h3>
   <hr>
   <h3>Identify fields</h3>
   Total number of records found in file: $distotal <hr />
   Enter as many fields as you can. The system will inform you and bring you back
   to this page if the data selected is insufficient to run your class.<hr />
   <input type="button" value="Reverse Association" onClick="javascript:this.form.associate.value='Reverse Association';submit(this.form);" />
   <input type="hidden" name="associate"  value="" />
   <input type="hidden" name="phase"      value="three" />
   <input type="hidden" name="datatoken"  value="$datatoken" />
   <input type="hidden" name="fileupload" value="$ENV{'form.fileupload'}" />
   <input type="hidden" name="upfiletype" value="$ENV{'form.upfiletype'}" />
   <input type="hidden" name="upfile_associate" 
                                          value="$ENV{'form.upfile_associate'}" />
   <input type="hidden" name="symb"       value="$symb" />
   <input type="hidden" name="url"        value="$url" />
   <input type="hidden" name="command"    value="csvuploadassign" />
   <hr />
   <script type="text/javascript" language="Javascript">
   $javascript
   </script>
   ENDPICK
     return '';
   
   }
   
   sub csvupload_fields {
     my ($url) = @_;
     my (@parts) = &getpartlist($url);
     my @fields=(['username','Student Username'],['domain','Student Domain']);
     foreach my $part (sort(@parts)) {
       my @datum;
       my $display=&Apache::lonnet::metadata($url,$part.'.display');
       my $name=$part;
       if  (!$display) { $display = $name; }
       @datum=($name,$display);
       push(@fields,\@datum);
     }
     return (@fields);
   }
   
   sub csvuploadmap_footer {
     my ($request,$i,$keyfields) =@_;
     $request->print(<<ENDPICK);
   </table>
   <input type="hidden" name="nfields" value="$i" />
   <input type="hidden" name="keyfields" value="$keyfields" />
   <input type="button" onClick="javascript:verify(this.form)" value="Assign Grades" /><br />
   </form>
   ENDPICK
   }
   
   sub csvuploadmap {
     my ($request)= @_;
     my ($symb,$url)=&get_symb_and_url($request);
     if (!$symb) {return '';}
     my $datatoken;
     if (!$ENV{'form.datatoken'}) {
       $datatoken=&Apache::loncommon::upfile_store($request);
     } else {
       $datatoken=$ENV{'form.datatoken'};
       &Apache::loncommon::load_tmp_file($request);
     }
     my @records=&Apache::loncommon::upfile_record_sep();
     &csvuploadmap_header($request,$symb,$url,$datatoken,$#records+1);
     my $i;
     my $keyfields;
     if (@records) {
       my @fields=&csvupload_fields($url);
       if ($ENV{'form.upfile_associate'} eq 'reverse') {
         &Apache::loncommon::csv_print_samples($request,\@records);
         $i=&Apache::loncommon::csv_print_select_table($request,\@records,
       \@fields);
         foreach (@fields) { $keyfields.=$_->[0].','; }
         chop($keyfields);
       } else {
         unshift(@fields,['none','']);
         $i=&Apache::loncommon::csv_samples_select_table($request,\@records,
         \@fields);
         my %sone=&Apache::loncommon::record_sep($records[0]);
         $keyfields=join(',',sort(keys(%sone)));
       }
     }
     &csvuploadmap_footer($request,$i,$keyfields);
     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());
Line 462  sub handler { Line 724  sub handler {
          }           }
      }       }
   } else {    } else {
       &Apache::lonhomework::showhashsubset(\%ENV,'^form');
     $Apache::grades::viewgrades=&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'});      $Apache::grades::viewgrades=&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'});
     if ($command eq 'submission') {      if ($command eq 'submission') {
       &listStudents($request) if ($ENV{'form.student'} eq '');        &listStudents($request) if ($ENV{'form.student'} eq '');
       $request->print(&submission($request)) if ($ENV{'form.student'} ne '');        $request->print(&submission($request)) if ($ENV{'form.student'} ne '');
       } elsif ($command eq 'gradingmenu') {
         $request->print(&gradingmenu($request));
     } elsif ($command eq 'viewgrades') {      } elsif ($command eq 'viewgrades') {
       $request->print(&viewgrades($request));        $request->print(&viewgrades($request));
     } elsif ($command eq 'editgrades') {      } elsif ($command eq 'editgrades') {
       $request->print(&editgrades($request));        $request->print(&editgrades($request));
     } elsif ($command eq 'verify') {      } elsif ($command eq 'verify') {
       $request->print(&verifyreceipt($request));        $request->print(&verifyreceipt($request));
       } elsif ($command eq 'csvupload') {
         $request->print(&csvupload($request));
       } elsif ($command eq 'csvuploadmap') {
         $request->print(&csvuploadmap($request));
       } elsif ($command eq 'csvuploadassign') {
         if ($ENV{'form.associate'} ne 'Reverse Association') {
    $request->print(&csvuploadassign($request));
         } else {
    if ( $ENV{'form.upfile_associate'} ne 'reverse' ) {
     $ENV{'form.upfile_associate'} = 'reverse';
    } else {
     $ENV{'form.upfile_associate'} = 'forward';
    }
    $request->print(&csvuploadmap($request));
         }
     } else {      } else {
       $request->print("Unknown action: $command:");        $request->print("Unknown action: $command:");
     }      }

Removed from v.1.24  
changed lines
  Added in v.1.27


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