--- loncom/interface/spreadsheet/lonspreadsheet.pm 2003/05/23 19:36:04 1.4 +++ loncom/interface/spreadsheet/lonspreadsheet.pm 2003/09/16 15:41:16 1.24 @@ -1,5 +1,5 @@ # -# $Id: lonspreadsheet.pm,v 1.4 2003/05/23 19:36:04 matthew Exp $ +# $Id: lonspreadsheet.pm,v 1.24 2003/09/16 15:41:16 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -54,6 +54,8 @@ built-in functions. package Apache::lonspreadsheet; use strict; +use warnings FATAL=>'all'; +no warnings 'uninitialized'; use Apache::classcalc(); use Apache::studentcalc(); use Apache::assesscalc(); @@ -88,6 +90,108 @@ sub selectbox { return $selout.''; } +sub file_dialogs { + my ($spreadsheet) = @_; + my $bgcolor = "#FFFFFF"; + my $sheettype = $spreadsheet->{'type'}; + my $result = ''; + my $message = ''; + ## + ## Deal with saving the spreadsheet + if ((exists($ENV{'form.save'}) || exists($ENV{'form.makedefault'})) && + exists($ENV{'form.savefilename'})) { + $spreadsheet->filename($ENV{'form.savefilename'}); + my $save_status = $spreadsheet->save(); + if ($save_status ne 'ok') { + $message .= "An error occurred while saving the spreadsheet". + "There error is:".$save_status; + } else { + $message .= "Spreadsheet saved as ".$spreadsheet->filename(); + } + } elsif (exists($ENV{'form.newformula'}) && + exists($ENV{'form.cell'}) && + $ENV{'form.cell'} ne '' ) { + ## + ## Make any requested modifications to the spreadsheet + $spreadsheet->modify_cell($ENV{'form.cell'}, + $ENV{'form.newformula'}); + $spreadsheet->save_tmp(); + # output that we are dealing with a temporary file + $result .=&hiddenfield('workcopy',$sheettype); + if ($ENV{'form.newformula'} !~ /^\s*$/) { + $message .=''. + ''. + '
Cell '.$ENV{'form.cell'}.' = 
'.$ENV{'form.newformula'}."
\n"; + } else { + $message .= 'Deleted contents of cell '.$ENV{'form.cell'}.'.'; + } + } + ## + ## Editing code + $result .=&hiddenfield('cell',''). + &hiddenfield('newformula',''); + ## + ## Create the save and load dialogs + my $filename = $spreadsheet->filename(); + my $truefilename = $filename; + if ($spreadsheet->is_default()) { + $filename = 'Default'; + } + my $save_dialog = ''. + ' '. + ''. + ''; + my $makedefault_dialog = ''; + # + my $link = 'Select Spreadsheet File"; + my $load_dialog = < + + + + $link + +  + \n \n\n"; + # + $result .=< + File Dialogs + --> + + + + + + +
$load_dialog + + + +
$save_dialog
$makedefault_dialog
+
+ +END + return ($result,$message); +} + sub handler { my $r=shift; # @@ -118,11 +222,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 # @@ -142,31 +254,53 @@ sub handler { $name = $ENV{'form.sname'}; $domain = $ENV{'form.sdomain'}; } - # - # Open page, try to prevent browser cache. - # - $r->content_type('text/html'); - $r->header_out('Cache-control','no-cache'); - $r->header_out('Pragma','no-cache'); - $r->send_http_header; ## ## Check permissions my $allowed_to_edit = &Apache::lonnet::allowed('mgr', $ENV{'request.course.id'}); + # Only those instructors/tas/whatevers with complete access + # (not section restricted) are able to modify spreadsheets. my $allowed_to_view = &Apache::lonnet::allowed('vgr', $ENV{'request.course.id'}); + if (! $allowed_to_view) { + $allowed_to_view = &Apache::lonnet::allowed('vgr', + $ENV{'request.course.id'}.'/'.$ENV{'request.course.sec'}); + # Those who are restricted by section are allowed to view. + # The routines in lonstatistics which decide which students' + # will be shown take care of the restriction by section. + } # # Only those able to view others grades will be allowed to continue # if they are not requesting their own. - if (($sheettype eq 'classcalc') || - ($name ne $ENV{'user.name'} ) || - ($domain ne $ENV{'user.domain'})) { + if ($sheettype eq 'classcalc') { if (! $allowed_to_view) { - $r->print('

Access Permission Denied

'. - ''); - return OK; + $ENV{'user.error.msg'}= + $r->uri.":vgr:0:0:Access Permission Denied"; + return HTTP_NOT_ACCEPTABLE; + } + } + if ((($name ne $ENV{'user.name'} ) || + ($domain ne $ENV{'user.domain'})) && $sheettype ne 'classcalc') { + # Check that the student is in their section? + if (exists($ENV{'request.course.sec'}) && + $ENV{'request.course.sec'} ne '' ) { + my $stu_sec = &Apache::lonnet::usection($domain,$name, + $ENV{'request.course.id'}); + if ($stu_sec ne $ENV{'request.course.sec'}) { + $ENV{'user.error.msg'}= + $r->uri.":vgr:0:0:Requested student not in your section."; + return HTTP_NOT_ACCEPTABLE; + } } } + + # + # Open page, try to prevent browser cache. + # + $r->content_type('text/html'); + &Apache::loncommon::no_cache($r); + $r->send_http_header; + # # Header.... # @@ -175,10 +309,14 @@ sub handler { ## ## Spit out the javascript required for editing ## - if (&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'})) { + if ($allowed_to_edit) { + my $extra_javascript = + &Apache::loncommon::browser_and_searcher_javascript(); $r->print(< + $extra_javascript + var editwin; function celledit(cellname,cellformula) { @@ -188,7 +326,7 @@ sub handler { edit_text +='Cell Edit Window'; edit_text += '
'; edit_text += '

Cell '+cellname+'

'; - edit_text += '