[LON-CAPA-cvs] cvs: loncom /interface lonspreadsheet.pm
matthew
lon-capa-cvs@mail.lon-capa.org
Tue, 12 Nov 2002 22:44:29 -0000
This is a MIME encoded message
--matthew1037141069
Content-Type: text/plain
matthew Tue Nov 12 17:44:29 2002 EDT
Modified files:
/loncom/interface lonspreadsheet.pm
Log:
Added &gettitle to get the title of a spreadsheet. Changes to the rowlabel
handling to give the map id and the resource id of symbs. Many changes to
&handler to reorganize the output. excel spreadsheets now include the export
row of the spreadsheet (but still not the template row).
Many cosmetic changes.
--matthew1037141069
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20021112174429.txt"
Index: loncom/interface/lonspreadsheet.pm
diff -u loncom/interface/lonspreadsheet.pm:1.138 loncom/interface/lonspreadsheet.pm:1.139
--- loncom/interface/lonspreadsheet.pm:1.138 Tue Nov 12 15:14:51 2002
+++ loncom/interface/lonspreadsheet.pm Tue Nov 12 17:44:28 2002
@@ -1,5 +1,5 @@
#
-# $Id: lonspreadsheet.pm,v 1.138 2002/11/12 20:14:51 matthew Exp $
+# $Id: lonspreadsheet.pm,v 1.139 2002/11/12 22:44:28 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1086,6 +1086,44 @@
return ${$sheet->{'safe'}->varglob('errorlog')};
}
+sub gettitle {
+ my $sheet = shift;
+ if ($sheet->{'sheettype'} eq 'classcalc') {
+ return $sheet->{'coursedesc'};
+ } elsif ($sheet->{'sheettype'} eq 'studentcalc') {
+ return 'Grades for '.$sheet->{'uname'}.'@'.$sheet->{'udom'};
+ } elsif ($sheet->{'sheettype'} eq 'assesscalc') {
+ if (($sheet->{'usymb'} eq '_feedback') ||
+ ($sheet->{'usymb'} eq '_evaluation') ||
+ ($sheet->{'usymb'} eq '_discussion') ||
+ ($sheet->{'usymb'} eq '_tutoring')) {
+ my $title = $sheet->{'usymb'};
+ $title =~ s/^_//;
+ $title = ucfirst($title);
+ return $title;
+ }
+ return if (! defined($sheet->{'mapid'}) ||
+ $sheet->{'mapid'} !~ /^\d+$/);
+ my $mapid = $sheet->{'mapid'};
+ return if (! defined($sheet->{'resid'}) ||
+ $sheet->{'resid'} !~ /^\d+$/);
+ my $resid = $sheet->{'resid'};
+ my %course_db;
+ tie(%course_db,'GDBM_File',$sheet->{'coursefilename'}.'.db',
+ &GDBM_READER(),0640);
+ return if (! tied(%course_db));
+ my $key = 'title_'.$mapid.'.'.$resid;
+ my $title = '';
+ if (exists($course_db{$key})) {
+ $title = $course_db{$key};
+ } else {
+ $title = $sheet->{'usymb'};
+ }
+ untie (%course_db);
+ return $title;
+ }
+}
+
# ----------------------------------------------------- Get value of $f{'A'.$n}
sub getfa {
my $sheet = shift;
@@ -1153,6 +1191,7 @@
#
my @sortby=();
my @sortidx=();
+ # Skip row 0
for (my $row=1;$row<=$sheet->{'maxrow'};$row++) {
push (@sortby, $sheet->{'safe'}->reval('$f{"A'.$row.'"}'));
push (@sortidx, $row);
@@ -1268,7 +1307,6 @@
# Print out summary/export row
####################################
my ($rowlabel,@rowdata) = &get_row($sheet,'0');
- my $rowcount = 0;
$row_html = '<tr><td>'.&format_html_rowlabel($rowlabel).'</td>';
$num_cols_output = 0;
foreach my $cell (@rowdata) {
@@ -1543,25 +1581,46 @@
sub export_sheet_as_excel {
my $sheet = shift;
my $worksheet = shift;
+ #
+ my $rows_output = 0;
+ my $cols_output = 0;
+ ####################################
+ # Write an identifying row #
+ ####################################
+ my @Headerinfo = ($sheet->{'coursedesc'});
+ my $title = &gettitle($sheet);
+ $cols_output = 0;
+ if (defined($title)) {
+ $worksheet->write($rows_output++,$cols_output++,$title);
+ }
+ ####################################
+ # Write the summary/export row #
+ ####################################
+ my ($rowlabel,@rowdata) = &get_row($sheet,'0');
+ my $label = &format_excel_rowlabel($rowlabel);
+ $cols_output = 0;
+ $worksheet->write($rows_output,$cols_output++,$label);
+ foreach my $cell (@rowdata) {
+ $worksheet->write($rows_output,$cols_output++,$cell->{'value'});
+ }
+ $rows_output+= 2; # Skip a row, just for fun
####################################
# Prepare to output rows
####################################
my @Rows = &sort_indicies($sheet);
#
# Loop through the rows and output them one at a time
- my $rows_output=0;
foreach my $rownum (@Rows) {
my ($rowlabel,@rowdata) = &get_row($sheet,$rownum);
next if ($rowlabel =~ /^\s*$/);
- my $cols_output = 0;
+ $cols_output = 0;
my $label = &format_excel_rowlabel($rowlabel);
$worksheet->write($rows_output,$cols_output++,$label);
if (ref($label)) {
$cols_output = (scalar(@$label));
}
foreach my $cell (@rowdata) {
- $worksheet->write($rows_output,$cols_output++,
- $cell->{'value'});
+ $worksheet->write($rows_output,$cols_output++,$cell->{'value'});
}
$rows_output++;
}
@@ -1730,6 +1789,8 @@
$sheet->{'udom'} = $udom;
$sheet->{'sheettype'} = $stype;
$sheet->{'usymb'} = $usymb;
+ $sheet->{'mapid'} = $ENV{'form.mapid'};
+ $sheet->{'resid'} = $ENV{'form.resid'};
$sheet->{'cid'} = $ENV{'request.course.id'};
$sheet->{'csec'} = $Section{$uname.':'.$udom};
$sheet->{'coursefilename'} = $ENV{'request.course.fn'};
@@ -1737,7 +1798,7 @@
$sheet->{'cdom'} = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
$sheet->{'chome'} = $ENV{'course.'.$ENV{'request.course.id'}.'.home'};
$sheet->{'coursedesc'} = $ENV{'course.'.$ENV{'request.course.id'}.
- 'description'};
+ '.description'};
$sheet->{'uhome'} = &Apache::lonnet::homeserver($uname,$udom);
#
#
@@ -1943,10 +2004,11 @@
my ($type,$labeldata) = split(':',$rowlabel,2);
my $result = '';
if ($type eq 'symb') {
- my ($symb,$uname,$udom,$title) = split(':',$labeldata);
+ my ($symb,$uname,$udom,$mapid,$resid,$title) = split(':',$labeldata);
$symb = &Apache::lonnet::unescape($symb);
$result = '<a href="/adm/assesscalc?usymb='.$symb.
- '&uname='.$uname.'&udom='.$udom.'">'.$title.'</a>';
+ '&uname='.$uname.'&udom='.$udom.
+ '&mapid='.$mapid.'&resid='.$resid.'">'.$title.'</a>';
} elsif ($type eq 'student') {
my ($sname,$sdom,$fullname,$section,$id) = split(':',$labeldata);
$result ='<a href="/adm/studentcalc?uname='.$sname.
@@ -1966,7 +2028,7 @@
my ($type,$labeldata) = split(':',$rowlabel,2);
my $result = '';
if ($type eq 'symb') {
- my ($symb,$uname,$udom,$title) = split(':',$labeldata);
+ my ($symb,$uname,$udom,$mapid,$resid,$title) = split(':',$labeldata);
$symb = &Apache::lonnet::unescape($symb);
$result = $title;
} elsif ($type eq 'student') {
@@ -1987,7 +2049,7 @@
my ($type,$labeldata) = split(':',$rowlabel,2);
my $result = '';
if ($type eq 'symb') {
- my ($symb,$uname,$udom,$title) = split(':',$labeldata);
+ my ($symb,$uname,$udom,$mapid,$resid,$title) = split(':',$labeldata);
$symb = &Apache::lonnet::unescape($symb);
$result = $title;
} elsif ($type eq 'student') {
@@ -2025,6 +2087,7 @@
foreach my $student (keys(%$classlist)) {
my ($studentDomain,$studentName,$end,$start,$id,$studentSection,
$fullname,$status) = @{$classlist->{$student}};
+ $Section{$studentName.':'.$studentDomain} = $studentSection;
if ($ENV{'form.Status'} eq $status || $ENV{'form.Status'} eq 'Any') {
$currentlist{$student}=join(':',('student',$studentName,
$studentDomain,$fullname,
@@ -2098,7 +2161,7 @@
my %assesslist;
foreach ('Feedback','Evaluation','Tutoring','Discussion') {
my $symb = '_'.lc($_);
- $assesslist{$symb} = join(':',('symb',$symb,$uname,$udom,$_));
+ $assesslist{$symb} = join(':',('symb',$symb,$uname,$udom,0,0,$_));
}
#
while (my ($key,$srcf) = each(%course_db)) {
@@ -2111,7 +2174,8 @@
&Apache::lonnet::declutter($course_db{'map_id_'.$mapid}).
'___'.$resid.'___'.&Apache::lonnet::declutter($srcf);
$assesslist{$symb}='symb:'.&Apache::lonnet::escape($symb).':'
- .$uname.':'.$udom.':'.$course_db{'title_'.$id};
+ .$uname.':'.$udom.':'.$mapid.':'.$resid.':'.
+ $course_db{'title_'.$id};
}
}
untie(%course_db);
@@ -2786,8 +2850,8 @@
#
# Get query string for limited number of parameters
#
- &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
- ['uname','udom','usymb','ufn']);
+ &Apache::loncommon::get_unprocessed_cgi
+ ($ENV{'QUERY_STRING'},['uname','udom','usymb','ufn','mapid','resid']);
#
# Deal with restricted student permissions
#
@@ -2907,6 +2971,30 @@
# Read new sheet or modified worksheet
my ($sheet)=&makenewsheet($aname,$adom,$sheettype,$ENV{'form.usymb'});
#
+ # Check user permissions
+ if (($sheet->{'sheettype'} eq 'classcalc' ) ||
+ ($sheet->{'uname'} ne $ENV{'user.name'} ) ||
+ ($sheet->{'udom'} ne $ENV{'user.domain'})) {
+ unless (&Apache::lonnet::allowed('vgr',$sheet->{'cid'})) {
+ $r->print('<h1>Access Permission Denied</h1>'.
+ '</form></body></html>');
+ return OK;
+ }
+ }
+ # Print out user information
+ $r->print('<h2>'.$sheet->{'coursedesc'}.'</h2>');
+ if ($sheet->{'sheettype'} ne 'classcalc') {
+ $r->print('<h2>'.&gettitle($sheet).'</h2><p>');
+ }
+ if ($sheet->{'sheettype'} eq 'assesscalc') {
+ $r->print('<b>User:</b> '.$sheet->{'uname'}.
+ '<br /><b>Domain:</b> '.$sheet->{'udom'}.'<br />');
+ }
+ if ($sheet->{'sheettype'} eq 'studentcalc' ||
+ $sheet->{'sheettype'} eq 'assesscalc') {
+ $r->print('<b>Section/Group:</b>'.$sheet->{'csec'}.'</p>');
+ }
+ #
# If a new formula had been entered, go from work copy
if ($ENV{'form.unewfield'}) {
$r->print('<h2>Modified Workcopy</h2>');
@@ -2921,43 +3009,23 @@
} else {
&readsheet($sheet,$ENV{'form.ufn'});
}
- # Print out user information
- if ($sheet->{'sheettype'} ne 'classcalc') {
- $r->print('<p><b>User:</b> '.$sheet->{'uname'}.
- '<br><b>Domain:</b> '.$sheet->{'udom'});
- $r->print('<br><b>Section/Group:</b> '.$sheet->{'csec'});
- if ($ENV{'form.usymb'}) {
- $r->print('<br><b>Assessment:</b> <tt>'.
- $ENV{'form.usymb'}.'</tt>');
- }
- }
- #
- # Check user permissions
- if (($sheet->{'sheettype'} eq 'classcalc' ) ||
- ($sheet->{'uname'} ne $ENV{'user.name'} ) ||
- ($sheet->{'udom'} ne $ENV{'user.domain'})) {
- unless (&Apache::lonnet::allowed('vgr',$sheet->{'cid'})) {
- $r->print('<h1>Access Permission Denied</h1>'.
- '</form></body></html>');
- return OK;
- }
- }
# Additional options
- $r->print('<br />'.
- '<input type="submit" name="forcerecalc" '.
- 'value="Completely Recalculate Sheet"><p>');
if ($sheet->{'sheettype'} eq 'assesscalc') {
$r->print('<p><font size=+2>'.
'<a href="/adm/studentcalc?'.
'uname='.$sheet->{'uname'}.
'&udom='.$sheet->{'udom'}.'">'.
- 'Level up: Student Sheet</a></font><p>');
+ 'Level up: Student Sheet</a></font></p>');
}
if (($sheet->{'sheettype'} eq 'studentcalc') &&
(&Apache::lonnet::allowed('vgr',$sheet->{'cid'}))) {
$r->print ('<p><font size=+2><a href="/adm/classcalc">'.
- 'Level up: Course Sheet</a></font><p>');
+ 'Level up: Course Sheet</a></font></p>');
}
+ # Recalc button
+ $r->print('<br />'.
+ '<input type="submit" name="forcerecalc" '.
+ 'value="Completely Recalculate Sheet"></p>');
# Save dialog
if (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'})) {
my $fname=$ENV{'form.ufn'};
@@ -3037,12 +3105,12 @@
}
#
# Write the modified worksheet
- $r->print('<b>Current sheet:</b> '.$sheet->{'filename'}.'<p>');
+ $r->print('<b>Current sheet:</b> '.$sheet->{'filename'}.'</p>');
&tmpwrite($sheet);
if ($sheet->{'sheettype'} eq 'studentcalc') {
- $r->print('<br>Show rows with empty A column: ');
+ $r->print('<p>Show rows with empty A column: ');
} else {
- $r->print('<br>Show empty rows: ');
+ $r->print('<p>>Show empty rows: ');
}
#
$r->print(&hiddenfield('userselhidden','true').
--matthew1037141069--