# The LearningOnline Network with CAPA
# displays the blocking status table
#
# $Id: lonblockingstatus.pm,v 1.13 2016/01/27 00:24:09 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
# This file is part of the LearningOnline Network with CAPA (LON-CAPA).
#
# LON-CAPA is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# LON-CAPA is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with LON-CAPA; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# /home/httpd/html/adm/gpl.txt
#
# http://www.lon-capa.org/
#
#
package Apache::lonblockingstatus;
use strict;
use Apache::Constants qw(:common);
use Apache::loncommon();
use Apache::lonnet;
use Apache::lonlocal;
use LONCAPA qw(:DEFAULT :match);
sub handler {
my $r = shift;
&Apache::loncommon::no_cache($r);
&Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
return OK if $r->header_only;
my (%activities,$activity,$origurl);
map { $activities{$_} = 1; } ('boards','chat','msgdisplay','blogs','groups','port','printout','docs','passwd');
# determine what kind of blocking we want details for
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['activity','url']);
$activity = $env{'form.activity'};
my $title = 'Communication Blocking Status Information';
if (($activity eq 'docs') || ($activity eq 'printout')) {
$title = 'Blocking Status Information';
$origurl = $env{'form.url'};
}
$r->print(&Apache::loncommon::start_page($title,undef,
{'only_body' => 1}));
if (($activity eq '') || (!$activities{$activity})) {
$r->print(''.&mt('Error: unknown activity type blocked').'');
} else {
$r->print(&blockpage($activity,$origurl));
}
$r->print(&Apache::loncommon::end_page());
return OK;
}
sub blockpage {
my ($activity,$origurl) = @_;
# in case of a portfolio block we need to determine the owner of the files
# we're trying to look at. This information is passed via query string.
my ($uname, $udom);
if (($activity eq 'port') ||
(($activity eq 'passwd') && ($env{'user.name'} eq 'public') && ($env{'user.domain'} eq 'public'))) {
&Apache::loncommon::get_unprocessed_cgi(
$ENV{'QUERY_STRING'}, ['udom', 'uname'] );
($uname, $udom) = ($env{'form.uname'}, $env{'form.udom'});
if (($uname !~ /^$match_username$/) || ($udom !~ /^$match_domain$/)) {
if ($activity eq 'port') {
return ''.
&mt('Information about the owner of the portfolio files you were trying to view was missing or invalid.').
'
'.
&mt('Without valid owner information, the reason why access is blocked can not be determined');
} else {
return ''.
&mt('Information about the username and/or domain for which you were trying to reset a password was missing or invalid.').
'
'.
&mt('Without valid information, the reason why access is blocked can not be determined');
}
}
}
# retrieve start/end of possible active blocking
my %setters;
my ($startblock,$endblock,$triggerblock) =
&Apache::loncommon::blockcheck(\%setters,$activity,$uname,$udom,$origurl);
# nothing to do if there's no active blocking
unless ($startblock && $endblock) { return ''; }
# lookup $activity -> description
#possible activity #corresponding description
my %descs = (
boards => 'Discussion posts in this course',
chat => 'Chat Room',
msgdisplay => 'This message',
blogs => 'Blogs',
groups => 'Groups in this course',
printout => 'Printout generation',
docs => 'Course Content',
passwd => 'Changing of passwords',
);
if ($activity eq 'groups' || $activity eq 'boards') {
if (&Apache::loncommon::course_type() eq 'Community') {
$descs{'boards'} = 'Discussion posts in this community',
$descs{'groups'} = 'Groups in this community',
$descs{'docs'} = 'Community Content',
}
}
my $description = $descs{$activity};
if ($activity eq 'port') {
$description = &get_portfolio_category($uname,$udom,\%setters);
}
if ($description eq '') {
$description = 'Communication';
}
my $showstart = Apache::lonlocal::locallocaltime($startblock);
my $showend = Apache::lonlocal::locallocaltime($endblock);
my $output;
if ( ref($description) ne 'ARRAY' ) {
#default: $description is one of the above descriptions
if ($activity eq 'docs') {
$output=&mt( 'Access to the content page you are attempting to'
. ' view will be unavailable between [_1] and [_2] because'
. ' access to selected '.$description.' is being blocked.'
,$showstart, $showend);
} elsif (($activity eq 'printout') || ($activity eq 'passwd')) {
$output = mt( $description
. ' will be unavailable between [_1] and [_2] because'
. ' this functionality is being blocked.'
,$showstart, $showend);
} else {
$output = mt( $description
. ' will be inaccessible between [_1] and [_2] because'
. ' communication is being blocked.'
,$showstart, $showend);
}
} else {
# @$description is is the array returned from get_portfolio_category()
# and contains the description (e.g. "Portfolio files belonging to [_1]"
# and the value for [_1]
$output = mt( $$description[0]
. ' will be inaccessible between [_2] and [_3] because'
. ' communication is being blocked.'
,$$description[1], $showstart, $showend)
}
$output = "
$output
"; # show a table containing details, except if user is trying to look # at a different user's portfolio files if ( $activity ne 'port' # no portfolio || ( $uname eq $env{'user.name'} # or own portfolio && $udom eq $env{'user.domain'} ) || Apache::lonnet::is_course($udom, $uname) ) # or portfolio of a course { $output .= &build_block_table(\%setters); } return $output; } sub build_block_table { my ($setters) = @_; my %lt = &Apache::lonlocal::texthash( 'cacb' => 'Currently active communication/content blocks', 'cour' => 'Course', 'dura' => 'Duration', 'blse' => 'Block set by' ); my $output; $output = Apache::loncommon::start_data_table() . Apache::loncommon::data_table_caption($lt{'cacb'}) . Apache::loncommon::start_data_table_header_row() . "