--- loncom/interface/Attic/lonspreadsheet.pm 2003/01/13 21:52:11 1.162 +++ loncom/interface/Attic/lonspreadsheet.pm 2003/02/13 19:07:46 1.168 @@ -1,5 +1,5 @@ # -# $Id: lonspreadsheet.pm,v 1.162 2003/01/13 21:52:11 matthew Exp $ +# $Id: lonspreadsheet.pm,v 1.168 2003/02/13 19:07:46 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -50,12 +50,434 @@ built-in functions. =cut + package Apache::lonspreadsheet; use strict; use Apache::Constants qw(:common :http); use Apache::lonnet; use Apache::lonhtmlcommon; +use HTML::Entities(); + +# --------------------------------------------------------- Various form fields + +sub textfield { + my ($title,$name,$value)=@_; + return "\n
$title:
".
+ '';
+}
+
+sub hiddenfield {
+ my ($name,$value)=@_;
+ return "\n".'';
+}
+
+sub selectbox {
+ my ($title,$name,$value,%options)=@_;
+ my $selout="\n
$title:
".'';
+}
+
+my %oldsheets;
+my %loadedcaches;
+
+# ================================================================ Main handler
+#
+# Interactive call to screen
+#
+#
+sub handler {
+ my $r=shift;
+
+ my ($sheettype) = ($r->uri=~/\/(\w+)$/);
+
+ if (! exists($ENV{'form.Status'})) {
+ $ENV{'form.Status'} = 'Active';
+ }
+ if ( ! exists($ENV{'form.output'}) ||
+ ($sheettype ne 'classcalc' &&
+ lc($ENV{'form.output'}) eq 'recursive excel')) {
+ $ENV{'form.output'} = 'HTML';
+ }
+ #
+ # 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
+ #
+ if ($r->header_only) {
+ $r->content_type('text/html');
+ $r->send_http_header;
+ return OK;
+ }
+ #
+ # Roles Checking
+ #
+ # Needs to be in a course
+ if (! $ENV{'request.course.fn'}) {
+ # Not in a course, or not allowed to modify parms
+ $ENV{'user.error.msg'}=
+ $r->uri.":opa:0:0:Cannot modify spreadsheet";
+ return HTTP_NOT_ACCEPTABLE;
+ }
+ #
+ # Get query string for limited number of parameters
+ #
+ &Apache::loncommon::get_unprocessed_cgi
+ ($ENV{'QUERY_STRING'},['uname','udom','usymb','ufn','mapid','resid']);
+ #
+ # Deal with restricted student permissions
+ #
+ if ($ENV{'request.role'} =~ /^st\./) {
+ delete $ENV{'form.unewfield'} if (exists($ENV{'form.unewfield'}));
+ delete $ENV{'form.unewformula'} if (exists($ENV{'form.unewformula'}));
+ }
+ #
+ # Look for special assessment spreadsheets - '_feedback', etc.
+ #
+ if (($ENV{'form.usymb'}=~/^\_(\w+)/) && (!$ENV{'form.ufn'} ||
+ $ENV{'form.ufn'} eq '' ||
+ $ENV{'form.ufn'} eq 'default')) {
+ $ENV{'form.ufn'}='default_'.$1;
+ }
+ if (!$ENV{'form.ufn'} || $ENV{'form.ufn'} eq 'default') {
+ $ENV{'form.ufn'}='course_default_'.$sheettype;
+ }
+ #
+ # Interactive loading of specific sheet?
+ #
+ if (($ENV{'form.load'}) && ($ENV{'form.loadthissheet'} ne 'Default')) {
+ $ENV{'form.ufn'}=$ENV{'form.loadthissheet'};
+ }
+ #
+ # Determine the user name and domain for the sheet.
+ my $aname;
+ my $adom;
+ unless ($ENV{'form.uname'}) {
+ $aname=$ENV{'user.name'};
+ $adom=$ENV{'user.domain'};
+ } else {
+ $aname=$ENV{'form.uname'};
+ $adom=$ENV{'form.udom'};
+ }
+ #
+ # 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;
+ #
+ # Header....
+ #
+ $r->print('