--- loncom/interface/spreadsheet/lonspreadsheet.pm 2006/10/31 18:35:51 1.49 +++ loncom/interface/spreadsheet/lonspreadsheet.pm 2020/08/10 19:28:21 1.66 @@ -1,5 +1,5 @@ # -# $Id: lonspreadsheet.pm,v 1.49 2006/10/31 18:35:51 albertel Exp $ +# $Id: lonspreadsheet.pm,v 1.66 2020/08/10 19:28:21 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -64,6 +64,7 @@ use Apache::lonnet; use Apache::lonhtmlcommon; use Apache::lonlocal; use Apache::loncoursedata(); +use Apache::lonquickgrades(); use HTML::Entities(); ## @@ -73,12 +74,12 @@ use HTML::Entities(); sub textfield { my ($title,$name,$value)=@_; return "\n
$title:
".
- '';
+ '';
}
sub hiddenfield {
my ($name,$value)=@_;
- return ''."\n";
+ return ''."\n";
}
sub selectbox {
@@ -86,7 +87,7 @@ sub selectbox {
my $selout="\n
$title:
".'';
@@ -106,10 +107,13 @@ sub file_dialogs {
$spreadsheet->filename($env{'form.savefilename'});
my $save_status = $spreadsheet->save();
if ($save_status ne 'ok') {
- $message .= "An error occurred while saving the spreadsheet".
- "There error is:".$save_status;
+ $message .= ''.
+ &mt('An error occurred while saving the spreadsheet. The error is: [_1].',
+ $save_status).'';
} else {
- $message .= "Spreadsheet saved as ".$spreadsheet->filename();
+ $message .= ''.&mt('Spreadsheet saved as: [_1] .',
+ ''.$spreadsheet->filename().'').
+ '';
}
} elsif (exists($env{'form.newformula'}) &&
exists($env{'form.cell'}) &&
@@ -140,13 +144,13 @@ sub file_dialogs {
if ($spreadsheet->is_default()) {
$filename = 'Default';
}
- my $save_dialog = '
-
- $link
+ $link
\n\n";
#
+ my $headline = &mt('File Dialogs');
$result .=<
\n
@@ -199,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) {
@@ -226,15 +221,61 @@ sub handler {
$r->uri.":opa:0:0:Cannot modify spreadsheet";
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 students to continue if standard or external grading is in
- # effect.
+ # Check if display of course gradebook is blocked
#
- if ($env{'request.role'} =~ /^st\./) {
- if ($env{'course.'.$courseid.'.grading'} eq 'standard' ||
- $env{'course.'.$courseid.'.grading'} eq 'external' ) {
- return HTTP_NOT_ACCEPTABLE;
+
+ if ($env{'request.course.id'}) {
+ my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+ my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+ my ($blocked,$blocktext) =
+ &Apache::loncommon::blocking_status('grades',$cnum,$cdom);
+ if ($blocked) {
+ my $checkrole = "cm./$cdom/$cnum";
+ if ($env{'request.course.sec'} ne '') {
+ $checkrole .= "/$env{'request.course.sec'}";
+ }
+ unless ((&Apache::lonnet::allowed('evb',undef,undef,$checkrole)) &&
+ ($env{'request.role'} !~ m{^st\./$cdom/$cnum})) {
+ &Apache::lonquickgrades::grades_blocked($r,$blocktext,'spreadsheet');
+ return OK;
+ }
+ }
+ }
+
+ #
+ # 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;
}
}
#
@@ -252,15 +293,26 @@ sub handler {
}
#
# 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'};
+ my $warning;
if (exists($env{'form.sname'}) && $env{'form.sname'} ne '') {
- $name = $env{'form.sname'};
- $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;
@@ -275,29 +327,13 @@ sub handler {
$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.
- }
#
# 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'} ) ||
@@ -331,18 +367,23 @@ sub handler {
##
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();
+ my $cell_extra_js = &Apache::loncommon::resize_textarea_js();
my $cell_edit_start =
- &Apache::loncommon::start_page('Cell Edit Window',undef,
+ &Apache::loncommon::start_page('Cell Edit Window',$cell_extra_js,
{'only_body' => 1,
- 'js_ready' => 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,});
@@ -358,13 +399,14 @@ sub handler {
// cellformula may contain less-than and greater-than symbols, so
// we need to escape them?
edit_text +='$cell_edit_start';
- edit_text += '$cell_edit_end';
if (editwin != null && !(editwin.closed) ) {
editwin.close();
@@ -383,6 +425,7 @@ sub handler {
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.close();
}
//-->
@@ -397,8 +440,20 @@ ENDSCRIPT
bug => 'Spreadsheet'});
$r->print(&Apache::loncommon::start_page('Grades Spreadsheet',$js).
&Apache::lonhtmlcommon::breadcrumbs('Spreadsheet',
- 'Spreadsheet_About').
- '
\n");
if ($action_message ne '') {
- $r->print(<
-
-END
+ $r->print(
+ &Apache::loncommon::confirmwrapper(
+ &mt('Last Action:')
+ .$action_message)
+ );
}
$r->rflush();
} else {
@@ -525,13 +577,13 @@ END
if ($allowed_to_view) {
$r->print('Last Action:
-
- $action_message
-'.
&Apache::loncommon::help_open_topic("Spreadsheet_About",
- 'Spreadsheet Help').
+ &mt('Spreadsheet Help')).
' ');
}
if ($allowed_to_edit) {
$r->print(''.
&Apache::loncommon::help_open_topic("Spreadsheet_Editing",
- 'Editing Help').
+ &mt('Editing Help')).
' ');
}
$r->print('');
@@ -540,7 +592,7 @@ 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') {
$r->print($spreadsheet->get_html_title());
@@ -550,7 +602,9 @@ END
$r->rflush();
$spreadsheet->display($r);
}
- $r->print(''.&Apache::loncommon::end_page());
+ $r->print('');
+ &Apache::lonquickgrades::endGradeScreen($r);
+ $r->print(&Apache::loncommon::end_page());
$spreadsheet->clear_package();
return OK;
}