@@ -1261,99 +1732,78 @@ ENDSCRIPT
&hiddenfield('usymb',$ENV{'form.usymb'}).
&hiddenfield('unewfield','').
&hiddenfield('unewformula',''));
- }
+
+# ---------------------- Make sure that this gets out, even if user hits "stop"
+
$r->rflush();
+
# ---------------------------------------- Read new sheet or modified worksheet
- my $sheetone=initsheet();
$r->uri=~/\/(\w+)$/;
- &settype($sheetone,$1);
+
+ my $asheet=&makenewsheet($aname,$adom,$1,$ENV{'form.usymb'});
+
+# ------------------------ If a new formula had been entered, go from work copy
+
if ($ENV{'form.unewfield'}) {
$r->print('Modified Workcopy ');
$ENV{'form.unewformula'}=~s/\'/\"/g;
$r->print('New formula: '.$ENV{'form.unewfield'}.'='.
$ENV{'form.unewformula'}.'
');
- &setfilename($sheetone,$ENV{'form.ufn'});
- &tmpread($sheetone,$r->dir_config('lonDaemons').'/tmp/',
- $ENV{'form.usymb'},
+ &setfilename($asheet,$ENV{'form.ufn'});
+ &tmpread($asheet,
$ENV{'form.unewfield'},$ENV{'form.unewformula'});
- } elsif ($ENV{'form.saveas'}) {
- &setfilename($sheetone,$ENV{'form.ufn'});
- &tmpread($sheetone,$r->dir_config('lonDaemons').'/tmp/',
- $ENV{'form.usymb'});
+
+ } elsif ($ENV{'form.saveas'}) {
+ &setfilename($asheet,$ENV{'form.ufn'});
+ &tmpread($asheet);
} else {
- unless ($ENV{'form.ufn'}) {
- my $reply=&Apache::lonnet::reply('get:'.
- $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}.':'.
- $ENV{'course.'.$ENV{'request.course.id'}.'.num'}.
- ':environment:spreadsheet_default_'.
- &gettype($sheetone),
- $ENV{'course.'.$ENV{'request.course.id'}.'.home'});
- unless (($reply=~/^error\:/) || ($reply eq '')) {
- $ENV{'form.ufn'}=$reply;
- unless ($reroute) {
- $r->print('
Using customized default spreadsheet
');
- }
- }
+ &readsheet($asheet,$ENV{'form.ufn'});
+ }
+
+# -------------------------------------------------- Print out user information
+
+ unless (&gettype($asheet) eq 'classcalc') {
+ $r->print('
User: '.&getuname($asheet).
+ 'Domain: '.&getudom($asheet));
+ if (&getcsec($asheet) eq '-1') {
+ $r->print('
'.
+ 'Not a student in this course ');
+ } else {
+ $r->print('Section/Group: '.&getcsec($asheet));
}
- &readsheet($sheetone,$ENV{'form.ufn'},$r);
- $ENV{'form.ufn'}=&getfilename($sheetone);
}
- if (&gettype($sheetone) eq 'classcalc') {
-# ---------------------------------- For course view: get courselist and update
- &updatestudentrows($sheetone);
- } else {
-# ----------------- For assessment and student: See if all import rows uptodate
+# ---------------------------------------------------------------- Course title
+
+ $r->print(''.
+ $ENV{'course.'.$ENV{'request.course.id'}.'.description'}.' ');
+
- if (tie(%parmhash,'GDBM_File',
- $ENV{'request.course.fn'}.'_parms.db',&GDBM_READER,0640)) {
- $csec=&Apache::lonnet::usection($udom,$uname,$ENV{'request.course.id'});
- if ($csec eq '-1') {
- $r->print(''.
- "User '$uname' at domain '$udom' not a student in this course ");
- }
- &updaterows($sheetone);
- untie(%parmhash);
- } else {
- $r->print(''.
- 'Could not initialize import fields (not in a course) ');
- }
- }
# ---------------------------------------------------- See if something to save
+
if (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'})) {
my $fname='';
if ($ENV{'form.saveas'} && ($fname=$ENV{'form.newfn'})) {
$fname=~s/\W/\_/g;
if ($fname eq 'default') { $fname='course_default'; }
- $fname.='_'.&gettype($sheetone);
- &setfilename($sheetone,$fname);
+ $fname.='_'.&gettype($asheet);
+ &setfilename($asheet,$fname);
$ENV{'form.ufn'}=$fname;
- my $reply=&writesheet($sheetone);
- unless ($reroute) {
- $r->print('Saving spreadsheet: '.$reply.'
');
- }
- if ($ENV{'form.makedefufn'}) {
- my $reply=&Apache::lonnet::reply('put:'.
- $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}.':'.
- $ENV{'course.'.$ENV{'request.course.id'}.'.num'}.
- ':environment:spreadsheet_default_'.
- &gettype($sheetone).'='.
- &Apache::lonnet::escape($fname),
- $ENV{'course.'.$ENV{'request.course.id'}.'.home'});
- unless ($reroute) {
- $r->print('
Making default spreadsheet: '.$reply.'
');
- }
- }
- }
+ $r->print('
Saving spreadsheet: '.
+ &writesheet($asheet,$ENV{'form.makedefufn'}).'
');
+ }
}
+
# ------------------------------------------------ Write the modified worksheet
- &tmpwrite($sheetone,$r->dir_config('lonDaemons').'/tmp/',
- $ENV{'form.usymb'});
+ $r->print('Current sheet: '.&getfilename($asheet).'
');
+
+ &tmpwrite($asheet);
+
+# ----------------------------------------------------------------- Save dialog
+
-# ----------------------------------------------------- Print user, course, etc
- unless ($reroute) {
if (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'})) {
my $fname=$ENV{'form.ufn'};
$fname=~s/\_[^\_]+$//;
@@ -1362,38 +1812,46 @@ ENDSCRIPT
' (make default: )
');
}
- $r->print(&hiddenfield('ufn',$ENV{'form.ufn'}));
- unless (&gettype($sheetone) eq 'classcalc') {
- $r->print('User: '.$uname.'Domain: '.$udom);
- }
- $r->print('
'.
- $ENV{'course.'.$ENV{'request.course.id'}.'.description'}.' ');
- if ($csec) {
- $r->print('Group/Section: '.$csec.' ');
- }
- }
-# -------------------------------------------------------- Import and calculate
- if (&gettype($sheetone) eq 'assesscalc') {
- &rowaassess($sheetone,$ENV{'form.usymb'});
- } elsif (&gettype($sheetone) eq 'studentcalc') {
- &rowazstudent($sheetone);
- } else {
- &rowazclass($sheetone);
- }
- my $calcoutput=&calcsheet($sheetone);
- unless ($reroute) {
- $r->print(''.$calcoutput.' ');
+ $r->print(&hiddenfield('ufn',&getfilename($asheet)));
+
+# --------------------------------------------------------------- Cached sheets
+
+ undef %oldsheets;
+ undef %loadedcaches;
+
+ if (&gettype($asheet) eq 'classcalc') {
+ $r->print("Loading previously calculated student sheets ... \n");
+ $r->rflush();
+ &cachedcsheets();
+ } elsif (&gettype($asheet) eq 'studentcalc') {
+ $r->print("Loading previously calculated assessment sheets ... \n");
+ $r->rflush();
+ &cachedssheets(&getuname($asheet),&getudom($asheet),
+ &getuhome($asheet));
}
-# ------------------------------------------------------- Print or export sheet
- unless ($reroute) {
- &outsheet($r,$sheetone);
+# ----------------------------------------------------- Update sheet, load rows
+ $r->print("Loaded sheet(s), updating rows ... \n");
+ $r->rflush();
+
+ &updatesheet($asheet);
+
+ $r->print("Updated rows, loading row data ... \n");
+ $r->rflush();
+
+ &loadrows($asheet,$r);
+
+ $r->print("Loaded row data, calculating sheet ... \n");
+ $r->rflush();
+
+ my $calcoutput=&calcsheet($asheet);
+ $r->print(''.$calcoutput.' ');
+
+ &outsheet($r,$asheet);
$r->print('');
- } else {
- $r->print(&exportrow($sheetone));
- }
+
# ------------------------------------------------------------------------ Done
} else {
# ----------------------------- Not in a course, or not allowed to modify parms
@@ -1402,23 +1860,8 @@ ENDSCRIPT
return HTTP_NOT_ACCEPTABLE;
}
return OK;
+
}
1;
__END__
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
500 Internal Server Error
Internal Server Error
The server encountered an internal error or
misconfiguration and was unable to complete
your request.
Please contact the server administrator at
root@localhost to inform them of the time this error occurred,
and the actions you performed just before this error.
More information about this error may be available
in the server error log.