--- loncom/interface/spreadsheet/lonspreadsheet.pm 2003/07/16 13:52:19 1.16 +++ loncom/interface/spreadsheet/lonspreadsheet.pm 2003/10/11 14:04:54 1.27 @@ -1,5 +1,5 @@ # -# $Id: lonspreadsheet.pm,v 1.16 2003/07/16 13:52:19 matthew Exp $ +# $Id: lonspreadsheet.pm,v 1.27 2003/10/11 14:04:54 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -54,12 +54,16 @@ built-in functions. package Apache::lonspreadsheet; use strict; +use warnings FATAL=>'all'; +no warnings 'uninitialized'; use Apache::classcalc(); use Apache::studentcalc(); use Apache::assesscalc(); use Apache::Constants qw(:common :http); use Apache::lonnet; use Apache::lonhtmlcommon; +use Apache::lonlocal; +use Apache::loncoursedata(); use HTML::Entities(); ## @@ -83,7 +87,7 @@ sub selectbox { foreach (sort keys(%options)) { $selout.=''; } return $selout.''; } @@ -103,9 +107,8 @@ sub file_dialogs { if ($save_status ne 'ok') { $message .= "An error occurred while saving the spreadsheet". "There error is:".$save_status; - return $result; } else { - $message .= "Spreadsheet saved as ".$ENV{'form.savefilename'}; + $message .= "Spreadsheet saved as ".$spreadsheet->filename(); } } elsif (exists($ENV{'form.newformula'}) && exists($ENV{'form.cell'}) && @@ -119,10 +122,10 @@ sub file_dialogs { $result .=&hiddenfield('workcopy',$sheettype); if ($ENV{'form.newformula'} !~ /^\s*$/) { $message .=''. - ''. + ''. '
Cell '.$ENV{'form.cell'}.' = 
'.&mt('Cell').' '.$ENV{'form.cell'}.' = 
'.$ENV{'form.newformula'}."
\n"; } else { - $message .= 'Deleted contents of cell '.$ENV{'form.cell'}.'.'; + $message .= &mt('Deleted contents of cell').' '.$ENV{'form.cell'}.'.'; } } ## @@ -137,18 +140,19 @@ sub file_dialogs { $filename = 'Default'; } my $save_dialog = ''. - ' '. + ' '. ''. ''; my $makedefault_dialog = ''; + 'value="'.&mt('Save as & Make This Sheet the Default').'"/>'; # my $link = 'Select Spreadsheet File"; + "('sheet','loadfilename','spreadsheet')\">".&mt('Select Spreadsheet File').""; + my $load=&mt('Load:'); my $load_dialog = < - + $link @@ -165,9 +169,13 @@ END } $load_dialog .= '>'.$sheetfilename."\n"; } - $load_dialog .= " \n\n"; + $load_dialog .= "\n \n\n"; # $result .=< + File Dialogs + --> @@ -180,6 +188,9 @@ END
+ END return ($result,$message); } @@ -200,7 +211,7 @@ sub handler { # HTML Header # if ($r->header_only) { - $r->content_type('text/html'); + &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; return OK; } @@ -214,11 +225,19 @@ sub handler { $r->uri.":opa:0:0:Cannot modify spreadsheet"; return HTTP_NOT_ACCEPTABLE; } + my $courseid = $ENV{'request.course.id'}; + # + # Do not allow students to continue if standard grading is in effect. + if ($ENV{'request.role'} =~ /^st\./) { + if ($ENV{'course.'.$courseid.'.grading'} eq 'standard') { + return HTTP_NOT_ACCEPTABLE; + } + } # # Get query string for limited number of parameters # &Apache::loncommon::get_unprocessed_cgi - ($ENV{'QUERY_STRING'},['sname','sdomain','usymb','filename']); + ($ENV{'QUERY_STRING'},['sname','sdomain','usymb','filename','recalc']); # # Deal with restricted student permissions # @@ -281,7 +300,7 @@ sub handler { # # Open page, try to prevent browser cache. # - $r->content_type('text/html'); + &Apache::loncommon::content_type($r,'text/html'); &Apache::loncommon::no_cache($r); $r->send_http_header; @@ -294,6 +313,11 @@ sub handler { ## Spit out the javascript required for editing ## if ($allowed_to_edit) { + my %lt=( + 'ce' => 'Cell', + 'ac' => 'Accept', + 'dc' => 'Discard Changes' + ); my $extra_javascript = &Apache::loncommon::browser_and_searcher_javascript(); $r->print(<'; - edit_text += ''; edit_text += '
'; - edit_text += ''; edit_text += '      '; edit_text += ' @@ -355,6 +379,33 @@ ENDSCRIPT } } ## + ## Take care of "backdoor" spreadsheet expiration / recalc stuff + if ($allowed_to_edit && exists($ENV{'form.recalc'})) { + if (exists($ENV{'form.recalc'})) { + &Apache::loncoursedata::delete_caches($ENV{'requres.course.id'}); + } + if ($ENV{'form.recalc'} eq 'ilovewastingtime') { + &Apache::lonnet::logthis('ilovewastingtime'); + # expire ALL spreadsheets + &Apache::lonnet::expirespread('','','studentcalc'); + &Apache::lonnet::expirespread('','','assesscalc'); + } elsif ($ENV{'form.recalc'} =~ /^symb:/) { + # expire for all students on this symb + my ($symb) = ($ENV{'form.recalc'} =~ /^symb:(.*)$/); + &Apache::lonnet::logthis('symb = '.$symb); + &Apache::lonnet::expirespread('','','assesscalc',$symb); + &Apache::lonnet::expirespread('','','studentcalc'); + } elsif ($ENV{'form.recalc'} =~ /^student:/) { + # expire all assessment spreadsheets for this user + my ($sname,$sdom) = ($ENV{'form.recalc'}=~/^student:(.*):(.*)$/); + &Apache::lonnet::logthis('student = '.$sname.':'.$sdom); + if (defined($sname) && defined($sdom)) { + &Apache::lonnet::expirespread($sname,$sdom,'assesscalc'); + &Apache::lonnet::expirespread($sname,$sdom,'studentcalc'); + } + } + } + ## ## Make the spreadsheet &Apache::Spreadsheet::initialize_spreadsheet_package(); my $spreadsheet = undef; @@ -385,13 +436,13 @@ ENDSCRIPT if ($action_message) { $action_message .= '
'; } - $action_message .= 'Made this spreadsheet the default'; + $action_message .= &mt('Made this spreadsheet the default'); if ($sheettype eq 'classcalc') { - $action_message .= ' for the course'; + $action_message .= ' '.&mt('for the course'); } elsif ($sheettype eq 'studentcalc') { - $action_message .= ' for all students'; + $action_message .= ' '.&mt('for all students'); } elsif ($sheettype eq 'assesscalc') { - $action_message .= ' for all assessments'; + $action_message .= ' '.&mt('for all assessments'); } $action_message .= '.'; } @@ -414,9 +465,25 @@ END } $r->rflush(); # + $r->print(""); if ($sheettype eq 'classcalc') { - $r->print('
'); + $r->print(''); + } + if ($allowed_to_view) { + $r->print(''); + } + if ($allowed_to_edit) { + $r->print(''); } + $r->print('
'. + ''. + &Apache::loncommon::help_open_topic("Spreadsheet_About", + 'Spreadsheet Help'). + ''. + &Apache::loncommon::help_open_topic("Spreadsheet_Editing", + 'Editing Help'). + '
'); # # Keep track of the filename $r->print(&hiddenfield('filename',$filename));