--- loncom/interface/lonblockingmenu.pm 2015/04/15 03:28:19 1.14
+++ loncom/interface/lonblockingmenu.pm 2016/10/16 21:49:51 1.19
@@ -2,7 +2,7 @@
# Routines for configuring blocking of access to collaborative functions,
# and specific resources during an exam
#
-# $Id: lonblockingmenu.pm,v 1.14 2015/04/15 03:28:19 raeburn Exp $
+# $Id: lonblockingmenu.pm,v 1.19 2016/10/16 21:49:51 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -105,6 +105,19 @@ block (including deletion), or when a ne
=over
+=item &get_permission()
+
+Returns information about permission user has to set/modify exam
+blocking events.
+
+Inputs: None
+
+Outputs: 2
+ $readonly - true if modification of blocking events is prohibited.
+
+ $allowed - true if blocking events information can be shown.
+
+
=item &get_timed_items()
Provides perl data structure with information about timed interval
@@ -222,7 +235,7 @@ Side Effects: &update_released_required(
Generates web form elements used to display, cancel, or modify
existing blocking events.
-Inputs: 7
+Inputs: 8
- $r - Apache request object
- $records - Reference to hash of current blocks
@@ -238,6 +251,9 @@ Inputs: 7
- $blockcount - number of existing blocking events in course
+ - $readonly - if true, modification not allowed.
+
+
Output: None
Side Effects: prints web form elements (in a table) for current blocks.
@@ -422,11 +438,10 @@ sub handler {
# ----------------------------------------------------------- Permissions check
- unless ((&Apache::lonnet::allowed('dcm',$env{'request.course.id'})) ||
- (&Apache::lonnet::allowed('dcm',$env{'request.course.id'}.
- '/'.$env{'request.course.sec'}))) {
+ my ($readonly,$allowed) = &get_permission();
+ unless ($allowed) {
$env{'user.error.msg'}=
- "/adm/setblock:dcm:0:0:Cannot set blocking of communications in a course";
+ "/adm/setblock:dcm:0:0:Cannot view/set blocking of communications in a course";
return HTTP_NOT_ACCEPTABLE;
}
@@ -471,7 +486,7 @@ sub handler {
$r->print(&Apache::loncourserespicker::create_picker($navmap,
'examblock','resourceblocks',$crstype,
\%blockedmaps,\%blockedresources,
- $env{'form.block'}));
+ $env{'form.block'},'','',undef,$readonly));
} else {
$r->print($errormsg);
}
@@ -480,10 +495,12 @@ sub handler {
# -------------------------- Store changes and retrieve latest block information
my $storeresult;
- if ($env{'form.action'} eq 'store') {
- (my $numchanges,$storeresult) = &blockstore($r,$crstype,$blockcount,\%records);
- if ($numchanges > 0) {
- $blockcount = &get_blockdates(\%records);
+ unless ($readonly) {
+ if ($env{'form.action'} eq 'store') {
+ (my $numchanges,$storeresult) = &blockstore($r,$crstype,$blockcount,\%records);
+ if ($numchanges > 0) {
+ $blockcount = &get_blockdates(\%records);
+ }
}
}
@@ -561,6 +578,7 @@ sub handler {
'
'.&mt('accessing content in LON-CAPA portfolios or blogs').'
'."\n".
'
'.&mt("generating printouts of $lctype content").'
'.
'
'.&mt("accessing $lctype content in specified folders or resources").'
'.
+ '
'.&mt("changing user's own password").'
'.
''.
'
'.$lt{'blca'}.' '.$lt{'pobl'}.'
'
);
@@ -568,8 +586,10 @@ sub handler {
# ------------------------ Choose between modifying existing block or adding new
$r->print('
END
- $r->print(&Apache::loncommon::end_page());
+ }
+ $r->print(''.
+ &Apache::loncommon::end_page());
return OK;
}
+sub get_permission {
+ my %permission;
+ my $allowed = 0;
+ my $readonly = 0;
+ return ($readonly,$allowed) unless ($env{'request.course.id'});
+ if ((&Apache::lonnet::allowed('dcm',$env{'request.course.id'})) ||
+ (&Apache::lonnet::allowed('dcm',$env{'request.course.id'}.'/'.
+ $env{'request.course.sec'}))) {
+ $allowed = 1;
+ } elsif ((&Apache::lonnet::allowed('vcb',$env{'request.course.id'})) ||
+ (&Apache::lonnet::allowed('vcb',$env{'request.course.id'}.'/'.
+ $env{'request.course.sec'}))) {
+ $readonly = 1;
+ $allowed = 1;
+ }
+ return ($readonly,$allowed);
+}
+
sub get_timed_items {
my ($cdom,$cnum) = @_;
my ($cid,%intervals);
@@ -974,9 +1023,9 @@ sub check_release_required {
}
sub display_blocker_status {
- my ($r,$records,$ltext,$intervals,$navmap,$errormsg,$blockcount) = @_;
+ my ($r,$records,$ltext,$intervals,$navmap,$errormsg,$blockcount,$readonly) = @_;
my $parmcount = 0;
- my (%map_url,%resource_symb,%titles,%lookups);
+ my (%map_url,%resource_symb,%titles,%lookups,$disabled);
&Apache::loncourserespicker::enumerate_course_contents($navmap,\%map_url,\%resource_symb,\%titles,'examblock');
%{$lookups{'maps'}} = reverse(%map_url);
%{$lookups{'resources'}} = reverse(%resource_symb);
@@ -986,10 +1035,13 @@ sub display_blocker_status {
'noch' => 'No change',
);
$r->print('