[LON-CAPA-cvs] cvs: loncom /interface lonspreadsheet.pm
matthew
lon-capa-cvs@mail.lon-capa.org
Thu, 24 Oct 2002 14:34:07 -0000
This is a MIME encoded message
--matthew1035470047
Content-Type: text/plain
matthew Thu Oct 24 10:34:07 2002 EDT
Modified files:
/loncom/interface lonspreadsheet.pm
Log:
Added &format_rowlabel.
Changed the calling of &setrowlabels
The row labels are no longer a part of the safe space.
The row labels now have formats that must be respected. See &format_rowlabel
for the code which acts on them.
A few other minor changes.
There is a bug in here somewhere which causes the assessment sheets to not
have any data in them. Not for general consumption.
--matthew1035470047
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20021024103407.txt"
Index: loncom/interface/lonspreadsheet.pm
diff -u loncom/interface/lonspreadsheet.pm:1.124 loncom/interface/lonspreadsheet.pm:1.125
--- loncom/interface/lonspreadsheet.pm:1.124 Tue Oct 22 15:47:13 2002
+++ loncom/interface/lonspreadsheet.pm Thu Oct 24 10:34:07 2002
@@ -1,5 +1,5 @@
#
-# $Id: lonspreadsheet.pm,v 1.124 2002/10/22 19:47:13 matthew Exp $
+# $Id: lonspreadsheet.pm,v 1.125 2002/10/24 14:34:07 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -122,20 +122,17 @@
##
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 @@
}
$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 @@
# 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 @@
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 @@
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>';
}
@@ -1047,6 +1042,11 @@
$constants = \%tmp;
}
$sheet->{'constants'} = $constants;
+ &Apache::lonnet::logthis("----------------------------------");
+ foreach my $c (keys(%{$sheet->{'constants'}})) {
+ &Apache::lonnet::logthis('constant '.$c.' = '.
+ $sheet->{'constants'}->{$c});
+ }
return %{$sheet->{'safe'}->varglob('c')}=%{$sheet->{'constants'}};
}
@@ -1062,7 +1062,12 @@
# ------------------------------------------------ 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 +1621,41 @@
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?usmb='.$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'}) {
+ $result = $labeldata =~ s/<br>//g;
+ } else {
+ $result = $labeldata;
+ }
+ } else {
+ &Apache::lonnet::logthis("lonspreadsheet:bogus rowlabel type: $type");
+ }
+ return $result;
+}
+
# ---------------------------------------------- Update rows for course listing
sub updateclasssheet {
my ($sheet) = @_;
@@ -1638,17 +1678,9 @@
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 +1720,7 @@
&setformulas($sheet,%f);
}
#
- $sheet->{'rowlabel'} = \%currentlist;
- &setrowlabels($sheet);
+ &setrowlabels($sheet,\%currentlist);
}
# ----------------------------------- Update rows for student and assess sheets
@@ -1713,37 +1744,27 @@
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 +1776,8 @@
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 +1790,7 @@
&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 +1845,6 @@
$sheet->{'f'} = \%f;
&setformulas($sheet);
}
- &setrowlabels($sheet);
#
undef %existing;
}
@@ -2046,21 +2061,21 @@
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};
}
}
--matthew1035470047--