--- 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}) ||