package EPrints::Plugin::Screen::REF::Report::REF1::Listing; use EPrints::Plugin::Screen::REF; @ISA = ( 'EPrints::Plugin::Screen::REF' ); use strict; our @STATS = ( total_users => sub { my( $s ) = @_; $_[1] = {} if !defined $_[1]; $_[1]{$s->value( "user_id" )}++; return scalar keys %{$_[1]}; }, ); sub new { my( $class, %params ) = @_; my $self = $class->SUPER::new(%params); $self->{appears} = [ { place => "ref_tools", position => 150, } ]; return $self; } sub can_be_viewed { my( $self ) = @_; return 0 if !defined $self->current_benchmark; my $user = $self->{session}->current_user; return 1 if( defined $user && $user->exists_and_set( 'ref_uoa_role' ) ); return 0; } # must be merged into Plugin::Screen::Report.pm sub render { my( $self ) = @_; my $session = $self->{session}; my $benchmark = $self->{processor}->{benchmark}; my $chunk = $session->make_doc_fragment; my $user = $session->current_user; my $ref_roles = $user->get_value( 'ref_uoa_role' ); return $chunk unless( EPrints::Utils::is_set( $ref_roles ) ); # render current benchmark $chunk->appendChild( $self->render_benchmarks ); my $container = $session->make_element( 'div', align => 'center', style => 'width:100%;text-align:center' ); $chunk->appendChild( $container ); my $table = $session->make_element( 'table', style=> 'margin-left:auto;margin-right:auto;' ); $container->appendChild( $table ); my $tr = $table->appendChild( $session->make_element( "tr" ) ); my $th = $tr->appendChild( $session->make_element( "th" ) ); foreach my $id (map { $STATS[$_] } grep { $_ % 2 == 0 } 0..$#STATS) { my $th = $tr->appendChild( $session->make_element( "th" ) ); $th->appendChild( $session->html_phrase( "ref:stat_$id" ) ); } # link to the available reports foreach my $uoa ( @$ref_roles ) { my $subject = $session->dataset( 'subject' )->dataobj( $uoa ); next if !defined $subject; $table->appendChild( $self->render_result_row( $subject ) ); } return $chunk; } sub render_result_row { my( $self, $subject ) = @_; my $session = $self->{session}; my $benchmark = $self->{processor}->{benchmark}; my $href = URI->new( $session->config( "userhome" ) ); $href->query_form( screen => "REF::Report::REF1::View", uoa => $subject->id, ); my $link = $session->render_link( $href ); my @ctx = map { undef } @STATS; my %results; $benchmark->uoa_selections( $subject )->map(sub { (undef, undef, my $selection) = @_; # perform the compound AND my $ok = 0; for(@{$selection->value( "ref" )}) { $ok = 1, last if $_->{benchmarkid} == $benchmark->id && $_->{uoa} eq $subject->id; } return if !$ok; foreach my $i (grep { $_ % 2 == 0 } 0..$#STATS) { my( $id, $f ) = @STATS[$i,$i+1]; $results{$id} = &$f( $selection, $ctx[$i] ); } }); my $tr = $session->make_element( "tr" ); # title { my $td = $tr->appendChild( $session->make_element( "td" ) ); $link->appendChild( $subject->render_description ); $td->appendChild( $link ); } foreach my $id (map { $STATS[$_] } grep { $_ % 2 == 0 } 0..$#STATS) { my $td = $tr->appendChild( $session->make_element( "td" ) ); $td->appendChild( $session->make_text( $results{$id} || '0' ) ); } return $tr; } 1;