--- loncom/interface/spreadsheet/lonspreadsheet.pm 2003/06/19 16:04:06 1.13
+++ loncom/interface/spreadsheet/lonspreadsheet.pm 2006/05/01 19:30:10 1.48
@@ -1,5 +1,5 @@
#
-# $Id: lonspreadsheet.pm,v 1.13 2003/06/19 16:04:06 matthew Exp $
+# $Id: lonspreadsheet.pm,v 1.48 2006/05/01 19:30:10 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -54,12 +54,16 @@ built-in functions.
package Apache::lonspreadsheet;
use strict;
+use warnings FATAL=>'all';
+no warnings 'uninitialized';
use Apache::classcalc();
use Apache::studentcalc();
use Apache::assesscalc();
use Apache::Constants qw(:common :http);
use Apache::lonnet;
use Apache::lonhtmlcommon;
+use Apache::lonlocal;
+use Apache::loncoursedata();
use HTML::Entities();
##
@@ -68,8 +72,8 @@ use HTML::Entities();
sub textfield {
my ($title,$name,$value)=@_;
- return "\n
$title: ".
- '';
+ return "\n
$title: ".
+ '';
}
sub hiddenfield {
@@ -79,11 +83,11 @@ sub hiddenfield {
sub selectbox {
my ($title,$name,$value,%options)=@_;
- my $selout="\n
$title: ".'\n
\n\n";
#
$result .=<
+
+ -->
@@ -180,6 +189,9 @@ END
+
END
return ($result,$message);
}
@@ -194,13 +206,13 @@ sub handler {
if ($loaderror) { return $loaderror; }
# Check the course homeserver
$loaderror= &Apache::lonnet::overloaderror($r,
- $ENV{'course.'.$ENV{'request.course.id'}.'.home'});
+ $env{'course.'.$env{'request.course.id'}.'.home'});
# if ($loaderror) { return $loaderror; }
#
# HTML Header
#
if ($r->header_only) {
- $r->content_type('text/html');
+ &Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
return OK;
}
@@ -208,54 +220,72 @@ sub handler {
# Roles Checking
#
# 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
- $ENV{'user.error.msg'}=
+ $env{'user.error.msg'}=
$r->uri.":opa:0:0:Cannot modify spreadsheet";
return HTTP_NOT_ACCEPTABLE;
}
+ my $courseid = $env{'request.course.id'};
+ #
+ # Do not allow students to continue if standard or external grading is in
+ # effect.
+ #
+ if ($env{'request.role'} =~ /^st\./) {
+ if ($env{'course.'.$courseid.'.grading'} eq 'standard' ||
+ $env{'course.'.$courseid.'.grading'} eq 'external' ) {
+ return HTTP_NOT_ACCEPTABLE;
+ }
+ }
#
# Get query string for limited number of parameters
#
&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
#
- if ($ENV{'request.role'} =~ /^st\./) {
- delete $ENV{'form.cell'} if (exists($ENV{'form.cell'}));
- delete $ENV{'form.newformula'} if (exists($ENV{'form.newformula'}));
+ if ($env{'request.role'} =~ /^st\./) {
+ delete $env{'form.cell'} if (exists($env{'form.cell'}));
+ delete $env{'form.newformula'} if (exists($env{'form.newformula'}));
}
#
# Determine basic information about the spreadsheet
my ($sheettype) = ($r->uri=~/\/(\w+)$/);
#
my $symb = undef;
- $symb = $ENV{'form.usymb'} if (exists($ENV{'form.usymb'}));
- my $name = $ENV{'user.name'};
- my $domain = $ENV{'user.domain'};
- if (exists($ENV{'form.sname'})) {
- $name = $ENV{'form.sname'};
- $domain = $ENV{'form.sdomain'};
+ $symb = $env{'form.usymb'} if (exists($env{'form.usymb'}));
+ my $name = $env{'user.name'};
+ my $domain = $env{'user.domain'};
+ if (exists($env{'form.sname'}) && $env{'form.sname'} ne '') {
+ $name = $env{'form.sname'};
+ $domain = $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'});
+ $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'});
+ $env{'request.course.id'});
if (! $allowed_to_view) {
$allowed_to_view = &Apache::lonnet::allowed('vgr',
- $ENV{'request.course.id'}.'/'.$ENV{'request.course.sec'});
+ $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.
@@ -265,41 +295,60 @@ sub handler {
# if they are not requesting their own.
if ($sheettype eq 'classcalc') {
if (! $allowed_to_view) {
- $r->print('