@@ -198,16 +204,6 @@ END
sub handler {
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
#
if ($r->header_only) {
@@ -219,81 +215,114 @@ 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'};
+ 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 students to continue if standard or external grading is in
- # effect.
+ # Do not allow users without vgr or mgr priv to continue unless
+ # grading type is set to spreadsheet.
#
- if ($ENV{'request.role'} =~ /^st\./) {
- if ($ENV{'course.'.$courseid.'.grading'} eq 'standard' ||
- $ENV{'course.'.$courseid.'.grading'} eq 'external' ) {
- return HTTP_NOT_ACCEPTABLE;
+
+ 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
#
&Apache::loncommon::get_unprocessed_cgi
- ($ENV{'QUERY_STRING'},['sname','sdomain','usymb','filename','recalc']);
+ ($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'};
+ my $warning;
+ if (exists($env{'form.sname'}) && $env{'form.sname'} ne '') {
+ 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'});
+ }
+ }
}
- ##
- ## 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.
+ $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'});
}
+
#
# Only those able to view others grades will be allowed to continue
# if they are not requesting their own.
if ($sheettype eq 'classcalc') {
- if (! $allowed_to_view) {
- $ENV{'user.error.msg'}=
- $r->uri.":vgr:0:0:Access Permission Denied";
- return HTTP_NOT_ACCEPTABLE;
+ if (!$allowed_to_view) {
+ $r->internal_redirect('/adm/studentcalc');
+ return OK;
}
}
- if ((($name ne $ENV{'user.name'} ) ||
- ($domain ne $ENV{'user.domain'})) && $sheettype ne 'classcalc') {
+ 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'}=
+ 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;
}
@@ -310,20 +339,33 @@ sub handler {
#
# Header....
#
- $r->print('LON-CAPA Spreadsheet');
my $nothing = &Apache::lonhtmlcommon::javascript_nothing();
##
## Spit out the javascript required for editing
##
+ my $js;
if ($allowed_to_edit) {
- my %lt=(
+ my %lt=&Apache::lonlocal::texthash(
'ce' => 'Cell',
- 'ac' => 'Accept',
- 'dc' => 'Discard Changes'
+ 'ac' => 'Save',
+ 'dc' => 'Cancel'
);
my $extra_javascript =
&Apache::loncommon::browser_and_searcher_javascript();
- $r->print(< 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
}
- $r->print(''.&Apache::loncommon::bodytag('Grades Spreadsheet').
- &Apache::loncommon::help_open_faq(134).
- &Apache::loncommon::help_open_bug('Spreadsheet').
- '
');
}
$r->print('');
@@ -493,9 +570,9 @@ END
$r->print(&hiddenfield('filename',$filename));
#
# 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());
if ($allowed_to_view || $allowed_to_edit) {
$r->print($spreadsheet->parent_link());
@@ -503,7 +580,10 @@ END
$r->rflush();
$spreadsheet->display($r);
}
- $r->print('