version 1.13, 2003/06/19 16:04:06
|
version 1.26, 2003/09/30 15:40:09
|
Line 54 built-in functions.
|
Line 54 built-in functions.
|
package Apache::lonspreadsheet; |
package Apache::lonspreadsheet; |
|
|
use strict; |
use strict; |
|
use warnings FATAL=>'all'; |
|
no warnings 'uninitialized'; |
use Apache::classcalc(); |
use Apache::classcalc(); |
use Apache::studentcalc(); |
use Apache::studentcalc(); |
use Apache::assesscalc(); |
use Apache::assesscalc(); |
use Apache::Constants qw(:common :http); |
use Apache::Constants qw(:common :http); |
use Apache::lonnet; |
use Apache::lonnet; |
use Apache::lonhtmlcommon; |
use Apache::lonhtmlcommon; |
|
use Apache::lonlocal; |
|
use Apache::loncoursedata(); |
use HTML::Entities(); |
use HTML::Entities(); |
|
|
## |
## |
Line 103 sub file_dialogs {
|
Line 107 sub file_dialogs {
|
if ($save_status ne 'ok') { |
if ($save_status ne 'ok') { |
$message .= "An error occurred while saving the spreadsheet". |
$message .= "An error occurred while saving the spreadsheet". |
"There error is:".$save_status; |
"There error is:".$save_status; |
return $result; |
|
} else { |
} else { |
$message .= "Spreadsheet saved as ".$ENV{'form.savefilename'}; |
$message .= "Spreadsheet saved as ".$spreadsheet->filename(); |
} |
} |
} elsif (exists($ENV{'form.newformula'}) && |
} elsif (exists($ENV{'form.newformula'}) && |
exists($ENV{'form.cell'}) && |
exists($ENV{'form.cell'}) && |
Line 165 END
|
Line 168 END
|
} |
} |
$load_dialog .= '>'.$sheetfilename."</option>\n"; |
$load_dialog .= '>'.$sheetfilename."</option>\n"; |
} |
} |
$load_dialog .= "</td><td> </td></tr>\n</table>\n"; |
$load_dialog .= "</select>\n</td><td> </td></tr>\n</table>\n"; |
# |
# |
$result .=<<END; |
$result .=<<END; |
|
<!-- |
|
<fieldset title="File Dialogs" > |
|
<legend>File Dialogs</legend> |
|
--> |
<!-- load / save dialogs --> |
<!-- load / save dialogs --> |
<table cellspacing="2"> |
<table cellspacing="2"> |
<tr> |
<tr> |
Line 180 END
|
Line 187 END
|
</td> |
</td> |
</tr> |
</tr> |
</table> |
</table> |
|
<!-- |
|
</fieldset> |
|
--> |
END |
END |
return ($result,$message); |
return ($result,$message); |
} |
} |
Line 200 sub handler {
|
Line 210 sub handler {
|
# HTML Header |
# HTML Header |
# |
# |
if ($r->header_only) { |
if ($r->header_only) { |
$r->content_type('text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->send_http_header; |
$r->send_http_header; |
return OK; |
return OK; |
} |
} |
Line 214 sub handler {
|
Line 224 sub handler {
|
$r->uri.":opa:0:0:Cannot modify spreadsheet"; |
$r->uri.":opa:0:0:Cannot modify spreadsheet"; |
return HTTP_NOT_ACCEPTABLE; |
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 |
# Get query string for limited number of parameters |
# |
# |
&Apache::loncommon::get_unprocessed_cgi |
&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 |
# Deal with restricted student permissions |
# |
# |
Line 238 sub handler {
|
Line 256 sub handler {
|
$name = $ENV{'form.sname'}; |
$name = $ENV{'form.sname'}; |
$domain = $ENV{'form.sdomain'}; |
$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 |
## Check permissions |
my $allowed_to_edit = &Apache::lonnet::allowed('mgr', |
my $allowed_to_edit = &Apache::lonnet::allowed('mgr', |
Line 265 sub handler {
|
Line 276 sub handler {
|
# if they are not requesting their own. |
# if they are not requesting their own. |
if ($sheettype eq 'classcalc') { |
if ($sheettype eq 'classcalc') { |
if (! $allowed_to_view) { |
if (! $allowed_to_view) { |
$r->print('<h1>Access Permission Denied</h1>'. |
$ENV{'user.error.msg'}= |
'</form></body></html>'); |
$r->uri.":vgr:0:0:Access Permission Denied"; |
return OK; |
return HTTP_NOT_ACCEPTABLE; |
} |
} |
} |
} |
if ((($name ne $ENV{'user.name'} ) || |
if ((($name ne $ENV{'user.name'} ) || |
($domain ne $ENV{'user.domain'})) && $sheettype ne 'classcalc') { |
($domain ne $ENV{'user.domain'})) && $sheettype ne 'classcalc') { |
Line 278 sub handler {
|
Line 289 sub handler {
|
my $stu_sec = &Apache::lonnet::usection($domain,$name, |
my $stu_sec = &Apache::lonnet::usection($domain,$name, |
$ENV{'request.course.id'}); |
$ENV{'request.course.id'}); |
if ($stu_sec ne $ENV{'request.course.sec'}) { |
if ($stu_sec ne $ENV{'request.course.sec'}) { |
$r->print |
$ENV{'user.error.msg'}= |
('<h1>The student requested is not in your section.</h1>'. |
$r->uri.":vgr:0:0:Requested student not in your section."; |
'</form></body></html>'); |
return HTTP_NOT_ACCEPTABLE; |
return OK; |
|
} |
} |
} |
} |
} |
} |
|
|
# |
# |
|
# Open page, try to prevent browser cache. |
|
# |
|
&Apache::loncommon::content_type($r,'text/html'); |
|
&Apache::loncommon::no_cache($r); |
|
$r->send_http_header; |
|
|
|
# |
# Header.... |
# Header.... |
# |
# |
$r->print('<html><head><title>LON-CAPA Spreadsheet</title>'); |
$r->print('<html><head><title>LON-CAPA Spreadsheet</title>'); |
Line 311 sub handler {
|
Line 328 sub handler {
|
edit_text +='<html><head><title>Cell Edit Window</title></head><body>'; |
edit_text +='<html><head><title>Cell Edit Window</title></head><body>'; |
edit_text += '<form name="editwinform">'; |
edit_text += '<form name="editwinform">'; |
edit_text += '<center><h3>Cell '+cellname+'</h3>'; |
edit_text += '<center><h3>Cell '+cellname+'</h3>'; |
edit_text += '<textarea name="newformula" cols="40" rows="6"'; |
edit_text += '<textarea name="newformula" cols="60" rows="12"'; |
edit_text += ' wrap="off" >'+cellformula+'</textarea>'; |
edit_text += ' wrap="off" >'+cellformula+'</textarea>'; |
edit_text += '</br>'; |
edit_text += '</br>'; |
edit_text += '<input type="button" name="accept" value="Accept"'; |
edit_text += '<input type="button" name="accept" value="Accept"'; |
Line 332 sub handler {
|
Line 349 sub handler {
|
editwin.close(); |
editwin.close(); |
} |
} |
|
|
editwin = window.open($nothing,'CellEditWin','height=200,width=350,scrollbars=no,resizeable=yes,alwaysRaised=yes,dependent=yes',true); |
editwin = window.open($nothing,'CellEditWin','height=280,width=480,scrollbars=no,resizeable=yes,alwaysRaised=yes,dependent=yes',true); |
editwin.document.write(edit_text); |
editwin.document.write(edit_text); |
} |
} |
</script> |
</script> |
Line 356 ENDSCRIPT
|
Line 373 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 |
## Make the spreadsheet |
&Apache::Spreadsheet::initialize_spreadsheet_package(); |
&Apache::Spreadsheet::initialize_spreadsheet_package(); |
my $spreadsheet = undef; |
my $spreadsheet = undef; |
Line 415 END
|
Line 459 END
|
} |
} |
$r->rflush(); |
$r->rflush(); |
# |
# |
|
$r->print("<table><tr>"); |
if ($sheettype eq 'classcalc') { |
if ($sheettype eq 'classcalc') { |
$r->print('<input type="submit" value="Generate Spreadsheet" /><br />'); |
$r->print('<td><input type="submit" value="'. |
|
&mt('Generate Spreadsheet').'" />'. |
|
'</td>'); |
|
} |
|
if ($allowed_to_view) { |
|
$r->print('<td>'. |
|
&Apache::loncommon::help_open_topic("Spreadsheet_About", |
|
'Spreadsheet Help'). |
|
'</td>'); |
} |
} |
|
if ($allowed_to_edit) { |
|
$r->print('<td>'. |
|
&Apache::loncommon::help_open_topic("Spreadsheet_Editing", |
|
'Editing Help'). |
|
'</td>'); |
|
} |
|
$r->print('</tr></table>'); |
# |
# |
# Keep track of the filename |
# Keep track of the filename |
$r->print(&hiddenfield('filename',$filename)); |
$r->print(&hiddenfield('filename',$filename)); |
Line 430 END
|
Line 490 END
|
if ($allowed_to_view || $allowed_to_edit) { |
if ($allowed_to_view || $allowed_to_edit) { |
$r->print($spreadsheet->parent_link()); |
$r->print($spreadsheet->parent_link()); |
} |
} |
|
$r->rflush(); |
$spreadsheet->display($r); |
$spreadsheet->display($r); |
} |
} |
$r->print('</form></body></html>'); |
$r->print('</form></body></html>'); |