=head1 NAME
EPrints::Plugin::Issues2
=cut
package EPrints::Plugin::Issues2;
use strict;
our @ISA = qw/ EPrints::Plugin /;
$EPrints::Plugin::Issues2::DISABLE = 1;
sub matches
{
my( $self, $test, $param ) = @_;
if( $test eq "is_available" )
{
return( $self->is_available() );
}
# didn't understand this match
return $self->SUPER::matches( $test, $param );
}
sub is_available
{
my( $self ) = @_;
return 1;
}
# return all issues on this set, as a hash keyed on eprintid.
sub list_issues
{
my( $plugin, %opts ) = @_;
my $info = { issues => {}, opts=>\%opts };
$opts{list}->map(
sub {
my( $session, $dataset, $item, $info ) = @_;
my @issues = $plugin->process_item_in_list( $item, $info );
},
$info
);
$plugin->process_at_end( $info );
return $info->{issues};
}
# this is used to add any additional issues based on cumulative information
sub process_at_end
{
my( $plugin, $info, $subject_id ) = @_;
my $session = $plugin->{session};
foreach my $code ( keys %{$info->{ $plugin->{fieldmap} }} )
{
my @set = @{$info->{ $plugin->{fieldmap} }->{$code}};
next unless scalar @set > 1;
foreach my $id ( @set )
{
my $eprint = EPrints::DataObj::EPrint->new( $session, $id );
my $desc = $session->make_doc_fragment;
$desc->appendChild( $session->make_text( "Duplicate " ) );
$desc->appendChild( $session->html_phrase( "eprint_fieldname_" . $plugin->{field} ) );
$desc->appendChild( $session->make_text( " to " ) );
$desc->appendChild( $eprint->render_citation_link_staff( "brief" ) );
$desc->appendChild( $eprint->render_citation_link_staff( "brief_info" ) );
$desc->appendChild( $session->make_text( "[ " ) );
my $retire = $session->make_element( "a", href=>"#", "onclick" => "return issues2_retire( $id );", class => "ep_issues2_retire" );
$retire->appendChild( $session->make_text( "Manage" ) );
$desc->appendChild( $retire ); # unless $eprint->get_value("eprint_status") eq "deletion";
$desc->appendChild( $session->make_text( " ]" ) );
if ( $eprint->get_value("eprint_status") ne "deletion" )
{
my $compare = $session->make_element( "a", href=>"#", "onclick" => "return issues2_compare( \$(this).up(3).readAttribute('eprintid'), $id );", "class" => "ep_issues2_compare" );
$compare->appendChild( $session->make_text( "Compare" ) );
$desc->appendChild( $session->make_text( " [ " ) );
$desc->appendChild( $compare );
$desc->appendChild( $session->make_text( " ]" ) );
}
my $ack = $session->make_element( "a", href=>"#",
"onclick" => "if( issues2_ack( \$(this).up(3).readAttribute('eprintid'), \$(this).up(1).readAttribute('ep_issue_list_id')) ) { \$(this).up(1).setStyle( { 'font-style': 'italic', 'color': '#bbbbbb' } ); }",
"class" => "ep_issues2_ack"
);
$ack->appendChild( $session->make_text( "Acknowledge" ) );
$desc->appendChild( $session->make_text( " [ " ) );
$desc->appendChild( $ack );
$desc->appendChild( $session->make_text( " ]" ) );
OTHER: foreach my $id2 ( @set )
{
next OTHER if $id == $id2;
push @{$info->{issues}->{$id2}}, {
type => $plugin->{type},
id => $plugin->{type} . "_" . $id,
description => $desc,
};
}
}
}
}
# normalise the input before comparisons, eg lowercase it and remove excess white space
sub normalise
{
my( $plugin, $string ) = @_;
return $string;
}
# info is the data block being used to store cumulative information for processing at the end.
sub process_item_in_list
{
my( $plugin, $item, $info ) = @_;
my $value = $item->get_value( $plugin->{field} );
return if !defined $value;
$value = $plugin->normalise( $value );
return if !defined $value;
push @{ $info->{ $plugin->{fieldmap} }->{ $value } }, $item->get_id;
}
# return an array of issues. Issues should be of the type
# { description=>XHTMLDOM, type=>string }
# if one item can have multiple occurances of the same issue type then add
# an id field too. This only need to be unique within the item.
sub item_issues
{
my( $plugin, $dataobj ) = @_;
return ();
}
1;
=head1 COPYRIGHT
=for COPYRIGHT BEGIN
Copyright 2000-2011 University of Southampton.
=for COPYRIGHT END
=for LICENSE BEGIN
This file is part of EPrints L.
EPrints is free software: you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
EPrints 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 Lesser General Public
License for more details.
You should have received a copy of the GNU Lesser General Public
License along with EPrints. If not, see L.
=for LICENSE END