version 1.8, 2003/05/29 13:39:38
|
version 1.63, 2013/01/08 16:21:12
|
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 Apache::lonquickgrades(); |
use HTML::Entities(); |
use HTML::Entities(); |
|
|
## |
## |
Line 68 use HTML::Entities();
|
Line 73 use HTML::Entities();
|
|
|
sub textfield { |
sub textfield { |
my ($title,$name,$value)=@_; |
my ($title,$name,$value)=@_; |
return "\n<p><b>$title:</b><br>". |
return "\n<p><b>$title:</b><br />". |
'<input type=text name="'.$name.'" size=80 value="'.$value.'">'; |
'<input type="text" name="'.$name.'" size="80" value="'.$value.'" />'; |
} |
} |
|
|
sub hiddenfield { |
sub hiddenfield { |
my ($name,$value)=@_; |
my ($name,$value)=@_; |
return '<input type=hidden name="'.$name.'" value="'.$value.'" />'."\n"; |
return '<input type="hidden" name="'.$name.'" value="'.$value.'" />'."\n"; |
} |
} |
|
|
sub selectbox { |
sub selectbox { |
my ($title,$name,$value,%options)=@_; |
my ($title,$name,$value,%options)=@_; |
my $selout="\n<p><b>$title:</b><br>".'<select name="'.$name.'">'; |
my $selout="\n<p><b>$title:</b><br />".'<select name="'.$name.'">'; |
foreach (sort keys(%options)) { |
foreach (sort keys(%options)) { |
$selout.='<option value="'.$_.'"'; |
$selout.='<option value="'.$_.'"'; |
if ($_ eq $value) { $selout.=' selected'; } |
if ($_ eq $value) { $selout.=' selected="selected"'; } |
$selout.='>'.$options{$_}.'</option>'; |
$selout.='>'.&mt($options{$_}).'</option>'; |
} |
} |
return $selout.'</select>'; |
return $selout.'</select>'; |
} |
} |
Line 93 sub file_dialogs {
|
Line 98 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'}) && |
$spreadsheet->check_formulas_loaded(); |
exists($ENV{'form.savefilename'})) { |
if ((exists($env{'form.save'}) || exists($env{'form.makedefault'})) && |
$spreadsheet->filename($ENV{'form.savefilename'}); |
exists($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 .= '<span class="LC_error">'. |
"There error is:".$save_status; |
&mt('An error occurred while saving the spreadsheet. The error is: [_1].', |
return $result; |
$save_status).'</span>'; |
} else { |
} else { |
$result .= "Spreadsheet saved as ".$ENV{'form.savefilename'}; |
$message .= '<span class="LC_info">'.&mt('Spreadsheet saved as: [_1] .', |
|
'<span class="LC_filename">'.$spreadsheet->filename().'</span>'). |
|
'</span>'; |
} |
} |
} elsif (exists($ENV{'form.newformula'}) && |
} elsif (exists($env{'form.newformula'}) && |
exists($ENV{'form.cell'}) && |
exists($env{'form.cell'}) && |
$ENV{'form.cell'} ne '' ) { |
$env{'form.cell'} ne '' ) { |
## |
## |
## Make any requested modifications to the spreadsheet |
## Make any requested modifications to the spreadsheet |
$spreadsheet->modify_cell($ENV{'form.cell'}, |
$spreadsheet->modify_cell($env{'form.cell'}, |
$ENV{'form.newformula'}); |
$env{'form.newformula'}); |
$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>'.&mt('Cell').' '.$env{'form.cell'}.' = </pre></td>'. |
|
'<td><pre>'.$env{'form.newformula'}."</pre></td></tr></table>\n"; |
|
} else { |
|
$message .= &mt('Deleted contents of cell').' '.$env{'form.cell'}.'.'; |
|
} |
} |
} |
## |
## |
## Editing code |
## Editing code |
Line 126 sub file_dialogs {
|
Line 140 sub file_dialogs {
|
## |
## |
## Create the save and load dialogs |
## Create the save and load dialogs |
my $filename = $spreadsheet->filename(); |
my $filename = $spreadsheet->filename(); |
$filename = 'Default' if ($filename =~ /^default\.$sheettype/i); |
my $truefilename = $filename; |
$filename =~ s/_$sheettype$//; |
if ($spreadsheet->is_default()) { |
my $save_dialog = '<nobr>'. |
$filename = 'Default'; |
'<input type="submit" name="save" value="Save as" /> '. |
} |
|
my $save_dialog = '<span class="LC_nobreak">'. |
|
'<input type="submit" name="save" value="'.&mt('Save as').'" /> '. |
'<input type="text" name="savefilename" size="30" value="'. |
'<input type="text" name="savefilename" size="30" value="'. |
$filename.'" />'. |
$truefilename.'" />'. |
'</nobr>'; |
'</span>'; |
my $makedefault_dialog = '<input type="submit" name="makedefault" '. |
my $makedefault_dialog = '<input type="submit" name="makedefault" '. |
'value="Make This Sheet the Default"/>'; |
'value="'.&mt('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')\">".&mt('Select Spreadsheet File')."</a>"; |
|
my $load=&mt('Load:'); |
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><span class="LC_nobreak"> |
<input type="text" name="loadfilename" size="25" value="$filename" /> |
<input type="text" name="loadfilename" size="20" value="$filename" /> |
$link</nobr> |
$link</span> |
</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" > |
END |
END |
my $default_filename_set = 0; |
my $default_filename_set = 0; |
foreach my $sheetfilename ($spreadsheet->othersheets()) { |
foreach my $sheetfilename ($spreadsheet->othersheets()) { |
$sheetfilename =~ s/_$sheettype$//; |
$load_dialog .= ' <option value="'.$sheetfilename.'"'; |
$load_dialog .= ' <option name="'.$sheetfilename.'"'; |
|
if ($filename eq $sheetfilename) { |
if ($filename eq $sheetfilename) { |
$load_dialog .= ' selected'; |
$load_dialog .= ' selected="selected"'; |
$default_filename_set = 1; |
$default_filename_set = 1; |
} |
} |
$load_dialog .= '>'.$sheetfilename."</option>\n"; |
$load_dialog .= '>'.$sheetfilename."</option>\n"; |
} |
} |
if ($default_filename_set) { |
$load_dialog .= "</select>\n</td><td> </td></tr>\n</table>\n"; |
$load_dialog .= '<option name="Default">Default</option>'."\n"; |
|
} else { |
|
$load_dialog .= '<option name="Default" selected >Default</option>'. |
|
"\n"; |
|
} |
|
$load_dialog .= "</td><td> </td></tr>\n</table>\n"; |
|
# |
# |
|
my $headline = &mt('File Dialogs'); |
$result .=<<END; |
$result .=<<END; |
|
<!-- |
|
<fieldset title="File Dialogs" > |
|
<legend>$headline</legend> |
|
--> |
<!-- load / save dialogs --> |
<!-- load / save dialogs --> |
<table cellspacing="2"> |
<table cellspacing="2"> |
<tr> |
<tr> |
Line 179 END
|
Line 194 END
|
</td> |
</td> |
</tr> |
</tr> |
</table> |
</table> |
|
<!-- |
|
</fieldset> |
|
--> |
END |
END |
return $result; |
return ($result,$message); |
} |
} |
|
|
sub handler { |
sub handler { |
my $r=shift; |
my $r=shift; |
# |
# |
# Overload checking |
|
# |
|
# Check this server |
|
my $loaderror=&Apache::lonnet::overloaderror($r); |
|
if ($loaderror) { return $loaderror; } |
|
# Check the course homeserver |
|
$loaderror= &Apache::lonnet::overloaderror($r, |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.home'}); |
|
# if ($loaderror) { return $loaderror; } |
|
# |
|
# 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 207 sub handler {
|
Line 215 sub handler {
|
# Roles Checking |
# Roles Checking |
# |
# |
# Needs to be in a course |
# Needs to be in a course |
if (! $ENV{'request.course.fn'}) { |
if (! $env{'request.course.fn'}) { |
# Not in a course, or not allowed to modify parms |
# Not in a course, or not allowed to modify parms |
$ENV{'user.error.msg'}= |
$env{'user.error.msg'}= |
$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 ($sheettype) = ($r->uri=~/\/(\w+)$/); |
|
my $courseid = $env{'request.course.id'}; |
|
|
|
## |
|
## 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. |
|
} |
|
|
|
# |
|
# Do not allow users without vgr or mgr priv to continue unless |
|
# grading type is set to spreadsheet. |
|
# |
|
|
|
if ((!$allowed_to_view) && (!$allowed_to_edit)) { |
|
if ($env{'course.'.$courseid.'.grading'} eq 'spreadsheet') { |
|
if ($sheettype ne 'studentcalc') { |
|
$r->internal_redirect('/adm/studentcalc'); |
|
return OK; |
|
} |
|
} else { |
|
$r->internal_redirect('/adm/quickgrades'); |
|
return OK; |
|
} |
|
} |
# |
# |
# 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', |
|
'output_format','not_first_run']); |
# |
# |
# Deal with restricted student permissions |
# Deal with restricted student permissions |
# |
# |
if ($ENV{'request.role'} =~ /^st\./) { |
if ($env{'request.role'} =~ /^st\./) { |
delete $ENV{'form.cell'} if (exists($ENV{'form.cell'})); |
delete $env{'form.cell'} if (exists($env{'form.cell'})); |
delete $ENV{'form.newformula'} if (exists($ENV{'form.newformula'})); |
delete $env{'form.newformula'} if (exists($env{'form.newformula'})); |
} |
} |
# |
# |
# Determine basic information about the spreadsheet |
# Determine basic information about the spreadsheet |
my ($sheettype) = ($r->uri=~/\/(\w+)$/); |
|
# |
# |
my $symb = undef; |
my $symb = undef; |
$symb = $ENV{'form.usymb'} if (exists($ENV{'form.usymb'})); |
$symb = $env{'form.usymb'} if (exists($env{'form.usymb'})); |
my $name = $ENV{'user.name'}; |
my $name = $env{'user.name'}; |
my $domain = $ENV{'user.domain'}; |
my $domain = $env{'user.domain'}; |
if (exists($ENV{'form.sname'})) { |
my $warning; |
$name = $ENV{'form.sname'}; |
if (exists($env{'form.sname'}) && $env{'form.sname'} ne '') { |
$domain = $ENV{'form.sdomain'}; |
if (($env{'form.sname'} ne $env{'user.name'}) || |
|
($env{'form.sdomain'} ne $env{'user.domain'})) { |
|
if (($allowed_to_view) || ($allowed_to_edit)) { |
|
if (&Apache::lonnet::homeserver($env{'form.sname'},$env{'form.sdomain'}) ne 'no_host') { |
|
$name = $env{'form.sname'}; |
|
$domain = $env{'form.sdomain'}; |
|
} else { |
|
$warning = &mt('Requested user: "[_1]" does not exist; your own sheet is displayed instead.',$env{'form.sname'}.':'.$env{'form.sdomain'}); |
|
} |
|
} else { |
|
$warning = &mt('Your current role is not permitted to display this sheet for the requested user: "[_1]"; your own sheet is displayed instead.',$env{'form.sname'}.':'.$env{'form.sdomain'}); |
|
} |
|
} |
|
} |
|
$env{'form.sname'} = $name; |
|
$env{'form.sdomain'} = $domain; |
|
my $section = &Apache::lonnet::getsection($domain,$name, |
|
$env{'request.course.id'}); |
|
my @groups; |
|
if (($env{'user.name'} eq $name) && ($env{'user.domain'} eq $domain)) { |
|
@groups = &Apache::lonnet::sort_course_groups($env{'request.course.id'}, |
|
split(':',$env{'request.course.groups'})); |
|
} else { |
|
@groups = &Apache::lonnet::get_users_groups($domain,$name, |
|
$env{'request.course.id'}); |
} |
} |
# |
|
# 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'}); |
|
my $allowed_to_view = &Apache::lonnet::allowed('vgr', |
|
$ENV{'request.course.id'}); |
|
|
|
# |
# |
# 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'} ) || |
if (!$allowed_to_view) { |
($domain ne $ENV{'user.domain'})) { |
$r->internal_redirect('/adm/studentcalc'); |
if (! $allowed_to_view) { |
|
$r->print('<h1>Access Permission Denied</h1>'. |
|
'</form></body></html>'); |
|
return OK; |
return OK; |
|
} |
|
} |
|
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::getsection($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. |
|
# |
|
&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>'); |
|
my $nothing = &Apache::lonhtmlcommon::javascript_nothing(); |
my $nothing = &Apache::lonhtmlcommon::javascript_nothing(); |
## |
## |
## Spit out the javascript required for editing |
## Spit out the javascript required for editing |
## |
## |
|
my $js; |
if ($allowed_to_edit) { |
if ($allowed_to_edit) { |
|
my %lt=&Apache::lonlocal::texthash( |
|
'ce' => 'Cell', |
|
'ac' => 'Save', |
|
'dc' => 'Cancel' |
|
); |
my $extra_javascript = |
my $extra_javascript = |
&Apache::loncommon::browser_and_searcher_javascript(); |
&Apache::loncommon::browser_and_searcher_javascript(); |
$r->print(<<ENDSCRIPT); |
|
<script language="JavaScript"> |
my $cell_extra_js = &Apache::loncommon::resize_textarea_js(); |
|
my $cell_edit_start = |
|
&Apache::loncommon::start_page('Cell Edit Window',$cell_extra_js, |
|
{'only_body' => 1, |
|
'js_ready' => 1, |
|
'add_entries' => { |
|
'onresize' => "resize_textarea('LC_newformula','LC_aftertextarea')", |
|
'onload' => "resize_textarea('LC_newformula','LC_aftertextarea')", |
|
}}); |
|
my $cell_edit_end = |
|
&Apache::loncommon::end_page({'js_ready' => 1,}); |
|
|
|
$js = <<ENDSCRIPT; |
|
<script type="text/javascript"> |
|
//<!-- |
$extra_javascript |
$extra_javascript |
|
|
var editwin; |
var editwin; |
Line 285 sub handler {
|
Line 376 sub handler {
|
var edit_text = ''; |
var edit_text = ''; |
// cellformula may contain less-than and greater-than symbols, so |
// cellformula may contain less-than and greater-than symbols, so |
// we need to escape them? |
// we need to escape them? |
edit_text +='<html><head><title>Cell Edit Window</title></head><body>'; |
edit_text +='$cell_edit_start'; |
edit_text += '<form name="editwinform">'; |
edit_text += '<form name="editwinform">'; |
edit_text += '<center><h3>Cell '+cellname+'</h3>'; |
edit_text += '<center><h3>$lt{'ce'} '+cellname+'</h3>'; |
edit_text += '<textarea name="newformula" cols="40" rows="6"'; |
edit_text += '<textarea id="LC_newformula" name="newformula" '; |
edit_text += ' wrap="off" >'+cellformula+'</textarea>'; |
edit_text += ' cols="60" rows="12"; wrap="off" style="width:100%">'; |
edit_text += '</br>'; |
edit_text += cellformula+'</textarea>'; |
edit_text += '<input type="button" name="accept" value="Accept"'; |
edit_text += '<div id="LC_aftertextarea"><br />'; |
|
edit_text += '<input type="button" name="accept" value="$lt{'ac'}"'; |
edit_text += ' onClick=\\\'javascript:'; |
edit_text += ' onClick=\\\'javascript:'; |
edit_text += 'opener.document.sheet.cell.value='; |
edit_text += 'opener.document.sheet.cell.value='; |
edit_text += '"'+cellname+'";'; |
edit_text += '"'+cellname+'";'; |
Line 301 sub handler {
|
Line 393 sub handler {
|
edit_text += 'self.close()\\\' />'; |
edit_text += 'self.close()\\\' />'; |
edit_text += ' '; |
edit_text += ' '; |
edit_text += '<input type="button" name="abort" '; |
edit_text += '<input type="button" name="abort" '; |
edit_text += 'value="Discard Changes"'; |
edit_text += 'value="$lt{'dc'}"'; |
edit_text += ' onClick="javascript:self.close()" />'; |
edit_text += ' onClick="javascript:self.close()" />'; |
edit_text += '</center></body></html>'; |
edit_text += '</center></div></form>$cell_edit_end'; |
|
|
if (editwin != null && !(editwin.closed) ) { |
if (editwin != null && !(editwin.closed) ) { |
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,resizable=yes,alwaysRaised=yes,dependent=yes',true); |
editwin.document.write(edit_text); |
editwin.document.write(edit_text); |
|
editwin.document.close(); |
} |
} |
|
//--> |
</script> |
</script> |
ENDSCRIPT |
ENDSCRIPT |
} |
} |
$r->print('</head>'.&Apache::loncommon::bodytag('Grades Spreadsheet'). |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
'<form action="'.$r->uri.'" name="sheet" method="post">'); |
&Apache::lonhtmlcommon::add_breadcrumb |
$r->print(&hiddenfield('sname' ,$ENV{'form.sname'}). |
({href => $r->uri, |
&hiddenfield('sdomain',$ENV{'form.sdomain'}). |
title => 'Spreadsheet', |
&hiddenfield('usymb' ,$ENV{'form.usymb'})); |
text => 'Spreadsheet', |
|
faq => 134, |
|
bug => 'Spreadsheet'}); |
|
$r->print(&Apache::loncommon::start_page('Grades Spreadsheet',$js). |
|
&Apache::lonhtmlcommon::breadcrumbs('Spreadsheet', |
|
'Spreadsheet_About')); |
|
|
|
# |
|
# Tabs |
|
# |
|
&Apache::lonquickgrades::startGradeScreen($r,'spreadsheet'); |
|
|
|
# |
|
# Open the form |
|
# |
|
if ($warning) { |
|
$r->print('<p class="LC_info">'.$warning.'</p>'); |
|
} |
|
$r->print('<form action="'.$r->uri.'" name="sheet" method="post">'); |
|
$r->print(&hiddenfield('sname' ,$env{'form.sname'}). |
|
&hiddenfield('sdomain',$env{'form.sdomain'}). |
|
&hiddenfield('usymb' ,$env{'form.usymb'})); |
$r->rflush(); |
$r->rflush(); |
## |
## |
## Determine the filename to use |
## Determine the filename to use |
my $filename = undef; |
my $filename = undef; |
if ($allowed_to_edit) { |
if ($allowed_to_edit) { |
$filename = $ENV{'form.filename'} if (exists($ENV{'form.filename'})); |
$filename = $env{'form.filename'} if (exists($env{'form.filename'})); |
# |
# |
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'; |
$env{'form.workcopy'} = 'no'; |
|
} |
|
} |
|
## |
|
## 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 'expireallsheets') { |
|
&Apache::lonnet::logthis('spreadsheet expired: entire course'); |
|
# expire ALL spreadsheets |
|
&Apache::lonnet::expirespread('','','studentcalc'); |
|
&Apache::lonnet::expirespread('','','assesscalc'); |
|
$r->print('<h3>'. |
|
&mt('Expired spreadsheet caches for all students'). |
|
'</h3>'); |
|
} elsif ($env{'form.recalc'} =~ /^symb:/) { |
|
# expire for all students on this symb |
|
my ($symb) = ($env{'form.recalc'} =~ /^symb:(.*)$/); |
|
&Apache::lonnet::logthis('spreadsheet expired: symb = '.$symb); |
|
&Apache::lonnet::expirespread('','','assesscalc',$symb); |
|
&Apache::lonnet::expirespread('','','studentcalc'); |
|
$r->print('<h3>'. |
|
&mt('Expired spreadsheet caches for all students for symb [_1]', |
|
$symb). |
|
'</h3>'); |
|
} elsif ($env{'form.recalc'} =~ /^student:/) { |
|
# expire all assessment spreadsheets for this user |
|
my ($sname,$sdom) = ($env{'form.recalc'}=~/^student:(.*):(.*)$/); |
|
&Apache::lonnet::logthis('spreadsheet expired: student = '. |
|
$sname.'@'.$sdom); |
|
if (defined($sname) && defined($sdom)) { |
|
&Apache::lonnet::expirespread($sname,$sdom,'assesscalc'); |
|
&Apache::lonnet::expirespread($sname,$sdom,'studentcalc'); |
|
$r->print('<h3>'. |
|
&mt('Expired spreadsheet caches for student [_1]', |
|
$sname.'@'.$sdom). |
|
'</h3>'); |
|
} |
} |
} |
} |
} |
## |
## |
Line 337 ENDSCRIPT
|
Line 491 ENDSCRIPT
|
&Apache::Spreadsheet::initialize_spreadsheet_package(); |
&Apache::Spreadsheet::initialize_spreadsheet_package(); |
my $spreadsheet = undef; |
my $spreadsheet = undef; |
if ($sheettype eq 'classcalc') { |
if ($sheettype eq 'classcalc') { |
$spreadsheet = Apache::classcalc->new($name,$domain,$filename,undef); |
$spreadsheet = Apache::classcalc->new($name,$domain,$filename,undef, |
|
$section,\@groups); |
} elsif ($sheettype eq 'studentcalc') { |
} elsif ($sheettype eq 'studentcalc') { |
$spreadsheet = Apache::studentcalc->new($name,$domain,$filename,undef); |
$spreadsheet = Apache::studentcalc->new($name,$domain,$filename,undef, |
|
$section,\@groups); |
} elsif ($sheettype eq 'assesscalc' && |
} elsif ($sheettype eq 'assesscalc' && |
defined($symb) && |
defined($symb) && |
$allowed_to_edit) { |
$allowed_to_edit) { |
$spreadsheet = Apache::assesscalc->new($name,$domain,$filename,$symb); |
$spreadsheet = Apache::assesscalc->new($name,$domain,$filename,$symb, |
|
$section,\@groups); |
} else { |
} else { |
return HTTP_NOT_ACCEPTABLE; |
return HTTP_NOT_ACCEPTABLE; |
} |
} |
Line 354 ENDSCRIPT
|
Line 511 ENDSCRIPT
|
$spreadsheet->initialize(); |
$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) { |
$r->print('<table><tr><td>'.$spreadsheet->html_header().'</td>'. |
my ($html,$action_message) = &file_dialogs($spreadsheet); |
'<td valign="bottom">'. |
if ($env{'form.makedefault'}) { |
&file_dialogs($spreadsheet)."</td></tr></table>\n"); |
$spreadsheet->make_default(); |
|
if ($action_message) { |
|
$action_message .= '<br />'; |
|
} |
|
$action_message .= &mt('Made this spreadsheet the default'); |
|
if ($sheettype eq 'classcalc') { |
|
$action_message .= ' '.&mt('for the course'); |
|
} elsif ($sheettype eq 'studentcalc') { |
|
$action_message .= ' '.&mt('for all students'); |
|
} elsif ($sheettype eq 'assesscalc') { |
|
$action_message .= ' '.&mt('for all assessments'); |
|
} |
|
$action_message .= '.'; |
|
} |
|
$r->print('<table><tr><td valign="top">'. |
|
$spreadsheet->html_header(). |
|
'</td>'. |
|
'<td valign="center">'.$html."</td></tr></table>\n"); |
|
if ($action_message ne '') { |
|
$r->print( |
|
&Apache::loncommon::confirmwrapper( |
|
&mt('Last Action:') |
|
.$action_message) |
|
); |
|
} |
$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>"); |
|
$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", |
|
&mt('Spreadsheet Help')). |
|
'</td>'); |
|
} |
|
if ($allowed_to_edit) { |
|
$r->print('<td>'. |
|
&Apache::loncommon::help_open_topic("Spreadsheet_Editing", |
|
&mt('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)); |
# |
# |
# Keep track of the number of times we have been called, sort of. |
# Keep track of the number of times we have been called, sort of. |
$r->print(&hiddenfield('not_first_run','whatever')); |
$r->print(&hiddenfield('not_first_run','1')); |
# |
# |
if (exists($ENV{'form.not_first_run'}) || $sheettype ne 'classcalc') { |
if (exists($env{'form.not_first_run'}) || $sheettype ne 'classcalc') { |
$r->print($spreadsheet->get_html_title()); |
$r->print($spreadsheet->get_html_title()); |
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>'); |
|
&Apache::lonquickgrades::endGradeScreen($r); |
|
$r->print(&Apache::loncommon::end_page()); |
|
$spreadsheet->clear_package(); |
return OK; |
return OK; |
} |
} |
|
|