--- loncom/interface/Attic/lonspreadsheet.pm 2002/10/22 13:29:57 1.122 +++ loncom/interface/Attic/lonspreadsheet.pm 2002/10/24 15:34:10 1.127 @@ -1,5 +1,5 @@ # -# $Id: lonspreadsheet.pm,v 1.122 2002/10/22 13:29:57 matthew Exp $ +# $Id: lonspreadsheet.pm,v 1.127 2002/10/24 15:34:10 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -122,20 +122,17 @@ my $tmpdir; ## sub mask { my ($lower,$upper)=@_; - - $lower=~/([A-Za-z]|\*)(\d+|\*)/; - my $la=$1; - my $ld=$2; - - $upper=~/([A-Za-z]|\*)(\d+|\*)/; - my $ua=$1; - my $ud=$2; + # + my ($la,$ld) = ($lower=~/([A-Za-z]|\*)(\d+|\*)/); + my ($ua,$ud) = ($upper=~/([A-Za-z]|\*)(\d+|\*)/); + # my $alpha=''; my $num=''; - + # if (($la eq '*') || ($ua eq '*')) { $alpha='[A-Za-z]'; } else { + if (($la=~/[A-Z]/) && ($ua=~/[A-Z]/) || ($la=~/[a-z]/) && ($ua=~/[a-z]/)) { $alpha='['.$la.'-'.$ua.']'; @@ -188,8 +185,8 @@ sub mask { } $num.=')'; } else { - if ($lda[$#lda]!=$uda[$#uda]) { - $num.='['.$lda[$#lda].'-'.$uda[$#uda].']'; + if ($lda[-1]!=$uda[-1]) { + $num.='['.$lda[-1].'-'.$uda[-1].']'; } } } @@ -237,8 +234,6 @@ undef %c; # Holds the constants for a sh # sheets, this is the A column. Used in &MINPARM, &MAXPARM, &expandnamed, # &sett, and &setconstants. There is no &getconstants. # &setconstants is called by &loadstudent, &loadcourse, &load assessment, -undef %rowlabel; # Holds the 'prefix' for each row. Set by &setrowlabels. - # &setrowlabels is called by &updateclasssheet, &updatestudentassesssheet, undef @os; # Holds the names of other spreadsheets - this is used to specify # the spreadsheets that are available for the assessment sheet. # Set by &setothersheets. &setothersheets is called by &handler. A @@ -979,7 +974,7 @@ sub outrowassess { if ($n) { my ($usy,$ufn)=split(/__&&&\__/,$sheet->{'f'}->{'A'.$n}); if ($sheet->{'rowlabel'}->{$usy}) { - $cols[0]=$sheet->{'rowlabel'}->{$usy}; + $cols[0]=&format_rowlabel($sheet->{'rowlabel'}->{$usy}); if (! $csv) { $cols[0].='<br>'. '<select name="sel_'.$n.'" onChange="changesheet('.$n.')">'. @@ -1017,7 +1012,7 @@ sub outrow { my $n=shift; my @cols=(); if ($n) { - $cols[0]=$sheet->{'rowlabel'}->{$sheet->{'f'}->{'A'.$n}}; + $cols[0]=&format_rowlabel($sheet->{'rowlabel'}->{$sheet->{'f'}->{'A'.$n}}); } else { $cols[0]='<b><font size=+1>Export</font></b>'; } @@ -1062,7 +1057,12 @@ sub setothersheets { # ------------------------------------------------ Add or change formula values sub setrowlabels { my $sheet=shift; - %{$sheet->{'safe'}->varglob('rowlabel')}=%{$sheet->{'rowlabel'}}; + my ($rowlabel) = @_; + if (! ref($rowlabel)) { + my %tmp = @_; + $rowlabel = \%tmp; + } + $sheet->{'rowlabel'}=$rowlabel; } # ------------------------------------------------------- Calculate spreadsheet @@ -1616,6 +1616,40 @@ sub parmval { return &Apache::lonnet::metadata($fn,$rwhat.'.default'); } +sub format_rowlabel { + my $rowlabel = shift; + my ($type,$labeldata) = split(':',$rowlabel,2); + my $result = ''; + if ($type eq 'symb') { + my ($symb,$uname,$udom,$title) = split(':',$labeldata); + $symb = &Apache::lonnet::unescape($symb); + if ($ENV{'form.showcsv'}) { + $result = $title; + } else { + $result = '<a href="/adm/assesscalc?usymb='.$symb. + '&uname='.$uname.'&udom='.$udom.'">'.$title.'</a>'; + } + } elsif ($type eq 'student') { + my ($sname,$sdom,$fullname,$section,$id) = split(':',$labeldata); + if ($ENV{'form.showcsv'}) { + $result = '"'. + join('","',($sname,$sdom,$fullname,$section,$id).'"'); + } else { + $result ='<a href="/adm/studentcalc?uname='.$sname. + '&udom='.$sdom.'">'; + $result.=$section.' '.$id." ".$fullname.'</a>'; + } + } elsif ($type eq 'parameter') { + if ($ENV{'form.showcsv'}) { + $labeldata =~ s/<br>/ /g; + } + $result = $labeldata; + } else { + &Apache::lonnet::logthis("lonspreadsheet:bogus rowlabel type: $type"); + } + return $result; +} + # ---------------------------------------------- Update rows for course listing sub updateclasssheet { my ($sheet) = @_; @@ -1638,17 +1672,9 @@ sub updateclasssheet { my ($studentDomain,$studentName,$end,$start,$id,$studentSection, $fullname,$status) = @{$classlist->{$student}}; if ($ENV{'form.Status'} eq $status || $ENV{'form.Status'} eq 'Any') { - my $rowlabel=''; - if ($ENV{'form.showcsv'}) { - $rowlabel= '"'.join('","',($studentName,$studentDomain, - $fullname,$studentSection,$id).'"'); - } else { - $rowlabel='<a href="/adm/studentcalc?uname='.$studentName. - '&udom='.$studentDomain.'">'; - $rowlabel.=$studentSection.' '.$id." ".$fullname; - $rowlabel.='</a>'; - } - $currentlist{$student}=$rowlabel; + $currentlist{$student}=join(':',('student',$studentName, + $studentDomain,$fullname, + $studentSection,$id)); } } # @@ -1688,8 +1714,7 @@ sub updateclasssheet { &setformulas($sheet,%f); } # - $sheet->{'rowlabel'} = \%currentlist; - &setrowlabels($sheet); + &setrowlabels($sheet,\%currentlist); } # ----------------------------------- Update rows for student and assess sheets @@ -1713,37 +1738,27 @@ sub updatestudentassesssheet { return 'Could not access course data'; } # Get all assessments + # + # allkeys is used in the assessment sheets to provide labels + # for the parameters. my %allkeys=('timestamp' => - 'Timestamp of Last Transaction<br>timestamp', + 'parameter:Timestamp of Last Transaction<br>timestamp', 'subnumber' => - 'Number of Submissions<br>subnumber', + 'parameter:Number of Submissions<br>subnumber', 'tutornumber' => - 'Number of Tutor Responses<br>tutornumber', + 'parameter:Number of Tutor Responses<br>tutornumber', 'totalpoints' => - 'Total Points Granted<br>totalpoints'); + 'parameter:Total Points Granted<br>totalpoints'); my $adduserstr=''; if (($uname ne $ENV{'user.name'}) || ($udom ne $ENV{'user.domain'})){ $adduserstr='&uname='.$uname.'&udom='.$udom; } + # + # allassess holds the descriptions of all assessments my %allassess; - if (! $ENV{'form.showcsv'}) { - %allassess = - ('_feedback' =>'<a href="/adm/assesscalc?usymb=_feedback'. - $adduserstr.'">Feedback</a>', - '_evaluation' =>'<a href="/adm/assesscalc?usymb=_evaluation'. - $adduserstr.'">Evaluation</a>', - '_tutoring' =>'<a href="/adm/assesscalc?usymb=_tutoring'. - $adduserstr.'">Tutoring</a>', - '_discussion' =>'<a href="/adm/assesscalc?usymb=_discussion'. - $adduserstr.'">Discussion</a>' - ); - } else { - %allassess = - ('_feedback' => "Feedback", - '_evaluation' => "Evaluation", - '_tutoring' => "Tutoring", - '_discussion' => "Discussion", - ); + foreach ('Feedback','Evaluation','Tutoring','Discussion') { + my $symb = '_'.lc($_); + $allassess{$symb} = join(':',('symb',$symb,$uname,$udom,$_)); } while (($_,undef) = each(%bighash)) { next if ($_!~/^src\_(\d+)\.(\d+)$/); @@ -1755,13 +1770,8 @@ sub updatestudentassesssheet { my $symb= &Apache::lonnet::declutter($bighash{'map_id_'.$mapid}). '___'.$resid.'___'.&Apache::lonnet::declutter($srcf); - if (! $ENV{'form.showcsv'}) { - $allassess{$symb}= - '<a href="/adm/assesscalc?usymb='.$symb.$adduserstr.'">'. - $bighash{'title_'.$id}.'</a>'; - } else { - $allassess{$symb}=$bighash{'title_'.$id}; - } + $allassess{$symb}='symb:'.&Apache::lonnet::escape($symb).':' + .$uname.':'.$udom.':'.$bighash{'title_'.$id}; next if ($stype ne 'assesscalc'); foreach my $key (split(/\,/, &Apache::lonnet::metadata($srcf,'keys') @@ -1774,7 +1784,7 @@ sub updatestudentassesssheet { &Apache::lonnet::metadata($srcf,$key.'.name'); } $display.='<br>'.$key; - $allkeys{$key}=$display; + $allkeys{$key}='parameter:'.$display; } # end of foreach } } # end of foreach (keys(%bighash)) @@ -1829,7 +1839,6 @@ sub updatestudentassesssheet { $sheet->{'f'} = \%f; &setformulas($sheet); } - &setrowlabels($sheet); # undef %existing; } @@ -2046,21 +2055,21 @@ sub loadassessment { if (tie(%parmhash,'GDBM_File', $sheet->{'coursefilename'}.'_parms.db',&GDBM_READER(),0640)) { my %f=&getformulas($sheet); - foreach (keys(%f)) { - next if ($_!~/^A/); - next if ($f{$_}=~/^[\!\~\-]/); - if ($f{$_}=~/^parameter/) { - if ($thisassess{$f{$_}}) { - my $val=&parmval($f{$_},$sheet); - $c{$_}=$val; - $c{$f{$_}}=$val; + foreach my $cell (keys(%f)) { + next if ($cell !~ /^A/); + next if ($f{$cell} =~/^[\!\~\-]/); + if ($f{$cell}=~/^parameter/) { + if (defined($thisassess{$f{$cell}})) { + my $val = &parmval($f{$cell},$sheet); + $c{$cell} = $val; + $c{$f{$cell}} = $val; } } else { - my $key=$f{$_}; + my $key=$f{$cell}; my $ckey=$key; $key=~s/^stores\_/resource\./; $key=~s/\_/\./g; - $c{$_}=$returnhash{$key}; + $c{$cell}=$returnhash{$key}; $c{$ckey}=$returnhash{$key}; } }