--- loncom/interface/spreadsheet/assesscalc.pm 2003/05/19 15:48:18 1.2
+++ loncom/interface/spreadsheet/assesscalc.pm 2003/05/29 18:31:27 1.12
@@ -1,5 +1,5 @@
#
-# $Id: assesscalc.pm,v 1.2 2003/05/19 15:48:18 matthew Exp $
+# $Id: assesscalc.pm,v 1.12 2003/05/29 18:31:27 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -123,6 +123,10 @@ sub clear_package {
undef(%courseopt);
}
+sub initialize {
+ &clear_package();
+}
+
########################################################
########################################################
@@ -172,7 +176,7 @@ sub load_parameter_caches {
my $id = $ENV{'course.'.$ENV{'request.course.id'}.'.num'};
my %Tmp = &Apache::lonnet::dump('resourcedata',$dom,$id);
while (my ($name,$value) = each(%Tmp)) {
- $courseopt{$userprefix.$name}=$value;
+ $courseopt{$name}=$value;
}
}
if (! %useropt) {
@@ -199,7 +203,6 @@ sub load_parameter_caches {
########################################################
########################################################
-
sub ensure_current_parameter_caches {
my $self = shift;
if (! defined($current_course) ||
@@ -259,20 +262,25 @@ sub parmval {
#
my $symbparm = $symb.'.'.$what;
my $mapparm = $mapname.'___(all).'.$what;
+ my $courseprefix = $self->{'cid'};
my $usercourseprefix = $uname.'_'.$udom.'_'.$self->{'cid'};
#
- my $seclevel = $usercourseprefix.'.['.$csec.'].'.$what;
- my $seclevelr = $usercourseprefix.'.['.$csec.'].'.$symbparm;
- my $seclevelm = $usercourseprefix.'.['.$csec.'].'.$mapparm;
- #
- my $courselevel = $usercourseprefix.'.'.$what;
- my $courselevelr = $usercourseprefix.'.'.$symbparm;
- my $courselevelm = $usercourseprefix.'.'.$mapparm;
+ my $seclevel = $courseprefix.'.['.$csec.'].'.$what;
+ my $seclevelr = $courseprefix.'.['.$csec.'].'.$symbparm;
+ my $seclevelm = $courseprefix.'.['.$csec.'].'.$mapparm;
+ #
+ my $courselevel = $courseprefix.'.'.$what;
+ my $courselevelr = $courseprefix.'.'.$symbparm;
+ my $courselevelm = $courseprefix.'.'.$mapparm;
+ #
+ my $ucourselevel = $usercourseprefix.'.'.$what;
+ my $ucourselevelr = $usercourseprefix.'.'.$symbparm;
+ my $ucourselevelm = $usercourseprefix.'.'.$mapparm;
# check user
if (defined($uname)) {
- return $useropt{$courselevelr} if (defined($useropt{$courselevelr}));
- return $useropt{$courselevelm} if (defined($useropt{$courselevelm}));
- return $useropt{$courselevel} if (defined($useropt{$courselevel}));
+ return $useropt{$ucourselevelr} if (defined($useropt{$ucourselevelr}));
+ return $useropt{$ucourselevelm} if (defined($useropt{$ucourselevelm}));
+ return $useropt{$ucourselevel} if (defined($useropt{$ucourselevel}));
}
# check section
if (defined($csec)) {
@@ -309,18 +317,30 @@ sub parmval {
return '';
}
+sub get_html_title {
+ my $self = shift;
+ my ($assess_title,$name,$time) = $self->get_title();
+ my $title = '
'.$assess_title.' '.
+ ''.$name.', '.
+ &Apache::loncommon::aboutmewrapper
+ ($self->{'name'}.'@'.$self->{'domain'},
+ $self->{'name'},$self->{'domain'});
+ $title .= ''.$time.' ';
+ return $title;
+}
+
sub get_title {
my $self = shift;
- my $title;
+ my @title = ();
if (($self->{'usymb'} eq '_feedback') ||
($self->{'usymb'} eq '_evaluation') ||
($self->{'usymb'} eq '_discussion') ||
($self->{'usymb'} eq '_tutoring')) {
- $title = $self->{'usymb'};
- $title =~ s/^_//;
- $title = ''.ucfirst($title)." \n";
+ my $assess_title = ucfirst($self->{'usymb'});
+ $assess_title =~ s/^_//;
+ push(@title,$assess_title);
} else {
- $title = ''.&Apache::lonnet::gettitle($self->{'symb'})." \n";
+ push(@title,&Apache::lonnet::gettitle($self->{'symb'}));
}
# Look up the users identifying information
# Get the users information
@@ -329,13 +349,9 @@ sub get_title {
my $name =
join(' ',@userenv{'firstname','middlename','lastname','generation'});
$name =~ s/\s+$//;
- $title .= ''.$name.', '.
- &Apache::loncommon::aboutmewrapper($self->{'name'}.'@'.$self->{'domain'},
- $self->{'name'},$self->{'domain'}).
- " \n";
- $title .= ''.localtime(time).' ';
- #
- return $title;
+ push (@title,$name);
+ push (@title,scalar(localtime(time)));
+ return @title;
}
sub parent_link {
@@ -401,12 +417,12 @@ END
}
#
my $num_output = 0;
- foreach my $rownum ($self->rows()) {
+ foreach my $rownum (sort {$a <=> $b} ($self->rows())) {
if ($num_output++ % 50 == 0) {
$r->print("\n".$tableheader);
}
$r->print(''.$rownum.' '.
- $self->assess_html_row($num_uneditable,$rownum)." \n");
+ $self->assess_html_row($rownum)."\n");
}
$r->print("\n");
return;
@@ -414,8 +430,7 @@ END
sub assess_html_row {
my $self = shift();
- my ($num_uneditable,$row) = @_;
- my $requester_is_student = ($ENV{'request.role'} =~ /^st\./);
+ my ($row) = @_;
my $parameter_name = $self->{'formulas'}->{'A'.$row};
my @rowdata = $self->get_row($row);
my $num_cols_output = 0;
@@ -428,40 +443,87 @@ sub assess_html_row {
$row_html .= ''.$parameter_name.' ';
}
foreach my $cell (@rowdata) {
- if ($requester_is_student ||
- $num_cols_output++ < $num_uneditable) {
- $row_html .= '';
- $row_html .= &Apache::Spreadsheet::html_uneditable_cell($cell,'#FFDDDD');
- } else {
- $row_html .= ' ';
- $row_html .= &Apache::Spreadsheet::html_editable_cell($cell,'#E0FFDD');
- }
+ if ($num_cols_output < 1) {
+ $row_html .= ' ';
+ $row_html .= &Apache::Spreadsheet::html_uneditable_cell($cell,
+ '#FFDDDD');
+ } else {
+ $row_html .= ' ';
+ $row_html .= &Apache::Spreadsheet::html_editable_cell($cell,
+ '#E0FFDD',1);
+ }
$row_html .= ' ';
+ $num_cols_output++;
}
return $row_html;
}
-sub outsheet_csv {
- my $self = shift;
- my ($r)=@_;
-}
-
-sub outsheet_excel {
- my $self = shift;
- my ($r)=@_;
+sub csv_rows {
+ # writes the meat of the spreadsheet to an excel worksheet. Called
+ # by Spreadsheet::outsheet_excel;
+ my $self = shift;
+ my ($filehandle) = @_;
+ #
+ # Write a header row
+ $self->csv_output_row($filehandle,undef,
+ ('Parameter','Description','Value'));
+ #
+ # Write each row
+ foreach my $rownum (sort {$a <=> $b} ($self->rows())) {
+ my $parameter_name = $self->{'formulas'}->{'A'.$rownum};
+ my $description = '';
+ if (exists($nice_parameter_name{$parameter_name})) {
+ $description = $nice_parameter_name{$parameter_name};
+ }
+ $self->csv_output_row($filehandle,$rownum,
+ $parameter_name,$description);
+ }
+ return;
}
-sub display {
- my $self = shift;
- my ($r) = @_;
- $self->compute();
- $self->outsheet_html($r);
+sub excel_rows {
+ # writes the meat of the spreadsheet to an excel worksheet. Called
+ # by Spreadsheet::outsheet_excel;
+ my $self = shift;
+ my ($worksheet,$cols_output,$rows_output) = @_;
+ #
+ # Write a header row
+ $cols_output = 0;
+ foreach my $value ('Parameter','Description','Value') {
+ $worksheet->write($rows_output,$cols_output++,$value);
+ }
+ $rows_output++;
+ #
+ # Write each row
+ foreach my $rownum (sort {$a <=> $b} ($self->rows())) {
+ my $parameter_name = $self->{'formulas'}->{'A'.$rownum};
+ my $description = '';
+ if (exists($nice_parameter_name{$parameter_name})) {
+ $description = $nice_parameter_name{$parameter_name};
+ }
+ $self->excel_output_row($worksheet,$rownum,$rows_output++,
+ $parameter_name,$description);
+ }
+ return;
}
sub compute {
my $self = shift;
$self->logthis('computing');
$self->initialize_safe_space();
+ #########################################
+ #########################################
+ ### ###
+ ### Retrieve the problem parameters ###
+ ### ###
+ #########################################
+ #########################################
+ my @Mandatory_parameters = ("stores_0_solved",
+ "stores_0_awarddetail",
+ "stores_0_awarded",
+ "timestamp",
+ "stores_0_tries",
+ "stores_0_award");
#
# Definitions
undef(%nice_parameter_name);
@@ -470,7 +532,7 @@ sub compute {
# Get the metadata fields and determine their proper names
my ($symap,$syid,$srcf)=split(/___/,$self->{'symb'});
my @Metadata = split(/\,/,&Apache::lonnet::metadata($srcf,'keys'));
- foreach my $parm (@Metadata) {
+ foreach my $parm (@Mandatory_parameters,@Metadata) {
next if ($parm !~ /^(resource\.|stores|parameter)_/);
my $cleaned_name = $parm;
$cleaned_name =~ s/^resource\./stores_/;
@@ -490,7 +552,7 @@ sub compute {
if (tie(%parmhash,'GDBM_File',
$self->{'coursefilename'}.'_parms.db',&GDBM_READER(),0640)) {
foreach my $parmname (keys(%parameters)) {
- my $value = $self->parmval($parmname);
+ my $value = $self->parmval($parmname);
$parameters{$parmname} =$value;
}
untie(%parmhash);
@@ -519,13 +581,28 @@ sub compute {
my %f=$self->formulas();
my %c;
#
+ # Check for blackout requirements
+ if ((!exists($ENV{'request.role.adv'}) || !$ENV{'request.role.adv'})) {
+ while (my ($parm,$value) = each(%parameters)) {
+ last if ($self->blackout());
+ next if ($parm !~ /^(parameter_.*)_problemstatus$/);
+ next if ($parameters{$1.'_answerdate'}blackout(1);
+ }
+ }
+ }
+ #
+ # Move the parameters into the spreadsheet
while (my ($parm,$value) = each(%parameters)) {
my $cell = 'A'.$self->get_row_number_from_key($parm);
$f{$cell} = $parm;
+ $value = '"'.$value.'"' if ($value =~/[^0-9.]/);
$c{$parm} = $value;
}
- $self->formulas(%f);
- $self->constants(%c);
+ $self->formulas(\%f);
+ $self->constants(\%c);
$self->calcsheet();
#
# Store export row in cache
@@ -535,6 +612,7 @@ sub compute {
#
# Save the export data
$self->save_export_data();
+ $self->save() if ($self->need_to_save());
return;
}
@@ -604,7 +682,6 @@ These rows are saved in the students dir
########################################################
sub load_cached_export_rows {
%Exportrows = undef;
- &Apache::lonnet::logthis("loading cached assess sheets for $current_name $current_domain");
my @tmp = &Apache::lonnet::dump('nohist_calculatedsheets_'.
$ENV{'request.course.id'},
$current_domain,$current_name,undef);
@@ -646,7 +723,8 @@ spreadsheet only if necessary.
sub export_data {
my $self = shift;
my $symb = $self->{'symb'};
- if (! exists($Exportrows{$symb}) || ! defined($Exportrows{$symb}) ||
+ if (! exists($ENV{'request.role.adv'}) || ! $ENV{'request.role.adv'} ||
+ ! exists($Exportrows{$symb}) || ! defined($Exportrows{$symb}) ||
! $self->check_expiration_time($Exportrows{$symb}->{'time'}) ||
! exists($Exportrows{$symb}->{$self->{'filename'}}) ||
! defined($Exportrows{$symb}->{$self->{'filename'}})) {
@@ -678,6 +756,7 @@ Writes the export data for this spreadsh
#############################################
sub save_export_data {
my $self = shift;
+ return if ($self->temporary());
my $student = $self->{'name'}.':'.$self->{'domain'};
my $symb = $self->{'symb'};
if (! exists($Exportrows{$symb}) ||