version 1.6, 2003/05/27 20:05:46
|
version 1.19, 2003/08/06 19:54:36
|
Line 93 sub file_dialogs {
|
Line 93 sub file_dialogs {
|
my $bgcolor = "#FFFFFF"; |
my $bgcolor = "#FFFFFF"; |
my $sheettype = $spreadsheet->{'type'}; |
my $sheettype = $spreadsheet->{'type'}; |
my $result = ''; |
my $result = ''; |
|
my $message = ''; |
## |
## |
## Deal with saving the spreadsheet |
## Deal with saving the spreadsheet |
if (exists($ENV{'form.save'}) && |
if ((exists($ENV{'form.save'}) || exists($ENV{'form.makedefault'})) && |
exists($ENV{'form.savefilename'})) { |
exists($ENV{'form.savefilename'})) { |
$spreadsheet->filename($ENV{'form.savefilename'}); |
$spreadsheet->filename($ENV{'form.savefilename'}); |
my $save_status = $spreadsheet->save(); |
my $save_status = $spreadsheet->save(); |
if ($save_status ne 'ok') { |
if ($save_status ne 'ok') { |
$result .= "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; |
return $result; |
} else { |
} else { |
$result .= "Spreadsheet saved as ".$ENV{'form.savefilename'}; |
$message .= "Spreadsheet saved as ".$ENV{'form.savefilename'}; |
} |
} |
} elsif (exists($ENV{'form.newformula'}) && |
} elsif (exists($ENV{'form.newformula'}) && |
exists($ENV{'form.cell'}) && |
exists($ENV{'form.cell'}) && |
Line 116 sub file_dialogs {
|
Line 117 sub file_dialogs {
|
$spreadsheet->save_tmp(); |
$spreadsheet->save_tmp(); |
# output that we are dealing with a temporary file |
# output that we are dealing with a temporary file |
$result .=&hiddenfield('workcopy',$sheettype); |
$result .=&hiddenfield('workcopy',$sheettype); |
$result .='<pre>'.$ENV{'form.cell'}.' = '. |
if ($ENV{'form.newformula'} !~ /^\s*$/) { |
$ENV{'form.newformula'}."</pre>\n"; |
$message .='<table><tr>'. |
|
'<td valign="top"><pre>Cell '.$ENV{'form.cell'}.' = </pre></td>'. |
|
'<td><pre>'.$ENV{'form.newformula'}."</pre></td></tr></table>\n"; |
|
} else { |
|
$message .= 'Deleted contents of cell '.$ENV{'form.cell'}.'.'; |
|
} |
} |
} |
## |
## |
## Editing code |
## Editing code |
Line 126 sub file_dialogs {
|
Line 132 sub file_dialogs {
|
## |
## |
## Create the save and load dialogs |
## Create the save and load dialogs |
my $filename = $spreadsheet->filename(); |
my $filename = $spreadsheet->filename(); |
$filename = '' if ($filename =~ /^default\.$sheettype/i); |
my $truefilename = $filename; |
$filename =~ s/_$sheettype$//; |
if ($spreadsheet->is_default()) { |
|
$filename = 'Default'; |
|
} |
my $save_dialog = '<nobr>'. |
my $save_dialog = '<nobr>'. |
'<input type="submit" name="save" value="Save as" /> '. |
'<input type="submit" name="save" value="Save as" /> '. |
'<input type="text" name="savefilename" size="30" value="'. |
'<input type="text" name="savefilename" size="30" value="'. |
$filename.'" />'. |
$truefilename.'" />'. |
'</nobr>'; |
'</nobr>'; |
my $makedefault_dialog = '<input type="submit" name="makedefault" '. |
my $makedefault_dialog = '<input type="submit" name="makedefault" '. |
'value="Make This Sheet the Default"/>'; |
'value="Save as & Make This Sheet the Default"/>'; |
# |
# |
my $link = '<a href="javascript:openbrowser'. |
my $link = '<a href="javascript:openbrowser'. |
"('sheet','loadfilename','spreadsheet')\">Browse</a>"; |
"('sheet','loadfilename','spreadsheet')\">Select Spreadsheet File</a>"; |
my $load_dialog = <<END; |
my $load_dialog = <<END; |
<table bgcolor="$bgcolor"> |
<table bgcolor="$bgcolor"> |
<tr><td><input type="submit" name="load" value="Load" /></td> |
<tr><td><input type="submit" name="load" value="Load" /></td> |
<td><nobr> |
<td><nobr> |
<input type="text" name="loadfilename" size="25" value="$filename" /> |
<input type="text" name="loadfilename" size="20" value="$filename" /> |
$link</nobr> |
$link</nobr> |
</td></tr> |
</td></tr> |
<tr><td> </td><td> |
<tr><td> </td><td> |
<select name="fileselect" onchange="document.sheet.loadfilename.value=document.sheet.fileselect.value" > |
<select name="fileselect" onchange="document.sheet.loadfilename.value=document.sheet.fileselect.value" > |
<option name="Default">Default</option> |
|
END |
END |
|
my $default_filename_set = 0; |
foreach my $sheetfilename ($spreadsheet->othersheets()) { |
foreach my $sheetfilename ($spreadsheet->othersheets()) { |
$sheetfilename =~ s/_$sheettype$//; |
|
$load_dialog .= ' <option name="'.$sheetfilename.'"'; |
$load_dialog .= ' <option name="'.$sheetfilename.'"'; |
if ($filename eq $sheetfilename) { |
if ($filename eq $sheetfilename) { |
$load_dialog .= ' selected'; |
$load_dialog .= ' selected'; |
|
$default_filename_set = 1; |
} |
} |
$load_dialog .= '>'.$sheetfilename."</option>\n"; |
$load_dialog .= '>'.$sheetfilename."</option>\n"; |
} |
} |
Line 173 END
|
Line 181 END
|
</tr> |
</tr> |
</table> |
</table> |
END |
END |
return $result; |
return ($result,$message); |
} |
} |
|
|
sub handler { |
sub handler { |
Line 206 sub handler {
|
Line 214 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 230 sub handler {
|
Line 246 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', |
$ENV{'request.course.id'}); |
$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', |
my $allowed_to_view = &Apache::lonnet::allowed('vgr', |
$ENV{'request.course.id'}); |
$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 |
# Only those able to view others grades will be allowed to continue |
# if they are not requesting their own. |
# if they are not requesting their own. |
if (($sheettype eq 'classcalc') || |
if ($sheettype eq 'classcalc') { |
($name ne $ENV{'user.name'} ) || |
|
($domain ne $ENV{'user.domain'})) { |
|
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'} ) || |
|
($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.... |
# Header.... |
# |
# |
Line 281 sub handler {
|
Line 318 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 302 sub handler {
|
Line 339 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 322 ENDSCRIPT
|
Line 359 ENDSCRIPT
|
# |
# |
if (exists($ENV{'form.load'}) && exists($ENV{'form.loadfilename'})) { |
if (exists($ENV{'form.load'}) && exists($ENV{'form.loadfilename'})) { |
$filename = $ENV{'form.loadfilename'}; |
$filename = $ENV{'form.loadfilename'}; |
|
$ENV{'form.workcopy'} = 'no'; |
|
} |
|
} |
|
## |
|
## Take care of "backdoor" spreadsheet expiration / recalc stuff |
|
if ($allowed_to_edit && exists($ENV{'form.recalc'})) { |
|
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'); |
|
} |
} |
} |
} |
} |
## |
## |
Line 343 ENDSCRIPT
|
Line 405 ENDSCRIPT
|
# error error - run in circles, scream and shout |
# error error - run in circles, scream and shout |
return; |
return; |
} |
} |
|
$spreadsheet->initialize(); |
# |
# |
# Output selector |
# Output selector |
$r->print('<input type="submit" value="Update Display" /><br />'); |
|
## |
## |
## Editing/loading/saving |
## Editing/loading/saving |
if ($allowed_to_edit) { |
if ($allowed_to_edit) { |
|
my ($html,$action_message) = &file_dialogs($spreadsheet); |
|
if ($ENV{'form.makedefault'}) { |
|
$spreadsheet->make_default(); |
|
if ($action_message) { |
|
$action_message .= '<br />'; |
|
} |
|
$action_message .= 'Made this spreadsheet the default'; |
|
if ($sheettype eq 'classcalc') { |
|
$action_message .= ' for the course'; |
|
} elsif ($sheettype eq 'studentcalc') { |
|
$action_message .= ' for all students'; |
|
} elsif ($sheettype eq 'assesscalc') { |
|
$action_message .= ' for all assessments'; |
|
} |
|
$action_message .= '.'; |
|
} |
$r->print('<table><tr><td>'.$spreadsheet->html_header().'</td>'. |
$r->print('<table><tr><td>'.$spreadsheet->html_header().'</td>'. |
'<td valign="bottom">'. |
'<td valign="bottom">'.$html."</td></tr></table>\n"); |
&file_dialogs($spreadsheet)."</td></tr></table>\n"); |
if ($action_message ne '') { |
|
$r->print(<<END); |
|
<table> |
|
<tr><td valign="top"><b>Last Action:</b></td> |
|
<td> </td> |
|
<td>$action_message</td> |
|
</tr> |
|
</table> |
|
END |
|
} |
$r->rflush(); |
$r->rflush(); |
} else { |
} else { |
$r->print('<table><tr><td>'.$spreadsheet->html_header(). |
$r->print('<table><tr><td>'.$spreadsheet->html_header(). |
"</td></tr></table>\n"); |
"</td></tr></table>\n"); |
} |
} |
|
$r->rflush(); |
|
# |
|
$r->print("<table><tr>"); |
|
if ($sheettype eq 'classcalc') { |
|
$r->print('<td><input type="submit" value="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 369 ENDSCRIPT
|
Line 476 ENDSCRIPT
|
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); |
} else { |
|
$r->print("<h2>Make your selections and bonk the 'update display' button</h2>"); |
|
} |
} |
$r->print('</form></body></html>'); |
$r->print('</form></body></html>'); |
return OK; |
return OK; |