version 1.4, 2009/07/27 11:30:05
|
version 1.7, 2010/02/19 10:20:03
|
Line 32 use strict;
|
Line 32 use strict;
|
use Apache::Constants qw(:common); |
use Apache::Constants qw(:common); |
use Apache::loncommon(); |
use Apache::loncommon(); |
use Apache::lonnet; |
use Apache::lonnet; |
use GDBM_File; |
|
use POSIX qw(strftime mktime); |
|
use Apache::lonmenu(); |
|
use Apache::lonenc(); |
|
use Apache::lonlocal; |
use Apache::lonlocal; |
use Apache::lonnet(); |
|
use HTML::Entities; |
|
use Apache::lonhtmlcommon(); |
|
use Apache::loncoursedata(); |
|
use Apache::lontexconvert(); |
|
use Apache::lonclonecourse(); |
|
use LONCAPA qw(:DEFAULT :match); |
|
use DateTime::TimeZone; |
|
use DateTime::Locale::Catalog; |
|
|
|
sub handler { |
sub handler { |
my $r = shift; |
my $r = shift; |
Apache::loncommon::no_cache($r); |
Apache::loncommon::no_cache($r); |
Apache::loncommon::content_type($r,'text/html'); |
Apache::loncommon::content_type($r,'text/html'); |
|
|
$r->send_http_header; |
$r->send_http_header; |
return OK if $r->header_only; |
return OK if $r->header_only; |
|
|
$r->print( |
$r->print( Apache::loncommon::start_page( |
Apache::loncommon::start_page( |
'Communication Blocking Status Information', |
'Communication Blocking Status Information', |
undef, {'only_body' => 1})); |
undef, {'only_body' => 1, })); |
|
Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['activity']); |
|
my ($blocked, $blocktext) = print_blocking_table($env{'form.activity'}); |
|
$r->print($blocktext); |
|
|
|
|
$r->print(blockpage()); |
|
|
$r->print(Apache::loncommon::end_page()); |
$r->print(Apache::loncommon::end_page()); |
|
|
return OK; |
return OK; |
} |
} |
sub print_blocking_table{ |
|
my ($activity,$uname,$udom) = @_; |
|
|
sub blockpage { |
|
|
|
# determine what kind of blocking we want details for |
|
Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['activity']); |
|
my $activity = $env{'form.activity'}; |
|
|
|
if ($activity !~ /^[a-z]+$/) { return 'Error'; } |
|
|
|
|
|
# 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') { |
|
Apache::loncommon::get_unprocessed_cgi( |
|
$ENV{'QUERY_STRING'}, ['udom', 'uname'] ); |
|
|
|
($uname, $udom) = ($env{'form.uname'}, $env{'form.udom'}); |
|
#TODO sanitize input: $uname, $udom |
|
} |
|
|
|
|
|
# retrieve start/end of possible active blocking |
my %setters; |
my %setters; |
my ($blocked,$output,$ownitem,$is_course); |
my ($startblock, $endblock) = Apache::loncommon::blockcheck( |
my ($startblock,$endblock)=&Apache::loncommon::blockcheck(\%setters,$activity,$uname,$udom); |
\%setters, $activity, $uname, $udom); |
if ($startblock && $endblock) { |
|
$blocked = 1; |
# nothing to do if there's no active blocking |
my $category; |
unless ($startblock && $endblock) { return ''; } |
if ($activity eq 'boards') { |
|
$category = 'Discussion posts in this course'; |
# lookup $activity -> description |
} elsif ($activity eq 'chat') { |
#possible activity #corresponding description |
$category = 'Chat'; |
my $description = |
} elsif ($activity eq 'msgdisplay') { |
$activity eq 'boards' ? 'Discussion posts in this course' |
$category = 'This message'; |
: $activity eq 'chat' ? 'Chat Room' |
} elsif ($activity eq 'blogs') { |
: $activity eq 'msgdisplay' ? 'This message' |
$category = 'Blogs'; |
: $activity eq 'blogs' ? 'Blogs' |
} elsif ($activity eq 'port') { |
: $activity eq 'groups' ? 'Groups in this course' |
if (defined($uname) && defined($udom)) { |
: $activity eq 'port' ? get_portfolio_category( |
if ($uname eq $env{'user.name'} && |
$uname, $udom, \%setters) |
$udom eq $env{'user.domain'}) { |
: 'Communication'; |
$ownitem = 1; |
|
} |
my $showstart = Apache::lonlocal::locallocaltime($startblock); |
} |
my $showend = Apache::lonlocal::locallocaltime($endblock); |
$is_course = &Apache::lonnet::is_course($udom,$uname); |
|
if ($ownitem) { |
my $output; |
$category = 'Your portfolio files'; |
|
} elsif ($is_course) { |
if ( ref($description) ne 'ARRAY' ) { |
my $coursedesc; |
#default: $description is one of the above descriptions |
foreach my $course (keys(%setters)) { |
$output = mt( $description |
my %courseinfo = |
. ' will be inaccessible between [_1] and [_2] because' |
&Apache::lonnet::coursedescription($course); |
. ' communication is being blocked.' |
$coursedesc = $courseinfo{'description'}; |
,$showstart, $showend); |
} |
} else { |
$category = "Group portfolio in the course '$coursedesc'"; |
# @$description is is the array returned from get_portfolio_category() |
} else { |
# and contains the description (e.g. "Portfolio files belonging to [_1]" |
$category = 'Portfolio files belonging to '; |
# and the value for [_1] |
if ($env{'user.name'} eq 'public' && |
$output = mt( $$description[0] |
$env{'user.domain'} eq 'public') { |
. ' will be inaccessible between [_2] and [_3] because' |
$category .= &plainname($uname,$udom); |
. ' communication is being blocked.' |
} else { |
,$$description[1], $showstart, $showend) |
$category .= &aboutmewrapper(&plainname($uname,$udom),$uname,$udom); |
} |
} |
|
} |
$output = "<p class=\"LC_info\">$output</p>"; |
} elsif ($activity eq 'groups') { |
|
$category = 'Groups in this course'; |
# show a table containing details, except if user is trying to look |
} else { |
# at a different user's portfolio files |
$category = 'Communication'; |
if ( $activity ne 'port' # no portfolio |
} |
|| ( $uname eq $env{'user.name'} # or own portfolio |
my $showstart = &Apache::lonlocal::locallocaltime($startblock); |
&& $udom eq $env{'user.domain'} ) |
my $showend = &Apache::lonlocal::locallocaltime($endblock); |
|| Apache::lonnet::is_course($udom, $uname) ) # or portfolio of a course |
$output = '<br />'.&mt('[_1] will be inaccessible between [_2] and [_3] because communication is being blocked.',$category,$showstart,$showend).'<br />'; |
{ |
if (!($activity eq 'port' && !($ownitem) && !($is_course))) { |
$output .= build_block_table($startblock,$endblock,\%setters); |
$output .= &Apache::loncommon::build_block_table($startblock,$endblock,\%setters); |
} |
|
|
|
return $output; |
|
} |
|
|
|
sub build_block_table { |
|
my ($startblock,$endblock,$setters) = @_; |
|
my %lt = &Apache::lonlocal::texthash( |
|
'cacb' => 'Currently active communication 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() |
|
. "<th>$lt{'cour'}</th> <th>$lt{'dura'}</th> <th>$lt{'blse'}</th>" |
|
. Apache::loncommon::end_data_table_header_row(); |
|
|
|
foreach my $course (keys(%{$setters})) { |
|
my %courseinfo=&Apache::lonnet::coursedescription($course); |
|
for (my $i=0; $i<@{$$setters{$course}{staff}}; $i++) { |
|
my ($uname,$udom) = @{$$setters{$course}{staff}[$i]}; |
|
my $fullname = Apache::loncommon::plainname($uname,$udom); |
|
if (defined($env{'user.name'}) && defined($env{'user.domain'}) |
|
&& $env{'user.name'} ne 'public' |
|
&& $env{'user.domain'} ne 'public') |
|
{ |
|
$fullname = Apache::loncommon::aboutmewrapper($fullname,$uname,$udom); |
} |
} |
|
my ($openblock,$closeblock) = @{$$setters{$course}{times}[$i]}; |
|
$openblock = &Apache::lonlocal::locallocaltime($openblock); |
|
$closeblock= &Apache::lonlocal::locallocaltime($closeblock); |
|
my $duration = mt('[_1] to [_2]', $openblock, $closeblock); |
|
$output .= Apache::loncommon::start_data_table_row() |
|
. "<td>$courseinfo{'description'}</td>" |
|
. "<td>$duration</td>" |
|
. "<td>$fullname</td>" |
|
. Apache::loncommon::end_data_table_row(); |
|
} |
} |
} |
return ($blocked,$output); |
$output .= Apache::loncommon::end_data_table(); |
} |
} |
|
|
1; |
sub get_portfolio_category { |
__END__ |
my ($uname, $udom, $setters) = @_; |
|
|
|
if ($uname eq $env{'user.name'} && $udom eq $env{'user.domain'}) { |
|
# user's portolfio files |
|
|
|
return 'Your portfolio files'; |
|
|
|
} elsif (Apache::lonnet::is_course($udom, $uname)) { |
|
# group portfolio files |
|
|
|
my $coursedesc; |
|
|
|
foreach my $course (keys(%{$setters})) { |
|
my %courseinfo = Apache::lonnet::coursedescription($course); |
|
$coursedesc = $courseinfo{'description'}; |
|
} |
|
|
|
return ["Group portfolio in the course '[_1]'", $coursedesc]; |
|
|
|
} else { |
|
# different user's portfolio files |
|
|
|
my $plainname = Apache::loncommon::plainname($uname, $udom); |
|
|
|
unless ( $env{'user.name'} eq 'public' |
|
&& $env{'user.domain'} eq 'public' ) |
|
{ |
|
$plainname = Apache::loncommon::aboutmewrapper( |
|
$plainname, $uname, $udom); |
|
} |
|
|
|
return ['Portfolio files belonging to [_1]', $plainname]; |
|
} |
|
} |
|
|
|
1; |
|
__END__ |