Difference between revisions of "Contribute: Plugins/ExportPluginsList"

From EPrints Documentation
Jump to: navigation, search
(Filehandles: Bringing code in line.)
(Dealing With Lists)
Line 73: Line 73:
  
 
=== Dealing With Lists ===
 
=== Dealing With Lists ===
 +
In this example we override the output_list subroutine in our export plugin to provide column headers. The original subroutine merely concatenates the output from the output_dataobj subroutine called on every DataObj in the list. If you try using the code below it will work from the web interface, however if you try to use the plugin through the command line export script you won't get any output.
 +
 +
 
<pre>
 
<pre>
 
sub output_list
 
sub output_list

Revision as of 12:23, 14 August 2007

Export Plugin Tutorial 2: Hello, Lists

In this tutorial you will learn to create a slightly more complex export plugin than the one created in the previous tutorial by overriding the default handling of lists.

HelloList.pm

The code in the section below should be placed in a file called HelloList.pm in the directory created previously, and MyPlugins should be changed to the name of that directory.

package EPrints::Plugin::Export::MyPlugins::HelloList;

@ISA = ("EPrints::Plugin::Export");

use strict;

sub new
{
        my ($class, %opts) = @_;

        my $self = $class->SUPER::new(%opts);

        $self->{name} = "Hello, List!";
        $self->{accept} = [ 'dataobj/eprint', 'list/eprint' ];
        $self->{visible} = "all";
        $self->{suffix} = ".txt";
        $self->{mimetype} = "text/plain; charset=utf-8";

        return $self;
}

sub output_dataobj
{
        my ($plugin, $dataobj) = @_;

        return $dataobj->get_id()."\t".$dataobj->get_value("title")."\n";
}

sub output_list
{
        my ($plugin, %opts) = @_;

        my $output = "";

        $output .= "ID\tTitle\n\n";

        foreach my $dataobj ($opts{"list"}->get_records)
        {
                $output .= $plugin->output_dataobj($dataobj, %opts);
        }

        return $output;
}

1;

In More Detail

The above code is very similar to the HelloExport.pm file in the previous tutorial so only the points where it deviates significantly from that file will be discussed below.

Housekeeping

The package name has been changed to reflect the filename.

package EPrints::Plugin::Export::Foo::HelloList;

Constructor

Make sure you give each plugin a unique name.

        $self->{name} = "Hello, List!";

Dealing With Lists

In this example we override the output_list subroutine in our export plugin to provide column headers. The original subroutine merely concatenates the output from the output_dataobj subroutine called on every DataObj in the list. If you try using the code below it will work from the web interface, however if you try to use the plugin through the command line export script you won't get any output.


sub output_list
{
        my ($plugin, %opts) = @_;

        my $output = "";

        $output .= "ID\tTitle\n\n";

        foreach my $dataobj ($opts{"list"}->get_records)
        {
                $output .= $plugin->output_dataobj($dataobj, %opts);
        }

        return $output;
}

1;

Filehandles

sub output_list
{
        my ($plugin, %opts) = @_;

        my $r = [];

        my $header = "ID\tTitle\n\n";
        if (defined $opts{"fh"})
        {
                print {$opts{fh}} $header;
        }
        else
        {
                push @{$r}, $header;
        }

        foreach my $dataobj ($opts{"list"}->get_records)
        {
                my $part = $plugin->output_dataobj($dataobj, %opts);
                if (defined $opts{"fh"})
                {
                        print {$opts{fh}} $part;
                }
                else
                {
                        push @{$r}, $part;
                }
        }

        if (defined $opts{"fh"})
        {
                return undef;
        }
        return join('', @{$r});
}