<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://wiki.eprints.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pm705</id>
	<title>EPrints Documentation - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.eprints.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pm705"/>
	<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/Special:Contributions/Pm705"/>
	<updated>2026-04-13T08:33:09Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.8</generator>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Core_API&amp;diff=11977</id>
		<title>Core API</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Core_API&amp;diff=11977"/>
		<updated>2016-04-18T13:29:17Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* Repository */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{API}}&lt;br /&gt;
[[Category:API]]&lt;br /&gt;
&lt;br /&gt;
The core API was introduced in EPrints 3.2.0 and is intended to provide a clean and consistent programming interface to the EPrints system. &lt;br /&gt;
&lt;br /&gt;
Not all essential functionality is yet available in the new API, as we've only included functions which we are confident we can keep stable for a number of versions. &lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
 use EPrints;&lt;br /&gt;
 my $ep = EPrints-&amp;gt;new();&lt;br /&gt;
 my $repo = $ep-&amp;gt;repository( &amp;quot;myrepo&amp;quot; );&lt;br /&gt;
 my $an_eprint = $repo-&amp;gt;eprint( 23 );&lt;br /&gt;
&lt;br /&gt;
=== EPrints ===&lt;br /&gt;
 $ep = EPrints-&amp;gt;new();&lt;br /&gt;
 @ids = $ep-&amp;gt;repository_ids; # list active repository ids&lt;br /&gt;
 $repo = $ep-&amp;gt;repository( &amp;quot;devel&amp;quot;, noise=&amp;gt;1 );&lt;br /&gt;
 $repo = $ep-&amp;gt;current_repository(); # from Apache::Request URI&lt;br /&gt;
 EPrints-&amp;gt;abort( $message );&lt;br /&gt;
&lt;br /&gt;
=== Repository ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
$xml = $repo-&amp;gt;xml;&lt;br /&gt;
$dataset = $repo-&amp;gt;dataset( &amp;quot;user&amp;quot; );&lt;br /&gt;
$user = $repo-&amp;gt;current_user;&lt;br /&gt;
$query = $repo-&amp;gt;query;&lt;br /&gt;
$current_page_url = $repo-&amp;gt;current_url( host =&amp;gt; 1, path =&amp;gt; 1, query =&amp;gt; 1, etc. );&lt;br /&gt;
$config_element = $repo-&amp;gt;config( $key, [@subkeys] );&lt;br /&gt;
$repository-&amp;gt;log( $message ); &lt;br /&gt;
$string = $repo-&amp;gt;query-&amp;gt;param( &amp;quot;X&amp;quot; );&lt;br /&gt;
$repo-&amp;gt;redirect( $url );&lt;br /&gt;
$eprint = $repo-&amp;gt;eprint( 23 );&lt;br /&gt;
$user = $repo-&amp;gt;user( 23 );&lt;br /&gt;
$user = $repo-&amp;gt;user_by_username( &amp;quot;cjg&amp;quot; );&lt;br /&gt;
$user = $repo-&amp;gt;user_by_email( 'cjg@ecs.soton.ac.uk' );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dataset ===&lt;br /&gt;
 $dataset = $repo-&amp;gt;dataset( &amp;quot;eprint&amp;quot; )&lt;br /&gt;
 $string = $dataset-&amp;gt;base_id; # eprint&lt;br /&gt;
 $string = $dataset-&amp;gt;id; # inbox&lt;br /&gt;
 &lt;br /&gt;
 $repo = $dataobj-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $dataobj = $dataset-&amp;gt;create_dataobj( $data );&lt;br /&gt;
 $eprint = $dataset-&amp;gt;dataobj( 23 );&lt;br /&gt;
 &lt;br /&gt;
 %options = (filters =&amp;gt; [ { meta_fields =&amp;gt; [ 'contributors_id' ], value =&amp;gt; &amp;quot;13249&amp;quot;, match=&amp;gt;&amp;quot;EX&amp;quot; } ]);&lt;br /&gt;
 $search = $dataset-&amp;gt;prepare_search( %options );&lt;br /&gt;
 $list = $dataset-&amp;gt;search( %options ); # prepare_search( %options )-&amp;gt;execute&lt;br /&gt;
 $list = $dataset-&amp;gt;search; # match ALL&lt;br /&gt;
 &lt;br /&gt;
 $metafield = $dataset-&amp;gt;field( $fieldname );&lt;br /&gt;
 $metafield = $dataset-&amp;gt;key_field;&lt;br /&gt;
 @metafields = $dataset-&amp;gt;fields; &lt;br /&gt;
 &lt;br /&gt;
 $dataset-&amp;gt;search-&amp;gt;map( sub {}, $ctx );&lt;br /&gt;
 $n = $dataset-&amp;gt;search-&amp;gt;count; &lt;br /&gt;
 $ids = $dataset-&amp;gt;search-&amp;gt;ids;&lt;br /&gt;
 $list = $dataset-&amp;gt;list( \@ids );&lt;br /&gt;
&lt;br /&gt;
=== list ===&lt;br /&gt;
 $n = $list-&amp;gt;count;&lt;br /&gt;
 $list-&amp;gt;map( sub {&lt;br /&gt;
     my ( $repository, $dataset, $dataobj, $ctx ) = @_;&lt;br /&gt;
     # do something to the dataobj here&lt;br /&gt;
 }, $ctx );&lt;br /&gt;
 $dataobj = $list-&amp;gt;item( $offset );&lt;br /&gt;
 @all_dataobjs = $list-&amp;gt;slice &lt;br /&gt;
 @dataobjs = $list-&amp;gt;slice( $offset, $length ); &lt;br /&gt;
 \@ids = $list-&amp;gt;ids;&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_string( $string );&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_file( $filename );&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_url( $url );&lt;br /&gt;
 &lt;br /&gt;
 $utf8_string = $xml-&amp;gt;to_string( $dom_node, %opts );&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;clone( $dom_node ); # deep&lt;br /&gt;
 $dom_node = $xml-&amp;gt;clone_node( $dom_node ); # shallow&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;contents_of( $dom_node ); # clone and return child nodes&lt;br /&gt;
 $utf8_string = $xml-&amp;gt;text_contents_of( $dom_node ); # Return text child nodes as a string&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_element( $name, %attr );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_text_node( $value );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_comment( $value );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_document_fragment;&lt;br /&gt;
 &lt;br /&gt;
 $bool = $xml-&amp;gt;is( $dom_node, &amp;quot;Text&amp;quot; );&lt;br /&gt;
 &lt;br /&gt;
 $xml-&amp;gt;dispose( $dom_node ); &lt;br /&gt;
&lt;br /&gt;
=== XHTML ===&lt;br /&gt;
 $xhtml = $repo-&amp;gt;xhtml;&lt;br /&gt;
 &lt;br /&gt;
 $utf8_string = $xhtml-&amp;gt;to_xhtml( $dom_node, %opts ); # remove NS prefixes, fix &amp;lt;script&amp;gt; etc.&lt;br /&gt;
 &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;input_field( $name, $value, %opts ); # nb. type &amp;amp; noenter are now options. noenter prevents the enter being pressed in the input field using javascript&lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;hidden_field( $name, $value, %opts ); # tdb: this is used *a lot* and is well defined&lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;text_area_field( $name, $value, %opts ); # tdb: value becomes a child text node &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;form( $method, $url );&lt;br /&gt;
 &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;data_element( $name, $value, %opts ); # tdb: render_data_element&lt;br /&gt;
 &lt;br /&gt;
 $page = $xhtml-&amp;gt;page( $map, %opts );&lt;br /&gt;
&lt;br /&gt;
=== Page ===&lt;br /&gt;
 $page-&amp;gt;send( %options ); &lt;br /&gt;
 $page-&amp;gt;write_to_file( $filename );&lt;br /&gt;
&lt;br /&gt;
=== DataObj ===&lt;br /&gt;
&lt;br /&gt;
 $dataobj = $dataset-&amp;gt;dataobj( $id );&lt;br /&gt;
 $dataobj-&amp;gt;delete;&lt;br /&gt;
 $dataobj-&amp;gt;commit( $force );&lt;br /&gt;
 &lt;br /&gt;
 $dataset = $dataobj-&amp;gt;dataset;&lt;br /&gt;
 $repo = $dataobj-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $id = $dataobj-&amp;gt;id;&lt;br /&gt;
 $dataobj-&amp;gt;set_value( $fieldname, $value );&lt;br /&gt;
 $value = $dataobj-&amp;gt;value( $fieldname );&lt;br /&gt;
 \@value = $dataobj-&amp;gt;value( $fieldname ); # multiple&lt;br /&gt;
 $boolean = $dataobj-&amp;gt;is_set( $fieldname );&lt;br /&gt;
 &lt;br /&gt;
 $xhtml = $dataobj-&amp;gt;render_value( $fieldname );&lt;br /&gt;
 $xhtml = $dataobj-&amp;gt;render_citation( $style, %opts );&lt;br /&gt;
 &lt;br /&gt;
 $uri = $dataobj-&amp;gt;uri;&lt;br /&gt;
 $url = $dataobj-&amp;gt;url;&lt;br /&gt;
 &lt;br /&gt;
 $string = $dataobj-&amp;gt;export( $plugin_id, %opts );&lt;br /&gt;
 $dataobj = $dataobj-&amp;gt;create_subobject( $fieldname, $epdata );&lt;br /&gt;
&lt;br /&gt;
=== MetaField ===&lt;br /&gt;
Now has a handle on both it's repository/session AND dataset.&lt;br /&gt;
&lt;br /&gt;
 my $field = $dataset-&amp;gt;field( $fieldname );&lt;br /&gt;
 &lt;br /&gt;
 $dataset = $field-&amp;gt;dataset;&lt;br /&gt;
 $repo = $field-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $field-&amp;gt;set_property( $property, $value );&lt;br /&gt;
 $value = $field-&amp;gt;property( $property );&lt;br /&gt;
 &lt;br /&gt;
 $name = $field-&amp;gt;name;&lt;br /&gt;
 $type = $field-&amp;gt;type;&lt;br /&gt;
 &lt;br /&gt;
 $xhtml = $field-&amp;gt;render_name;&lt;br /&gt;
 $xhtml = $field-&amp;gt;render_help;&lt;br /&gt;
 $xhtml = $field-&amp;gt;render_value_label( $value );&lt;br /&gt;
 &lt;br /&gt;
 $values = $field-&amp;gt;all_values( %opts );&lt;br /&gt;
 $sorted_list = $field-&amp;gt;sort_values( $unsorted_list );&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Core_API&amp;diff=11976</id>
		<title>Core API</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Core_API&amp;diff=11976"/>
		<updated>2016-04-18T13:28:54Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* Repository */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{API}}&lt;br /&gt;
[[Category:API]]&lt;br /&gt;
&lt;br /&gt;
The core API was introduced in EPrints 3.2.0 and is intended to provide a clean and consistent programming interface to the EPrints system. &lt;br /&gt;
&lt;br /&gt;
Not all essential functionality is yet available in the new API, as we've only included functions which we are confident we can keep stable for a number of versions. &lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
 use EPrints;&lt;br /&gt;
 my $ep = EPrints-&amp;gt;new();&lt;br /&gt;
 my $repo = $ep-&amp;gt;repository( &amp;quot;myrepo&amp;quot; );&lt;br /&gt;
 my $an_eprint = $repo-&amp;gt;eprint( 23 );&lt;br /&gt;
&lt;br /&gt;
=== EPrints ===&lt;br /&gt;
 $ep = EPrints-&amp;gt;new();&lt;br /&gt;
 @ids = $ep-&amp;gt;repository_ids; # list active repository ids&lt;br /&gt;
 $repo = $ep-&amp;gt;repository( &amp;quot;devel&amp;quot;, noise=&amp;gt;1 );&lt;br /&gt;
 $repo = $ep-&amp;gt;current_repository(); # from Apache::Request URI&lt;br /&gt;
 EPrints-&amp;gt;abort( $message );&lt;br /&gt;
&lt;br /&gt;
=== Repository ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
 $xml = $repo-&amp;gt;xml;&lt;br /&gt;
 $dataset = $repo-&amp;gt;dataset( &amp;quot;user&amp;quot; );&lt;br /&gt;
 $user = $repo-&amp;gt;current_user;&lt;br /&gt;
 $query = $repo-&amp;gt;query;&lt;br /&gt;
 $current_page_url = $repo-&amp;gt;current_url( host =&amp;gt; 1, path =&amp;gt; 1, query =&amp;gt; 1, etc. );&lt;br /&gt;
 $config_element = $repo-&amp;gt;config( $key, [@subkeys] );&lt;br /&gt;
 $repository-&amp;gt;log( $message ); &lt;br /&gt;
 $string = $repo-&amp;gt;query-&amp;gt;param( &amp;quot;X&amp;quot; );&lt;br /&gt;
 $repo-&amp;gt;redirect( $url );&lt;br /&gt;
 $eprint = $repo-&amp;gt;eprint( 23 );&lt;br /&gt;
 $user = $repo-&amp;gt;user( 23 );&lt;br /&gt;
 $user = $repo-&amp;gt;user_by_username( &amp;quot;cjg&amp;quot; );&lt;br /&gt;
 $user = $repo-&amp;gt;user_by_email( 'cjg@ecs.soton.ac.uk' );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dataset ===&lt;br /&gt;
 $dataset = $repo-&amp;gt;dataset( &amp;quot;eprint&amp;quot; )&lt;br /&gt;
 $string = $dataset-&amp;gt;base_id; # eprint&lt;br /&gt;
 $string = $dataset-&amp;gt;id; # inbox&lt;br /&gt;
 &lt;br /&gt;
 $repo = $dataobj-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $dataobj = $dataset-&amp;gt;create_dataobj( $data );&lt;br /&gt;
 $eprint = $dataset-&amp;gt;dataobj( 23 );&lt;br /&gt;
 &lt;br /&gt;
 %options = (filters =&amp;gt; [ { meta_fields =&amp;gt; [ 'contributors_id' ], value =&amp;gt; &amp;quot;13249&amp;quot;, match=&amp;gt;&amp;quot;EX&amp;quot; } ]);&lt;br /&gt;
 $search = $dataset-&amp;gt;prepare_search( %options );&lt;br /&gt;
 $list = $dataset-&amp;gt;search( %options ); # prepare_search( %options )-&amp;gt;execute&lt;br /&gt;
 $list = $dataset-&amp;gt;search; # match ALL&lt;br /&gt;
 &lt;br /&gt;
 $metafield = $dataset-&amp;gt;field( $fieldname );&lt;br /&gt;
 $metafield = $dataset-&amp;gt;key_field;&lt;br /&gt;
 @metafields = $dataset-&amp;gt;fields; &lt;br /&gt;
 &lt;br /&gt;
 $dataset-&amp;gt;search-&amp;gt;map( sub {}, $ctx );&lt;br /&gt;
 $n = $dataset-&amp;gt;search-&amp;gt;count; &lt;br /&gt;
 $ids = $dataset-&amp;gt;search-&amp;gt;ids;&lt;br /&gt;
 $list = $dataset-&amp;gt;list( \@ids );&lt;br /&gt;
&lt;br /&gt;
=== list ===&lt;br /&gt;
 $n = $list-&amp;gt;count;&lt;br /&gt;
 $list-&amp;gt;map( sub {&lt;br /&gt;
     my ( $repository, $dataset, $dataobj, $ctx ) = @_;&lt;br /&gt;
     # do something to the dataobj here&lt;br /&gt;
 }, $ctx );&lt;br /&gt;
 $dataobj = $list-&amp;gt;item( $offset );&lt;br /&gt;
 @all_dataobjs = $list-&amp;gt;slice &lt;br /&gt;
 @dataobjs = $list-&amp;gt;slice( $offset, $length ); &lt;br /&gt;
 \@ids = $list-&amp;gt;ids;&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_string( $string );&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_file( $filename );&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_url( $url );&lt;br /&gt;
 &lt;br /&gt;
 $utf8_string = $xml-&amp;gt;to_string( $dom_node, %opts );&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;clone( $dom_node ); # deep&lt;br /&gt;
 $dom_node = $xml-&amp;gt;clone_node( $dom_node ); # shallow&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;contents_of( $dom_node ); # clone and return child nodes&lt;br /&gt;
 $utf8_string = $xml-&amp;gt;text_contents_of( $dom_node ); # Return text child nodes as a string&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_element( $name, %attr );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_text_node( $value );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_comment( $value );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_document_fragment;&lt;br /&gt;
 &lt;br /&gt;
 $bool = $xml-&amp;gt;is( $dom_node, &amp;quot;Text&amp;quot; );&lt;br /&gt;
 &lt;br /&gt;
 $xml-&amp;gt;dispose( $dom_node ); &lt;br /&gt;
&lt;br /&gt;
=== XHTML ===&lt;br /&gt;
 $xhtml = $repo-&amp;gt;xhtml;&lt;br /&gt;
 &lt;br /&gt;
 $utf8_string = $xhtml-&amp;gt;to_xhtml( $dom_node, %opts ); # remove NS prefixes, fix &amp;lt;script&amp;gt; etc.&lt;br /&gt;
 &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;input_field( $name, $value, %opts ); # nb. type &amp;amp; noenter are now options. noenter prevents the enter being pressed in the input field using javascript&lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;hidden_field( $name, $value, %opts ); # tdb: this is used *a lot* and is well defined&lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;text_area_field( $name, $value, %opts ); # tdb: value becomes a child text node &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;form( $method, $url );&lt;br /&gt;
 &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;data_element( $name, $value, %opts ); # tdb: render_data_element&lt;br /&gt;
 &lt;br /&gt;
 $page = $xhtml-&amp;gt;page( $map, %opts );&lt;br /&gt;
&lt;br /&gt;
=== Page ===&lt;br /&gt;
 $page-&amp;gt;send( %options ); &lt;br /&gt;
 $page-&amp;gt;write_to_file( $filename );&lt;br /&gt;
&lt;br /&gt;
=== DataObj ===&lt;br /&gt;
&lt;br /&gt;
 $dataobj = $dataset-&amp;gt;dataobj( $id );&lt;br /&gt;
 $dataobj-&amp;gt;delete;&lt;br /&gt;
 $dataobj-&amp;gt;commit( $force );&lt;br /&gt;
 &lt;br /&gt;
 $dataset = $dataobj-&amp;gt;dataset;&lt;br /&gt;
 $repo = $dataobj-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $id = $dataobj-&amp;gt;id;&lt;br /&gt;
 $dataobj-&amp;gt;set_value( $fieldname, $value );&lt;br /&gt;
 $value = $dataobj-&amp;gt;value( $fieldname );&lt;br /&gt;
 \@value = $dataobj-&amp;gt;value( $fieldname ); # multiple&lt;br /&gt;
 $boolean = $dataobj-&amp;gt;is_set( $fieldname );&lt;br /&gt;
 &lt;br /&gt;
 $xhtml = $dataobj-&amp;gt;render_value( $fieldname );&lt;br /&gt;
 $xhtml = $dataobj-&amp;gt;render_citation( $style, %opts );&lt;br /&gt;
 &lt;br /&gt;
 $uri = $dataobj-&amp;gt;uri;&lt;br /&gt;
 $url = $dataobj-&amp;gt;url;&lt;br /&gt;
 &lt;br /&gt;
 $string = $dataobj-&amp;gt;export( $plugin_id, %opts );&lt;br /&gt;
 $dataobj = $dataobj-&amp;gt;create_subobject( $fieldname, $epdata );&lt;br /&gt;
&lt;br /&gt;
=== MetaField ===&lt;br /&gt;
Now has a handle on both it's repository/session AND dataset.&lt;br /&gt;
&lt;br /&gt;
 my $field = $dataset-&amp;gt;field( $fieldname );&lt;br /&gt;
 &lt;br /&gt;
 $dataset = $field-&amp;gt;dataset;&lt;br /&gt;
 $repo = $field-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $field-&amp;gt;set_property( $property, $value );&lt;br /&gt;
 $value = $field-&amp;gt;property( $property );&lt;br /&gt;
 &lt;br /&gt;
 $name = $field-&amp;gt;name;&lt;br /&gt;
 $type = $field-&amp;gt;type;&lt;br /&gt;
 &lt;br /&gt;
 $xhtml = $field-&amp;gt;render_name;&lt;br /&gt;
 $xhtml = $field-&amp;gt;render_help;&lt;br /&gt;
 $xhtml = $field-&amp;gt;render_value_label( $value );&lt;br /&gt;
 &lt;br /&gt;
 $values = $field-&amp;gt;all_values( %opts );&lt;br /&gt;
 $sorted_list = $field-&amp;gt;sort_values( $unsorted_list );&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Core_API&amp;diff=11975</id>
		<title>Core API</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Core_API&amp;diff=11975"/>
		<updated>2016-04-18T13:27:47Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* Repository */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{API}}&lt;br /&gt;
[[Category:API]]&lt;br /&gt;
&lt;br /&gt;
The core API was introduced in EPrints 3.2.0 and is intended to provide a clean and consistent programming interface to the EPrints system. &lt;br /&gt;
&lt;br /&gt;
Not all essential functionality is yet available in the new API, as we've only included functions which we are confident we can keep stable for a number of versions. &lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
 use EPrints;&lt;br /&gt;
 my $ep = EPrints-&amp;gt;new();&lt;br /&gt;
 my $repo = $ep-&amp;gt;repository( &amp;quot;myrepo&amp;quot; );&lt;br /&gt;
 my $an_eprint = $repo-&amp;gt;eprint( 23 );&lt;br /&gt;
&lt;br /&gt;
=== EPrints ===&lt;br /&gt;
 $ep = EPrints-&amp;gt;new();&lt;br /&gt;
 @ids = $ep-&amp;gt;repository_ids; # list active repository ids&lt;br /&gt;
 $repo = $ep-&amp;gt;repository( &amp;quot;devel&amp;quot;, noise=&amp;gt;1 );&lt;br /&gt;
 $repo = $ep-&amp;gt;current_repository(); # from Apache::Request URI&lt;br /&gt;
 EPrints-&amp;gt;abort( $message );&lt;br /&gt;
&lt;br /&gt;
=== Repository ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;eg&amp;quot;&amp;gt;&lt;br /&gt;
 $xml = $repo-&amp;gt;xml;&lt;br /&gt;
 $dataset = $repo-&amp;gt;dataset( &amp;quot;user&amp;quot; );&lt;br /&gt;
 $user = $repo-&amp;gt;current_user;&lt;br /&gt;
 $query = $repo-&amp;gt;query;&lt;br /&gt;
 $current_page_url = $repo-&amp;gt;current_url( host =&amp;gt; 1, path =&amp;gt; 1, query =&amp;gt; 1, etc. );&lt;br /&gt;
 $config_element = $repo-&amp;gt;config( $key, [@subkeys] );&lt;br /&gt;
 $repository-&amp;gt;log( $message ); &lt;br /&gt;
 $string = $repo-&amp;gt;query-&amp;gt;param( &amp;quot;X&amp;quot; );&lt;br /&gt;
 $repo-&amp;gt;redirect( $url );&lt;br /&gt;
 $eprint = $repo-&amp;gt;eprint( 23 );&lt;br /&gt;
 $user = $repo-&amp;gt;user( 23 );&lt;br /&gt;
 $user = $repo-&amp;gt;user_by_username( &amp;quot;cjg&amp;quot; );&lt;br /&gt;
 $user = $repo-&amp;gt;user_by_email( 'cjg@ecs.soton.ac.uk' );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dataset ===&lt;br /&gt;
 $dataset = $repo-&amp;gt;dataset( &amp;quot;eprint&amp;quot; )&lt;br /&gt;
 $string = $dataset-&amp;gt;base_id; # eprint&lt;br /&gt;
 $string = $dataset-&amp;gt;id; # inbox&lt;br /&gt;
 &lt;br /&gt;
 $repo = $dataobj-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $dataobj = $dataset-&amp;gt;create_dataobj( $data );&lt;br /&gt;
 $eprint = $dataset-&amp;gt;dataobj( 23 );&lt;br /&gt;
 &lt;br /&gt;
 %options = (filters =&amp;gt; [ { meta_fields =&amp;gt; [ 'contributors_id' ], value =&amp;gt; &amp;quot;13249&amp;quot;, match=&amp;gt;&amp;quot;EX&amp;quot; } ]);&lt;br /&gt;
 $search = $dataset-&amp;gt;prepare_search( %options );&lt;br /&gt;
 $list = $dataset-&amp;gt;search( %options ); # prepare_search( %options )-&amp;gt;execute&lt;br /&gt;
 $list = $dataset-&amp;gt;search; # match ALL&lt;br /&gt;
 &lt;br /&gt;
 $metafield = $dataset-&amp;gt;field( $fieldname );&lt;br /&gt;
 $metafield = $dataset-&amp;gt;key_field;&lt;br /&gt;
 @metafields = $dataset-&amp;gt;fields; &lt;br /&gt;
 &lt;br /&gt;
 $dataset-&amp;gt;search-&amp;gt;map( sub {}, $ctx );&lt;br /&gt;
 $n = $dataset-&amp;gt;search-&amp;gt;count; &lt;br /&gt;
 $ids = $dataset-&amp;gt;search-&amp;gt;ids;&lt;br /&gt;
 $list = $dataset-&amp;gt;list( \@ids );&lt;br /&gt;
&lt;br /&gt;
=== list ===&lt;br /&gt;
 $n = $list-&amp;gt;count;&lt;br /&gt;
 $list-&amp;gt;map( sub {&lt;br /&gt;
     my ( $repository, $dataset, $dataobj, $ctx ) = @_;&lt;br /&gt;
     # do something to the dataobj here&lt;br /&gt;
 }, $ctx );&lt;br /&gt;
 $dataobj = $list-&amp;gt;item( $offset );&lt;br /&gt;
 @all_dataobjs = $list-&amp;gt;slice &lt;br /&gt;
 @dataobjs = $list-&amp;gt;slice( $offset, $length ); &lt;br /&gt;
 \@ids = $list-&amp;gt;ids;&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_string( $string );&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_file( $filename );&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_url( $url );&lt;br /&gt;
 &lt;br /&gt;
 $utf8_string = $xml-&amp;gt;to_string( $dom_node, %opts );&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;clone( $dom_node ); # deep&lt;br /&gt;
 $dom_node = $xml-&amp;gt;clone_node( $dom_node ); # shallow&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;contents_of( $dom_node ); # clone and return child nodes&lt;br /&gt;
 $utf8_string = $xml-&amp;gt;text_contents_of( $dom_node ); # Return text child nodes as a string&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_element( $name, %attr );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_text_node( $value );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_comment( $value );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_document_fragment;&lt;br /&gt;
 &lt;br /&gt;
 $bool = $xml-&amp;gt;is( $dom_node, &amp;quot;Text&amp;quot; );&lt;br /&gt;
 &lt;br /&gt;
 $xml-&amp;gt;dispose( $dom_node ); &lt;br /&gt;
&lt;br /&gt;
=== XHTML ===&lt;br /&gt;
 $xhtml = $repo-&amp;gt;xhtml;&lt;br /&gt;
 &lt;br /&gt;
 $utf8_string = $xhtml-&amp;gt;to_xhtml( $dom_node, %opts ); # remove NS prefixes, fix &amp;lt;script&amp;gt; etc.&lt;br /&gt;
 &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;input_field( $name, $value, %opts ); # nb. type &amp;amp; noenter are now options. noenter prevents the enter being pressed in the input field using javascript&lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;hidden_field( $name, $value, %opts ); # tdb: this is used *a lot* and is well defined&lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;text_area_field( $name, $value, %opts ); # tdb: value becomes a child text node &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;form( $method, $url );&lt;br /&gt;
 &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;data_element( $name, $value, %opts ); # tdb: render_data_element&lt;br /&gt;
 &lt;br /&gt;
 $page = $xhtml-&amp;gt;page( $map, %opts );&lt;br /&gt;
&lt;br /&gt;
=== Page ===&lt;br /&gt;
 $page-&amp;gt;send( %options ); &lt;br /&gt;
 $page-&amp;gt;write_to_file( $filename );&lt;br /&gt;
&lt;br /&gt;
=== DataObj ===&lt;br /&gt;
&lt;br /&gt;
 $dataobj = $dataset-&amp;gt;dataobj( $id );&lt;br /&gt;
 $dataobj-&amp;gt;delete;&lt;br /&gt;
 $dataobj-&amp;gt;commit( $force );&lt;br /&gt;
 &lt;br /&gt;
 $dataset = $dataobj-&amp;gt;dataset;&lt;br /&gt;
 $repo = $dataobj-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $id = $dataobj-&amp;gt;id;&lt;br /&gt;
 $dataobj-&amp;gt;set_value( $fieldname, $value );&lt;br /&gt;
 $value = $dataobj-&amp;gt;value( $fieldname );&lt;br /&gt;
 \@value = $dataobj-&amp;gt;value( $fieldname ); # multiple&lt;br /&gt;
 $boolean = $dataobj-&amp;gt;is_set( $fieldname );&lt;br /&gt;
 &lt;br /&gt;
 $xhtml = $dataobj-&amp;gt;render_value( $fieldname );&lt;br /&gt;
 $xhtml = $dataobj-&amp;gt;render_citation( $style, %opts );&lt;br /&gt;
 &lt;br /&gt;
 $uri = $dataobj-&amp;gt;uri;&lt;br /&gt;
 $url = $dataobj-&amp;gt;url;&lt;br /&gt;
 &lt;br /&gt;
 $string = $dataobj-&amp;gt;export( $plugin_id, %opts );&lt;br /&gt;
 $dataobj = $dataobj-&amp;gt;create_subobject( $fieldname, $epdata );&lt;br /&gt;
&lt;br /&gt;
=== MetaField ===&lt;br /&gt;
Now has a handle on both it's repository/session AND dataset.&lt;br /&gt;
&lt;br /&gt;
 my $field = $dataset-&amp;gt;field( $fieldname );&lt;br /&gt;
 &lt;br /&gt;
 $dataset = $field-&amp;gt;dataset;&lt;br /&gt;
 $repo = $field-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $field-&amp;gt;set_property( $property, $value );&lt;br /&gt;
 $value = $field-&amp;gt;property( $property );&lt;br /&gt;
 &lt;br /&gt;
 $name = $field-&amp;gt;name;&lt;br /&gt;
 $type = $field-&amp;gt;type;&lt;br /&gt;
 &lt;br /&gt;
 $xhtml = $field-&amp;gt;render_name;&lt;br /&gt;
 $xhtml = $field-&amp;gt;render_help;&lt;br /&gt;
 $xhtml = $field-&amp;gt;render_value_label( $value );&lt;br /&gt;
 &lt;br /&gt;
 $values = $field-&amp;gt;all_values( %opts );&lt;br /&gt;
 $sorted_list = $field-&amp;gt;sort_values( $unsorted_list );&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Core_API&amp;diff=11974</id>
		<title>Core API</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Core_API&amp;diff=11974"/>
		<updated>2016-04-13T14:11:04Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* Dataset */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{API}}&lt;br /&gt;
[[Category:API]]&lt;br /&gt;
&lt;br /&gt;
The core API was introduced in EPrints 3.2.0 and is intended to provide a clean and consistent programming interface to the EPrints system. &lt;br /&gt;
&lt;br /&gt;
Not all essential functionality is yet available in the new API, as we've only included functions which we are confident we can keep stable for a number of versions. &lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
 use EPrints;&lt;br /&gt;
 my $ep = EPrints-&amp;gt;new();&lt;br /&gt;
 my $repo = $ep-&amp;gt;repository( &amp;quot;myrepo&amp;quot; );&lt;br /&gt;
 my $an_eprint = $repo-&amp;gt;eprint( 23 );&lt;br /&gt;
&lt;br /&gt;
=== EPrints ===&lt;br /&gt;
 $ep = EPrints-&amp;gt;new();&lt;br /&gt;
 @ids = $ep-&amp;gt;repository_ids; # list active repository ids&lt;br /&gt;
 $repo = $ep-&amp;gt;repository( &amp;quot;devel&amp;quot;, noise=&amp;gt;1 );&lt;br /&gt;
 $repo = $ep-&amp;gt;current_repository(); # from Apache::Request URI&lt;br /&gt;
 EPrints-&amp;gt;abort( $message );&lt;br /&gt;
&lt;br /&gt;
=== Repository ===&lt;br /&gt;
 $xml = $repo-&amp;gt;xml;&lt;br /&gt;
 $dataset = $repo-&amp;gt;dataset( &amp;quot;user&amp;quot; );&lt;br /&gt;
 $user = $repo-&amp;gt;current_user;&lt;br /&gt;
 $query = $repo-&amp;gt;query;&lt;br /&gt;
 $current_page_url = $repo-&amp;gt;current_url( host =&amp;gt; 1, path =&amp;gt; 1, query =&amp;gt; 1, etc. );&lt;br /&gt;
 $config_element = $repo-&amp;gt;config( $key, [@subkeys] );&lt;br /&gt;
 $repository-&amp;gt;log( $message ); &lt;br /&gt;
 $string = $repo-&amp;gt;query-&amp;gt;param( &amp;quot;X&amp;quot; );&lt;br /&gt;
 $repo-&amp;gt;redirect( $url );&lt;br /&gt;
 $eprint = $repo-&amp;gt;eprint( 23 );&lt;br /&gt;
 $user = $repo-&amp;gt;user( 23 );&lt;br /&gt;
 $user = $repo-&amp;gt;user_by_username( &amp;quot;cjg&amp;quot; );&lt;br /&gt;
 $user = $repo-&amp;gt;user_by_email( 'cjg@ecs.soton.ac.uk' );&lt;br /&gt;
&lt;br /&gt;
=== Dataset ===&lt;br /&gt;
 $dataset = $repo-&amp;gt;dataset( &amp;quot;eprint&amp;quot; )&lt;br /&gt;
 $string = $dataset-&amp;gt;base_id; # eprint&lt;br /&gt;
 $string = $dataset-&amp;gt;id; # inbox&lt;br /&gt;
 &lt;br /&gt;
 $repo = $dataobj-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $dataobj = $dataset-&amp;gt;create_dataobj( $data );&lt;br /&gt;
 $eprint = $dataset-&amp;gt;dataobj( 23 );&lt;br /&gt;
 &lt;br /&gt;
 %options = (filters =&amp;gt; [ { meta_fields =&amp;gt; [ 'contributors_id' ], value =&amp;gt; &amp;quot;13249&amp;quot;, match=&amp;gt;&amp;quot;EX&amp;quot; } ]);&lt;br /&gt;
 $search = $dataset-&amp;gt;prepare_search( %options );&lt;br /&gt;
 $list = $dataset-&amp;gt;search( %options ); # prepare_search( %options )-&amp;gt;execute&lt;br /&gt;
 $list = $dataset-&amp;gt;search; # match ALL&lt;br /&gt;
 &lt;br /&gt;
 $metafield = $dataset-&amp;gt;field( $fieldname );&lt;br /&gt;
 $metafield = $dataset-&amp;gt;key_field;&lt;br /&gt;
 @metafields = $dataset-&amp;gt;fields; &lt;br /&gt;
 &lt;br /&gt;
 $dataset-&amp;gt;search-&amp;gt;map( sub {}, $ctx );&lt;br /&gt;
 $n = $dataset-&amp;gt;search-&amp;gt;count; &lt;br /&gt;
 $ids = $dataset-&amp;gt;search-&amp;gt;ids;&lt;br /&gt;
 $list = $dataset-&amp;gt;list( \@ids );&lt;br /&gt;
&lt;br /&gt;
=== list ===&lt;br /&gt;
 $n = $list-&amp;gt;count;&lt;br /&gt;
 $list-&amp;gt;map( sub {&lt;br /&gt;
     my ( $repository, $dataset, $dataobj, $ctx ) = @_;&lt;br /&gt;
     # do something to the dataobj here&lt;br /&gt;
 }, $ctx );&lt;br /&gt;
 $dataobj = $list-&amp;gt;item( $offset );&lt;br /&gt;
 @all_dataobjs = $list-&amp;gt;slice &lt;br /&gt;
 @dataobjs = $list-&amp;gt;slice( $offset, $length ); &lt;br /&gt;
 \@ids = $list-&amp;gt;ids;&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_string( $string );&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_file( $filename );&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_url( $url );&lt;br /&gt;
 &lt;br /&gt;
 $utf8_string = $xml-&amp;gt;to_string( $dom_node, %opts );&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;clone( $dom_node ); # deep&lt;br /&gt;
 $dom_node = $xml-&amp;gt;clone_node( $dom_node ); # shallow&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;contents_of( $dom_node ); # clone and return child nodes&lt;br /&gt;
 $utf8_string = $xml-&amp;gt;text_contents_of( $dom_node ); # Return text child nodes as a string&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_element( $name, %attr );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_text_node( $value );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_comment( $value );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_document_fragment;&lt;br /&gt;
 &lt;br /&gt;
 $bool = $xml-&amp;gt;is( $dom_node, &amp;quot;Text&amp;quot; );&lt;br /&gt;
 &lt;br /&gt;
 $xml-&amp;gt;dispose( $dom_node ); &lt;br /&gt;
&lt;br /&gt;
=== XHTML ===&lt;br /&gt;
 $xhtml = $repo-&amp;gt;xhtml;&lt;br /&gt;
 &lt;br /&gt;
 $utf8_string = $xhtml-&amp;gt;to_xhtml( $dom_node, %opts ); # remove NS prefixes, fix &amp;lt;script&amp;gt; etc.&lt;br /&gt;
 &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;input_field( $name, $value, %opts ); # nb. type &amp;amp; noenter are now options. noenter prevents the enter being pressed in the input field using javascript&lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;hidden_field( $name, $value, %opts ); # tdb: this is used *a lot* and is well defined&lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;text_area_field( $name, $value, %opts ); # tdb: value becomes a child text node &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;form( $method, $url );&lt;br /&gt;
 &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;data_element( $name, $value, %opts ); # tdb: render_data_element&lt;br /&gt;
 &lt;br /&gt;
 $page = $xhtml-&amp;gt;page( $map, %opts );&lt;br /&gt;
&lt;br /&gt;
=== Page ===&lt;br /&gt;
 $page-&amp;gt;send( %options ); &lt;br /&gt;
 $page-&amp;gt;write_to_file( $filename );&lt;br /&gt;
&lt;br /&gt;
=== DataObj ===&lt;br /&gt;
&lt;br /&gt;
 $dataobj = $dataset-&amp;gt;dataobj( $id );&lt;br /&gt;
 $dataobj-&amp;gt;delete;&lt;br /&gt;
 $dataobj-&amp;gt;commit( $force );&lt;br /&gt;
 &lt;br /&gt;
 $dataset = $dataobj-&amp;gt;dataset;&lt;br /&gt;
 $repo = $dataobj-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $id = $dataobj-&amp;gt;id;&lt;br /&gt;
 $dataobj-&amp;gt;set_value( $fieldname, $value );&lt;br /&gt;
 $value = $dataobj-&amp;gt;value( $fieldname );&lt;br /&gt;
 \@value = $dataobj-&amp;gt;value( $fieldname ); # multiple&lt;br /&gt;
 $boolean = $dataobj-&amp;gt;is_set( $fieldname );&lt;br /&gt;
 &lt;br /&gt;
 $xhtml = $dataobj-&amp;gt;render_value( $fieldname );&lt;br /&gt;
 $xhtml = $dataobj-&amp;gt;render_citation( $style, %opts );&lt;br /&gt;
 &lt;br /&gt;
 $uri = $dataobj-&amp;gt;uri;&lt;br /&gt;
 $url = $dataobj-&amp;gt;url;&lt;br /&gt;
 &lt;br /&gt;
 $string = $dataobj-&amp;gt;export( $plugin_id, %opts );&lt;br /&gt;
 $dataobj = $dataobj-&amp;gt;create_subobject( $fieldname, $epdata );&lt;br /&gt;
&lt;br /&gt;
=== MetaField ===&lt;br /&gt;
Now has a handle on both it's repository/session AND dataset.&lt;br /&gt;
&lt;br /&gt;
 my $field = $dataset-&amp;gt;field( $fieldname );&lt;br /&gt;
 &lt;br /&gt;
 $dataset = $field-&amp;gt;dataset;&lt;br /&gt;
 $repo = $field-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $field-&amp;gt;set_property( $property, $value );&lt;br /&gt;
 $value = $field-&amp;gt;property( $property );&lt;br /&gt;
 &lt;br /&gt;
 $name = $field-&amp;gt;name;&lt;br /&gt;
 $type = $field-&amp;gt;type;&lt;br /&gt;
 &lt;br /&gt;
 $xhtml = $field-&amp;gt;render_name;&lt;br /&gt;
 $xhtml = $field-&amp;gt;render_help;&lt;br /&gt;
 $xhtml = $field-&amp;gt;render_value_label( $value );&lt;br /&gt;
 &lt;br /&gt;
 $values = $field-&amp;gt;all_values( %opts );&lt;br /&gt;
 $sorted_list = $field-&amp;gt;sort_values( $unsorted_list );&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Category:API&amp;diff=11939</id>
		<title>Category:API</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Category:API&amp;diff=11939"/>
		<updated>2016-01-10T15:47:20Z</updated>

		<summary type="html">&lt;p&gt;Pm705: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{API}}&lt;br /&gt;
&lt;br /&gt;
EPrints is written in the [http://www.perl.org/ Perl language]. Sometimes you may need to write your own Perl code using the EPrints Application Programming Interface (API).&lt;br /&gt;
&lt;br /&gt;
Reasons you may need to write your own EPrints code:&lt;br /&gt;
&lt;br /&gt;
* customising the way the eprints summary pages are rendered&lt;br /&gt;
* writing your own command-line script to control EPrints in some way&lt;br /&gt;
* writing a new CGI script (dynamic web page)&lt;br /&gt;
* writing a plugin&lt;br /&gt;
&lt;br /&gt;
== Key Sections ==&lt;br /&gt;
* [[Core API]] provides a basic introduction to using the EPrints API. &lt;br /&gt;
* [[StyleGuide]] gives guidance on how to code in a compatible style.&lt;br /&gt;
* [[Modules]] discusses the framework for Plugins you write for the community.&lt;br /&gt;
&lt;br /&gt;
==Principal Modules==&lt;br /&gt;
&lt;br /&gt;
This is a list of the principal modules in the EPrints API. These modules are the primary means of connecting to and manipulating objects in the repository.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[API:EPrints/Repository|EPrints::Repository]]===&lt;br /&gt;
&lt;br /&gt;
An Repository is a eprints archive with it's own website configuration and data. One install of the eprints software can run serveral seperate repositories. Sharing code but with totally different configurations. Before EPrints 2.4 this was known as EPrints::Archive. This was changed to avoid confusion with the eprint status of &amp;quot;archive&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===[[API:EPrints/Database|EPrints::Database]]===&lt;br /&gt;
&lt;br /&gt;
The connection to the MySQL (or other database) back end. ''datasets'' are stored in the MySQL system, but you do not have to address it directly.&lt;br /&gt;
&lt;br /&gt;
===[[API:EPrints/DataSet|EPrints::DataSet]]===&lt;br /&gt;
&lt;br /&gt;
A dataset is a collection of ''items'' of the same type. It can be searched.&lt;br /&gt;
&lt;br /&gt;
Some datasets all have the same &amp;quot;config id&amp;quot;. The &amp;quot;config id&amp;quot; is used to get information about the dataset from the archive config - inbox, buffer, archive and deletion all have the same metadata fields and types.&lt;br /&gt;
&lt;br /&gt;
Core datasets are:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| DATASET ID &lt;br /&gt;
| COMMENT&lt;br /&gt;
|-&lt;br /&gt;
| eprint&lt;br /&gt;
| EPrint records are the core of the system.&lt;br /&gt;
|-&lt;br /&gt;
| user&lt;br /&gt;
| Users registered with the system.&lt;br /&gt;
|-&lt;br /&gt;
| subject&lt;br /&gt;
| The subject tree.&lt;br /&gt;
|-               &lt;br /&gt;
| document&lt;br /&gt;
| Documents belonging to EPrints. Every document is part of an EPrint record.&lt;br /&gt;
|-&lt;br /&gt;
| subscription&lt;br /&gt;
| Subscriptions made by users. Every subscription is a part of a Subscription record.&lt;br /&gt;
|-&lt;br /&gt;
| history&lt;br /&gt;
| Stores actions performed on records.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In addtion to these datasets are four virtual datasets: inbox, buffer, archive and deletion. These act just like &amp;quot;eprint&amp;quot; except that they are filtered to only contain records with those status.&lt;br /&gt;
  &lt;br /&gt;
Note that prior to 2.4 the &amp;quot;eprint&amp;quot; dataset was virtual, rather than &amp;quot;inbox&amp;quot;, &amp;quot;buffer&amp;quot; etc. The History dataset was introduced in 2.4.&lt;br /&gt;
&lt;br /&gt;
===[[API:EPrints/MetaField|EPrints::MetaField]]===&lt;br /&gt;
&lt;br /&gt;
A single field in a dataset. Each dataset has a few &amp;quot;system&amp;quot; fields which eprints uses to manage the system and then any number of ''archive'' specific fields which you may configure.&lt;br /&gt;
&lt;br /&gt;
===[[API:EPrints/DataObj|EPrints::DataObj]]===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;super class&amp;quot; of ''subjects'', ''users'', ''eprints'' and ''documents'' etc. In the very core of the system these are all treated identically and much of the configuration and methods of these classes of &amp;quot;thing&amp;quot; are identical. We use the term ''item'' to speak about the general case.&lt;br /&gt;
&lt;br /&gt;
; '''type''' or '''user-type''' or '''eprint-type''' : ''users'', ''eprints'' and ''documents'' all have a &amp;quot;type&amp;quot;. This controls how they are &amp;quot;cited&amp;quot; and also for ''users'' and ''eprints'' it controls what ''fields'' may be edited, and which are required.&lt;br /&gt;
&lt;br /&gt;
====[[API:EPrints/DataObj/Document|EPrints::DataObj::Document]]====&lt;br /&gt;
&lt;br /&gt;
A document is a single format of an ''eprint'', eg. HTML, PDF, PS etc. It can contain more than one file, for example HTML may contain more than one html page + image files. The actual files are stored in the filesystem. Pre 2.4 this was known as EPrints::Document.&lt;br /&gt;
&lt;br /&gt;
====[[API:EPrints/DataObj/EPrint|EPrints::DataObj::EPrint]]====&lt;br /&gt;
&lt;br /&gt;
An eprint is a record in the system which has one or more ''documents'' and some ''metadata''. Usually, more than one ''document'' is to provide the same information in multiple formats, although this is not compulsory. Pre 2.4 this was known as EPrints::EPrint.&lt;br /&gt;
&lt;br /&gt;
====[[API:EPrints/DataObj/SavedSearch|EPrints::DataObj::SavedSearch]]====&lt;br /&gt;
&lt;br /&gt;
Some software refers to this concept as &amp;quot;alerts&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A stored search which is performed every day/week/month and any new results are the mailed to the user who owns the subscription.&lt;br /&gt;
&lt;br /&gt;
This diagram does not show &amp;quot;Subscription&amp;quot;. Subscription is a subclass of DataObj (like EPrint, User etc.). A Subscription is associated with one User. A User is associated with 0..n Subscription's.&lt;br /&gt;
&lt;br /&gt;
====[[API:EPrints/DataObj/Subject|EPrints::DataObj::Subject]]====&lt;br /&gt;
&lt;br /&gt;
A ''subject'' has an id and a list of who it's parents are. There is a build in ''subject'' with the id &amp;quot;ROOT&amp;quot; to act as the top level. A subject can have more than one parent to allow you to create a rich lattice, rather than just a tree, but loops are not allowed.&lt;br /&gt;
&lt;br /&gt;
====[[API:EPrints/DataObj/User|EPrints::DataObj::User]]====&lt;br /&gt;
&lt;br /&gt;
A user registered with the system. (NOT necesarily the author of the ''eprints'' they deposit). Pre 2.4 this was known as EPrints::User&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=EPrints3_Roadmap&amp;diff=11934</id>
		<title>EPrints3 Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=EPrints3_Roadmap&amp;diff=11934"/>
		<updated>2016-01-05T18:00:15Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* Removing render functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= 2016 Community Roadmap =&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
* Create a more comprehensive set of Unit tests for EPrints so community contributions can be accepted more easily&lt;br /&gt;
* Deprecate old subs from repository into BackCompatibility with a warning saying what version they will abort and what function should be used as an alternative (make_element, make_text, render_data_element, etc,etc)&lt;br /&gt;
* Remove references to these deprecated subs within the core code&lt;br /&gt;
* Start moving render functions for objects into the XHTML class in order to get all the rendering in one place (see section below)&lt;br /&gt;
* Start removing references to repository from objects where they should not occur.&lt;br /&gt;
&lt;br /&gt;
===Removing render functions===&lt;br /&gt;
&lt;br /&gt;
Many objects in eprints have render functions. For example $list-&amp;gt;render_description and $dataset-&amp;gt;render_description. This breaks the single responsibility principle for these objects. For example $list has to know about how to cache and retrieve lists of dataobjs and union and intersect with other lists but also has to know about how it is expected to appear in and XHTML page. This responsibility for $xhtml. Example $xhtml-&amp;gt;list($list). These kind of changes would mean that many objects would no longer need a reference to $repository. List is currently instantiated with a reference to $repository. It uses this reference to get access to $database (which it actually needs), get access to $xhtml functions so it can render its description (should not be its responsibility) and $plugin_factory to instantiate a plugin from a string for export (probably the plugin should be passed in rather than the plugin_id). &lt;br /&gt;
&lt;br /&gt;
Following this change to its logical conclusion means no objects in the EPrints core will have render methods. Once all XHTML is generated in one class it will become easier to make changes to aspects of rendering such as amalgamating citations, phrases and templates into one coherent language.&lt;br /&gt;
&lt;br /&gt;
The proposed changes to list would allow us to remove its internal reference to repository but still expand the $list section of the core api from:&lt;br /&gt;
&lt;br /&gt;
=== list ===&lt;br /&gt;
 $n = $list-&amp;gt;count;&lt;br /&gt;
 $list-&amp;gt;map( sub {&lt;br /&gt;
     my ( $repository, $dataset, $dataobj, $ctx ) = @_;&lt;br /&gt;
     # do something to the dataobj here&lt;br /&gt;
 }, $ctx );&lt;br /&gt;
 $dataobj = $list-&amp;gt;item( $offset );&lt;br /&gt;
 @all_dataobjs = $list-&amp;gt;slice &lt;br /&gt;
 @dataobjs = $list-&amp;gt;slice( $offset, $length ); &lt;br /&gt;
 \@ids = $list-&amp;gt;ids;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
extended to:&lt;br /&gt;
&lt;br /&gt;
=== list ===&lt;br /&gt;
 $n = $list-&amp;gt;count;&lt;br /&gt;
 $list-&amp;gt;map( sub {&lt;br /&gt;
     my ( $repository, $dataset, $dataobj, $ctx ) = @_;&lt;br /&gt;
     # do something to the dataobj here&lt;br /&gt;
 }, $ctx );&lt;br /&gt;
 $dataobj = $list-&amp;gt;item( $offset );&lt;br /&gt;
 @all_dataobjs = $list-&amp;gt;slice &lt;br /&gt;
 @dataobjs = $list-&amp;gt;slice( $offset, $length ); &lt;br /&gt;
 \@ids = $list-&amp;gt;ids;&lt;br /&gt;
 $list-&amp;gt;export($plugin) # rather than plugin id &lt;br /&gt;
 $list-&amp;gt;description # string description of the list. This might not get added because im not actually convinced it is used...&lt;br /&gt;
&lt;br /&gt;
=== XHTML ===&lt;br /&gt;
If rendering the description of list is important XHTML would gain&lt;br /&gt;
 $xhtml-&amp;gt;list($list)&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=EPrints3_Roadmap&amp;diff=11933</id>
		<title>EPrints3 Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=EPrints3_Roadmap&amp;diff=11933"/>
		<updated>2016-01-05T17:18:02Z</updated>

		<summary type="html">&lt;p&gt;Pm705: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= 2016 Community Roadmap =&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
* Create a more comprehensive set of Unit tests for EPrints so community contributions can be accepted more easily&lt;br /&gt;
* Deprecate old subs from repository into BackCompatibility with a warning saying what version they will abort and what function should be used as an alternative (make_element, make_text, render_data_element, etc,etc)&lt;br /&gt;
* Remove references to these deprecated subs within the core code&lt;br /&gt;
* Start moving render functions for objects into the XHTML class in order to get all the rendering in one place (see section below)&lt;br /&gt;
* Start removing references to repository from objects where they should not occur.&lt;br /&gt;
&lt;br /&gt;
===Removing render functions===&lt;br /&gt;
&lt;br /&gt;
Many objects in eprints have render functions. For example $list-&amp;gt;render_description and $dataset-&amp;gt;render_description. This breaks the single responsibility principle for these objects. For example $list has to know about how to cache and retrieve lists of dataobjs and union and intersect with other lists but also has to know about how it is expected to appear in and XHTML page. This responsibility for $xhtml. Example $xhtml-&amp;gt;list($list). These kind of changes would mean that many objects would no longer need a reference to $repository. List currently takes a reference to $repository it uses this reference to get access to $database (which it actually needs), get access to $xhtml functions so it can render its description (should not be its responsibility) and $plugin_factory to instantiate a plugin from a string for export. &lt;br /&gt;
&lt;br /&gt;
Once all XHTML is generated in one class it will become easier to make changes to aspects of rendering such as amalgamating citations, phrases and templates into one coherent language.&lt;br /&gt;
&lt;br /&gt;
The proposed changes to list would allow us to remove its internal reference to repository but still expand the $list section of the core api from:&lt;br /&gt;
&lt;br /&gt;
=== list ===&lt;br /&gt;
 $n = $list-&amp;gt;count;&lt;br /&gt;
 $list-&amp;gt;map( sub {&lt;br /&gt;
     my ( $repository, $dataset, $dataobj, $ctx ) = @_;&lt;br /&gt;
     # do something to the dataobj here&lt;br /&gt;
 }, $ctx );&lt;br /&gt;
 $dataobj = $list-&amp;gt;item( $offset );&lt;br /&gt;
 @all_dataobjs = $list-&amp;gt;slice &lt;br /&gt;
 @dataobjs = $list-&amp;gt;slice( $offset, $length ); &lt;br /&gt;
 \@ids = $list-&amp;gt;ids;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
extended to:&lt;br /&gt;
&lt;br /&gt;
=== list ===&lt;br /&gt;
 $n = $list-&amp;gt;count;&lt;br /&gt;
 $list-&amp;gt;map( sub {&lt;br /&gt;
     my ( $repository, $dataset, $dataobj, $ctx ) = @_;&lt;br /&gt;
     # do something to the dataobj here&lt;br /&gt;
 }, $ctx );&lt;br /&gt;
 $dataobj = $list-&amp;gt;item( $offset );&lt;br /&gt;
 @all_dataobjs = $list-&amp;gt;slice &lt;br /&gt;
 @dataobjs = $list-&amp;gt;slice( $offset, $length ); &lt;br /&gt;
 \@ids = $list-&amp;gt;ids;&lt;br /&gt;
 $list-&amp;gt;export($plugin) # rather than plugin id &lt;br /&gt;
 $list-&amp;gt;description # string description of the list. This might not get added because im not actually convinced it is used...&lt;br /&gt;
&lt;br /&gt;
=== XHTML ===&lt;br /&gt;
If rendering the description of list is important XHTML would gain&lt;br /&gt;
 $xhtml-&amp;gt;list($list)&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=EPrints3_Roadmap&amp;diff=11932</id>
		<title>EPrints3 Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=EPrints3_Roadmap&amp;diff=11932"/>
		<updated>2016-01-05T17:14:07Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* Removing render functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= 2016 Community Roadmap =&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
* Create a more comprehensive set of Unit tests for EPrints so community contributions can be accepted more easily&lt;br /&gt;
* Deprecate old subs from repository into BackCompatibility with a warning saying what version they will abort and what function should be used as an alternative (make_element, make_text, render_data_element, etc,etc)&lt;br /&gt;
* Remove references to these deprecated subs within the core code&lt;br /&gt;
* Start moving render functions for objects into the XHTML class in order to get all the rendering in one place (see section below)&lt;br /&gt;
* Start removing references to repository from objects where they should not occur.&lt;br /&gt;
&lt;br /&gt;
===Removing render functions===&lt;br /&gt;
&lt;br /&gt;
Many objects in eprints have render functions. For example $list-&amp;gt;render_description and $dataset-&amp;gt;render_description. This breaks the single responsibility principle for these objects. For example $list has to know about how to cache and retrieve lists of dataobjs and union and intersect with other lists but also has to know about how it is expected to appear in and XHTML page. This responsibility for $xhtml. Example $xhtml-&amp;gt;list($list). These kind of changes would mean that many objects would no longer need a reference to $repository. List currently takes a reference to $repository it uses this reference to get access to $database (which it actually needs), get access to $xhtml functions so it can render its description (should not be its responsibility) and $plugin_factory to instantiate a plugin from a string for export. &lt;br /&gt;
&lt;br /&gt;
Once all XHTML is generated in one class it will become easier to make changes to aspects of rendering such as amalgamating citations, phrases and templates into one coherent language.&lt;br /&gt;
&lt;br /&gt;
The proposed changes to list would allow us to remove its internal reference to repository but still expand the $list section of the core api from:&lt;br /&gt;
&lt;br /&gt;
=== list ===&lt;br /&gt;
 $n = $list-&amp;gt;count;&lt;br /&gt;
 $list-&amp;gt;map( sub {&lt;br /&gt;
     my ( $repository, $dataset, $dataobj, $ctx ) = @_;&lt;br /&gt;
     # do something to the dataobj here&lt;br /&gt;
 }, $ctx );&lt;br /&gt;
 $dataobj = $list-&amp;gt;item( $offset );&lt;br /&gt;
 @all_dataobjs = $list-&amp;gt;slice &lt;br /&gt;
 @dataobjs = $list-&amp;gt;slice( $offset, $length ); &lt;br /&gt;
 \@ids = $list-&amp;gt;ids;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
extended to:&lt;br /&gt;
&lt;br /&gt;
=== list ===&lt;br /&gt;
 $n = $list-&amp;gt;count;&lt;br /&gt;
 $list-&amp;gt;map( sub {&lt;br /&gt;
     my ( $repository, $dataset, $dataobj, $ctx ) = @_;&lt;br /&gt;
     # do something to the dataobj here&lt;br /&gt;
 }, $ctx );&lt;br /&gt;
 $dataobj = $list-&amp;gt;item( $offset );&lt;br /&gt;
 @all_dataobjs = $list-&amp;gt;slice &lt;br /&gt;
 @dataobjs = $list-&amp;gt;slice( $offset, $length ); &lt;br /&gt;
 \@ids = $list-&amp;gt;ids;&lt;br /&gt;
 $list-&amp;gt;export($plugin) # rather than plugin id &lt;br /&gt;
 $list-&amp;gt;description # string description of the list. This might not get added because im not actually convinced it is used...&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=EPrints3_Roadmap&amp;diff=11931</id>
		<title>EPrints3 Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=EPrints3_Roadmap&amp;diff=11931"/>
		<updated>2016-01-05T17:09:56Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* 2016 Community Roadmap */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= 2016 Community Roadmap =&lt;br /&gt;
&lt;br /&gt;
==Goals==&lt;br /&gt;
* Create a more comprehensive set of Unit tests for EPrints so community contributions can be accepted more easily&lt;br /&gt;
* Deprecate old subs from repository into BackCompatibility with a warning saying what version they will abort and what function should be used as an alternative (make_element, make_text, render_data_element, etc,etc)&lt;br /&gt;
* Remove references to these deprecated subs within the core code&lt;br /&gt;
* Start moving render functions for objects into the XHTML class in order to get all the rendering in one place (see section below)&lt;br /&gt;
* Start removing references to repository from objects where they should not occur.&lt;br /&gt;
&lt;br /&gt;
===Removing render functions===&lt;br /&gt;
&lt;br /&gt;
Many objects in eprints have render functions. For example $list-&amp;gt;render_description and $dataset-&amp;gt;render_description. This breaks the single responsibility principle for these objects. For example $list has to know about how to cache and retrieve lists of dataobjs and union and intersect with other lists but also has to know about how it is expected to appear in and XHTML page. This responsibility for $xhtml. Example $xhtml-&amp;gt;list($list). These kind of changes would mean that many objects would no longer need a reference to $repository. List currently takes a reference to $repository it uses this reference to get access to $database (which it actually needs), get access to $xhtml functions so it can render its description (should not be its responsibility) and $plugin_factory to instantiate a plugin from a string for export. &lt;br /&gt;
&lt;br /&gt;
The proposed changes to list would allow us to change the current $list section of the core api from:&lt;br /&gt;
&lt;br /&gt;
=== list ===&lt;br /&gt;
 $n = $list-&amp;gt;count;&lt;br /&gt;
 $list-&amp;gt;map( sub {&lt;br /&gt;
     my ( $repository, $dataset, $dataobj, $ctx ) = @_;&lt;br /&gt;
     # do something to the dataobj here&lt;br /&gt;
 }, $ctx );&lt;br /&gt;
 $dataobj = $list-&amp;gt;item( $offset );&lt;br /&gt;
 @all_dataobjs = $list-&amp;gt;slice &lt;br /&gt;
 @dataobjs = $list-&amp;gt;slice( $offset, $length ); &lt;br /&gt;
 \@ids = $list-&amp;gt;ids;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
extended to:&lt;br /&gt;
&lt;br /&gt;
=== list ===&lt;br /&gt;
 $n = $list-&amp;gt;count;&lt;br /&gt;
 $list-&amp;gt;map( sub {&lt;br /&gt;
     my ( $repository, $dataset, $dataobj, $ctx ) = @_;&lt;br /&gt;
     # do something to the dataobj here&lt;br /&gt;
 }, $ctx );&lt;br /&gt;
 $dataobj = $list-&amp;gt;item( $offset );&lt;br /&gt;
 @all_dataobjs = $list-&amp;gt;slice &lt;br /&gt;
 @dataobjs = $list-&amp;gt;slice( $offset, $length ); &lt;br /&gt;
 \@ids = $list-&amp;gt;ids;&lt;br /&gt;
 $list-&amp;gt;export($plugin) # rather than plugin id &lt;br /&gt;
 $list-&amp;gt;description # string description of the list. This might not get added because im not actually convinced it is used...&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=EPrints3_Roadmap&amp;diff=11930</id>
		<title>EPrints3 Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=EPrints3_Roadmap&amp;diff=11930"/>
		<updated>2016-01-05T17:09:21Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* Removing render functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= 2016 Community Roadmap =&lt;br /&gt;
&lt;br /&gt;
* Create a more comprehensive set of Unit tests for EPrints so community contributions can be accepted more easily&lt;br /&gt;
* Deprecate old subs from repository into BackCompatibility with a warning saying what version they will abort and what function should be used as an alternative (make_element, make_text, render_data_element, etc,etc)&lt;br /&gt;
* Remove references to these deprecated subs within the core code&lt;br /&gt;
* Start moving render functions for objects into the XHTML class in order to get all the rendering in one place (see section below)&lt;br /&gt;
* Start removing references to repository from objects where they should not occur.&lt;br /&gt;
&lt;br /&gt;
===Removing render functions===&lt;br /&gt;
&lt;br /&gt;
Many objects in eprints have render functions. For example $list-&amp;gt;render_description and $dataset-&amp;gt;render_description. This breaks the single responsibility principle for these objects. For example $list has to know about how to cache and retrieve lists of dataobjs and union and intersect with other lists but also has to know about how it is expected to appear in and XHTML page. This responsibility for $xhtml. Example $xhtml-&amp;gt;list($list). These kind of changes would mean that many objects would no longer need a reference to $repository. List currently takes a reference to $repository it uses this reference to get access to $database (which it actually needs), get access to $xhtml functions so it can render its description (should not be its responsibility) and $plugin_factory to instantiate a plugin from a string for export. &lt;br /&gt;
&lt;br /&gt;
The proposed changes to list would allow us to change the current $list section of the core api from:&lt;br /&gt;
&lt;br /&gt;
=== list ===&lt;br /&gt;
 $n = $list-&amp;gt;count;&lt;br /&gt;
 $list-&amp;gt;map( sub {&lt;br /&gt;
     my ( $repository, $dataset, $dataobj, $ctx ) = @_;&lt;br /&gt;
     # do something to the dataobj here&lt;br /&gt;
 }, $ctx );&lt;br /&gt;
 $dataobj = $list-&amp;gt;item( $offset );&lt;br /&gt;
 @all_dataobjs = $list-&amp;gt;slice &lt;br /&gt;
 @dataobjs = $list-&amp;gt;slice( $offset, $length ); &lt;br /&gt;
 \@ids = $list-&amp;gt;ids;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
extended to:&lt;br /&gt;
&lt;br /&gt;
=== list ===&lt;br /&gt;
 $n = $list-&amp;gt;count;&lt;br /&gt;
 $list-&amp;gt;map( sub {&lt;br /&gt;
     my ( $repository, $dataset, $dataobj, $ctx ) = @_;&lt;br /&gt;
     # do something to the dataobj here&lt;br /&gt;
 }, $ctx );&lt;br /&gt;
 $dataobj = $list-&amp;gt;item( $offset );&lt;br /&gt;
 @all_dataobjs = $list-&amp;gt;slice &lt;br /&gt;
 @dataobjs = $list-&amp;gt;slice( $offset, $length ); &lt;br /&gt;
 \@ids = $list-&amp;gt;ids;&lt;br /&gt;
 $list-&amp;gt;export($plugin) # rather than plugin id &lt;br /&gt;
 $list-&amp;gt;description # string description of the list. This might not get added because im not actually convinced it is used...&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=EPrints3_Roadmap&amp;diff=11929</id>
		<title>EPrints3 Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=EPrints3_Roadmap&amp;diff=11929"/>
		<updated>2016-01-05T17:08:44Z</updated>

		<summary type="html">&lt;p&gt;Pm705: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= 2016 Community Roadmap =&lt;br /&gt;
&lt;br /&gt;
* Create a more comprehensive set of Unit tests for EPrints so community contributions can be accepted more easily&lt;br /&gt;
* Deprecate old subs from repository into BackCompatibility with a warning saying what version they will abort and what function should be used as an alternative (make_element, make_text, render_data_element, etc,etc)&lt;br /&gt;
* Remove references to these deprecated subs within the core code&lt;br /&gt;
* Start moving render functions for objects into the XHTML class in order to get all the rendering in one place (see section below)&lt;br /&gt;
* Start removing references to repository from objects where they should not occur.&lt;br /&gt;
&lt;br /&gt;
===Removing render functions===&lt;br /&gt;
&lt;br /&gt;
Many objects in eprints have render functions. For example $list-&amp;gt;render_description and $dataset-&amp;gt;render_description. This breaks the single responsibility principle for these objects. For example $list has to know about how to cache and retrieve lists of dataobjs and union and intersect with other lists but also has to know about how it is expected to appear in and XHTML page. This responsibility for $xhtml. Example $xhtml-&amp;gt;list($list). These kind of changes would mean that many objects would no longer need a reference to $repository. List currently takes a reference to $repository it uses this reference to get access to $database (which it actually needs), get access to $xhtml functions so it can render its description (should not be its responsibility) and $plugin_factory to instantiate a plugin from a string for export. &lt;br /&gt;
&lt;br /&gt;
The proposed changes to list would change the current $list section of the core api from:&lt;br /&gt;
&lt;br /&gt;
=== list ===&lt;br /&gt;
 $n = $list-&amp;gt;count;&lt;br /&gt;
 $list-&amp;gt;map( sub {&lt;br /&gt;
     my ( $repository, $dataset, $dataobj, $ctx ) = @_;&lt;br /&gt;
     # do something to the dataobj here&lt;br /&gt;
 }, $ctx );&lt;br /&gt;
 $dataobj = $list-&amp;gt;item( $offset );&lt;br /&gt;
 @all_dataobjs = $list-&amp;gt;slice &lt;br /&gt;
 @dataobjs = $list-&amp;gt;slice( $offset, $length ); &lt;br /&gt;
 \@ids = $list-&amp;gt;ids;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
extended to:&lt;br /&gt;
&lt;br /&gt;
=== list ===&lt;br /&gt;
 $n = $list-&amp;gt;count;&lt;br /&gt;
 $list-&amp;gt;map( sub {&lt;br /&gt;
     my ( $repository, $dataset, $dataobj, $ctx ) = @_;&lt;br /&gt;
     # do something to the dataobj here&lt;br /&gt;
 }, $ctx );&lt;br /&gt;
 $dataobj = $list-&amp;gt;item( $offset );&lt;br /&gt;
 @all_dataobjs = $list-&amp;gt;slice &lt;br /&gt;
 @dataobjs = $list-&amp;gt;slice( $offset, $length ); &lt;br /&gt;
 \@ids = $list-&amp;gt;ids;&lt;br /&gt;
 $list-&amp;gt;export($plugin) # rather than plugin id &lt;br /&gt;
 $list-&amp;gt;description # string description of the list. This might not get added because im not actually convinced it is used...&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=EPrints3_Roadmap&amp;diff=11928</id>
		<title>EPrints3 Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=EPrints3_Roadmap&amp;diff=11928"/>
		<updated>2016-01-05T17:05:14Z</updated>

		<summary type="html">&lt;p&gt;Pm705: Created page with &amp;quot; = 2016 Community Roadmap =  * Create a more comprehensive set of Unit tests for EPrints so community contributions can be accepted more easily * Deprecate old subs from repos...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= 2016 Community Roadmap =&lt;br /&gt;
&lt;br /&gt;
* Create a more comprehensive set of Unit tests for EPrints so community contributions can be accepted more easily&lt;br /&gt;
* Deprecate old subs from repository into BackCompatibility with a warning saying what version they will abort and what function should be used as an alternative (make_element, make_text, render_data_element, etc,etc)&lt;br /&gt;
* Remove references to these deprecated subs within the core code&lt;br /&gt;
* Start moving render functions for objects into the XHTML class in order to get all the rendering in one place (see section below)&lt;br /&gt;
* Start removing references to repository from objects where they should not occur.&lt;br /&gt;
&lt;br /&gt;
===Removing render functions===&lt;br /&gt;
&lt;br /&gt;
Many objects in eprints have render functions. For example $list-&amp;gt;render_description and $dataset-&amp;gt;render_description. This breaks the single responsibility principle for these objects. For example $list has to know about how to cache and retrieve lists of dataobjs and union and intersect with other lists but also has to know about how it is expected to appear in and XHTML page. This responsibility for $xhtml. Example $xhtml-&amp;gt;list($list). These kind of changes would mean that many objects would no longer need a reference to $repository. List currently takes a reference to $repository it uses this reference to get access to $database (which it actually needs), get access to $xhtml functions so it can render its description (should not be its responsibility) and $plugin_factory to instantiate a plugin from a string for export. &lt;br /&gt;
&lt;br /&gt;
The proposed changes to list would change the current $list section of the core api from:&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Core_API&amp;diff=11927</id>
		<title>Core API</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Core_API&amp;diff=11927"/>
		<updated>2016-01-05T12:56:17Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* Dataset */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{API}}&lt;br /&gt;
[[Category:API]]&lt;br /&gt;
&lt;br /&gt;
The core API was introduced in EPrints 3.2.0 and is intended to provide a clean and consistent programming interface to the EPrints system. &lt;br /&gt;
&lt;br /&gt;
Not all essential functionality is yet available in the new API, as we've only included functions which we are confident we can keep stable for a number of versions. &lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
 use EPrints;&lt;br /&gt;
 my $ep = EPrints-&amp;gt;new();&lt;br /&gt;
 my $repo = $ep-&amp;gt;repository( &amp;quot;myrepo&amp;quot; );&lt;br /&gt;
 my $an_eprint = $repo-&amp;gt;eprint( 23 );&lt;br /&gt;
&lt;br /&gt;
=== EPrints ===&lt;br /&gt;
 $ep = EPrints-&amp;gt;new();&lt;br /&gt;
 @ids = $ep-&amp;gt;repository_ids; # list active repository ids&lt;br /&gt;
 $repo = $ep-&amp;gt;repository( &amp;quot;devel&amp;quot;, noise=&amp;gt;1 );&lt;br /&gt;
 $repo = $ep-&amp;gt;current_repository(); # from Apache::Request URI&lt;br /&gt;
 EPrints-&amp;gt;abort( $message );&lt;br /&gt;
&lt;br /&gt;
=== Repository ===&lt;br /&gt;
 $xml = $repo-&amp;gt;xml;&lt;br /&gt;
 $dataset = $repo-&amp;gt;dataset( &amp;quot;user&amp;quot; );&lt;br /&gt;
 $user = $repo-&amp;gt;current_user;&lt;br /&gt;
 $query = $repo-&amp;gt;query;&lt;br /&gt;
 $current_page_url = $repo-&amp;gt;current_url( host =&amp;gt; 1, path =&amp;gt; 1, query =&amp;gt; 1, etc. );&lt;br /&gt;
 $config_element = $repo-&amp;gt;config( $key, [@subkeys] );&lt;br /&gt;
 $repository-&amp;gt;log( $message ); &lt;br /&gt;
 $string = $repo-&amp;gt;query-&amp;gt;param( &amp;quot;X&amp;quot; );&lt;br /&gt;
 $repo-&amp;gt;redirect( $url );&lt;br /&gt;
 $eprint = $repo-&amp;gt;eprint( 23 );&lt;br /&gt;
 $user = $repo-&amp;gt;user( 23 );&lt;br /&gt;
 $user = $repo-&amp;gt;user_by_username( &amp;quot;cjg&amp;quot; );&lt;br /&gt;
 $user = $repo-&amp;gt;user_by_email( 'cjg@ecs.soton.ac.uk' );&lt;br /&gt;
&lt;br /&gt;
=== Dataset ===&lt;br /&gt;
 $dataset = $repo-&amp;gt;dataset( &amp;quot;eprint&amp;quot; )&lt;br /&gt;
 $string = $dataset-&amp;gt;base_id; # eprint&lt;br /&gt;
 $string = $dataset-&amp;gt;id; # inbox&lt;br /&gt;
 &lt;br /&gt;
 $repo = $dataobj-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $dataobj = $dataset-&amp;gt;create_dataobj( $data );&lt;br /&gt;
 $eprint = $dataset-&amp;gt;dataobj( 23 );&lt;br /&gt;
 &lt;br /&gt;
 $search = $dataset-&amp;gt;prepare_search( %options );&lt;br /&gt;
 $list = $dataset-&amp;gt;search( %options ); # prepare_search( %options )-&amp;gt;execute&lt;br /&gt;
 $list = $dataset-&amp;gt;search; # match ALL&lt;br /&gt;
 &lt;br /&gt;
 $metafield = $dataset-&amp;gt;field( $fieldname );&lt;br /&gt;
 $metafield = $dataset-&amp;gt;key_field;&lt;br /&gt;
 @metafields = $dataset-&amp;gt;fields; &lt;br /&gt;
 &lt;br /&gt;
 $dataset-&amp;gt;search-&amp;gt;map( sub {}, $ctx );&lt;br /&gt;
 $n = $dataset-&amp;gt;search-&amp;gt;count; &lt;br /&gt;
 $ids = $dataset-&amp;gt;search-&amp;gt;ids;&lt;br /&gt;
 $list = $dataset-&amp;gt;list( \@ids );&lt;br /&gt;
&lt;br /&gt;
=== list ===&lt;br /&gt;
 $n = $list-&amp;gt;count;&lt;br /&gt;
 $list-&amp;gt;map( sub {&lt;br /&gt;
     my ( $repository, $dataset, $dataobj, $ctx ) = @_;&lt;br /&gt;
     # do something to the dataobj here&lt;br /&gt;
 }, $ctx );&lt;br /&gt;
 $dataobj = $list-&amp;gt;item( $offset );&lt;br /&gt;
 @all_dataobjs = $list-&amp;gt;slice &lt;br /&gt;
 @dataobjs = $list-&amp;gt;slice( $offset, $length ); &lt;br /&gt;
 \@ids = $list-&amp;gt;ids;&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_string( $string );&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_file( $filename );&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_url( $url );&lt;br /&gt;
 &lt;br /&gt;
 $utf8_string = $xml-&amp;gt;to_string( $dom_node, %opts );&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;clone( $dom_node ); # deep&lt;br /&gt;
 $dom_node = $xml-&amp;gt;clone_node( $dom_node ); # shallow&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;contents_of( $dom_node ); # clone and return child nodes&lt;br /&gt;
 $utf8_string = $xml-&amp;gt;text_contents_of( $dom_node ); # Return text child nodes as a string&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_element( $name, %attr );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_text_node( $value );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_comment( $value );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_document_fragment;&lt;br /&gt;
 &lt;br /&gt;
 $bool = $xml-&amp;gt;is( $dom_node, &amp;quot;Text&amp;quot; );&lt;br /&gt;
 &lt;br /&gt;
 $xml-&amp;gt;dispose( $dom_node ); &lt;br /&gt;
&lt;br /&gt;
=== XHTML ===&lt;br /&gt;
 $xhtml = $repo-&amp;gt;xhtml;&lt;br /&gt;
 &lt;br /&gt;
 $utf8_string = $xhtml-&amp;gt;to_xhtml( $dom_node, %opts ); # remove NS prefixes, fix &amp;lt;script&amp;gt; etc.&lt;br /&gt;
 &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;input_field( $name, $value, %opts ); # nb. type &amp;amp; noenter are now options. noenter prevents the enter being pressed in the input field using javascript&lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;hidden_field( $name, $value, %opts ); # tdb: this is used *a lot* and is well defined&lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;text_area_field( $name, $value, %opts ); # tdb: value becomes a child text node &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;form( $method, $url );&lt;br /&gt;
 &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;data_element( $name, $value, %opts ); # tdb: render_data_element&lt;br /&gt;
 &lt;br /&gt;
 $page = $xhtml-&amp;gt;page( $map, %opts );&lt;br /&gt;
&lt;br /&gt;
=== Page ===&lt;br /&gt;
 $page-&amp;gt;send( %options ); &lt;br /&gt;
 $page-&amp;gt;write_to_file( $filename );&lt;br /&gt;
&lt;br /&gt;
=== DataObj ===&lt;br /&gt;
&lt;br /&gt;
 $dataobj = $dataset-&amp;gt;dataobj( $id );&lt;br /&gt;
 $dataobj-&amp;gt;delete;&lt;br /&gt;
 $dataobj-&amp;gt;commit( $force );&lt;br /&gt;
 &lt;br /&gt;
 $dataset = $dataobj-&amp;gt;dataset;&lt;br /&gt;
 $repo = $dataobj-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $id = $dataobj-&amp;gt;id;&lt;br /&gt;
 $dataobj-&amp;gt;set_value( $fieldname, $value );&lt;br /&gt;
 $value = $dataobj-&amp;gt;value( $fieldname );&lt;br /&gt;
 \@value = $dataobj-&amp;gt;value( $fieldname ); # multiple&lt;br /&gt;
 $boolean = $dataobj-&amp;gt;is_set( $fieldname );&lt;br /&gt;
 &lt;br /&gt;
 $xhtml = $dataobj-&amp;gt;render_value( $fieldname );&lt;br /&gt;
 $xhtml = $dataobj-&amp;gt;render_citation( $style, %opts );&lt;br /&gt;
 &lt;br /&gt;
 $uri = $dataobj-&amp;gt;uri;&lt;br /&gt;
 $url = $dataobj-&amp;gt;url;&lt;br /&gt;
 &lt;br /&gt;
 $string = $dataobj-&amp;gt;export( $plugin_id, %opts );&lt;br /&gt;
 $dataobj = $dataobj-&amp;gt;create_subobject( $fieldname, $epdata );&lt;br /&gt;
&lt;br /&gt;
=== MetaField ===&lt;br /&gt;
Now has a handle on both it's repository/session AND dataset.&lt;br /&gt;
&lt;br /&gt;
 my $field = $dataset-&amp;gt;field( $fieldname );&lt;br /&gt;
 &lt;br /&gt;
 $dataset = $field-&amp;gt;dataset;&lt;br /&gt;
 $repo = $field-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $field-&amp;gt;set_property( $property, $value );&lt;br /&gt;
 $value = $field-&amp;gt;property( $property );&lt;br /&gt;
 &lt;br /&gt;
 $name = $field-&amp;gt;name;&lt;br /&gt;
 $type = $field-&amp;gt;type;&lt;br /&gt;
 &lt;br /&gt;
 $xhtml = $field-&amp;gt;render_name;&lt;br /&gt;
 $xhtml = $field-&amp;gt;render_help;&lt;br /&gt;
 $xhtml = $field-&amp;gt;render_value_label( $value );&lt;br /&gt;
 &lt;br /&gt;
 $values = $field-&amp;gt;all_values( %opts );&lt;br /&gt;
 $sorted_list = $field-&amp;gt;sort_values( $unsorted_list );&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Core_API&amp;diff=11926</id>
		<title>Core API</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Core_API&amp;diff=11926"/>
		<updated>2016-01-03T22:37:37Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{API}}&lt;br /&gt;
[[Category:API]]&lt;br /&gt;
&lt;br /&gt;
The core API was introduced in EPrints 3.2.0 and is intended to provide a clean and consistent programming interface to the EPrints system. &lt;br /&gt;
&lt;br /&gt;
Not all essential functionality is yet available in the new API, as we've only included functions which we are confident we can keep stable for a number of versions. &lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
 use EPrints;&lt;br /&gt;
 my $ep = EPrints-&amp;gt;new();&lt;br /&gt;
 my $repo = $ep-&amp;gt;repository( &amp;quot;myrepo&amp;quot; );&lt;br /&gt;
 my $an_eprint = $repo-&amp;gt;eprint( 23 );&lt;br /&gt;
&lt;br /&gt;
=== EPrints ===&lt;br /&gt;
 $ep = EPrints-&amp;gt;new();&lt;br /&gt;
 @ids = $ep-&amp;gt;repository_ids; # list active repository ids&lt;br /&gt;
 $repo = $ep-&amp;gt;repository( &amp;quot;devel&amp;quot;, noise=&amp;gt;1 );&lt;br /&gt;
 $repo = $ep-&amp;gt;current_repository(); # from Apache::Request URI&lt;br /&gt;
 EPrints-&amp;gt;abort( $message );&lt;br /&gt;
&lt;br /&gt;
=== Repository ===&lt;br /&gt;
 $xml = $repo-&amp;gt;xml;&lt;br /&gt;
 $dataset = $repo-&amp;gt;dataset( &amp;quot;user&amp;quot; );&lt;br /&gt;
 $user = $repo-&amp;gt;current_user;&lt;br /&gt;
 $query = $repo-&amp;gt;query;&lt;br /&gt;
 $current_page_url = $repo-&amp;gt;current_url( host =&amp;gt; 1, path =&amp;gt; 1, query =&amp;gt; 1, etc. );&lt;br /&gt;
 $config_element = $repo-&amp;gt;config( $key, [@subkeys] );&lt;br /&gt;
 $repository-&amp;gt;log( $message ); &lt;br /&gt;
 $string = $repo-&amp;gt;query-&amp;gt;param( &amp;quot;X&amp;quot; );&lt;br /&gt;
 $repo-&amp;gt;redirect( $url );&lt;br /&gt;
 $eprint = $repo-&amp;gt;eprint( 23 );&lt;br /&gt;
 $user = $repo-&amp;gt;user( 23 );&lt;br /&gt;
 $user = $repo-&amp;gt;user_by_username( &amp;quot;cjg&amp;quot; );&lt;br /&gt;
 $user = $repo-&amp;gt;user_by_email( 'cjg@ecs.soton.ac.uk' );&lt;br /&gt;
&lt;br /&gt;
=== Dataset ===&lt;br /&gt;
 $dataset = $repo-&amp;gt;dataset( &amp;quot;eprint&amp;quot; )&lt;br /&gt;
 $string = $dataset-&amp;gt;base_id; # eprint&lt;br /&gt;
 $string = $dataset-&amp;gt;id; # inbox&lt;br /&gt;
 &lt;br /&gt;
 $repo = $dataobj-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $dataobj = $dataset-&amp;gt;create_dataobj( $data );&lt;br /&gt;
 $user = $dataset-&amp;gt;dataobj( 23 );&lt;br /&gt;
 &lt;br /&gt;
 $search = $dataset-&amp;gt;prepare_search( %options );&lt;br /&gt;
 $list = $dataset-&amp;gt;search( %options ); # prepare_search( %options )-&amp;gt;execute&lt;br /&gt;
 $list = $dataset-&amp;gt;search; # match ALL&lt;br /&gt;
 &lt;br /&gt;
 $metafield = $dataset-&amp;gt;field( $fieldname );&lt;br /&gt;
 $metafield = $dataset-&amp;gt;key_field;&lt;br /&gt;
 @metafields = $dataset-&amp;gt;fields; &lt;br /&gt;
 &lt;br /&gt;
 $dataset-&amp;gt;search-&amp;gt;map( sub {}, $ctx );&lt;br /&gt;
 $n = $dataset-&amp;gt;search-&amp;gt;count; &lt;br /&gt;
 $ids = $dataset-&amp;gt;search-&amp;gt;ids;&lt;br /&gt;
 $list = $dataset-&amp;gt;list( \@ids );&lt;br /&gt;
&lt;br /&gt;
=== list ===&lt;br /&gt;
 $n = $list-&amp;gt;count;&lt;br /&gt;
 $list-&amp;gt;map( sub {&lt;br /&gt;
     my ( $repository, $dataset, $dataobj, $ctx ) = @_;&lt;br /&gt;
     # do something to the dataobj here&lt;br /&gt;
 }, $ctx );&lt;br /&gt;
 $dataobj = $list-&amp;gt;item( $offset );&lt;br /&gt;
 @all_dataobjs = $list-&amp;gt;slice &lt;br /&gt;
 @dataobjs = $list-&amp;gt;slice( $offset, $length ); &lt;br /&gt;
 \@ids = $list-&amp;gt;ids;&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_string( $string );&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_file( $filename );&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_url( $url );&lt;br /&gt;
 &lt;br /&gt;
 $utf8_string = $xml-&amp;gt;to_string( $dom_node, %opts );&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;clone( $dom_node ); # deep&lt;br /&gt;
 $dom_node = $xml-&amp;gt;clone_node( $dom_node ); # shallow&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;contents_of( $dom_node ); # clone and return child nodes&lt;br /&gt;
 $utf8_string = $xml-&amp;gt;text_contents_of( $dom_node ); # Return text child nodes as a string&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_element( $name, %attr );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_text_node( $value );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_comment( $value );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_document_fragment;&lt;br /&gt;
 &lt;br /&gt;
 $bool = $xml-&amp;gt;is( $dom_node, &amp;quot;Text&amp;quot; );&lt;br /&gt;
 &lt;br /&gt;
 $xml-&amp;gt;dispose( $dom_node ); &lt;br /&gt;
&lt;br /&gt;
=== XHTML ===&lt;br /&gt;
 $xhtml = $repo-&amp;gt;xhtml;&lt;br /&gt;
 &lt;br /&gt;
 $utf8_string = $xhtml-&amp;gt;to_xhtml( $dom_node, %opts ); # remove NS prefixes, fix &amp;lt;script&amp;gt; etc.&lt;br /&gt;
 &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;input_field( $name, $value, %opts ); # nb. type &amp;amp; noenter are now options. noenter prevents the enter being pressed in the input field using javascript&lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;hidden_field( $name, $value, %opts ); # tdb: this is used *a lot* and is well defined&lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;text_area_field( $name, $value, %opts ); # tdb: value becomes a child text node &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;form( $method, $url );&lt;br /&gt;
 &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;data_element( $name, $value, %opts ); # tdb: render_data_element&lt;br /&gt;
 &lt;br /&gt;
 $page = $xhtml-&amp;gt;page( $map, %opts );&lt;br /&gt;
&lt;br /&gt;
=== Page ===&lt;br /&gt;
 $page-&amp;gt;send( %options ); &lt;br /&gt;
 $page-&amp;gt;write_to_file( $filename );&lt;br /&gt;
&lt;br /&gt;
=== DataObj ===&lt;br /&gt;
&lt;br /&gt;
 $dataobj = $dataset-&amp;gt;dataobj( $id );&lt;br /&gt;
 $dataobj-&amp;gt;delete;&lt;br /&gt;
 $dataobj-&amp;gt;commit( $force );&lt;br /&gt;
 &lt;br /&gt;
 $dataset = $dataobj-&amp;gt;dataset;&lt;br /&gt;
 $repo = $dataobj-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $id = $dataobj-&amp;gt;id;&lt;br /&gt;
 $dataobj-&amp;gt;set_value( $fieldname, $value );&lt;br /&gt;
 $value = $dataobj-&amp;gt;value( $fieldname );&lt;br /&gt;
 \@value = $dataobj-&amp;gt;value( $fieldname ); # multiple&lt;br /&gt;
 $boolean = $dataobj-&amp;gt;is_set( $fieldname );&lt;br /&gt;
 &lt;br /&gt;
 $xhtml = $dataobj-&amp;gt;render_value( $fieldname );&lt;br /&gt;
 $xhtml = $dataobj-&amp;gt;render_citation( $style, %opts );&lt;br /&gt;
 &lt;br /&gt;
 $uri = $dataobj-&amp;gt;uri;&lt;br /&gt;
 $url = $dataobj-&amp;gt;url;&lt;br /&gt;
 &lt;br /&gt;
 $string = $dataobj-&amp;gt;export( $plugin_id, %opts );&lt;br /&gt;
 $dataobj = $dataobj-&amp;gt;create_subobject( $fieldname, $epdata );&lt;br /&gt;
&lt;br /&gt;
=== MetaField ===&lt;br /&gt;
Now has a handle on both it's repository/session AND dataset.&lt;br /&gt;
&lt;br /&gt;
 my $field = $dataset-&amp;gt;field( $fieldname );&lt;br /&gt;
 &lt;br /&gt;
 $dataset = $field-&amp;gt;dataset;&lt;br /&gt;
 $repo = $field-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $field-&amp;gt;set_property( $property, $value );&lt;br /&gt;
 $value = $field-&amp;gt;property( $property );&lt;br /&gt;
 &lt;br /&gt;
 $name = $field-&amp;gt;name;&lt;br /&gt;
 $type = $field-&amp;gt;type;&lt;br /&gt;
 &lt;br /&gt;
 $xhtml = $field-&amp;gt;render_name;&lt;br /&gt;
 $xhtml = $field-&amp;gt;render_help;&lt;br /&gt;
 $xhtml = $field-&amp;gt;render_value_label( $value );&lt;br /&gt;
 &lt;br /&gt;
 $values = $field-&amp;gt;all_values( %opts );&lt;br /&gt;
 $sorted_list = $field-&amp;gt;sort_values( $unsorted_list );&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Core_API&amp;diff=11925</id>
		<title>Core API</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Core_API&amp;diff=11925"/>
		<updated>2016-01-03T22:36:44Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{API}}&lt;br /&gt;
[[Category:API]]&lt;br /&gt;
&lt;br /&gt;
The core API was introduced in EPrints 3.2.0 and is intended to provide a clean and consistent programming interface to the EPrints system. &lt;br /&gt;
&lt;br /&gt;
Not all essential functionality is yet available in the new API, as we've only included functions which we are confident we can keep stable for a number of versions. &lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
 use EPrints;&lt;br /&gt;
 my $ep = EPrints-&amp;gt;new();&lt;br /&gt;
 my $repo = $ep-&amp;gt;repository( &amp;quot;myrepo&amp;quot; );&lt;br /&gt;
 my $an_eprint = $repo-&amp;gt;eprint( 23 );&lt;br /&gt;
&lt;br /&gt;
=== EPrints ===&lt;br /&gt;
 $ep = EPrints-&amp;gt;new();&lt;br /&gt;
 @ids = $ep-&amp;gt;repository_ids; # list active repository ids&lt;br /&gt;
 $repo = $ep-&amp;gt;repository( &amp;quot;devel&amp;quot;, noise=&amp;gt;1 );&lt;br /&gt;
 $repo = $ep-&amp;gt;current_repository(); # from Apache::Request URI&lt;br /&gt;
 EPrints-&amp;gt;abort( $message );&lt;br /&gt;
&lt;br /&gt;
=== Repository ===&lt;br /&gt;
 $xml = $repo-&amp;gt;xml;&lt;br /&gt;
 $dataset = $repo-&amp;gt;dataset( &amp;quot;user&amp;quot; );&lt;br /&gt;
 $user = $repo-&amp;gt;current_user;&lt;br /&gt;
 $query = $repo-&amp;gt;query;&lt;br /&gt;
 $current_page_url = $repo-&amp;gt;current_url( host =&amp;gt; 1, path =&amp;gt; 1, query =&amp;gt; 1, etc. );&lt;br /&gt;
 $config_element = $repo-&amp;gt;config( $key, [@subkeys] );&lt;br /&gt;
 $repository-&amp;gt;log( $message ); &lt;br /&gt;
 $string = $repo-&amp;gt;query-&amp;gt;param( &amp;quot;X&amp;quot; );&lt;br /&gt;
 $repo-&amp;gt;redirect( $url );&lt;br /&gt;
 $eprint = $repo-&amp;gt;eprint( 23 );&lt;br /&gt;
 $user = $repo-&amp;gt;user( 23 );&lt;br /&gt;
 $user = $repo-&amp;gt;user_by_username( &amp;quot;cjg&amp;quot; );&lt;br /&gt;
 $user = $repo-&amp;gt;user_by_email( 'cjg@ecs.soton.ac.uk' );&lt;br /&gt;
&lt;br /&gt;
=== Dataset ===&lt;br /&gt;
 $dataset = $repo-&amp;gt;dataset( &amp;quot;eprint&amp;quot; )&lt;br /&gt;
 $string = $dataset-&amp;gt;base_id; # eprint&lt;br /&gt;
 $string = $dataset-&amp;gt;id; # inbox&lt;br /&gt;
 &lt;br /&gt;
 $repo = $dataobj-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $dataobj = $dataset-&amp;gt;create_dataobj( $data );&lt;br /&gt;
 $user = $dataset-&amp;gt;dataobj( 23 );&lt;br /&gt;
 &lt;br /&gt;
 $search = $dataset-&amp;gt;prepare_search( %options );&lt;br /&gt;
 $list = $dataset-&amp;gt;search( %options ); # prepare_search( %options )-&amp;gt;execute&lt;br /&gt;
 $list = $dataset-&amp;gt;search; # match ALL&lt;br /&gt;
 &lt;br /&gt;
 $metafield = $dataset-&amp;gt;field( $fieldname );&lt;br /&gt;
 $metafield = $dataset-&amp;gt;key_field;&lt;br /&gt;
 @metafields = $dataset-&amp;gt;fields; &lt;br /&gt;
 &lt;br /&gt;
 $dataset-&amp;gt;search-&amp;gt;map( sub {}, $ctx );&lt;br /&gt;
 $n = $dataset-&amp;gt;search-&amp;gt;count; &lt;br /&gt;
 $ids = $dataset-&amp;gt;search-&amp;gt;ids;&lt;br /&gt;
 $list = $dataset-&amp;gt;list( \@ids );&lt;br /&gt;
&lt;br /&gt;
=== list ===&lt;br /&gt;
 $n = $list-&amp;gt;count;&lt;br /&gt;
 $list-&amp;gt;map( sub {&lt;br /&gt;
     my ( $repository, $dataset, $dataobj, $ctx ) = @_;&lt;br /&gt;
 }, $ctx );&lt;br /&gt;
 $dataobj = $list-&amp;gt;item( $offset );&lt;br /&gt;
 @all_dataobjs = $list-&amp;gt;slice &lt;br /&gt;
 @dataobjs = $list-&amp;gt;slice( $offset, $length ); &lt;br /&gt;
 \@ids = $list-&amp;gt;ids;&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_string( $string );&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_file( $filename );&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_url( $url );&lt;br /&gt;
 &lt;br /&gt;
 $utf8_string = $xml-&amp;gt;to_string( $dom_node, %opts );&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;clone( $dom_node ); # deep&lt;br /&gt;
 $dom_node = $xml-&amp;gt;clone_node( $dom_node ); # shallow&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;contents_of( $dom_node ); # clone and return child nodes&lt;br /&gt;
 $utf8_string = $xml-&amp;gt;text_contents_of( $dom_node ); # Return text child nodes as a string&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_element( $name, %attr );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_text_node( $value );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_comment( $value );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_document_fragment;&lt;br /&gt;
 &lt;br /&gt;
 $bool = $xml-&amp;gt;is( $dom_node, &amp;quot;Text&amp;quot; );&lt;br /&gt;
 &lt;br /&gt;
 $xml-&amp;gt;dispose( $dom_node ); &lt;br /&gt;
&lt;br /&gt;
=== XHTML ===&lt;br /&gt;
 $xhtml = $repo-&amp;gt;xhtml;&lt;br /&gt;
 &lt;br /&gt;
 $utf8_string = $xhtml-&amp;gt;to_xhtml( $dom_node, %opts ); # remove NS prefixes, fix &amp;lt;script&amp;gt; etc.&lt;br /&gt;
 &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;input_field( $name, $value, %opts ); # nb. type &amp;amp; noenter are now options. noenter prevents the enter being pressed in the input field using javascript&lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;hidden_field( $name, $value, %opts ); # tdb: this is used *a lot* and is well defined&lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;text_area_field( $name, $value, %opts ); # tdb: value becomes a child text node &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;form( $method, $url );&lt;br /&gt;
 &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;data_element( $name, $value, %opts ); # tdb: render_data_element&lt;br /&gt;
 &lt;br /&gt;
 $page = $xhtml-&amp;gt;page( $map, %opts );&lt;br /&gt;
&lt;br /&gt;
=== Page ===&lt;br /&gt;
 $page-&amp;gt;send( %options ); &lt;br /&gt;
 $page-&amp;gt;write_to_file( $filename );&lt;br /&gt;
&lt;br /&gt;
=== DataObj ===&lt;br /&gt;
&lt;br /&gt;
 $dataobj = $dataset-&amp;gt;dataobj( $id );&lt;br /&gt;
 $dataobj-&amp;gt;delete;&lt;br /&gt;
 $dataobj-&amp;gt;commit( $force );&lt;br /&gt;
 &lt;br /&gt;
 $dataset = $dataobj-&amp;gt;dataset;&lt;br /&gt;
 $repo = $dataobj-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $id = $dataobj-&amp;gt;id;&lt;br /&gt;
 $dataobj-&amp;gt;set_value( $fieldname, $value );&lt;br /&gt;
 $value = $dataobj-&amp;gt;value( $fieldname );&lt;br /&gt;
 \@value = $dataobj-&amp;gt;value( $fieldname ); # multiple&lt;br /&gt;
 $boolean = $dataobj-&amp;gt;is_set( $fieldname );&lt;br /&gt;
 &lt;br /&gt;
 $xhtml = $dataobj-&amp;gt;render_value( $fieldname );&lt;br /&gt;
 $xhtml = $dataobj-&amp;gt;render_citation( $style, %opts );&lt;br /&gt;
 &lt;br /&gt;
 $uri = $dataobj-&amp;gt;uri;&lt;br /&gt;
 $url = $dataobj-&amp;gt;url;&lt;br /&gt;
 &lt;br /&gt;
 $string = $dataobj-&amp;gt;export( $plugin_id, %opts );&lt;br /&gt;
 $dataobj = $dataobj-&amp;gt;create_subobject( $fieldname, $epdata );&lt;br /&gt;
&lt;br /&gt;
=== MetaField ===&lt;br /&gt;
Now has a handle on both it's repository/session AND dataset.&lt;br /&gt;
&lt;br /&gt;
 my $field = $dataset-&amp;gt;field( $fieldname );&lt;br /&gt;
 &lt;br /&gt;
 $dataset = $field-&amp;gt;dataset;&lt;br /&gt;
 $repo = $field-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $field-&amp;gt;set_property( $property, $value );&lt;br /&gt;
 $value = $field-&amp;gt;property( $property );&lt;br /&gt;
 &lt;br /&gt;
 $name = $field-&amp;gt;name;&lt;br /&gt;
 $type = $field-&amp;gt;type;&lt;br /&gt;
 &lt;br /&gt;
 $xhtml = $field-&amp;gt;render_name;&lt;br /&gt;
 $xhtml = $field-&amp;gt;render_help;&lt;br /&gt;
 $xhtml = $field-&amp;gt;render_value_label( $value );&lt;br /&gt;
 &lt;br /&gt;
 $values = $field-&amp;gt;all_values( %opts );&lt;br /&gt;
 $sorted_list = $field-&amp;gt;sort_values( $unsorted_list );&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Core_API&amp;diff=11924</id>
		<title>Core API</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Core_API&amp;diff=11924"/>
		<updated>2016-01-03T17:38:18Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{API}}&lt;br /&gt;
[[Category:API]]&lt;br /&gt;
&lt;br /&gt;
The core API was introduced in EPrints 3.2.0 and is intended to provide a clean and consistent programming interface to the EPrints system. &lt;br /&gt;
&lt;br /&gt;
Not all essential functionality is yet available in the new API, as we've only included functions which we are confident we can keep stable for a number of versions. &lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
 use EPrints;&lt;br /&gt;
 my $ep = EPrints-&amp;gt;new();&lt;br /&gt;
 my $repo = $ep-&amp;gt;repository( &amp;quot;myrepo&amp;quot; );&lt;br /&gt;
 my $an_eprint = $repo-&amp;gt;eprint( 23 );&lt;br /&gt;
&lt;br /&gt;
=== EPrints ===&lt;br /&gt;
 $ep = EPrints-&amp;gt;new();&lt;br /&gt;
 @ids = $ep-&amp;gt;repository_ids; # list active repository ids&lt;br /&gt;
 $repo = $ep-&amp;gt;repository( &amp;quot;devel&amp;quot;, noise=&amp;gt;1 );&lt;br /&gt;
 $repo = $ep-&amp;gt;current_repository(); # from Apache::Request URI&lt;br /&gt;
 EPrints-&amp;gt;abort( $message );&lt;br /&gt;
&lt;br /&gt;
=== Repository ===&lt;br /&gt;
 $xml = $repo-&amp;gt;xml;&lt;br /&gt;
 $dataset = $repo-&amp;gt;dataset( &amp;quot;user&amp;quot; );&lt;br /&gt;
 $user = $repo-&amp;gt;current_user;&lt;br /&gt;
 $query = $repo-&amp;gt;query;&lt;br /&gt;
 $current_page_url = $repo-&amp;gt;current_url( host =&amp;gt; 1, path =&amp;gt; 1, query =&amp;gt; 1, etc. );&lt;br /&gt;
 $config_element = $repo-&amp;gt;config( $key, [@subkeys] );&lt;br /&gt;
 $repository-&amp;gt;log( $message ); &lt;br /&gt;
 $string = $repo-&amp;gt;query-&amp;gt;param( &amp;quot;X&amp;quot; );&lt;br /&gt;
 $repo-&amp;gt;redirect( $url );&lt;br /&gt;
 $eprint = $repo-&amp;gt;eprint( 23 );&lt;br /&gt;
 $user = $repo-&amp;gt;user( 23 );&lt;br /&gt;
 $user = $repo-&amp;gt;user_by_username( &amp;quot;cjg&amp;quot; );&lt;br /&gt;
 $user = $repo-&amp;gt;user_by_email( 'cjg@ecs.soton.ac.uk' );&lt;br /&gt;
&lt;br /&gt;
=== Dataset ===&lt;br /&gt;
 $dataset = $repo-&amp;gt;dataset( &amp;quot;eprint&amp;quot; )&lt;br /&gt;
 $string = $dataset-&amp;gt;base_id; # eprint&lt;br /&gt;
 $string = $dataset-&amp;gt;id; # inbox&lt;br /&gt;
 &lt;br /&gt;
 $repo = $dataobj-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $dataobj = $dataset-&amp;gt;create_dataobj( $data );&lt;br /&gt;
 $user = $dataset-&amp;gt;dataobj( 23 );&lt;br /&gt;
 &lt;br /&gt;
 $search = $dataset-&amp;gt;prepare_search( %options );&lt;br /&gt;
 $list = $dataset-&amp;gt;search( %options ); # prepare_search( %options )-&amp;gt;execute&lt;br /&gt;
 $list = $dataset-&amp;gt;search; # match ALL&lt;br /&gt;
 &lt;br /&gt;
 $metafield = $dataset-&amp;gt;field( $fieldname );&lt;br /&gt;
 $metafield = $dataset-&amp;gt;key_field;&lt;br /&gt;
 @metafields = $dataset-&amp;gt;fields; &lt;br /&gt;
 &lt;br /&gt;
 $dataset-&amp;gt;search-&amp;gt;map( sub {}, $ctx );&lt;br /&gt;
 $n = $dataset-&amp;gt;search-&amp;gt;count; &lt;br /&gt;
 $ids = $dataset-&amp;gt;search-&amp;gt;ids;&lt;br /&gt;
 $list = $dataset-&amp;gt;list( \@ids );&lt;br /&gt;
&lt;br /&gt;
=== list ===&lt;br /&gt;
 $n = $list-&amp;gt;count;&lt;br /&gt;
 $list-&amp;gt;map( sub {}, $ctx );&lt;br /&gt;
 $dataobj = $list-&amp;gt;item( $offset );&lt;br /&gt;
 \@all_dataobjs = $list-&amp;gt;slice &lt;br /&gt;
 \@dataobjs = $list-&amp;gt;slice( $offset, $length ); &lt;br /&gt;
 \@ids = $list-&amp;gt;ids;&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_string( $string );&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_file( $filename );&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_url( $url );&lt;br /&gt;
 &lt;br /&gt;
 $utf8_string = $xml-&amp;gt;to_string( $dom_node, %opts );&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;clone( $dom_node ); # deep&lt;br /&gt;
 $dom_node = $xml-&amp;gt;clone_node( $dom_node ); # shallow&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;contents_of( $dom_node ); # clone and return child nodes&lt;br /&gt;
 $utf8_string = $xml-&amp;gt;text_contents_of( $dom_node ); # Return text child nodes as a string&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_element( $name, %attr );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_text_node( $value );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_comment( $value );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_document_fragment;&lt;br /&gt;
 &lt;br /&gt;
 $bool = $xml-&amp;gt;is( $dom_node, &amp;quot;Text&amp;quot; );&lt;br /&gt;
 &lt;br /&gt;
 $xml-&amp;gt;dispose( $dom_node ); &lt;br /&gt;
&lt;br /&gt;
=== XHTML ===&lt;br /&gt;
 $xhtml = $repo-&amp;gt;xhtml;&lt;br /&gt;
 &lt;br /&gt;
 $utf8_string = $xhtml-&amp;gt;to_xhtml( $dom_node, %opts ); # remove NS prefixes, fix &amp;lt;script&amp;gt; etc.&lt;br /&gt;
 &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;input_field( $name, $value, %opts ); # nb. type &amp;amp; noenter are now options. noenter prevents the enter being pressed in the input field using javascript&lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;hidden_field( $name, $value, %opts ); # tdb: this is used *a lot* and is well defined&lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;text_area_field( $name, $value, %opts ); # tdb: value becomes a child text node &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;form( $method, $url );&lt;br /&gt;
 &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;data_element( $name, $value, %opts ); # tdb: render_data_element&lt;br /&gt;
 &lt;br /&gt;
 $page = $xhtml-&amp;gt;page( $map, %opts );&lt;br /&gt;
&lt;br /&gt;
=== Page ===&lt;br /&gt;
 $page-&amp;gt;send( %options ); &lt;br /&gt;
 $page-&amp;gt;write_to_file( $filename );&lt;br /&gt;
&lt;br /&gt;
=== DataObj ===&lt;br /&gt;
&lt;br /&gt;
 $dataobj = $dataset-&amp;gt;dataobj( $id );&lt;br /&gt;
 $dataobj-&amp;gt;delete;&lt;br /&gt;
 $dataobj-&amp;gt;commit( $force );&lt;br /&gt;
 &lt;br /&gt;
 $dataset = $dataobj-&amp;gt;dataset;&lt;br /&gt;
 $repo = $dataobj-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $id = $dataobj-&amp;gt;id;&lt;br /&gt;
 $dataobj-&amp;gt;set_value( $fieldname, $value );&lt;br /&gt;
 $value = $dataobj-&amp;gt;value( $fieldname );&lt;br /&gt;
 \@value = $dataobj-&amp;gt;value( $fieldname ); # multiple&lt;br /&gt;
 $boolean = $dataobj-&amp;gt;is_set( $fieldname );&lt;br /&gt;
 &lt;br /&gt;
 $xhtml = $dataobj-&amp;gt;render_value( $fieldname );&lt;br /&gt;
 $xhtml = $dataobj-&amp;gt;render_citation( $style, %opts );&lt;br /&gt;
 &lt;br /&gt;
 $uri = $dataobj-&amp;gt;uri;&lt;br /&gt;
 $url = $dataobj-&amp;gt;url;&lt;br /&gt;
 &lt;br /&gt;
 $string = $dataobj-&amp;gt;export( $plugin_id, %opts );&lt;br /&gt;
 $dataobj = $dataobj-&amp;gt;create_subobject( $fieldname, $epdata );&lt;br /&gt;
&lt;br /&gt;
=== MetaField ===&lt;br /&gt;
Now has a handle on both it's repository/session AND dataset.&lt;br /&gt;
&lt;br /&gt;
 my $field = $dataset-&amp;gt;field( $fieldname );&lt;br /&gt;
 &lt;br /&gt;
 $dataset = $field-&amp;gt;dataset;&lt;br /&gt;
 $repo = $field-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $field-&amp;gt;set_property( $property, $value );&lt;br /&gt;
 $value = $field-&amp;gt;property( $property );&lt;br /&gt;
 &lt;br /&gt;
 $name = $field-&amp;gt;name;&lt;br /&gt;
 $type = $field-&amp;gt;type;&lt;br /&gt;
 &lt;br /&gt;
 $xhtml = $field-&amp;gt;render_name;&lt;br /&gt;
 $xhtml = $field-&amp;gt;render_help;&lt;br /&gt;
 $xhtml = $field-&amp;gt;render_value_label( $value );&lt;br /&gt;
 &lt;br /&gt;
 $values = $field-&amp;gt;all_values( %opts );&lt;br /&gt;
 $sorted_list = $field-&amp;gt;sort_values( $unsorted_list );&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Core_API&amp;diff=11923</id>
		<title>Core API</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Core_API&amp;diff=11923"/>
		<updated>2016-01-03T13:03:21Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{API}}&lt;br /&gt;
[[Category:API]]&lt;br /&gt;
&lt;br /&gt;
The core API was introduced in EPrints 3.2.0 and is intended to provide a clean and consistent programming interface to the EPrints system. &lt;br /&gt;
&lt;br /&gt;
Not all essential functionality is yet available in the new API, as we've only included functions which we are confident we can keep stable for a number of versions. &lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
 use EPrints;&lt;br /&gt;
 my $ep = EPrints-&amp;gt;new();&lt;br /&gt;
 my $repo = $ep-&amp;gt;repository( &amp;quot;myrepo&amp;quot; );&lt;br /&gt;
 my $an_eprint = $repo-&amp;gt;eprint( 23 );&lt;br /&gt;
&lt;br /&gt;
=== EPrints ===&lt;br /&gt;
 $ep = EPrints-&amp;gt;new();&lt;br /&gt;
 @ids = $ep-&amp;gt;repository_ids; # list active repository ids&lt;br /&gt;
 $repo = $ep-&amp;gt;repository( &amp;quot;devel&amp;quot;, noise=&amp;gt;1 );&lt;br /&gt;
 $repo = $ep-&amp;gt;current_repository(); # from Apache::Request URI&lt;br /&gt;
 EPrints-&amp;gt;abort( $message );&lt;br /&gt;
&lt;br /&gt;
=== Repository ===&lt;br /&gt;
 $xml = $repo-&amp;gt;xml;&lt;br /&gt;
 $dataset = $repo-&amp;gt;dataset( &amp;quot;user&amp;quot; );&lt;br /&gt;
 $user = $repo-&amp;gt;current_user;&lt;br /&gt;
 $query = $repo-&amp;gt;query;&lt;br /&gt;
 $current_page_url = $repo-&amp;gt;current_url( host =&amp;gt; 1, path =&amp;gt; 1, query =&amp;gt; 1, etc. );&lt;br /&gt;
 $config_element = $repo-&amp;gt;config( $key, [@subkeys] );&lt;br /&gt;
 $repository-&amp;gt;log( $message ); &lt;br /&gt;
 $string = $repo-&amp;gt;query-&amp;gt;param( &amp;quot;X&amp;quot; );&lt;br /&gt;
 $repo-&amp;gt;redirect( $url );&lt;br /&gt;
 $eprint = $repo-&amp;gt;eprint( 23 );&lt;br /&gt;
 $user = $repo-&amp;gt;user( 23 );&lt;br /&gt;
 $user = $repo-&amp;gt;user_by_username( &amp;quot;cjg&amp;quot; );&lt;br /&gt;
 $user = $repo-&amp;gt;user_by_email( 'cjg@ecs.soton.ac.uk' );&lt;br /&gt;
&lt;br /&gt;
=== Dataset ===&lt;br /&gt;
 $dataset = $repo-&amp;gt;dataset( &amp;quot;eprint&amp;quot; )&lt;br /&gt;
 $string = $dataset-&amp;gt;base_id; # eprint&lt;br /&gt;
 $string = $dataset-&amp;gt;id; # inbox&lt;br /&gt;
 &lt;br /&gt;
 $repo = $dataobj-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $dataobj = $dataset-&amp;gt;create_dataobj( $data );&lt;br /&gt;
 $user = $dataset-&amp;gt;dataobj( 23 );&lt;br /&gt;
 &lt;br /&gt;
 $search = $dataset-&amp;gt;prepare_search( %options );&lt;br /&gt;
 $list = $dataset-&amp;gt;search( %options ); # prepare_search( %options )-&amp;gt;execute&lt;br /&gt;
 $list = $dataset-&amp;gt;search; # match ALL&lt;br /&gt;
 &lt;br /&gt;
 $metafield = $dataset-&amp;gt;field( $fieldname );&lt;br /&gt;
 $metafield = $dataset-&amp;gt;key_field;&lt;br /&gt;
 @metafields = $dataset-&amp;gt;fields; &lt;br /&gt;
 &lt;br /&gt;
 $dataset-&amp;gt;search-&amp;gt;map( sub {}, $ctx );&lt;br /&gt;
 $n = $dataset-&amp;gt;search-&amp;gt;count; &lt;br /&gt;
 $ids = $dataset-&amp;gt;search-&amp;gt;ids;&lt;br /&gt;
 $list = $dataset-&amp;gt;list( \@ids );&lt;br /&gt;
&lt;br /&gt;
=== list ===&lt;br /&gt;
 $n = $list-&amp;gt;count;&lt;br /&gt;
 $list-&amp;gt;map( sub {}, $ctx );&lt;br /&gt;
 $dataobj = $list-&amp;gt;item( $offset );&lt;br /&gt;
 @dataobjs = $list-&amp;gt;slice( $offset, $length ); &lt;br /&gt;
 \@ids = $list-&amp;gt;ids;&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_string( $string );&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_file( $filename );&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_url( $url );&lt;br /&gt;
 &lt;br /&gt;
 $utf8_string = $xml-&amp;gt;to_string( $dom_node, %opts );&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;clone( $dom_node ); # deep&lt;br /&gt;
 $dom_node = $xml-&amp;gt;clone_node( $dom_node ); # shallow&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;contents_of( $dom_node ); # clone and return child nodes&lt;br /&gt;
 $utf8_string = $xml-&amp;gt;text_contents_of( $dom_node ); # Return text child nodes as a string&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_element( $name, %attr );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_text_node( $value );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_comment( $value );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_document_fragment;&lt;br /&gt;
 &lt;br /&gt;
 $bool = $xml-&amp;gt;is( $dom_node, &amp;quot;Text&amp;quot; );&lt;br /&gt;
 &lt;br /&gt;
 $xml-&amp;gt;dispose( $dom_node ); &lt;br /&gt;
&lt;br /&gt;
=== XHTML ===&lt;br /&gt;
 $xhtml = $repo-&amp;gt;xhtml;&lt;br /&gt;
 &lt;br /&gt;
 $utf8_string = $xhtml-&amp;gt;to_xhtml( $dom_node, %opts ); # remove NS prefixes, fix &amp;lt;script&amp;gt; etc.&lt;br /&gt;
 &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;input_field( $name, $value, %opts ); # nb. type &amp;amp; noenter are now options. noenter prevents the enter being pressed in the input field using javascript&lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;hidden_field( $name, $value, %opts ); # tdb: this is used *a lot* and is well defined&lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;text_area_field( $name, $value, %opts ); # tdb: value becomes a child text node &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;form( $method, $url );&lt;br /&gt;
 &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;data_element( $name, $value, %opts ); # tdb: render_data_element&lt;br /&gt;
 &lt;br /&gt;
 $page = $xhtml-&amp;gt;page( $map, %opts );&lt;br /&gt;
&lt;br /&gt;
=== Page ===&lt;br /&gt;
 $page-&amp;gt;send( %options ); &lt;br /&gt;
 $page-&amp;gt;write_to_file( $filename );&lt;br /&gt;
&lt;br /&gt;
=== DataObj ===&lt;br /&gt;
&lt;br /&gt;
 $dataobj = $dataset-&amp;gt;dataobj( $id );&lt;br /&gt;
 $dataobj-&amp;gt;delete;&lt;br /&gt;
 $dataobj-&amp;gt;commit( $force );&lt;br /&gt;
 &lt;br /&gt;
 $dataset = $dataobj-&amp;gt;dataset;&lt;br /&gt;
 $repo = $dataobj-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $id = $dataobj-&amp;gt;id;&lt;br /&gt;
 $dataobj-&amp;gt;set_value( $fieldname, $value );&lt;br /&gt;
 $value = $dataobj-&amp;gt;value( $fieldname );&lt;br /&gt;
 \@value = $dataobj-&amp;gt;value( $fieldname ); # multiple&lt;br /&gt;
 $boolean = $dataobj-&amp;gt;is_set( $fieldname );&lt;br /&gt;
 &lt;br /&gt;
 $xhtml = $dataobj-&amp;gt;render_value( $fieldname );&lt;br /&gt;
 $xhtml = $dataobj-&amp;gt;render_citation( $style, %opts );&lt;br /&gt;
 &lt;br /&gt;
 $uri = $dataobj-&amp;gt;uri;&lt;br /&gt;
 $url = $dataobj-&amp;gt;url;&lt;br /&gt;
 &lt;br /&gt;
 $string = $dataobj-&amp;gt;export( $plugin_id, %opts );&lt;br /&gt;
 $dataobj = $dataobj-&amp;gt;create_subobject( $fieldname, $epdata );&lt;br /&gt;
&lt;br /&gt;
=== MetaField ===&lt;br /&gt;
Now has a handle on both it's repository/session AND dataset.&lt;br /&gt;
&lt;br /&gt;
 my $field = $dataset-&amp;gt;field( $fieldname );&lt;br /&gt;
 &lt;br /&gt;
 $dataset = $field-&amp;gt;dataset;&lt;br /&gt;
 $repo = $field-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $field-&amp;gt;set_property( $property, $value );&lt;br /&gt;
 $value = $field-&amp;gt;property( $property );&lt;br /&gt;
 &lt;br /&gt;
 $name = $field-&amp;gt;name;&lt;br /&gt;
 $type = $field-&amp;gt;type;&lt;br /&gt;
 &lt;br /&gt;
 $xhtml = $field-&amp;gt;render_name;&lt;br /&gt;
 $xhtml = $field-&amp;gt;render_help;&lt;br /&gt;
 $xhtml = $field-&amp;gt;render_value_label( $value );&lt;br /&gt;
 &lt;br /&gt;
 $values = $field-&amp;gt;all_values( %opts );&lt;br /&gt;
 $sorted_list = $field-&amp;gt;sort_values( $unsorted_list );&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Core_API&amp;diff=11921</id>
		<title>Core API</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Core_API&amp;diff=11921"/>
		<updated>2015-12-29T10:57:06Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* XHTML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{API}}&lt;br /&gt;
[[Category:API]]&lt;br /&gt;
&lt;br /&gt;
The core API was introduced in EPrints 3.2.0 and is intended to provide a clean and consistent programming interface to the EPrints system. &lt;br /&gt;
&lt;br /&gt;
Not all essential functionality is yet available in the new API, as we've only included functions which we are confident we can keep stable for a number of versions. &lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
 use EPrints;&lt;br /&gt;
 my $ep = EPrints-&amp;gt;new();&lt;br /&gt;
 my $repo = $ep-&amp;gt;repository( &amp;quot;myrepo&amp;quot; );&lt;br /&gt;
 my $an_eprint = $repo-&amp;gt;eprint( 23 );&lt;br /&gt;
&lt;br /&gt;
=== EPrints ===&lt;br /&gt;
 $ep = EPrints-&amp;gt;new();&lt;br /&gt;
 @ids = $ep-&amp;gt;repository_ids; # list active repository ids&lt;br /&gt;
 $repo = $ep-&amp;gt;repository( &amp;quot;devel&amp;quot;, noise=&amp;gt;1 );&lt;br /&gt;
 $repo = $ep-&amp;gt;current_repository(); # from Apache::Request URI&lt;br /&gt;
 EPrints-&amp;gt;abort( $message );&lt;br /&gt;
&lt;br /&gt;
=== Repository ===&lt;br /&gt;
 $xml = $repo-&amp;gt;xml;&lt;br /&gt;
 $dataset = $repo-&amp;gt;dataset( &amp;quot;user&amp;quot; );&lt;br /&gt;
 $user = $repo-&amp;gt;current_user;&lt;br /&gt;
 $query = $repo-&amp;gt;query;&lt;br /&gt;
 $current_page_url = $repo-&amp;gt;current_url( host =&amp;gt; 1, path =&amp;gt; 1, query =&amp;gt; 1, etc. );&lt;br /&gt;
 $config_element = $repo-&amp;gt;config( $key, [@subkeys] );&lt;br /&gt;
 $repository-&amp;gt;log( $message ); &lt;br /&gt;
 $string = $repo-&amp;gt;query-&amp;gt;param( &amp;quot;X&amp;quot; );&lt;br /&gt;
 $repo-&amp;gt;redirect( $url );&lt;br /&gt;
 $eprint = $repo-&amp;gt;eprint( 23 );&lt;br /&gt;
 $user = $repo-&amp;gt;user( 23 );&lt;br /&gt;
 $user = $repo-&amp;gt;user_by_username( &amp;quot;cjg&amp;quot; );&lt;br /&gt;
 $user = $repo-&amp;gt;user_by_email( 'cjg@ecs.soton.ac.uk' );&lt;br /&gt;
&lt;br /&gt;
=== Dataset ===&lt;br /&gt;
 $dataset = $repo-&amp;gt;dataset( &amp;quot;eprint&amp;quot; )&lt;br /&gt;
 $string = $dataset-&amp;gt;base_id; # eprint&lt;br /&gt;
 $string = $dataset-&amp;gt;id; # inbox&lt;br /&gt;
 &lt;br /&gt;
 $repo = $dataobj-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $dataobj = $dataset-&amp;gt;create_dataobj( $data );&lt;br /&gt;
 $user = $dataset-&amp;gt;dataobj( 23 );&lt;br /&gt;
 &lt;br /&gt;
 $search = $dataset-&amp;gt;prepare_search( %options );&lt;br /&gt;
 $list = $dataset-&amp;gt;search( %options ); # prepare_search( %options )-&amp;gt;execute&lt;br /&gt;
 $list = $dataset-&amp;gt;search; # match ALL&lt;br /&gt;
 &lt;br /&gt;
 $metafield = $dataset-&amp;gt;field( $fieldname );&lt;br /&gt;
 $metafield = $dataset-&amp;gt;key_field;&lt;br /&gt;
 @metafields = $dataset-&amp;gt;fields; &lt;br /&gt;
 &lt;br /&gt;
 $dataset-&amp;gt;search-&amp;gt;map( sub {}, $ctx );&lt;br /&gt;
 $n = $dataset-&amp;gt;search-&amp;gt;count; &lt;br /&gt;
 $ids = $dataset-&amp;gt;search-&amp;gt;ids;&lt;br /&gt;
 $list = $dataset-&amp;gt;list( \@ids );&lt;br /&gt;
&lt;br /&gt;
=== list ===&lt;br /&gt;
 $n = $list-&amp;gt;count;&lt;br /&gt;
 $list-&amp;gt;map( sub {}, $ctx );&lt;br /&gt;
 $dataobj = $list-&amp;gt;item( offset );&lt;br /&gt;
 @dataobjs = $list-&amp;gt;slice( offset, length ); &lt;br /&gt;
 \@ids = $list-&amp;gt;ids;&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_string( $string );&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_file( $filename );&lt;br /&gt;
 $doc = $xml-&amp;gt;parse_url( $url );&lt;br /&gt;
 &lt;br /&gt;
 $utf8_string = $xml-&amp;gt;to_string( $dom_node, %opts );&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;clone( $dom_node ); # deep&lt;br /&gt;
 $dom_node = $xml-&amp;gt;clone_node( $dom_node ); # shallow&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;contents_of( $dom_node ); # clone and return child nodes&lt;br /&gt;
 $utf8_string = $xml-&amp;gt;text_contents_of( $dom_node ); # Return text child nodes as a string&lt;br /&gt;
 &lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_element( $name, %attr );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_text_node( $value );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_comment( $value );&lt;br /&gt;
 $dom_node = $xml-&amp;gt;create_document_fragment;&lt;br /&gt;
 &lt;br /&gt;
 $bool = $xml-&amp;gt;is( $dom_node, &amp;quot;Text&amp;quot; );&lt;br /&gt;
 &lt;br /&gt;
 $xml-&amp;gt;dispose( $dom_node ); &lt;br /&gt;
&lt;br /&gt;
=== XHTML ===&lt;br /&gt;
 $xhtml = $repo-&amp;gt;xhtml;&lt;br /&gt;
 &lt;br /&gt;
 $utf8_string = $xhtml-&amp;gt;to_xhtml( $dom_node, %opts ); # remove NS prefixes, fix &amp;lt;script&amp;gt; etc.&lt;br /&gt;
 &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;input_field( $name, $value, %opts ); # nb. type &amp;amp; noenter are now options. noenter prevents the enter being pressed in the input field using javascript&lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;hidden_field( $name, $value, %opts ); # tdb: this is used *a lot* and is well defined&lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;text_area_field( $name, $value, %opts ); # tdb: value becomes a child text node &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;form( $method, $url );&lt;br /&gt;
 &lt;br /&gt;
 $xhtml_dom_node = $xhtml-&amp;gt;data_element( $name, $value, %opts ); # tdb: render_data_element&lt;br /&gt;
 &lt;br /&gt;
 $page = $xhtml-&amp;gt;page( $map, %opts );&lt;br /&gt;
&lt;br /&gt;
=== Page ===&lt;br /&gt;
 $page-&amp;gt;send( %options ); &lt;br /&gt;
 $page-&amp;gt;write_to_file( $filename );&lt;br /&gt;
&lt;br /&gt;
=== DataObj ===&lt;br /&gt;
&lt;br /&gt;
 $dataobj = $dataset-&amp;gt;dataobj( $id );&lt;br /&gt;
 $dataobj-&amp;gt;delete;&lt;br /&gt;
 $dataobj-&amp;gt;commit( $force );&lt;br /&gt;
 &lt;br /&gt;
 $dataset = $dataobj-&amp;gt;dataset;&lt;br /&gt;
 $repo = $dataobj-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $id = $dataobj-&amp;gt;id;&lt;br /&gt;
 $dataobj-&amp;gt;set_value( $fieldname, $value );&lt;br /&gt;
 $value = $dataobj-&amp;gt;value( $fieldname );&lt;br /&gt;
 \@value = $dataobj-&amp;gt;value( $fieldname ); # multiple&lt;br /&gt;
 $boolean = $dataobj-&amp;gt;is_set( $fieldname );&lt;br /&gt;
 &lt;br /&gt;
 $xhtml = $dataobj-&amp;gt;render_value( $fieldname );&lt;br /&gt;
 $xhtml = $dataobj-&amp;gt;render_citation( $style, %opts );&lt;br /&gt;
 &lt;br /&gt;
 $uri = $dataobj-&amp;gt;uri;&lt;br /&gt;
 $url = $dataobj-&amp;gt;url;&lt;br /&gt;
 &lt;br /&gt;
 $string = $dataobj-&amp;gt;export( $plugin_id, %opts );&lt;br /&gt;
 $dataobj = $dataobj-&amp;gt;create_subobject( $fieldname, $epdata );&lt;br /&gt;
&lt;br /&gt;
=== MetaField ===&lt;br /&gt;
Now has a handle on both it's repository/session AND dataset.&lt;br /&gt;
&lt;br /&gt;
 my $field = $dataset-&amp;gt;field( $fieldname );&lt;br /&gt;
 &lt;br /&gt;
 $dataset = $field-&amp;gt;dataset;&lt;br /&gt;
 $repo = $field-&amp;gt;repository;&lt;br /&gt;
 &lt;br /&gt;
 $field-&amp;gt;set_property( $property, $value );&lt;br /&gt;
 $value = $field-&amp;gt;property( $property );&lt;br /&gt;
 &lt;br /&gt;
 $name = $field-&amp;gt;name;&lt;br /&gt;
 $type = $field-&amp;gt;type;&lt;br /&gt;
 &lt;br /&gt;
 $xhtml = $field-&amp;gt;render_name;&lt;br /&gt;
 $xhtml = $field-&amp;gt;render_help;&lt;br /&gt;
 $xhtml = $field-&amp;gt;render_value_label( $value );&lt;br /&gt;
 &lt;br /&gt;
 $values = $field-&amp;gt;all_values( %opts );&lt;br /&gt;
 $sorted_list = $field-&amp;gt;sort_values( $unsorted_list );&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Unit_tests&amp;diff=11848</id>
		<title>Unit tests</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Unit_tests&amp;diff=11848"/>
		<updated>2015-11-18T16:58:22Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* STDOUT */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Centos 7.1, EPrints 3.3.14 from RPM Unit tests&lt;br /&gt;
* Needed to install perl-Test-Simple (provides Test::More) and perl-Test-Memory-Cycle&lt;br /&gt;
* I think the Sword test might be failing because I used example.com as my hostname?&lt;br /&gt;
* the Metafield/Id.pm errors may be resolved by: https://github.com/eprints/eprints/issues/359&lt;br /&gt;
&lt;br /&gt;
===STDOUT===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/share/eprints/tests/01_use.pl ............... ok&lt;br /&gt;
/usr/share/eprints/tests/02_session.pl ........... ok&lt;br /&gt;
/usr/share/eprints/tests/03_set_value.pl ......... ok&lt;br /&gt;
/usr/share/eprints/tests/05_bug_fixes.pl .........&lt;br /&gt;
Dubious, test returned 255 (wstat 65280, 0xff00)&lt;br /&gt;
Failed 11/15 subtests&lt;br /&gt;
/usr/share/eprints/tests/10_xml_dom.pl ...........&lt;br /&gt;
Dubious, test returned 2 (wstat 512, 0x200)&lt;br /&gt;
Failed 3/12 subtests&lt;br /&gt;
/usr/share/eprints/tests/10_xml_gdome.pl ......... skipped: XML::GDOME missing&lt;br /&gt;
/usr/share/eprints/tests/10_xml_libxml.pl ........&lt;br /&gt;
Dubious, test returned 255 (wstat 65280, 0xff00)&lt;br /&gt;
Failed 3/12 subtests&lt;br /&gt;
/usr/share/eprints/tests/11_epscript.pl .......... ok&lt;br /&gt;
/usr/share/eprints/tests/20_database_utf8.pl ..... ok&lt;br /&gt;
/usr/share/eprints/tests/21_database_fields.pl ... ok&lt;br /&gt;
/usr/share/eprints/tests/23_cache.pl ............. ok&lt;br /&gt;
/usr/share/eprints/tests/25_mysql.pl ............. ok&lt;br /&gt;
/usr/share/eprints/tests/30_search.pl ............&lt;br /&gt;
Dubious, test returned 255 (wstat 65280, 0xff00)&lt;br /&gt;
Failed 33/36 subtests&lt;br /&gt;
/usr/share/eprints/tests/31_simple_search.pl ..... ok&lt;br /&gt;
/usr/share/eprints/tests/32_triples.pl ........... ok&lt;br /&gt;
/usr/share/eprints/tests/40_views.pl .............&lt;br /&gt;
Dubious, test returned 1 (wstat 256, 0x100)&lt;br /&gt;
Failed 1/6 subtests&lt;br /&gt;
/usr/share/eprints/tests/50_mem_usage.pl ......... ok&lt;br /&gt;
/usr/share/eprints/tests/51_plugin_mem_usage.pl .. ok&lt;br /&gt;
/usr/share/eprints/tests/52_mem_cycle.pl ......... ok&lt;br /&gt;
/usr/share/eprints/tests/55_phrases.pl ........... ok&lt;br /&gt;
/usr/share/eprints/tests/60_id_value.pl .......... ok&lt;br /&gt;
/usr/share/eprints/tests/61_subjects.pl .......... ok&lt;br /&gt;
/usr/share/eprints/tests/65_epm.pl ............... ok&lt;br /&gt;
/usr/share/eprints/tests/67_crypt.pl ............. ok&lt;br /&gt;
/usr/share/eprints/tests/70_xml_import.pl ........ ok&lt;br /&gt;
/usr/share/eprints/tests/80_screenprocessor.pl ... ok&lt;br /&gt;
/usr/share/eprints/tests/81_workflow.pl ..........&lt;br /&gt;
Dubious, test returned 255 (wstat 65280, 0xff00)&lt;br /&gt;
Failed 1/4 subtests&lt;br /&gt;
/usr/share/eprints/tests/82_eprint_view.pl ....... ok&lt;br /&gt;
/usr/share/eprints/tests/82_screen.pl ............ ok&lt;br /&gt;
/usr/share/eprints/tests/83_static.pl ............ ok&lt;br /&gt;
Bailout called.  Further testing stopped:  Error retrieving http://jlrs.example.com: 500 Can't connect to jlrs.example.com:80 (Bad hostname) at /usr/share/eprints/tests/84_sword.pl line 54, &amp;lt;DATA&amp;gt; line 8.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
patrick:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/share/eprints3/tests/01_use.pl ............... ok&lt;br /&gt;
/usr/share/eprints3/tests/02_session.pl ........... ok&lt;br /&gt;
/usr/share/eprints3/tests/03_set_value.pl ......... ok&lt;br /&gt;
/usr/share/eprints3/tests/05_bug_fixes.pl ......... ok&lt;br /&gt;
/usr/share/eprints3/tests/10_xml_dom.pl ........... ok&lt;br /&gt;
/usr/share/eprints3/tests/10_xml_gdome.pl ......... skipped: XML::GDOME missing&lt;br /&gt;
/usr/share/eprints3/tests/10_xml_libxml.pl ........ ok&lt;br /&gt;
/usr/share/eprints3/tests/11_epscript.pl .......... ok&lt;br /&gt;
/usr/share/eprints3/tests/20_database_utf8.pl ..... ok&lt;br /&gt;
/usr/share/eprints3/tests/21_database_fields.pl ... ok&lt;br /&gt;
/usr/share/eprints3/tests/23_cache.pl ............. ok&lt;br /&gt;
/usr/share/eprints3/tests/25_mysql.pl ............. ok&lt;br /&gt;
/usr/share/eprints3/tests/30_search.pl ............ &lt;br /&gt;
Dubious, test returned 1 (wstat 256, 0x100)&lt;br /&gt;
Failed 1/35 subtests &lt;br /&gt;
	(less 2 skipped subtests: 32 okay)&lt;br /&gt;
/usr/share/eprints3/tests/31_simple_search.pl ..... ok&lt;br /&gt;
/usr/share/eprints3/tests/32_triples.pl ........... ok&lt;br /&gt;
/usr/share/eprints3/tests/40_views.pl ............. ok&lt;br /&gt;
/usr/share/eprints3/tests/50_mem_usage.pl ......... ok&lt;br /&gt;
/usr/share/eprints3/tests/51_plugin_mem_usage.pl .. ok&lt;br /&gt;
/usr/share/eprints3/tests/52_mem_cycle.pl ......... ok&lt;br /&gt;
/usr/share/eprints3/tests/55_phrases.pl ........... ok&lt;br /&gt;
/usr/share/eprints3/tests/60_id_value.pl .......... ok&lt;br /&gt;
/usr/share/eprints3/tests/61_subjects.pl .......... ok&lt;br /&gt;
/usr/share/eprints3/tests/65_epm.pl ............... ok&lt;br /&gt;
/usr/share/eprints3/tests/67_crypt.pl ............. ok&lt;br /&gt;
/usr/share/eprints3/tests/70_xml_import.pl ........ ok&lt;br /&gt;
/usr/share/eprints3/tests/80_screenprocessor.pl ... ok&lt;br /&gt;
/usr/share/eprints3/tests/81_workflow.pl .......... ok&lt;br /&gt;
/usr/share/eprints3/tests/82_eprint_view.pl ....... ok&lt;br /&gt;
/usr/share/eprints3/tests/82_screen.pl ............ ok&lt;br /&gt;
/usr/share/eprints3/tests/83_static.pl ............ ok&lt;br /&gt;
Bailout called.  Further testing stopped:  Failed to parse http://eprints-git.demo/sword-app/servicedocument :1: parser error : Space required after the Public Identifier&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===STDERR===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# EPrints Version: 3.3.14&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'list is 3 long'&lt;br /&gt;
#   at /usr/share/eprints/tests/05_bug_fixes.pl line 24.&lt;br /&gt;
#          got: '0'&lt;br /&gt;
#     expected: '3'&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'list is 3 long after map'&lt;br /&gt;
#   at /usr/share/eprints/tests/05_bug_fixes.pl line 26.&lt;br /&gt;
#          got: '0'&lt;br /&gt;
#     expected: '3'&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'all slice is 3 long'&lt;br /&gt;
#   at /usr/share/eprints/tests/05_bug_fixes.pl line 27.&lt;br /&gt;
#          got: undef&lt;br /&gt;
#     expected: '3'&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'slice is 3 long'&lt;br /&gt;
#   at /usr/share/eprints/tests/05_bug_fixes.pl line 28.&lt;br /&gt;
#          got: undef&lt;br /&gt;
#     expected: '3'&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'slice is 3 long, asked for 5'&lt;br /&gt;
#   at /usr/share/eprints/tests/05_bug_fixes.pl line 29.&lt;br /&gt;
#          got: undef&lt;br /&gt;
#     expected: '3'&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'slice is 2 long, asked for 2'&lt;br /&gt;
#   at /usr/share/eprints/tests/05_bug_fixes.pl line 30.&lt;br /&gt;
#          got: undef&lt;br /&gt;
#     expected: '2'&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'list is 3 long after slice'&lt;br /&gt;
#   at /usr/share/eprints/tests/05_bug_fixes.pl line 31.&lt;br /&gt;
#          got: '0'&lt;br /&gt;
#     expected: '3'&lt;br /&gt;
Can't call method &amp;quot;create_subdataobj&amp;quot; on unblessed reference at /usr/share/eprints/tests/05_bug_fixes.pl line 36.&lt;br /&gt;
# Looks like you planned 15 tests but ran 11.&lt;br /&gt;
# Looks like you failed 7 tests of 11 run.&lt;br /&gt;
# Looks like your test exited with 255 just after 11.&lt;br /&gt;
Can't call method &amp;quot;to_xml&amp;quot; on an undefined value at /usr/share/eprints/bin/../perl_lib/EPrints/Test/XML.pm line 50.&lt;br /&gt;
# Looks like you planned 12 tests but ran 9.&lt;br /&gt;
# Looks like your test exited with 2 just after 9.&lt;br /&gt;
Can't call method &amp;quot;to_xml&amp;quot; on an undefined value at /usr/share/eprints/bin/../perl_lib/EPrints/Test/XML.pm line 50.&lt;br /&gt;
# Looks like you planned 12 tests but ran 9.&lt;br /&gt;
# Looks like your test exited with 255 just after 9.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'blank found matches'&lt;br /&gt;
#   at /usr/share/eprints/tests/30_search.pl line 21.&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'search range eprintid'&lt;br /&gt;
#   at /usr/share/eprints/tests/30_search.pl line 33.&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'title IN + creators_name GREP&lt;br /&gt;
# AND(&lt;br /&gt;
#       AND(&lt;br /&gt;
#               grep($eprint.creators_name,&amp;quot;%[maury]%-%[w%&amp;quot;) ... eprint__index_grep,&lt;br /&gt;
#               index($eprint.creators_name,&amp;quot;maury&amp;quot;) ... eprint__rindex&lt;br /&gt;
#       ),&lt;br /&gt;
#       AND(&lt;br /&gt;
#               grep($eprint.creators_name,&amp;quot;%[parkes]%-%[f%&amp;quot;) ... eprint__index_grep,&lt;br /&gt;
#               index($eprint.creators_name,&amp;quot;parkes&amp;quot;) ... eprint__rindex&lt;br /&gt;
#       ),&lt;br /&gt;
#       index($eprint.title,&amp;quot;eagle&amp;quot;) ... eprint__rindex&lt;br /&gt;
# )'&lt;br /&gt;
#   at /usr/share/eprints/tests/30_search.pl line 43.&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'SET match'&lt;br /&gt;
#   at /usr/share/eprints/tests/30_search.pl line 58.&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'subjects and divisions: AND(&lt;br /&gt;
#       in_subject($eprint.divisions,&amp;quot;sch_mat&amp;quot;) ... eprint_divisions,&lt;br /&gt;
#       in_subject($eprint.subjects,&amp;quot;GR&amp;quot;) ... eprint_subjects&lt;br /&gt;
# )'&lt;br /&gt;
#   at /usr/share/eprints/tests/30_search.pl line 71.&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'match testdata article full text'&lt;br /&gt;
#   at /usr/share/eprints/tests/30_search.pl line 82.&lt;br /&gt;
Can't call method &amp;quot;get_parent&amp;quot; on an undefined value at /usr/share/eprints/tests/30_search.pl line 86.&lt;br /&gt;
# Looks like you planned 36 tests but ran 9.&lt;br /&gt;
# Looks like you failed 6 tests of 9 run.&lt;br /&gt;
# Looks like your test exited with 255 just after 9.&lt;br /&gt;
# memory footprint&lt;br /&gt;
Warning! No values were found for eprint.view._40_views_pl [date] - configuration may be wrong&lt;br /&gt;
# /tmp/jrjiuqUzTc/en/view/_40_views_pl&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'browse_view_menu'&lt;br /&gt;
#   at /usr/share/eprints/tests/40_views.pl line 67.&lt;br /&gt;
#        update_view_by_path=-1B&lt;br /&gt;
#        update_browse_view_list=-1B&lt;br /&gt;
# Looks like you failed 1 test of 6.&lt;br /&gt;
# LOAD=-1B&lt;br /&gt;
# Repository-Specific Data&lt;br /&gt;
#       _load_config=-1B&lt;br /&gt;
#       _load_workflows=-1B&lt;br /&gt;
#       _load_namedsets=-1B&lt;br /&gt;
#       _load_datasets=-1B&lt;br /&gt;
#       _load_languages=-1B&lt;br /&gt;
#       _load_templates=-1B&lt;br /&gt;
#       _load_citation_specs=-1B&lt;br /&gt;
#       _load_storage=-1B&lt;br /&gt;
#       _load_plugins=-1B&lt;br /&gt;
# Session=-1B&lt;br /&gt;
#&lt;br /&gt;
# Plugin Memory Usage&lt;br /&gt;
# EPrints::Plugin::Screen::EPrint::Messages=-1B&lt;br /&gt;
# EPrints::Plugin::Convert::Thumbnails=-1B&lt;br /&gt;
# EPrints::Plugin::Search=-1B&lt;br /&gt;
# EPrints::Plugin::Storage::EPM=-1B&lt;br /&gt;
# EPrints::Plugin::Screen::Workflow::Destroy=-1B&lt;br /&gt;
# EPrints::Plugin::Screen::Workflow::Destroy=-1B&lt;br /&gt;
# Undefined phrase: xxx_invalid (en) at line 24 in /usr/share/eprints/tests/55_phrases.pl&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Can't call method &amp;quot;get_dataset&amp;quot; on an undefined value at /usr/share/eprints/bin/../perl_lib/EPrints/Workflow.pm line 145.&lt;br /&gt;
# Looks like you planned 4 tests but ran 3.&lt;br /&gt;
# Looks like your test exited with 255 just after 3.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Argument &amp;quot;&amp;quot; isn't numeric in addition (+) at /usr/share/eprints/bin/../perl_lib/EPrints/Database.pm line 1500.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
FAILED--Further testing stopped: Error retrieving http://jlrs.example.com: 500 Can't connect to jlrs.example.com:80 (Bad hostname) at /usr/share/eprints/tests/84_sword.pl line 54, &amp;lt;DATA&amp;gt; line 8.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Patrick:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# EPrints Version: 3.3.14&lt;br /&gt;
SELECT `document`.`docid` FROM `document`, `document_relation_type` AS `document_relation_type`, `document_relation_uri` AS `document_relation_uri` WHERE `document`.`docid`=`document_relation_type`.`docid` AND `document`.`docid`=`document_relation_uri`.`docid` AND (`document_relation_type`.`relation_type` = 'http://eprints.org/relation/islightboxThumbnailVersionOf') AND (`document_relation_type`.`pos` = `document_relation_uri`.`pos`) AND (`document_relation_uri`.`relation_uri` = '/id/document/1') GROUP BY `document`.`docid`&lt;br /&gt;
#   Failed test 'compound type field query'&lt;br /&gt;
#   at /usr/share/eprints3/tests/30_search.pl line 358.&lt;br /&gt;
# Looks like you failed 1 test of 35.&lt;br /&gt;
# memory footprint&lt;br /&gt;
# /tmp/nOb_JblCIl/en/view/_40_views_pl&lt;br /&gt;
# /tmp/nOb_JblCIl/en/view/_40_views_pl/2003&lt;br /&gt;
# /tmp/nOb_JblCIl/en/view/_40_views_pl/2001&lt;br /&gt;
# /tmp/nOb_JblCIl/en/view/_40_views_pl/2000&lt;br /&gt;
# /tmp/nOb_JblCIl/en/view/_40_views_pl/2005&lt;br /&gt;
# /tmp/nOb_JblCIl/en/view/_40_views_pl/2002&lt;br /&gt;
# /tmp/nOb_JblCIl/en/view/_40_views_pl/1998&lt;br /&gt;
# /tmp/nOb_JblCIl/en/view/_40_views_pl/1999&lt;br /&gt;
# /tmp/nOb_JblCIl/en/view/_40_views_pl/2004&lt;br /&gt;
# 	 update_view_by_path=-1B&lt;br /&gt;
# 	 update_browse_view_list=-1B&lt;br /&gt;
# LOAD=-1B&lt;br /&gt;
# Repository-Specific Data&lt;br /&gt;
# 	_load_config=-1B&lt;br /&gt;
# 	_load_workflows=-1B&lt;br /&gt;
# 	_load_namedsets=-1B&lt;br /&gt;
# 	_load_datasets=-1B&lt;br /&gt;
# 	_load_languages=-1B&lt;br /&gt;
# 	_load_templates=-1B&lt;br /&gt;
# 	_load_citation_specs=-1B&lt;br /&gt;
# 	_load_storage=-1B&lt;br /&gt;
# 	_load_plugins=-1B&lt;br /&gt;
# Session=-1B&lt;br /&gt;
# &lt;br /&gt;
# Plugin Memory Usage&lt;br /&gt;
# EPrints::Plugin::Screen::Admin::Config::Edit::Perl=-1B&lt;br /&gt;
# EPrints::Plugin::Export::ContextObject=-1B&lt;br /&gt;
# EPrints::Plugin::Screen::Admin::Config::Edit::XPage=-1B&lt;br /&gt;
# EPrints::Plugin::Export::MultilineCSV=-1B&lt;br /&gt;
# EPrints::Plugin::Screen::Admin::UpdateDatabase=-1B&lt;br /&gt;
# Undefined phrase: xxx_invalid (en) at line 24 in /usr/share/eprints3/tests/55_phrases.pl&lt;br /&gt;
EPScript error: Can't use string (&amp;quot;0&amp;quot;) as an ARRAY ref while &amp;quot;strict refs&amp;quot; in use at /home/pm5/eprints-git/bin/../perl_lib/EPrints/Script/Compiled.pm line 633.&lt;br /&gt;
&lt;br /&gt;
EPScript error: Can't use string (&amp;quot;0&amp;quot;) as an ARRAY ref while &amp;quot;strict refs&amp;quot; in use at /home/pm5/eprints-git/bin/../perl_lib/EPrints/Script/Compiled.pm line 633.&lt;br /&gt;
&lt;br /&gt;
EPScript error: Can't use string (&amp;quot;0&amp;quot;) as an ARRAY ref while &amp;quot;strict refs&amp;quot; in use at /home/pm5/eprints-git/bin/../perl_lib/EPrints/Script/Compiled.pm line 633.&lt;br /&gt;
&lt;br /&gt;
EPScript error: Can't use string (&amp;quot;0&amp;quot;) as an ARRAY ref while &amp;quot;strict refs&amp;quot; in use at /home/pm5/eprints-git/bin/../perl_lib/EPrints/Script/Compiled.pm line 633.&lt;br /&gt;
&lt;br /&gt;
EPScript error: Can't use string (&amp;quot;0&amp;quot;) as an ARRAY ref while &amp;quot;strict refs&amp;quot; in use at /home/pm5/eprints-git/bin/../perl_lib/EPrints/Script/Compiled.pm line 633.&lt;br /&gt;
&lt;br /&gt;
EPScript error: Can't use string (&amp;quot;0&amp;quot;) as an ARRAY ref while &amp;quot;strict refs&amp;quot; in use at /home/pm5/eprints-git/bin/../perl_lib/EPrints/Script/Compiled.pm line 633.&lt;br /&gt;
&lt;br /&gt;
EPScript error: Can't use string (&amp;quot;0&amp;quot;) as an ARRAY ref while &amp;quot;strict refs&amp;quot; in use at /home/pm5/eprints-git/bin/../perl_lib/EPrints/Script/Compiled.pm line 633.&lt;br /&gt;
&lt;br /&gt;
EPScript error: Can't use string (&amp;quot;0&amp;quot;) as an ARRAY ref while &amp;quot;strict refs&amp;quot; in use at /home/pm5/eprints-git/bin/../perl_lib/EPrints/Script/Compiled.pm line 633.&lt;br /&gt;
&lt;br /&gt;
EPScript error: Can't use string (&amp;quot;0&amp;quot;) as an ARRAY ref while &amp;quot;strict refs&amp;quot; in use at /home/pm5/eprints-git/bin/../perl_lib/EPrints/Script/Compiled.pm line 633.&lt;br /&gt;
&lt;br /&gt;
FAILED--Further testing stopped: Failed to parse http://eprints-git.demo/sword-app/servicedocument :1: parser error : Space required after the Public Identifier&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Unit_tests&amp;diff=11847</id>
		<title>Unit tests</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Unit_tests&amp;diff=11847"/>
		<updated>2015-11-18T16:57:34Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* STDERR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Centos 7.1, EPrints 3.3.14 from RPM Unit tests&lt;br /&gt;
* Needed to install perl-Test-Simple (provides Test::More) and perl-Test-Memory-Cycle&lt;br /&gt;
* I think the Sword test might be failing because I used example.com as my hostname?&lt;br /&gt;
* the Metafield/Id.pm errors may be resolved by: https://github.com/eprints/eprints/issues/359&lt;br /&gt;
&lt;br /&gt;
===STDOUT===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/share/eprints/tests/01_use.pl ............... ok&lt;br /&gt;
/usr/share/eprints/tests/02_session.pl ........... ok&lt;br /&gt;
/usr/share/eprints/tests/03_set_value.pl ......... ok&lt;br /&gt;
/usr/share/eprints/tests/05_bug_fixes.pl .........&lt;br /&gt;
Dubious, test returned 255 (wstat 65280, 0xff00)&lt;br /&gt;
Failed 11/15 subtests&lt;br /&gt;
/usr/share/eprints/tests/10_xml_dom.pl ...........&lt;br /&gt;
Dubious, test returned 2 (wstat 512, 0x200)&lt;br /&gt;
Failed 3/12 subtests&lt;br /&gt;
/usr/share/eprints/tests/10_xml_gdome.pl ......... skipped: XML::GDOME missing&lt;br /&gt;
/usr/share/eprints/tests/10_xml_libxml.pl ........&lt;br /&gt;
Dubious, test returned 255 (wstat 65280, 0xff00)&lt;br /&gt;
Failed 3/12 subtests&lt;br /&gt;
/usr/share/eprints/tests/11_epscript.pl .......... ok&lt;br /&gt;
/usr/share/eprints/tests/20_database_utf8.pl ..... ok&lt;br /&gt;
/usr/share/eprints/tests/21_database_fields.pl ... ok&lt;br /&gt;
/usr/share/eprints/tests/23_cache.pl ............. ok&lt;br /&gt;
/usr/share/eprints/tests/25_mysql.pl ............. ok&lt;br /&gt;
/usr/share/eprints/tests/30_search.pl ............&lt;br /&gt;
Dubious, test returned 255 (wstat 65280, 0xff00)&lt;br /&gt;
Failed 33/36 subtests&lt;br /&gt;
/usr/share/eprints/tests/31_simple_search.pl ..... ok&lt;br /&gt;
/usr/share/eprints/tests/32_triples.pl ........... ok&lt;br /&gt;
/usr/share/eprints/tests/40_views.pl .............&lt;br /&gt;
Dubious, test returned 1 (wstat 256, 0x100)&lt;br /&gt;
Failed 1/6 subtests&lt;br /&gt;
/usr/share/eprints/tests/50_mem_usage.pl ......... ok&lt;br /&gt;
/usr/share/eprints/tests/51_plugin_mem_usage.pl .. ok&lt;br /&gt;
/usr/share/eprints/tests/52_mem_cycle.pl ......... ok&lt;br /&gt;
/usr/share/eprints/tests/55_phrases.pl ........... ok&lt;br /&gt;
/usr/share/eprints/tests/60_id_value.pl .......... ok&lt;br /&gt;
/usr/share/eprints/tests/61_subjects.pl .......... ok&lt;br /&gt;
/usr/share/eprints/tests/65_epm.pl ............... ok&lt;br /&gt;
/usr/share/eprints/tests/67_crypt.pl ............. ok&lt;br /&gt;
/usr/share/eprints/tests/70_xml_import.pl ........ ok&lt;br /&gt;
/usr/share/eprints/tests/80_screenprocessor.pl ... ok&lt;br /&gt;
/usr/share/eprints/tests/81_workflow.pl ..........&lt;br /&gt;
Dubious, test returned 255 (wstat 65280, 0xff00)&lt;br /&gt;
Failed 1/4 subtests&lt;br /&gt;
/usr/share/eprints/tests/82_eprint_view.pl ....... ok&lt;br /&gt;
/usr/share/eprints/tests/82_screen.pl ............ ok&lt;br /&gt;
/usr/share/eprints/tests/83_static.pl ............ ok&lt;br /&gt;
Bailout called.  Further testing stopped:  Error retrieving http://jlrs.example.com: 500 Can't connect to jlrs.example.com:80 (Bad hostname) at /usr/share/eprints/tests/84_sword.pl line 54, &amp;lt;DATA&amp;gt; line 8.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===STDERR===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# EPrints Version: 3.3.14&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'list is 3 long'&lt;br /&gt;
#   at /usr/share/eprints/tests/05_bug_fixes.pl line 24.&lt;br /&gt;
#          got: '0'&lt;br /&gt;
#     expected: '3'&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'list is 3 long after map'&lt;br /&gt;
#   at /usr/share/eprints/tests/05_bug_fixes.pl line 26.&lt;br /&gt;
#          got: '0'&lt;br /&gt;
#     expected: '3'&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'all slice is 3 long'&lt;br /&gt;
#   at /usr/share/eprints/tests/05_bug_fixes.pl line 27.&lt;br /&gt;
#          got: undef&lt;br /&gt;
#     expected: '3'&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'slice is 3 long'&lt;br /&gt;
#   at /usr/share/eprints/tests/05_bug_fixes.pl line 28.&lt;br /&gt;
#          got: undef&lt;br /&gt;
#     expected: '3'&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'slice is 3 long, asked for 5'&lt;br /&gt;
#   at /usr/share/eprints/tests/05_bug_fixes.pl line 29.&lt;br /&gt;
#          got: undef&lt;br /&gt;
#     expected: '3'&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'slice is 2 long, asked for 2'&lt;br /&gt;
#   at /usr/share/eprints/tests/05_bug_fixes.pl line 30.&lt;br /&gt;
#          got: undef&lt;br /&gt;
#     expected: '2'&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'list is 3 long after slice'&lt;br /&gt;
#   at /usr/share/eprints/tests/05_bug_fixes.pl line 31.&lt;br /&gt;
#          got: '0'&lt;br /&gt;
#     expected: '3'&lt;br /&gt;
Can't call method &amp;quot;create_subdataobj&amp;quot; on unblessed reference at /usr/share/eprints/tests/05_bug_fixes.pl line 36.&lt;br /&gt;
# Looks like you planned 15 tests but ran 11.&lt;br /&gt;
# Looks like you failed 7 tests of 11 run.&lt;br /&gt;
# Looks like your test exited with 255 just after 11.&lt;br /&gt;
Can't call method &amp;quot;to_xml&amp;quot; on an undefined value at /usr/share/eprints/bin/../perl_lib/EPrints/Test/XML.pm line 50.&lt;br /&gt;
# Looks like you planned 12 tests but ran 9.&lt;br /&gt;
# Looks like your test exited with 2 just after 9.&lt;br /&gt;
Can't call method &amp;quot;to_xml&amp;quot; on an undefined value at /usr/share/eprints/bin/../perl_lib/EPrints/Test/XML.pm line 50.&lt;br /&gt;
# Looks like you planned 12 tests but ran 9.&lt;br /&gt;
# Looks like your test exited with 255 just after 9.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'blank found matches'&lt;br /&gt;
#   at /usr/share/eprints/tests/30_search.pl line 21.&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'search range eprintid'&lt;br /&gt;
#   at /usr/share/eprints/tests/30_search.pl line 33.&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'title IN + creators_name GREP&lt;br /&gt;
# AND(&lt;br /&gt;
#       AND(&lt;br /&gt;
#               grep($eprint.creators_name,&amp;quot;%[maury]%-%[w%&amp;quot;) ... eprint__index_grep,&lt;br /&gt;
#               index($eprint.creators_name,&amp;quot;maury&amp;quot;) ... eprint__rindex&lt;br /&gt;
#       ),&lt;br /&gt;
#       AND(&lt;br /&gt;
#               grep($eprint.creators_name,&amp;quot;%[parkes]%-%[f%&amp;quot;) ... eprint__index_grep,&lt;br /&gt;
#               index($eprint.creators_name,&amp;quot;parkes&amp;quot;) ... eprint__rindex&lt;br /&gt;
#       ),&lt;br /&gt;
#       index($eprint.title,&amp;quot;eagle&amp;quot;) ... eprint__rindex&lt;br /&gt;
# )'&lt;br /&gt;
#   at /usr/share/eprints/tests/30_search.pl line 43.&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'SET match'&lt;br /&gt;
#   at /usr/share/eprints/tests/30_search.pl line 58.&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'subjects and divisions: AND(&lt;br /&gt;
#       in_subject($eprint.divisions,&amp;quot;sch_mat&amp;quot;) ... eprint_divisions,&lt;br /&gt;
#       in_subject($eprint.subjects,&amp;quot;GR&amp;quot;) ... eprint_subjects&lt;br /&gt;
# )'&lt;br /&gt;
#   at /usr/share/eprints/tests/30_search.pl line 71.&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'match testdata article full text'&lt;br /&gt;
#   at /usr/share/eprints/tests/30_search.pl line 82.&lt;br /&gt;
Can't call method &amp;quot;get_parent&amp;quot; on an undefined value at /usr/share/eprints/tests/30_search.pl line 86.&lt;br /&gt;
# Looks like you planned 36 tests but ran 9.&lt;br /&gt;
# Looks like you failed 6 tests of 9 run.&lt;br /&gt;
# Looks like your test exited with 255 just after 9.&lt;br /&gt;
# memory footprint&lt;br /&gt;
Warning! No values were found for eprint.view._40_views_pl [date] - configuration may be wrong&lt;br /&gt;
# /tmp/jrjiuqUzTc/en/view/_40_views_pl&lt;br /&gt;
&lt;br /&gt;
#   Failed test 'browse_view_menu'&lt;br /&gt;
#   at /usr/share/eprints/tests/40_views.pl line 67.&lt;br /&gt;
#        update_view_by_path=-1B&lt;br /&gt;
#        update_browse_view_list=-1B&lt;br /&gt;
# Looks like you failed 1 test of 6.&lt;br /&gt;
# LOAD=-1B&lt;br /&gt;
# Repository-Specific Data&lt;br /&gt;
#       _load_config=-1B&lt;br /&gt;
#       _load_workflows=-1B&lt;br /&gt;
#       _load_namedsets=-1B&lt;br /&gt;
#       _load_datasets=-1B&lt;br /&gt;
#       _load_languages=-1B&lt;br /&gt;
#       _load_templates=-1B&lt;br /&gt;
#       _load_citation_specs=-1B&lt;br /&gt;
#       _load_storage=-1B&lt;br /&gt;
#       _load_plugins=-1B&lt;br /&gt;
# Session=-1B&lt;br /&gt;
#&lt;br /&gt;
# Plugin Memory Usage&lt;br /&gt;
# EPrints::Plugin::Screen::EPrint::Messages=-1B&lt;br /&gt;
# EPrints::Plugin::Convert::Thumbnails=-1B&lt;br /&gt;
# EPrints::Plugin::Search=-1B&lt;br /&gt;
# EPrints::Plugin::Storage::EPM=-1B&lt;br /&gt;
# EPrints::Plugin::Screen::Workflow::Destroy=-1B&lt;br /&gt;
# EPrints::Plugin::Screen::Workflow::Destroy=-1B&lt;br /&gt;
# Undefined phrase: xxx_invalid (en) at line 24 in /usr/share/eprints/tests/55_phrases.pl&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Can't call method &amp;quot;get_dataset&amp;quot; on an undefined value at /usr/share/eprints/bin/../perl_lib/EPrints/Workflow.pm line 145.&lt;br /&gt;
# Looks like you planned 4 tests but ran 3.&lt;br /&gt;
# Looks like your test exited with 255 just after 3.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Argument &amp;quot;&amp;quot; isn't numeric in addition (+) at /usr/share/eprints/bin/../perl_lib/EPrints/Database.pm line 1500.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
Use of uninitialized value in subroutine entry at /usr/share/eprints/bin/../perl_lib/EPrints/MetaField/Id.pm line 50.&lt;br /&gt;
FAILED--Further testing stopped: Error retrieving http://jlrs.example.com: 500 Can't connect to jlrs.example.com:80 (Bad hostname) at /usr/share/eprints/tests/84_sword.pl line 54, &amp;lt;DATA&amp;gt; line 8.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Patrick:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# EPrints Version: 3.3.14&lt;br /&gt;
SELECT `document`.`docid` FROM `document`, `document_relation_type` AS `document_relation_type`, `document_relation_uri` AS `document_relation_uri` WHERE `document`.`docid`=`document_relation_type`.`docid` AND `document`.`docid`=`document_relation_uri`.`docid` AND (`document_relation_type`.`relation_type` = 'http://eprints.org/relation/islightboxThumbnailVersionOf') AND (`document_relation_type`.`pos` = `document_relation_uri`.`pos`) AND (`document_relation_uri`.`relation_uri` = '/id/document/1') GROUP BY `document`.`docid`&lt;br /&gt;
#   Failed test 'compound type field query'&lt;br /&gt;
#   at /usr/share/eprints3/tests/30_search.pl line 358.&lt;br /&gt;
# Looks like you failed 1 test of 35.&lt;br /&gt;
# memory footprint&lt;br /&gt;
# /tmp/nOb_JblCIl/en/view/_40_views_pl&lt;br /&gt;
# /tmp/nOb_JblCIl/en/view/_40_views_pl/2003&lt;br /&gt;
# /tmp/nOb_JblCIl/en/view/_40_views_pl/2001&lt;br /&gt;
# /tmp/nOb_JblCIl/en/view/_40_views_pl/2000&lt;br /&gt;
# /tmp/nOb_JblCIl/en/view/_40_views_pl/2005&lt;br /&gt;
# /tmp/nOb_JblCIl/en/view/_40_views_pl/2002&lt;br /&gt;
# /tmp/nOb_JblCIl/en/view/_40_views_pl/1998&lt;br /&gt;
# /tmp/nOb_JblCIl/en/view/_40_views_pl/1999&lt;br /&gt;
# /tmp/nOb_JblCIl/en/view/_40_views_pl/2004&lt;br /&gt;
# 	 update_view_by_path=-1B&lt;br /&gt;
# 	 update_browse_view_list=-1B&lt;br /&gt;
# LOAD=-1B&lt;br /&gt;
# Repository-Specific Data&lt;br /&gt;
# 	_load_config=-1B&lt;br /&gt;
# 	_load_workflows=-1B&lt;br /&gt;
# 	_load_namedsets=-1B&lt;br /&gt;
# 	_load_datasets=-1B&lt;br /&gt;
# 	_load_languages=-1B&lt;br /&gt;
# 	_load_templates=-1B&lt;br /&gt;
# 	_load_citation_specs=-1B&lt;br /&gt;
# 	_load_storage=-1B&lt;br /&gt;
# 	_load_plugins=-1B&lt;br /&gt;
# Session=-1B&lt;br /&gt;
# &lt;br /&gt;
# Plugin Memory Usage&lt;br /&gt;
# EPrints::Plugin::Screen::Admin::Config::Edit::Perl=-1B&lt;br /&gt;
# EPrints::Plugin::Export::ContextObject=-1B&lt;br /&gt;
# EPrints::Plugin::Screen::Admin::Config::Edit::XPage=-1B&lt;br /&gt;
# EPrints::Plugin::Export::MultilineCSV=-1B&lt;br /&gt;
# EPrints::Plugin::Screen::Admin::UpdateDatabase=-1B&lt;br /&gt;
# Undefined phrase: xxx_invalid (en) at line 24 in /usr/share/eprints3/tests/55_phrases.pl&lt;br /&gt;
EPScript error: Can't use string (&amp;quot;0&amp;quot;) as an ARRAY ref while &amp;quot;strict refs&amp;quot; in use at /home/pm5/eprints-git/bin/../perl_lib/EPrints/Script/Compiled.pm line 633.&lt;br /&gt;
&lt;br /&gt;
EPScript error: Can't use string (&amp;quot;0&amp;quot;) as an ARRAY ref while &amp;quot;strict refs&amp;quot; in use at /home/pm5/eprints-git/bin/../perl_lib/EPrints/Script/Compiled.pm line 633.&lt;br /&gt;
&lt;br /&gt;
EPScript error: Can't use string (&amp;quot;0&amp;quot;) as an ARRAY ref while &amp;quot;strict refs&amp;quot; in use at /home/pm5/eprints-git/bin/../perl_lib/EPrints/Script/Compiled.pm line 633.&lt;br /&gt;
&lt;br /&gt;
EPScript error: Can't use string (&amp;quot;0&amp;quot;) as an ARRAY ref while &amp;quot;strict refs&amp;quot; in use at /home/pm5/eprints-git/bin/../perl_lib/EPrints/Script/Compiled.pm line 633.&lt;br /&gt;
&lt;br /&gt;
EPScript error: Can't use string (&amp;quot;0&amp;quot;) as an ARRAY ref while &amp;quot;strict refs&amp;quot; in use at /home/pm5/eprints-git/bin/../perl_lib/EPrints/Script/Compiled.pm line 633.&lt;br /&gt;
&lt;br /&gt;
EPScript error: Can't use string (&amp;quot;0&amp;quot;) as an ARRAY ref while &amp;quot;strict refs&amp;quot; in use at /home/pm5/eprints-git/bin/../perl_lib/EPrints/Script/Compiled.pm line 633.&lt;br /&gt;
&lt;br /&gt;
EPScript error: Can't use string (&amp;quot;0&amp;quot;) as an ARRAY ref while &amp;quot;strict refs&amp;quot; in use at /home/pm5/eprints-git/bin/../perl_lib/EPrints/Script/Compiled.pm line 633.&lt;br /&gt;
&lt;br /&gt;
EPScript error: Can't use string (&amp;quot;0&amp;quot;) as an ARRAY ref while &amp;quot;strict refs&amp;quot; in use at /home/pm5/eprints-git/bin/../perl_lib/EPrints/Script/Compiled.pm line 633.&lt;br /&gt;
&lt;br /&gt;
EPScript error: Can't use string (&amp;quot;0&amp;quot;) as an ARRAY ref while &amp;quot;strict refs&amp;quot; in use at /home/pm5/eprints-git/bin/../perl_lib/EPrints/Script/Compiled.pm line 633.&lt;br /&gt;
&lt;br /&gt;
FAILED--Further testing stopped: Failed to parse http://eprints-git.demo/sword-app/servicedocument :1: parser error : Space required after the Public Identifier&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Category:Documentation_Needed&amp;diff=11843</id>
		<title>Category:Documentation Needed</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Category:Documentation_Needed&amp;diff=11843"/>
		<updated>2015-11-18T16:54:51Z</updated>

		<summary type="html">&lt;p&gt;Pm705: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Training Video]]&lt;br /&gt;
&lt;br /&gt;
Below are pages in the wiki that need attention.  If you find a page that needs attention, add it to the Documentation_Needed category, and it will appear here.  If you get a page listed here up to scratch, feel free to remove the category from that page.&lt;br /&gt;
&lt;br /&gt;
If you are looking for a way to contribute to the EPrints community consider creating or updating one of the pages in this category so that it fits into the [[EPrints Training Course]]. Before you begin creating content you should read the [[EPrints_Training_Course#For_Contributors | notes for contributors]].&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=MediaWiki:Sidebar&amp;diff=11841</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=MediaWiki:Sidebar&amp;diff=11841"/>
		<updated>2015-11-18T16:53:33Z</updated>

		<summary type="html">&lt;p&gt;Pm705: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|Front Page&lt;br /&gt;
** Entire_Manual|EPrints 3 Manual&lt;br /&gt;
** Category:Training Video|EPrints Training Course&lt;br /&gt;
** Category:Installation|Installing EPrints&lt;br /&gt;
** Category:Howto|How-to Configure EPrints&lt;br /&gt;
** Category:API|EPrints 3.2+ API&lt;br /&gt;
** Category:EPrints 3 Reference|EPrints 3 Reference&lt;br /&gt;
** Category:Plugins|EPrints Plugins&lt;br /&gt;
* Wiki&lt;br /&gt;
** Special:Categories|All categories&lt;br /&gt;
** Special:Recentchanges|Recent changes&lt;br /&gt;
** mainpage|mainpage&lt;br /&gt;
** helppage|help&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Community_Contributions_Day_November_2015&amp;diff=11768</id>
		<title>Community Contributions Day November 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Community_Contributions_Day_November_2015&amp;diff=11768"/>
		<updated>2015-11-18T15:34:08Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* Group 2: Technical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has been created in the run-up to the EPrints Community Contributions day on November 18th, 2015&lt;br /&gt;
&lt;br /&gt;
== Objectives ==&lt;br /&gt;
&lt;br /&gt;
This event is intended to bring the all parts of the EPrints community together to improve the software and documentation.  We hope to achieve:&lt;br /&gt;
&lt;br /&gt;
* code improvements&lt;br /&gt;
* wiki curation&lt;br /&gt;
* training and demonstration videos&lt;br /&gt;
* community members interacting and training each other&lt;br /&gt;
&lt;br /&gt;
== Event Run Up ==&lt;br /&gt;
&lt;br /&gt;
Things for participants to do before the event:&lt;br /&gt;
&lt;br /&gt;
* Register for the Wiki via the EPrints LDAP server at [http://trac.eprints.org/ldap/ http://trac.eprints.org/ldap/]&lt;br /&gt;
* If you have an a suggestion for an interest group, add it below&lt;br /&gt;
* Please add your name to an interest group that looks interesting (see [[Training_Video:EPrints_Wiki_Basics]] for how to edit the wiki)&lt;br /&gt;
&lt;br /&gt;
== On the Day ==&lt;br /&gt;
&lt;br /&gt;
=== Jumping In ===&lt;br /&gt;
&lt;br /&gt;
So, you have time to contribute and need to know how to get started.  Here are your options:&lt;br /&gt;
&lt;br /&gt;
* Pick an interest group below, and join it&lt;br /&gt;
* If you don't know how to join, contact one of the event organisers&lt;br /&gt;
** Adam Field&lt;br /&gt;
*** @gobfrey on twitter&lt;br /&gt;
*** af05v@ecs.soton.ac.uk&lt;br /&gt;
** Valerie McCutcheon&lt;br /&gt;
***valerie.mccutcheon@glasgow.ac.uk&lt;br /&gt;
*** 0141-330-2674&lt;br /&gt;
** Rachel Proudfoot&lt;br /&gt;
*** 0113 343 4554&lt;br /&gt;
&lt;br /&gt;
=== Interest Groups ===&lt;br /&gt;
&lt;br /&gt;
Any contribution that can be made is welcome, whether it's a minor edit to a wiki page or a bugfix.  However, it may be profitable to run a number of discussion groups in the morning around areas of interest.  These discussion groups can then set up work to be accomplished in the afternoon.&lt;br /&gt;
&lt;br /&gt;
* 10:00 - 11:00 Interest groups meet (skype, google hangout?), make decisions and assign tasks&lt;br /&gt;
** What problem are we solving?&lt;br /&gt;
** How will we work?&lt;br /&gt;
** What communication platform will we use? Skype, Google Hangouts, Google Docs, EMail?&lt;br /&gt;
** Who will do what?&lt;br /&gt;
* 11:00 - 13:00 Morning Contributions&lt;br /&gt;
* 14:00 - 16:00 Afternoon Contributions&lt;br /&gt;
* 16:00 - 16:30 Interest groups wrap-up and reporting.&lt;br /&gt;
&lt;br /&gt;
Each interest group should have a leader who is responsible for chairing the initial meeting, making sure the logistics run smoothly and creating some kind of record of the day (blog post, wiki page, etc).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Group 1: Community Training Course ====&lt;br /&gt;
&lt;br /&gt;
We're coordinating via a [https://docs.google.com/document/d/1CPegvGl9BO45E4ye5_Bpk7e3kurc_spEL3OcmGcUZyA/edit?usp=sharing Google Doc]&lt;br /&gt;
&lt;br /&gt;
This interest group is concerned with the wiki page at http://wiki.eprints.org/w/EPrints_Training_Course.&lt;br /&gt;
&lt;br /&gt;
Areas of Discussion&lt;br /&gt;
* Standard layout and content for training video pages&lt;br /&gt;
* Content of the training course&lt;br /&gt;
* Production of new content&lt;br /&gt;
* Linking to other wiki pages&lt;br /&gt;
&lt;br /&gt;
Members:&lt;br /&gt;
* Adam Field (willing to lead the group)&lt;br /&gt;
* Alan Stiles (alternatively contributing to Group 2)&lt;br /&gt;
* Lizz Jennings (likely to switch between this and Group 2)&lt;br /&gt;
* Mick Eadie&lt;br /&gt;
* George Mamalakis (may also help in some bug reports in Group 2 and also help in creating some Bazaar packages we've already started)&lt;br /&gt;
&lt;br /&gt;
==== Group 2: Technical ====&lt;br /&gt;
&lt;br /&gt;
This interest group will be looking at Github, folding in pull requests and evaluating bugs.&lt;br /&gt;
&lt;br /&gt;
Get on the google hangout now [https://hangouts.google.com/call/md4isxlevojprl6n3vpp2c3dtua https://hangouts.google.com/call/md4isxlevojprl6n3vpp2c3dtua]&lt;br /&gt;
&lt;br /&gt;
Topics of Discussion&lt;br /&gt;
* Vagrant build - see: https://github.com/eprintsug/eprints-vagrant (Good work! EP-Kudos and a cream bun to Robert Doiel!)&lt;br /&gt;
* Categorisation of issues: https://github.com/eprints/eprints/issues&lt;br /&gt;
* Building a [[How to build a development environment from source control]]&lt;br /&gt;
* Having built an EPrints from source the Unit tests do not all pass...&lt;br /&gt;
&lt;br /&gt;
Members&lt;br /&gt;
* Jiadi Yao&lt;br /&gt;
* Alan Stiles (alternative contributing to Group 1)&lt;br /&gt;
* Lizz Jennings (likely to switch between this and Group 1)&lt;br /&gt;
* Mick Eadie&lt;br /&gt;
* Patrick McSweeney (will lead the session ;o)&lt;br /&gt;
* John Salter (will assist with the leading of the session)&lt;br /&gt;
&lt;br /&gt;
==== Group 3: Community Contributions, Best Practices and Processes ====&lt;br /&gt;
&lt;br /&gt;
This group will look at how barriers to community contributions (at all levels) can be lowered and community engagement can be promoted. We'll also look at community best practices and processes in EPrints. '''If you don't make the 10 o'clock meeting, don't worry, just come and join us at the Google Doc below.'''&lt;br /&gt;
&lt;br /&gt;
Members&lt;br /&gt;
&lt;br /&gt;
* Rachel Proudfoot - skype 'rachel_proudfoot'&lt;br /&gt;
* Valerie McCutcheon -skype 'mccutchv'&lt;br /&gt;
* Les Carr&lt;br /&gt;
* Adam Field (in and out, mainly in group 1)&lt;br /&gt;
&lt;br /&gt;
'''Working Document (Google doc)'''&lt;br /&gt;
* [https://docs.google.com/document/d/1YYqeB0r5S8A9rYO9UZN-SoQLBLb2B7WQuP_WW3EKXEU/edit?usp=sharing Group 3 Capture document] - if you can't edit it, contact Rachel or Valerie&lt;br /&gt;
&lt;br /&gt;
Possible subtopics - what do users want? &lt;br /&gt;
&lt;br /&gt;
* User friendly topic guide on wiki&lt;br /&gt;
* reliable version information (cf. [[Required_software]]) incl. wiki update&lt;br /&gt;
* Impact&lt;br /&gt;
* Open Access - drafting community requirements for a standard functionality in EPrints.&lt;br /&gt;
&lt;br /&gt;
=== Independent Contribution ===&lt;br /&gt;
&lt;br /&gt;
Participants are encouraged to join an interest group, but have the option of working independently on their own pet project or objective.  Please put your name in the members list below, with a brief description of what you will be progressing.&lt;br /&gt;
&lt;br /&gt;
Members:&lt;br /&gt;
&lt;br /&gt;
* Luke Skywalker (I'll be researching the Force)&lt;br /&gt;
&lt;br /&gt;
=== Logistics ===&lt;br /&gt;
&lt;br /&gt;
Each interest group should decide on the appropriate platform to use for communications and coordination.&lt;br /&gt;
&lt;br /&gt;
== Post Event ==&lt;br /&gt;
&lt;br /&gt;
It would be appreciated if each team could produce a write-up of the days activities for the benefit of future events and to show the value of the day.  It should be no more than 400 words and a bulleted list of outcomes.  Feel free to post these on any blog or platform you wish, but Adam Field would quite like to gather them all together in a blog post about the day.&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Manual&amp;diff=11759</id>
		<title>Manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Manual&amp;diff=11759"/>
		<updated>2015-11-18T15:06:36Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* Technical Reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Rubbish]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
See the [[Main Page]] for other areas of this wiki.&lt;br /&gt;
&lt;br /&gt;
* [[Introduction|Introduction to EPrints]] and [[History|History of EPrints]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table cellpadding=&amp;quot;10&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Installation and First Steps =&lt;br /&gt;
&lt;br /&gt;
* [[Quick Server Install Guide (Debian / Ubuntu Server)]]&lt;br /&gt;
&lt;br /&gt;
== Releases ==&lt;br /&gt;
&lt;br /&gt;
{{releasenotes}}&lt;br /&gt;
* (see also the note on [[EPrints Version Numbering]])&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
{{Download}}&lt;br /&gt;
&lt;br /&gt;
== Installing EPrints From Binary ==&lt;br /&gt;
* [[Installing EPrints 3 via Redhat RPM]]&lt;br /&gt;
* [[Installing EPrints 3 via Fedora RPM]]&lt;br /&gt;
* [[Installing EPrints 3 via apt (Debian/Ubuntu)]]&lt;br /&gt;
&lt;br /&gt;
== Using EPrints in the Cloud ==&lt;br /&gt;
* [[EPrints EC2]] - Running both a vanilla and training repository!&lt;br /&gt;
&lt;br /&gt;
== Using the Live CD ==&lt;br /&gt;
* [[EPrints Live CD Help]]&lt;br /&gt;
* [[Building the Live CD]]&lt;br /&gt;
&lt;br /&gt;
== Installing EPrints From Source (.tar.gz) ==&lt;br /&gt;
&lt;br /&gt;
* [[Recommended Platforms]]&lt;br /&gt;
* [[Required software]]&lt;br /&gt;
* Install Guides&lt;br /&gt;
** [[Installing Eprints 3 on Fedora Core 7]] (also applicable to FC6)&lt;br /&gt;
** [[Installing EPrints 3 on RedHat Enterprise 4]]&lt;br /&gt;
** [[Installing EPrints 3 on OS X]]&lt;br /&gt;
** [[Debian from source | Installing EPrints 3 on Debian/Ubuntu - The Quick Way]]&lt;br /&gt;
** [[Installing EPrints 3 on Ubuntu 6.10]]&lt;br /&gt;
** [[Installing EPrints 3 on Debian]]&lt;br /&gt;
** [[Installing in a chroot Debian/Ubuntu]]&lt;br /&gt;
** [[:Category:Installation|Installing]] EPrints on various platforms.&lt;br /&gt;
* [[Https3 | Installing EPrints 3 with an https server]]&lt;br /&gt;
&lt;br /&gt;
==Post Installation==&lt;br /&gt;
* [[Getting Started with EPrints 3]]&lt;br /&gt;
* [[Upgrading EPrints 3 versions | Upgrading from an earlier version of EPrints3]]&lt;br /&gt;
* [[Migration|Migrating from EPrints 2.3]]&lt;br /&gt;
&lt;br /&gt;
==Maintenance==&lt;br /&gt;
* [[Backups]]&lt;br /&gt;
* [[Generate Scripts]]&lt;br /&gt;
* [[Alerts]]&lt;br /&gt;
* [[Log Files]]&lt;br /&gt;
* [[Automating your maintenance]]&lt;br /&gt;
* [[Troubleshooting]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-left: solid 1px #ccc; border-right: solid 1px #ccc;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Training Materials=&lt;br /&gt;
* [[EPrints Training Course]]&lt;br /&gt;
* [http://www.eprints.org/software/training/ Training materials] provided by EPrints Services.&lt;br /&gt;
&lt;br /&gt;
= How-to Guides =&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Howto What is a how-to?]&lt;br /&gt;
&lt;br /&gt;
* Orientation &amp;lt;span style=&amp;quot;color: #f94; font-size: 130%&amp;quot;&amp;gt;(Start here)&amp;lt;/span&amp;gt;&lt;br /&gt;
** [[Configuration orientation|New to EPrints 3?]]  - ''before diving into the how-tos, take some time to read through this brief orientation guide and familiarise yourself with the EPrints configuration landscape...''&lt;br /&gt;
** [[EPrints_3_Configuration_orientation_for_EPrints_2_administrators|Migrated from EPrints 2?]] - ''this orientation guide is intended to help you re-orient yourselves in your new EPrints 3 set up...'' &lt;br /&gt;
* [[Front Page Warning | Removing the Front Page Warning]] - Your first go at branding&lt;br /&gt;
* [[Branding with confidence]] - ''one of the most common EPrints customisations is to add your own institution's branding and &amp;quot;look and feel&amp;quot; to the interface...''&lt;br /&gt;
** [[Branding, the next level]] - ''how to completely change the interface to your own design''&lt;br /&gt;
* [[OAI]]&lt;br /&gt;
* [[Adding new views]]&lt;br /&gt;
* Workflow&lt;br /&gt;
* Deposit Types&lt;br /&gt;
** [[Removing types]]&lt;br /&gt;
* Metadata&lt;br /&gt;
* Subjects (fold in with Organisation Hierarchy under &amp;quot;controled vocabularies&amp;quot;)&lt;br /&gt;
* [[EPrints_3_Organisation_Hierarchy|Organisation Hierarchy]] - ''how to put your own organisation's Hierarchy into EPrints 3''&lt;br /&gt;
* Searches&lt;br /&gt;
* [[Autocompletion and Authority Files (Romeo Autocomplete)]] - ''add autocomplete functionality to the Publication Title input field based on an authority file downloaded from EPrints Romeo...''&lt;br /&gt;
* [[Create Export Plugins]] - ''create a Perl Module that will export your data...''&lt;br /&gt;
* [[Login-Only Repository]] - ''require a username and password to access all pages (including search, browse, and the front page)...''&lt;br /&gt;
* [[Change Deposit Status in Bulk]] - ''move a large number of deposits from inbox to archive&lt;br /&gt;
* [[Demoprints Repository]] - ''How to set up and configure the demoprints.eprints.org repository.&lt;br /&gt;
* [[SWORD]] - ''How to configure the SWORD protocol on EPrints.&lt;br /&gt;
* [[:Category:Howto|more ...]]&lt;br /&gt;
&lt;br /&gt;
= How to contribute =&lt;br /&gt;
&lt;br /&gt;
There's a number of different ways you can contribute to the EPrints project. This section covers all the ones we can think of...&lt;br /&gt;
&lt;br /&gt;
Always make an entry on http://files.eprints.org/ for your contribution, even if you don't upload the files. This will make it the one-stop place for people to find EPrints extensions.&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Documentation Needed| Create some of the missing documentation]]&lt;br /&gt;
* [[Contribute: Plugins | Plugins]]&lt;br /&gt;
* [[Contribute: Scripts | Scripts]]&lt;br /&gt;
* [[Contribute: Themes | Themes]]&lt;br /&gt;
* [[Contribute: Translations | Translations]]&lt;br /&gt;
* [[Contribute: Other | Other neighbourly things to do]]&lt;br /&gt;
* [[Extension Packages]]&lt;br /&gt;
&lt;br /&gt;
= Misc =&lt;br /&gt;
&lt;br /&gt;
* [[Preservation Support]] in EPrints 3&lt;br /&gt;
* [[:Category:Languages|Language support and translations]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td valign=&amp;quot;top&amp;quot; width=&amp;quot;33%&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Technical Reference =&lt;br /&gt;
&lt;br /&gt;
* [[EPrints Directory Structure]] - will be linked somewhere better, later.&lt;br /&gt;
&lt;br /&gt;
* [[Metadata]] - configuring metadata fields.&lt;br /&gt;
* [[Archives/ARCHIVEID/cfg/|Repository Configuration]]&lt;br /&gt;
* [[XML Configuration]] Files&lt;br /&gt;
** [[EPScript]] - documentation for the EP3 Scripting language (for use in citations and workflow files).&lt;br /&gt;
** [[EPrints Control Format]] - the structure used to embed EPScript in an XML configuration file.&lt;br /&gt;
** [[Citation Format]]&lt;br /&gt;
** [[Workflow Format]] - the structure of the EP3 workflow files&lt;br /&gt;
** [[Phrase Format]]&lt;br /&gt;
** [[Template Format]]&lt;br /&gt;
** [[XPAGE Format]]&lt;br /&gt;
* [[XML Export Format]]&lt;br /&gt;
* EPrints data structure &lt;br /&gt;
** of the software&lt;br /&gt;
** of the database (relating the dataobjects to each other using eprints fields)&lt;br /&gt;
* [[Data Object]]s and data sets&lt;br /&gt;
** The [[EPrint Object]]&lt;br /&gt;
** The [[User Object]]&lt;br /&gt;
** The [[Document Object]]&lt;br /&gt;
** The [[Subject Object]]&lt;br /&gt;
** The [[Saved Search Object]]&lt;br /&gt;
** The [[History Object]]&lt;br /&gt;
** The [[Access Object]]&lt;br /&gt;
** The [[Request Object]]&lt;br /&gt;
* [[:Category:Plugins|Plugins]]&lt;br /&gt;
** Import&lt;br /&gt;
** [[Create Export Plugins|Export Plugins]]&lt;br /&gt;
** Components&lt;br /&gt;
** [[Screen Plugins]]&lt;br /&gt;
** Convert&lt;br /&gt;
* [[Autocompletion]]&lt;br /&gt;
** [[Understanding IDs in Workflow Forms]]&lt;br /&gt;
* [[API]]&lt;br /&gt;
* [[Dynamic Template System]]&lt;br /&gt;
&lt;br /&gt;
= The EPrints Bazaar =&lt;br /&gt;
* [[:Category:EPrints_Bazaar|The EPrints Bazaar]] (Start Here)&lt;br /&gt;
* The [[EPM Specification]]&lt;br /&gt;
* [[:Category:Bazaar_Package|Bazaar Packages]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Category:Documentation_Needed&amp;diff=11758</id>
		<title>Category:Documentation Needed</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Category:Documentation_Needed&amp;diff=11758"/>
		<updated>2015-11-18T15:05:30Z</updated>

		<summary type="html">&lt;p&gt;Pm705: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Below are pages in the wiki that need attention.  If you find a page that needs attention, add it to the Documentation_Needed category, and it will appear here.  If you get a page listed here up to scratch, feel free to remove the category from that page.&lt;br /&gt;
&lt;br /&gt;
If you are looking for a way to contribute to the EPrints community consider creating or updating one of the pages in this category so that it fits into the [[EPrints Training Course]]. Before you begin creating content you should read the [[EPrints_Training_Course#For_Contributors | notes for contributors]].&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Category:Documentation_Needed&amp;diff=11757</id>
		<title>Category:Documentation Needed</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Category:Documentation_Needed&amp;diff=11757"/>
		<updated>2015-11-18T15:04:58Z</updated>

		<summary type="html">&lt;p&gt;Pm705: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Below are pages in the wiki that need attention.  If you find a page that needs attention, add it to the Documentation_Needed category, and it will appear here.  If you get a page listed here up to scratch, feel free to remove the category from that page.&lt;br /&gt;
&lt;br /&gt;
If you are looking for a way to contribute to the EPrints community consider creating or updating one of the pages in this category so that it fits into the [[EPrints Training Course]]. Before you begin creating content you should read [[EPrints_Training_Course#For_Contributors]]&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=EPrints_Training_Course&amp;diff=11755</id>
		<title>EPrints Training Course</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=EPrints_Training_Course&amp;diff=11755"/>
		<updated>2015-11-18T15:00:33Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* For Contributors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
This page is intended to tie together training videos and other resources into a set of comprehensive training courses for EPrints.  It is intended to serve as an introduction to EPrints for users, administrators and systems administrators involved with running an EPrints Repository.&lt;br /&gt;
&lt;br /&gt;
Some demonstration text.&lt;br /&gt;
&lt;br /&gt;
= EPrints Introduction and Overview =&lt;br /&gt;
&lt;br /&gt;
* EPrints Key Features Tour&lt;br /&gt;
* Repositories for other purposes&lt;br /&gt;
** Collections&lt;br /&gt;
** Research Data&lt;br /&gt;
** Open Education&lt;br /&gt;
&lt;br /&gt;
= Course Streams =&lt;br /&gt;
&amp;lt;table cellpadding=&amp;quot;10&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
== Using EPrints ==&lt;br /&gt;
&lt;br /&gt;
=== ...as a Visitor ===&lt;br /&gt;
&lt;br /&gt;
* Searching for items&lt;br /&gt;
* Browsing for items&lt;br /&gt;
* Requesting a copy of a restricted fulltext&lt;br /&gt;
&lt;br /&gt;
=== ...as a User ===&lt;br /&gt;
&lt;br /&gt;
* [[Training_Video:Deposit_Workflow|Depositing an EPrint]]&lt;br /&gt;
* Importing EPrints&lt;br /&gt;
* Saved Searches and Notifications&lt;br /&gt;
* Exporting EPrints&lt;br /&gt;
* Managing Your User Profile&lt;br /&gt;
&lt;br /&gt;
=== ...as an Editor ===&lt;br /&gt;
&lt;br /&gt;
* The Editorial Buffer&lt;br /&gt;
* The Staff Search&lt;br /&gt;
&lt;br /&gt;
=== ...as an Administrator ===&lt;br /&gt;
&lt;br /&gt;
* Managing Users&lt;br /&gt;
** Editing User Records&lt;br /&gt;
** Understanding User Roles and Permissions&lt;br /&gt;
* Basic Troubleshooting&lt;br /&gt;
** [[Training_Video:Search_Troubleshooting|Checking and Starting the Indexer]]&lt;br /&gt;
* Batch Editing&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-left: solid 1px #ccc; border-right: solid 1px #ccc;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuring EPrints ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Configuration ===&lt;br /&gt;
&lt;br /&gt;
Basic configuration can be done at the front-end, and requires no knowledge of perl or the EPrints API.&lt;br /&gt;
&lt;br /&gt;
* Configuration Tools Overview&lt;br /&gt;
* Branding&lt;br /&gt;
** Adding a logo&lt;br /&gt;
* [[Training_Video:Edit_Phrases|Phrases]]&lt;br /&gt;
* [[Training_Video:Edit_and_Create_Static_Pages|Static Pages]]&lt;br /&gt;
* Item Types and Metadata Configuration&lt;br /&gt;
** [[Training_Video:Subject_Trees|Subject Trees]]&lt;br /&gt;
** The Workflow&lt;br /&gt;
*** [[Training_Video:Workflow_Configuration|Basic Workflow Configuration]]&lt;br /&gt;
*** [[Training_Video:Autocompletion|Authority Lists and Autocompletion]]&lt;br /&gt;
** [[Training_Video:Citation_Styles|Citation Styles]]&lt;br /&gt;
** Item Types&lt;br /&gt;
*** Adding a new type&lt;br /&gt;
*** Removing a type&lt;br /&gt;
* Browse Views&lt;br /&gt;
* [[Training_Video:Search_Configuration|Searches]]&lt;br /&gt;
* Installing Bazaar Packages&lt;br /&gt;
&lt;br /&gt;
=== Advanced Configuration ===&lt;br /&gt;
&lt;br /&gt;
Advanced configuration assumes some knowledge of the command-line and sometimes a little bit of Perl and the EPrints API.&lt;br /&gt;
&lt;br /&gt;
* Branding&lt;br /&gt;
** Creating a new site-wide template.&lt;br /&gt;
* Understanding Configuration Structure&lt;br /&gt;
* [[Training_Video:Add_A_Field|Adding a Metadata Field]]&lt;br /&gt;
* Programmatic Metadata Values&lt;br /&gt;
** [[Training_Video:Automatic_Fields|Automatic Values]]&lt;br /&gt;
** [[Training_Video:Default_Fields|Default Values]]&lt;br /&gt;
** [[Training_Video:Virtual_Fields|Virtual Fields]]&lt;br /&gt;
* Custom Rendering of Values&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Maintaining and Developing EPrints ==&lt;br /&gt;
&lt;br /&gt;
* Technical Orientation&lt;br /&gt;
&lt;br /&gt;
=== Systems Administration ===&lt;br /&gt;
* [[Training_Video:EPrints_Install|Installing EPrints]]&lt;br /&gt;
* Troubleshooting&lt;br /&gt;
** [[Training_Video:Search_Troubleshooting|Troubleshooting Searching]]&lt;br /&gt;
&lt;br /&gt;
=== The EPrints API ===&lt;br /&gt;
&lt;br /&gt;
* API Basics&lt;br /&gt;
** The Repository Object&lt;br /&gt;
** Datasets and Dataobjs&lt;br /&gt;
** XML and DOM&lt;br /&gt;
* Developing Plugins and Bazaar Packages&lt;br /&gt;
** [[Training_Video:Export_Plugin_Bazaar_Package|Export Plugin Bazaar Package]]&lt;br /&gt;
** [[Training_Video:New_Field_Bazaar_Package|New Field Bazaar Package]]&lt;br /&gt;
&lt;br /&gt;
=== The EPrints Wiki ===&lt;br /&gt;
&lt;br /&gt;
* [[Training_Video:EPrints_Wiki_Basics|EPrints Wiki Basics]]&lt;br /&gt;
&lt;br /&gt;
=== Core Development ===&lt;br /&gt;
&lt;br /&gt;
* Creating a Dev Environment&lt;br /&gt;
* Creating Pull Requests&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= For Contributors =&lt;br /&gt;
&lt;br /&gt;
We have a list of [[:Category:Documentation Needed| documentation which is missing]]&lt;br /&gt;
&lt;br /&gt;
If you are creating or curating a training course page, please copy/paste the current [[Training_course_template|Template]] page.&lt;br /&gt;
&lt;br /&gt;
Creation of videos can be done with screen capture software.  The following packages have been used by video producers:&lt;br /&gt;
&lt;br /&gt;
* Screenflick (on a Mac) -- Adam Field&lt;br /&gt;
&lt;br /&gt;
* Screencast-o-matic (on Windows 10) -- Lizz Jennings (note: there's a microphone &amp;quot;enhancement&amp;quot; feature on Windows 10 that will make you sound like Darth Vader.  You need to disable this in the Windows 10 sound settings for the screencast to work).&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Manual&amp;diff=11752</id>
		<title>Manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Manual&amp;diff=11752"/>
		<updated>2015-11-18T14:58:04Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* How to contribute */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Rubbish]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
See the [[Main Page]] for other areas of this wiki.&lt;br /&gt;
&lt;br /&gt;
* [[Introduction|Introduction to EPrints]] and [[History|History of EPrints]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table cellpadding=&amp;quot;10&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Installation and First Steps =&lt;br /&gt;
&lt;br /&gt;
* [[Quick Server Install Guide (Debian / Ubuntu Server)]]&lt;br /&gt;
&lt;br /&gt;
== Releases ==&lt;br /&gt;
&lt;br /&gt;
{{releasenotes}}&lt;br /&gt;
* (see also the note on [[EPrints Version Numbering]])&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
{{Download}}&lt;br /&gt;
&lt;br /&gt;
== Installing EPrints From Binary ==&lt;br /&gt;
* [[Installing EPrints 3 via Redhat RPM]]&lt;br /&gt;
* [[Installing EPrints 3 via Fedora RPM]]&lt;br /&gt;
* [[Installing EPrints 3 via apt (Debian/Ubuntu)]]&lt;br /&gt;
&lt;br /&gt;
== Using EPrints in the Cloud ==&lt;br /&gt;
* [[EPrints EC2]] - Running both a vanilla and training repository!&lt;br /&gt;
&lt;br /&gt;
== Using the Live CD ==&lt;br /&gt;
* [[EPrints Live CD Help]]&lt;br /&gt;
* [[Building the Live CD]]&lt;br /&gt;
&lt;br /&gt;
== Installing EPrints From Source (.tar.gz) ==&lt;br /&gt;
&lt;br /&gt;
* [[Recommended Platforms]]&lt;br /&gt;
* [[Required software]]&lt;br /&gt;
* Install Guides&lt;br /&gt;
** [[Installing Eprints 3 on Fedora Core 7]] (also applicable to FC6)&lt;br /&gt;
** [[Installing EPrints 3 on RedHat Enterprise 4]]&lt;br /&gt;
** [[Installing EPrints 3 on OS X]]&lt;br /&gt;
** [[Debian from source | Installing EPrints 3 on Debian/Ubuntu - The Quick Way]]&lt;br /&gt;
** [[Installing EPrints 3 on Ubuntu 6.10]]&lt;br /&gt;
** [[Installing EPrints 3 on Debian]]&lt;br /&gt;
** [[Installing in a chroot Debian/Ubuntu]]&lt;br /&gt;
** [[:Category:Installation|Installing]] EPrints on various platforms.&lt;br /&gt;
* [[Https3 | Installing EPrints 3 with an https server]]&lt;br /&gt;
&lt;br /&gt;
==Post Installation==&lt;br /&gt;
* [[Getting Started with EPrints 3]]&lt;br /&gt;
* [[Upgrading EPrints 3 versions | Upgrading from an earlier version of EPrints3]]&lt;br /&gt;
* [[Migration|Migrating from EPrints 2.3]]&lt;br /&gt;
&lt;br /&gt;
==Maintenance==&lt;br /&gt;
* [[Backups]]&lt;br /&gt;
* [[Generate Scripts]]&lt;br /&gt;
* [[Alerts]]&lt;br /&gt;
* [[Log Files]]&lt;br /&gt;
* [[Automating your maintenance]]&lt;br /&gt;
* [[Troubleshooting]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-left: solid 1px #ccc; border-right: solid 1px #ccc;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Training Materials=&lt;br /&gt;
* [[EPrints Training Course]]&lt;br /&gt;
* [http://www.eprints.org/software/training/ Training materials] provided by EPrints Services.&lt;br /&gt;
&lt;br /&gt;
= How-to Guides =&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Howto What is a how-to?]&lt;br /&gt;
&lt;br /&gt;
* Orientation &amp;lt;span style=&amp;quot;color: #f94; font-size: 130%&amp;quot;&amp;gt;(Start here)&amp;lt;/span&amp;gt;&lt;br /&gt;
** [[Configuration orientation|New to EPrints 3?]]  - ''before diving into the how-tos, take some time to read through this brief orientation guide and familiarise yourself with the EPrints configuration landscape...''&lt;br /&gt;
** [[EPrints_3_Configuration_orientation_for_EPrints_2_administrators|Migrated from EPrints 2?]] - ''this orientation guide is intended to help you re-orient yourselves in your new EPrints 3 set up...'' &lt;br /&gt;
* [[Front Page Warning | Removing the Front Page Warning]] - Your first go at branding&lt;br /&gt;
* [[Branding with confidence]] - ''one of the most common EPrints customisations is to add your own institution's branding and &amp;quot;look and feel&amp;quot; to the interface...''&lt;br /&gt;
** [[Branding, the next level]] - ''how to completely change the interface to your own design''&lt;br /&gt;
* [[OAI]]&lt;br /&gt;
* [[Adding new views]]&lt;br /&gt;
* Workflow&lt;br /&gt;
* Deposit Types&lt;br /&gt;
** [[Removing types]]&lt;br /&gt;
* Metadata&lt;br /&gt;
* Subjects (fold in with Organisation Hierarchy under &amp;quot;controled vocabularies&amp;quot;)&lt;br /&gt;
* [[EPrints_3_Organisation_Hierarchy|Organisation Hierarchy]] - ''how to put your own organisation's Hierarchy into EPrints 3''&lt;br /&gt;
* Searches&lt;br /&gt;
* [[Autocompletion and Authority Files (Romeo Autocomplete)]] - ''add autocomplete functionality to the Publication Title input field based on an authority file downloaded from EPrints Romeo...''&lt;br /&gt;
* [[Create Export Plugins]] - ''create a Perl Module that will export your data...''&lt;br /&gt;
* [[Login-Only Repository]] - ''require a username and password to access all pages (including search, browse, and the front page)...''&lt;br /&gt;
* [[Change Deposit Status in Bulk]] - ''move a large number of deposits from inbox to archive&lt;br /&gt;
* [[Demoprints Repository]] - ''How to set up and configure the demoprints.eprints.org repository.&lt;br /&gt;
* [[SWORD]] - ''How to configure the SWORD protocol on EPrints.&lt;br /&gt;
* [[:Category:Howto|more ...]]&lt;br /&gt;
&lt;br /&gt;
= How to contribute =&lt;br /&gt;
&lt;br /&gt;
There's a number of different ways you can contribute to the EPrints project. This section covers all the ones we can think of...&lt;br /&gt;
&lt;br /&gt;
Always make an entry on http://files.eprints.org/ for your contribution, even if you don't upload the files. This will make it the one-stop place for people to find EPrints extensions.&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Documentation Needed| Create some of the missing documentation]]&lt;br /&gt;
* [[Contribute: Plugins | Plugins]]&lt;br /&gt;
* [[Contribute: Scripts | Scripts]]&lt;br /&gt;
* [[Contribute: Themes | Themes]]&lt;br /&gt;
* [[Contribute: Translations | Translations]]&lt;br /&gt;
* [[Contribute: Other | Other neighbourly things to do]]&lt;br /&gt;
* [[Extension Packages]]&lt;br /&gt;
&lt;br /&gt;
= Misc =&lt;br /&gt;
&lt;br /&gt;
* [[Preservation Support]] in EPrints 3&lt;br /&gt;
* [[:Category:Languages|Language support and translations]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td valign=&amp;quot;top&amp;quot; width=&amp;quot;33%&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Technical Reference =&lt;br /&gt;
&lt;br /&gt;
* [[EPrints Directory Structure]] - will be linked somewhere better, later.&lt;br /&gt;
&lt;br /&gt;
* [[Metadata]] - configuring metadata fields.&lt;br /&gt;
* [[Archives/ARCHIVEID/cfg/|Repository Configuration]]&lt;br /&gt;
* [[XML Configuration]] Files&lt;br /&gt;
** [[EPScript]] - documentation for the EP3 Scripting language (for use in citations and workflow files).&lt;br /&gt;
** [[EPrints Control Format]] - the structure used to embed EPScript in an XML configuration file.&lt;br /&gt;
** [[Citation Format]]&lt;br /&gt;
** [[Workflow Format]] - the structure of the EP3 workflow files&lt;br /&gt;
** [[Phrase Format]]&lt;br /&gt;
** [[Template Format]]&lt;br /&gt;
** [[XPAGE Format]]&lt;br /&gt;
* [[XML Export Format]]&lt;br /&gt;
* EPrints data structure &lt;br /&gt;
** of the software&lt;br /&gt;
** of the database (relating the dataobjects to each other using eprints fields)&lt;br /&gt;
* [[Data Object]]s and data sets&lt;br /&gt;
** The [[EPrint Object]]&lt;br /&gt;
** The [[User Object]]&lt;br /&gt;
** The [[Document Object]]&lt;br /&gt;
** The [[Subject Object]]&lt;br /&gt;
** The [[Saved Search Object]]&lt;br /&gt;
** The [[History Object]]&lt;br /&gt;
** The [[Access Object]]&lt;br /&gt;
** The [[Request Object]]&lt;br /&gt;
* Plugins&lt;br /&gt;
** Import&lt;br /&gt;
** [[Create Export Plugins|Export Plugins]]&lt;br /&gt;
** Components&lt;br /&gt;
** [[Screen Plugins]]&lt;br /&gt;
** Convert&lt;br /&gt;
* [[Autocompletion]]&lt;br /&gt;
** [[Understanding IDs in Workflow Forms]]&lt;br /&gt;
* [[API]]&lt;br /&gt;
* [[Dynamic Template System]]&lt;br /&gt;
&lt;br /&gt;
= The EPrints Bazaar =&lt;br /&gt;
* [[:Category:EPrints_Bazaar|The EPrints Bazaar]] (Start Here)&lt;br /&gt;
* The [[EPM Specification]]&lt;br /&gt;
* [[:Category:Bazaar_Package|Bazaar Packages]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Manual&amp;diff=11751</id>
		<title>Manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Manual&amp;diff=11751"/>
		<updated>2015-11-18T14:57:54Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* How to contribute */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Rubbish]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
See the [[Main Page]] for other areas of this wiki.&lt;br /&gt;
&lt;br /&gt;
* [[Introduction|Introduction to EPrints]] and [[History|History of EPrints]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table cellpadding=&amp;quot;10&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Installation and First Steps =&lt;br /&gt;
&lt;br /&gt;
* [[Quick Server Install Guide (Debian / Ubuntu Server)]]&lt;br /&gt;
&lt;br /&gt;
== Releases ==&lt;br /&gt;
&lt;br /&gt;
{{releasenotes}}&lt;br /&gt;
* (see also the note on [[EPrints Version Numbering]])&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
{{Download}}&lt;br /&gt;
&lt;br /&gt;
== Installing EPrints From Binary ==&lt;br /&gt;
* [[Installing EPrints 3 via Redhat RPM]]&lt;br /&gt;
* [[Installing EPrints 3 via Fedora RPM]]&lt;br /&gt;
* [[Installing EPrints 3 via apt (Debian/Ubuntu)]]&lt;br /&gt;
&lt;br /&gt;
== Using EPrints in the Cloud ==&lt;br /&gt;
* [[EPrints EC2]] - Running both a vanilla and training repository!&lt;br /&gt;
&lt;br /&gt;
== Using the Live CD ==&lt;br /&gt;
* [[EPrints Live CD Help]]&lt;br /&gt;
* [[Building the Live CD]]&lt;br /&gt;
&lt;br /&gt;
== Installing EPrints From Source (.tar.gz) ==&lt;br /&gt;
&lt;br /&gt;
* [[Recommended Platforms]]&lt;br /&gt;
* [[Required software]]&lt;br /&gt;
* Install Guides&lt;br /&gt;
** [[Installing Eprints 3 on Fedora Core 7]] (also applicable to FC6)&lt;br /&gt;
** [[Installing EPrints 3 on RedHat Enterprise 4]]&lt;br /&gt;
** [[Installing EPrints 3 on OS X]]&lt;br /&gt;
** [[Debian from source | Installing EPrints 3 on Debian/Ubuntu - The Quick Way]]&lt;br /&gt;
** [[Installing EPrints 3 on Ubuntu 6.10]]&lt;br /&gt;
** [[Installing EPrints 3 on Debian]]&lt;br /&gt;
** [[Installing in a chroot Debian/Ubuntu]]&lt;br /&gt;
** [[:Category:Installation|Installing]] EPrints on various platforms.&lt;br /&gt;
* [[Https3 | Installing EPrints 3 with an https server]]&lt;br /&gt;
&lt;br /&gt;
==Post Installation==&lt;br /&gt;
* [[Getting Started with EPrints 3]]&lt;br /&gt;
* [[Upgrading EPrints 3 versions | Upgrading from an earlier version of EPrints3]]&lt;br /&gt;
* [[Migration|Migrating from EPrints 2.3]]&lt;br /&gt;
&lt;br /&gt;
==Maintenance==&lt;br /&gt;
* [[Backups]]&lt;br /&gt;
* [[Generate Scripts]]&lt;br /&gt;
* [[Alerts]]&lt;br /&gt;
* [[Log Files]]&lt;br /&gt;
* [[Automating your maintenance]]&lt;br /&gt;
* [[Troubleshooting]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-left: solid 1px #ccc; border-right: solid 1px #ccc;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Training Materials=&lt;br /&gt;
* [[EPrints Training Course]]&lt;br /&gt;
* [http://www.eprints.org/software/training/ Training materials] provided by EPrints Services.&lt;br /&gt;
&lt;br /&gt;
= How-to Guides =&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Howto What is a how-to?]&lt;br /&gt;
&lt;br /&gt;
* Orientation &amp;lt;span style=&amp;quot;color: #f94; font-size: 130%&amp;quot;&amp;gt;(Start here)&amp;lt;/span&amp;gt;&lt;br /&gt;
** [[Configuration orientation|New to EPrints 3?]]  - ''before diving into the how-tos, take some time to read through this brief orientation guide and familiarise yourself with the EPrints configuration landscape...''&lt;br /&gt;
** [[EPrints_3_Configuration_orientation_for_EPrints_2_administrators|Migrated from EPrints 2?]] - ''this orientation guide is intended to help you re-orient yourselves in your new EPrints 3 set up...'' &lt;br /&gt;
* [[Front Page Warning | Removing the Front Page Warning]] - Your first go at branding&lt;br /&gt;
* [[Branding with confidence]] - ''one of the most common EPrints customisations is to add your own institution's branding and &amp;quot;look and feel&amp;quot; to the interface...''&lt;br /&gt;
** [[Branding, the next level]] - ''how to completely change the interface to your own design''&lt;br /&gt;
* [[OAI]]&lt;br /&gt;
* [[Adding new views]]&lt;br /&gt;
* Workflow&lt;br /&gt;
* Deposit Types&lt;br /&gt;
** [[Removing types]]&lt;br /&gt;
* Metadata&lt;br /&gt;
* Subjects (fold in with Organisation Hierarchy under &amp;quot;controled vocabularies&amp;quot;)&lt;br /&gt;
* [[EPrints_3_Organisation_Hierarchy|Organisation Hierarchy]] - ''how to put your own organisation's Hierarchy into EPrints 3''&lt;br /&gt;
* Searches&lt;br /&gt;
* [[Autocompletion and Authority Files (Romeo Autocomplete)]] - ''add autocomplete functionality to the Publication Title input field based on an authority file downloaded from EPrints Romeo...''&lt;br /&gt;
* [[Create Export Plugins]] - ''create a Perl Module that will export your data...''&lt;br /&gt;
* [[Login-Only Repository]] - ''require a username and password to access all pages (including search, browse, and the front page)...''&lt;br /&gt;
* [[Change Deposit Status in Bulk]] - ''move a large number of deposits from inbox to archive&lt;br /&gt;
* [[Demoprints Repository]] - ''How to set up and configure the demoprints.eprints.org repository.&lt;br /&gt;
* [[SWORD]] - ''How to configure the SWORD protocol on EPrints.&lt;br /&gt;
* [[:Category:Howto|more ...]]&lt;br /&gt;
&lt;br /&gt;
= How to contribute =&lt;br /&gt;
&lt;br /&gt;
There's a number of different ways you can contribute to the EPrints project. This section covers all the ones we can think of...&lt;br /&gt;
&lt;br /&gt;
Always make an entry on http://files.eprints.org/ for your contribution, even if you don't upload the files. This will make it the one-stop place for people to find EPrints extensions.&lt;br /&gt;
&lt;br /&gt;
* [[Category:Documentation Needed| Create some of the missing documentation]]&lt;br /&gt;
* [[Contribute: Plugins | Plugins]]&lt;br /&gt;
* [[Contribute: Scripts | Scripts]]&lt;br /&gt;
* [[Contribute: Themes | Themes]]&lt;br /&gt;
* [[Contribute: Translations | Translations]]&lt;br /&gt;
* [[Contribute: Other | Other neighbourly things to do]]&lt;br /&gt;
* [[Extension Packages]]&lt;br /&gt;
&lt;br /&gt;
= Misc =&lt;br /&gt;
&lt;br /&gt;
* [[Preservation Support]] in EPrints 3&lt;br /&gt;
* [[:Category:Languages|Language support and translations]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td valign=&amp;quot;top&amp;quot; width=&amp;quot;33%&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Technical Reference =&lt;br /&gt;
&lt;br /&gt;
* [[EPrints Directory Structure]] - will be linked somewhere better, later.&lt;br /&gt;
&lt;br /&gt;
* [[Metadata]] - configuring metadata fields.&lt;br /&gt;
* [[Archives/ARCHIVEID/cfg/|Repository Configuration]]&lt;br /&gt;
* [[XML Configuration]] Files&lt;br /&gt;
** [[EPScript]] - documentation for the EP3 Scripting language (for use in citations and workflow files).&lt;br /&gt;
** [[EPrints Control Format]] - the structure used to embed EPScript in an XML configuration file.&lt;br /&gt;
** [[Citation Format]]&lt;br /&gt;
** [[Workflow Format]] - the structure of the EP3 workflow files&lt;br /&gt;
** [[Phrase Format]]&lt;br /&gt;
** [[Template Format]]&lt;br /&gt;
** [[XPAGE Format]]&lt;br /&gt;
* [[XML Export Format]]&lt;br /&gt;
* EPrints data structure &lt;br /&gt;
** of the software&lt;br /&gt;
** of the database (relating the dataobjects to each other using eprints fields)&lt;br /&gt;
* [[Data Object]]s and data sets&lt;br /&gt;
** The [[EPrint Object]]&lt;br /&gt;
** The [[User Object]]&lt;br /&gt;
** The [[Document Object]]&lt;br /&gt;
** The [[Subject Object]]&lt;br /&gt;
** The [[Saved Search Object]]&lt;br /&gt;
** The [[History Object]]&lt;br /&gt;
** The [[Access Object]]&lt;br /&gt;
** The [[Request Object]]&lt;br /&gt;
* Plugins&lt;br /&gt;
** Import&lt;br /&gt;
** [[Create Export Plugins|Export Plugins]]&lt;br /&gt;
** Components&lt;br /&gt;
** [[Screen Plugins]]&lt;br /&gt;
** Convert&lt;br /&gt;
* [[Autocompletion]]&lt;br /&gt;
** [[Understanding IDs in Workflow Forms]]&lt;br /&gt;
* [[API]]&lt;br /&gt;
* [[Dynamic Template System]]&lt;br /&gt;
&lt;br /&gt;
= The EPrints Bazaar =&lt;br /&gt;
* [[:Category:EPrints_Bazaar|The EPrints Bazaar]] (Start Here)&lt;br /&gt;
* The [[EPM Specification]]&lt;br /&gt;
* [[:Category:Bazaar_Package|Bazaar Packages]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Category:Documentation_Needed&amp;diff=11749</id>
		<title>Category:Documentation Needed</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Category:Documentation_Needed&amp;diff=11749"/>
		<updated>2015-11-18T14:55:09Z</updated>

		<summary type="html">&lt;p&gt;Pm705: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Below are pages in the wiki that need attention.  If you find a page that needs attention, add it to the Documentation_Needed category, and it will appear here.  If you get a page listed here up to scratch, feel free to remove the category from that page.&lt;br /&gt;
&lt;br /&gt;
If you are looking for a way to contribute to the EPrints community consider creating or updating one of the pages in this category so that it fits into [[EPrints Training Course]]&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Manual&amp;diff=11748</id>
		<title>Manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Manual&amp;diff=11748"/>
		<updated>2015-11-18T14:51:51Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* Training Materials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Rubbish]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
See the [[Main Page]] for other areas of this wiki.&lt;br /&gt;
&lt;br /&gt;
* [[Introduction|Introduction to EPrints]] and [[History|History of EPrints]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table cellpadding=&amp;quot;10&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Installation and First Steps =&lt;br /&gt;
&lt;br /&gt;
* [[Quick Server Install Guide (Debian / Ubuntu Server)]]&lt;br /&gt;
&lt;br /&gt;
== Releases ==&lt;br /&gt;
&lt;br /&gt;
{{releasenotes}}&lt;br /&gt;
* (see also the note on [[EPrints Version Numbering]])&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
{{Download}}&lt;br /&gt;
&lt;br /&gt;
== Installing EPrints From Binary ==&lt;br /&gt;
* [[Installing EPrints 3 via Redhat RPM]]&lt;br /&gt;
* [[Installing EPrints 3 via Fedora RPM]]&lt;br /&gt;
* [[Installing EPrints 3 via apt (Debian/Ubuntu)]]&lt;br /&gt;
&lt;br /&gt;
== Using EPrints in the Cloud ==&lt;br /&gt;
* [[EPrints EC2]] - Running both a vanilla and training repository!&lt;br /&gt;
&lt;br /&gt;
== Using the Live CD ==&lt;br /&gt;
* [[EPrints Live CD Help]]&lt;br /&gt;
* [[Building the Live CD]]&lt;br /&gt;
&lt;br /&gt;
== Installing EPrints From Source (.tar.gz) ==&lt;br /&gt;
&lt;br /&gt;
* [[Recommended Platforms]]&lt;br /&gt;
* [[Required software]]&lt;br /&gt;
* Install Guides&lt;br /&gt;
** [[Installing Eprints 3 on Fedora Core 7]] (also applicable to FC6)&lt;br /&gt;
** [[Installing EPrints 3 on RedHat Enterprise 4]]&lt;br /&gt;
** [[Installing EPrints 3 on OS X]]&lt;br /&gt;
** [[Debian from source | Installing EPrints 3 on Debian/Ubuntu - The Quick Way]]&lt;br /&gt;
** [[Installing EPrints 3 on Ubuntu 6.10]]&lt;br /&gt;
** [[Installing EPrints 3 on Debian]]&lt;br /&gt;
** [[Installing in a chroot Debian/Ubuntu]]&lt;br /&gt;
** [[:Category:Installation|Installing]] EPrints on various platforms.&lt;br /&gt;
* [[Https3 | Installing EPrints 3 with an https server]]&lt;br /&gt;
&lt;br /&gt;
==Post Installation==&lt;br /&gt;
* [[Getting Started with EPrints 3]]&lt;br /&gt;
* [[Upgrading EPrints 3 versions | Upgrading from an earlier version of EPrints3]]&lt;br /&gt;
* [[Migration|Migrating from EPrints 2.3]]&lt;br /&gt;
&lt;br /&gt;
==Maintenance==&lt;br /&gt;
* [[Backups]]&lt;br /&gt;
* [[Generate Scripts]]&lt;br /&gt;
* [[Alerts]]&lt;br /&gt;
* [[Log Files]]&lt;br /&gt;
* [[Automating your maintenance]]&lt;br /&gt;
* [[Troubleshooting]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-left: solid 1px #ccc; border-right: solid 1px #ccc;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Training Materials=&lt;br /&gt;
* [[EPrints Training Course]]&lt;br /&gt;
* [http://www.eprints.org/software/training/ Training materials] provided by EPrints Services.&lt;br /&gt;
&lt;br /&gt;
= How-to Guides =&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Howto What is a how-to?]&lt;br /&gt;
&lt;br /&gt;
* Orientation &amp;lt;span style=&amp;quot;color: #f94; font-size: 130%&amp;quot;&amp;gt;(Start here)&amp;lt;/span&amp;gt;&lt;br /&gt;
** [[Configuration orientation|New to EPrints 3?]]  - ''before diving into the how-tos, take some time to read through this brief orientation guide and familiarise yourself with the EPrints configuration landscape...''&lt;br /&gt;
** [[EPrints_3_Configuration_orientation_for_EPrints_2_administrators|Migrated from EPrints 2?]] - ''this orientation guide is intended to help you re-orient yourselves in your new EPrints 3 set up...'' &lt;br /&gt;
* [[Front Page Warning | Removing the Front Page Warning]] - Your first go at branding&lt;br /&gt;
* [[Branding with confidence]] - ''one of the most common EPrints customisations is to add your own institution's branding and &amp;quot;look and feel&amp;quot; to the interface...''&lt;br /&gt;
** [[Branding, the next level]] - ''how to completely change the interface to your own design''&lt;br /&gt;
* [[OAI]]&lt;br /&gt;
* [[Adding new views]]&lt;br /&gt;
* Workflow&lt;br /&gt;
* Deposit Types&lt;br /&gt;
** [[Removing types]]&lt;br /&gt;
* Metadata&lt;br /&gt;
* Subjects (fold in with Organisation Hierarchy under &amp;quot;controled vocabularies&amp;quot;)&lt;br /&gt;
* [[EPrints_3_Organisation_Hierarchy|Organisation Hierarchy]] - ''how to put your own organisation's Hierarchy into EPrints 3''&lt;br /&gt;
* Searches&lt;br /&gt;
* [[Autocompletion and Authority Files (Romeo Autocomplete)]] - ''add autocomplete functionality to the Publication Title input field based on an authority file downloaded from EPrints Romeo...''&lt;br /&gt;
* [[Create Export Plugins]] - ''create a Perl Module that will export your data...''&lt;br /&gt;
* [[Login-Only Repository]] - ''require a username and password to access all pages (including search, browse, and the front page)...''&lt;br /&gt;
* [[Change Deposit Status in Bulk]] - ''move a large number of deposits from inbox to archive&lt;br /&gt;
* [[Demoprints Repository]] - ''How to set up and configure the demoprints.eprints.org repository.&lt;br /&gt;
* [[SWORD]] - ''How to configure the SWORD protocol on EPrints.&lt;br /&gt;
* [[:Category:Howto|more ...]]&lt;br /&gt;
&lt;br /&gt;
= How to contribute =&lt;br /&gt;
&lt;br /&gt;
There's a number of different ways you can contribute to the EPrints project. This section covers all the ones we can think of...&lt;br /&gt;
&lt;br /&gt;
Always make an entry on http://files.eprints.org/ for your contribution, even if you don't upload the files. This will make it the one-stop place for people to find EPrints extensions.&lt;br /&gt;
&lt;br /&gt;
* [[Contribute: Plugins | Plugins]]&lt;br /&gt;
* [[Contribute: Scripts | Scripts]]&lt;br /&gt;
* [[Contribute: Themes | Themes]]&lt;br /&gt;
* [[Contribute: Translations | Translations]]&lt;br /&gt;
* [[Contribute: Other | Other neighbourly things to do]]&lt;br /&gt;
* [[Extension Packages]]&lt;br /&gt;
&lt;br /&gt;
= Misc =&lt;br /&gt;
&lt;br /&gt;
* [[Preservation Support]] in EPrints 3&lt;br /&gt;
* [[:Category:Languages|Language support and translations]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td valign=&amp;quot;top&amp;quot; width=&amp;quot;33%&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Technical Reference =&lt;br /&gt;
&lt;br /&gt;
* [[EPrints Directory Structure]] - will be linked somewhere better, later.&lt;br /&gt;
&lt;br /&gt;
* [[Metadata]] - configuring metadata fields.&lt;br /&gt;
* [[Archives/ARCHIVEID/cfg/|Repository Configuration]]&lt;br /&gt;
* [[XML Configuration]] Files&lt;br /&gt;
** [[EPScript]] - documentation for the EP3 Scripting language (for use in citations and workflow files).&lt;br /&gt;
** [[EPrints Control Format]] - the structure used to embed EPScript in an XML configuration file.&lt;br /&gt;
** [[Citation Format]]&lt;br /&gt;
** [[Workflow Format]] - the structure of the EP3 workflow files&lt;br /&gt;
** [[Phrase Format]]&lt;br /&gt;
** [[Template Format]]&lt;br /&gt;
** [[XPAGE Format]]&lt;br /&gt;
* [[XML Export Format]]&lt;br /&gt;
* EPrints data structure &lt;br /&gt;
** of the software&lt;br /&gt;
** of the database (relating the dataobjects to each other using eprints fields)&lt;br /&gt;
* [[Data Object]]s and data sets&lt;br /&gt;
** The [[EPrint Object]]&lt;br /&gt;
** The [[User Object]]&lt;br /&gt;
** The [[Document Object]]&lt;br /&gt;
** The [[Subject Object]]&lt;br /&gt;
** The [[Saved Search Object]]&lt;br /&gt;
** The [[History Object]]&lt;br /&gt;
** The [[Access Object]]&lt;br /&gt;
** The [[Request Object]]&lt;br /&gt;
* Plugins&lt;br /&gt;
** Import&lt;br /&gt;
** [[Create Export Plugins|Export Plugins]]&lt;br /&gt;
** Components&lt;br /&gt;
** [[Screen Plugins]]&lt;br /&gt;
** Convert&lt;br /&gt;
* [[Autocompletion]]&lt;br /&gt;
** [[Understanding IDs in Workflow Forms]]&lt;br /&gt;
* [[API]]&lt;br /&gt;
* [[Dynamic Template System]]&lt;br /&gt;
&lt;br /&gt;
= The EPrints Bazaar =&lt;br /&gt;
* [[:Category:EPrints_Bazaar|The EPrints Bazaar]] (Start Here)&lt;br /&gt;
* The [[EPM Specification]]&lt;br /&gt;
* [[:Category:Bazaar_Package|Bazaar Packages]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Manual&amp;diff=11745</id>
		<title>Manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Manual&amp;diff=11745"/>
		<updated>2015-11-18T14:50:23Z</updated>

		<summary type="html">&lt;p&gt;Pm705: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Rubbish]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
See the [[Main Page]] for other areas of this wiki.&lt;br /&gt;
&lt;br /&gt;
* [[Introduction|Introduction to EPrints]] and [[History|History of EPrints]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table cellpadding=&amp;quot;10&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Installation and First Steps =&lt;br /&gt;
&lt;br /&gt;
* [[Quick Server Install Guide (Debian / Ubuntu Server)]]&lt;br /&gt;
&lt;br /&gt;
== Releases ==&lt;br /&gt;
&lt;br /&gt;
{{releasenotes}}&lt;br /&gt;
* (see also the note on [[EPrints Version Numbering]])&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
{{Download}}&lt;br /&gt;
&lt;br /&gt;
== Installing EPrints From Binary ==&lt;br /&gt;
* [[Installing EPrints 3 via Redhat RPM]]&lt;br /&gt;
* [[Installing EPrints 3 via Fedora RPM]]&lt;br /&gt;
* [[Installing EPrints 3 via apt (Debian/Ubuntu)]]&lt;br /&gt;
&lt;br /&gt;
== Using EPrints in the Cloud ==&lt;br /&gt;
* [[EPrints EC2]] - Running both a vanilla and training repository!&lt;br /&gt;
&lt;br /&gt;
== Using the Live CD ==&lt;br /&gt;
* [[EPrints Live CD Help]]&lt;br /&gt;
* [[Building the Live CD]]&lt;br /&gt;
&lt;br /&gt;
== Installing EPrints From Source (.tar.gz) ==&lt;br /&gt;
&lt;br /&gt;
* [[Recommended Platforms]]&lt;br /&gt;
* [[Required software]]&lt;br /&gt;
* Install Guides&lt;br /&gt;
** [[Installing Eprints 3 on Fedora Core 7]] (also applicable to FC6)&lt;br /&gt;
** [[Installing EPrints 3 on RedHat Enterprise 4]]&lt;br /&gt;
** [[Installing EPrints 3 on OS X]]&lt;br /&gt;
** [[Debian from source | Installing EPrints 3 on Debian/Ubuntu - The Quick Way]]&lt;br /&gt;
** [[Installing EPrints 3 on Ubuntu 6.10]]&lt;br /&gt;
** [[Installing EPrints 3 on Debian]]&lt;br /&gt;
** [[Installing in a chroot Debian/Ubuntu]]&lt;br /&gt;
** [[:Category:Installation|Installing]] EPrints on various platforms.&lt;br /&gt;
* [[Https3 | Installing EPrints 3 with an https server]]&lt;br /&gt;
&lt;br /&gt;
==Post Installation==&lt;br /&gt;
* [[Getting Started with EPrints 3]]&lt;br /&gt;
* [[Upgrading EPrints 3 versions | Upgrading from an earlier version of EPrints3]]&lt;br /&gt;
* [[Migration|Migrating from EPrints 2.3]]&lt;br /&gt;
&lt;br /&gt;
==Maintenance==&lt;br /&gt;
* [[Backups]]&lt;br /&gt;
* [[Generate Scripts]]&lt;br /&gt;
* [[Alerts]]&lt;br /&gt;
* [[Log Files]]&lt;br /&gt;
* [[Automating your maintenance]]&lt;br /&gt;
* [[Troubleshooting]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-left: solid 1px #ccc; border-right: solid 1px #ccc;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Training Materials=&lt;br /&gt;
[[EPrints Training Course]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= How-to Guides =&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Howto What is a how-to?]&lt;br /&gt;
&lt;br /&gt;
* Orientation &amp;lt;span style=&amp;quot;color: #f94; font-size: 130%&amp;quot;&amp;gt;(Start here)&amp;lt;/span&amp;gt;&lt;br /&gt;
** [[Configuration orientation|New to EPrints 3?]]  - ''before diving into the how-tos, take some time to read through this brief orientation guide and familiarise yourself with the EPrints configuration landscape...''&lt;br /&gt;
** [[EPrints_3_Configuration_orientation_for_EPrints_2_administrators|Migrated from EPrints 2?]] - ''this orientation guide is intended to help you re-orient yourselves in your new EPrints 3 set up...'' &lt;br /&gt;
* [[Front Page Warning | Removing the Front Page Warning]] - Your first go at branding&lt;br /&gt;
* [[Branding with confidence]] - ''one of the most common EPrints customisations is to add your own institution's branding and &amp;quot;look and feel&amp;quot; to the interface...''&lt;br /&gt;
** [[Branding, the next level]] - ''how to completely change the interface to your own design''&lt;br /&gt;
* [[OAI]]&lt;br /&gt;
* [[Adding new views]]&lt;br /&gt;
* Workflow&lt;br /&gt;
* Deposit Types&lt;br /&gt;
** [[Removing types]]&lt;br /&gt;
* Metadata&lt;br /&gt;
* Subjects (fold in with Organisation Hierarchy under &amp;quot;controled vocabularies&amp;quot;)&lt;br /&gt;
* [[EPrints_3_Organisation_Hierarchy|Organisation Hierarchy]] - ''how to put your own organisation's Hierarchy into EPrints 3''&lt;br /&gt;
* Searches&lt;br /&gt;
* [[Autocompletion and Authority Files (Romeo Autocomplete)]] - ''add autocomplete functionality to the Publication Title input field based on an authority file downloaded from EPrints Romeo...''&lt;br /&gt;
* [[Create Export Plugins]] - ''create a Perl Module that will export your data...''&lt;br /&gt;
* [[Login-Only Repository]] - ''require a username and password to access all pages (including search, browse, and the front page)...''&lt;br /&gt;
* [[Change Deposit Status in Bulk]] - ''move a large number of deposits from inbox to archive&lt;br /&gt;
* [[Demoprints Repository]] - ''How to set up and configure the demoprints.eprints.org repository.&lt;br /&gt;
* [[SWORD]] - ''How to configure the SWORD protocol on EPrints.&lt;br /&gt;
* [[:Category:Howto|more ...]]&lt;br /&gt;
&lt;br /&gt;
= How to contribute =&lt;br /&gt;
&lt;br /&gt;
There's a number of different ways you can contribute to the EPrints project. This section covers all the ones we can think of...&lt;br /&gt;
&lt;br /&gt;
Always make an entry on http://files.eprints.org/ for your contribution, even if you don't upload the files. This will make it the one-stop place for people to find EPrints extensions.&lt;br /&gt;
&lt;br /&gt;
* [[Contribute: Plugins | Plugins]]&lt;br /&gt;
* [[Contribute: Scripts | Scripts]]&lt;br /&gt;
* [[Contribute: Themes | Themes]]&lt;br /&gt;
* [[Contribute: Translations | Translations]]&lt;br /&gt;
* [[Contribute: Other | Other neighbourly things to do]]&lt;br /&gt;
* [[Extension Packages]]&lt;br /&gt;
&lt;br /&gt;
= Misc =&lt;br /&gt;
&lt;br /&gt;
* [[Preservation Support]] in EPrints 3&lt;br /&gt;
* [[:Category:Languages|Language support and translations]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td valign=&amp;quot;top&amp;quot; width=&amp;quot;33%&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Technical Reference =&lt;br /&gt;
&lt;br /&gt;
* [[EPrints Directory Structure]] - will be linked somewhere better, later.&lt;br /&gt;
&lt;br /&gt;
* [[Metadata]] - configuring metadata fields.&lt;br /&gt;
* [[Archives/ARCHIVEID/cfg/|Repository Configuration]]&lt;br /&gt;
* [[XML Configuration]] Files&lt;br /&gt;
** [[EPScript]] - documentation for the EP3 Scripting language (for use in citations and workflow files).&lt;br /&gt;
** [[EPrints Control Format]] - the structure used to embed EPScript in an XML configuration file.&lt;br /&gt;
** [[Citation Format]]&lt;br /&gt;
** [[Workflow Format]] - the structure of the EP3 workflow files&lt;br /&gt;
** [[Phrase Format]]&lt;br /&gt;
** [[Template Format]]&lt;br /&gt;
** [[XPAGE Format]]&lt;br /&gt;
* [[XML Export Format]]&lt;br /&gt;
* EPrints data structure &lt;br /&gt;
** of the software&lt;br /&gt;
** of the database (relating the dataobjects to each other using eprints fields)&lt;br /&gt;
* [[Data Object]]s and data sets&lt;br /&gt;
** The [[EPrint Object]]&lt;br /&gt;
** The [[User Object]]&lt;br /&gt;
** The [[Document Object]]&lt;br /&gt;
** The [[Subject Object]]&lt;br /&gt;
** The [[Saved Search Object]]&lt;br /&gt;
** The [[History Object]]&lt;br /&gt;
** The [[Access Object]]&lt;br /&gt;
** The [[Request Object]]&lt;br /&gt;
* Plugins&lt;br /&gt;
** Import&lt;br /&gt;
** [[Create Export Plugins|Export Plugins]]&lt;br /&gt;
** Components&lt;br /&gt;
** [[Screen Plugins]]&lt;br /&gt;
** Convert&lt;br /&gt;
* [[Autocompletion]]&lt;br /&gt;
** [[Understanding IDs in Workflow Forms]]&lt;br /&gt;
* [[API]]&lt;br /&gt;
* [[Dynamic Template System]]&lt;br /&gt;
&lt;br /&gt;
= The EPrints Bazaar =&lt;br /&gt;
* [[:Category:EPrints_Bazaar|The EPrints Bazaar]] (Start Here)&lt;br /&gt;
* The [[EPM Specification]]&lt;br /&gt;
* [[:Category:Bazaar_Package|Bazaar Packages]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Manual&amp;diff=11742</id>
		<title>Manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Manual&amp;diff=11742"/>
		<updated>2015-11-18T14:48:00Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* Post Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Rubbish]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
See the [[Main Page]] for other areas of this wiki.&lt;br /&gt;
&lt;br /&gt;
* [[Introduction|Introduction to EPrints]] and [[History|History of EPrints]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table cellpadding=&amp;quot;10&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Installation and First Steps =&lt;br /&gt;
&lt;br /&gt;
* [[Quick Server Install Guide (Debian / Ubuntu Server)]]&lt;br /&gt;
&lt;br /&gt;
== Releases ==&lt;br /&gt;
&lt;br /&gt;
{{releasenotes}}&lt;br /&gt;
* (see also the note on [[EPrints Version Numbering]])&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
{{Download}}&lt;br /&gt;
&lt;br /&gt;
== Installing EPrints From Binary ==&lt;br /&gt;
* [[Installing EPrints 3 via Redhat RPM]]&lt;br /&gt;
* [[Installing EPrints 3 via Fedora RPM]]&lt;br /&gt;
* [[Installing EPrints 3 via apt (Debian/Ubuntu)]]&lt;br /&gt;
&lt;br /&gt;
== Using EPrints in the Cloud ==&lt;br /&gt;
* [[EPrints EC2]] - Running both a vanilla and training repository!&lt;br /&gt;
&lt;br /&gt;
== Using the Live CD ==&lt;br /&gt;
* [[EPrints Live CD Help]]&lt;br /&gt;
* [[Building the Live CD]]&lt;br /&gt;
&lt;br /&gt;
== Installing EPrints From Source (.tar.gz) ==&lt;br /&gt;
&lt;br /&gt;
* [[Recommended Platforms]]&lt;br /&gt;
* [[Required software]]&lt;br /&gt;
* Install Guides&lt;br /&gt;
** [[Installing Eprints 3 on Fedora Core 7]] (also applicable to FC6)&lt;br /&gt;
** [[Installing EPrints 3 on RedHat Enterprise 4]]&lt;br /&gt;
** [[Installing EPrints 3 on OS X]]&lt;br /&gt;
** [[Debian from source | Installing EPrints 3 on Debian/Ubuntu - The Quick Way]]&lt;br /&gt;
** [[Installing EPrints 3 on Ubuntu 6.10]]&lt;br /&gt;
** [[Installing EPrints 3 on Debian]]&lt;br /&gt;
** [[Installing in a chroot Debian/Ubuntu]]&lt;br /&gt;
** [[:Category:Installation|Installing]] EPrints on various platforms.&lt;br /&gt;
* [[Https3 | Installing EPrints 3 with an https server]]&lt;br /&gt;
&lt;br /&gt;
==Post Installation==&lt;br /&gt;
* [[Getting Started with EPrints 3]]&lt;br /&gt;
* [[Upgrading EPrints 3 versions | Upgrading from an earlier version of EPrints3]]&lt;br /&gt;
* [[Migration|Migrating from EPrints 2.3]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-left: solid 1px #ccc; border-right: solid 1px #ccc;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Getting Started==&lt;br /&gt;
* [[EPrints Training Course]]&lt;br /&gt;
* [[Getting Started with EPrints 3|Getting Started]] &lt;br /&gt;
&lt;br /&gt;
* Maintenance &lt;br /&gt;
** [[Backups]]&lt;br /&gt;
** [[Generate Scripts]]&lt;br /&gt;
** [[Alerts]]&lt;br /&gt;
** [[Log Files]]&lt;br /&gt;
** [[Automating your maintenance]]&lt;br /&gt;
&lt;br /&gt;
* [[Troubleshooting]]&lt;br /&gt;
&lt;br /&gt;
= How-to Guides =&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Howto What is a how-to?]&lt;br /&gt;
&lt;br /&gt;
* Orientation &amp;lt;span style=&amp;quot;color: #f94; font-size: 130%&amp;quot;&amp;gt;(Start here)&amp;lt;/span&amp;gt;&lt;br /&gt;
** [[Configuration orientation|New to EPrints 3?]]  - ''before diving into the how-tos, take some time to read through this brief orientation guide and familiarise yourself with the EPrints configuration landscape...''&lt;br /&gt;
** [[EPrints_3_Configuration_orientation_for_EPrints_2_administrators|Migrated from EPrints 2?]] - ''this orientation guide is intended to help you re-orient yourselves in your new EPrints 3 set up...'' &lt;br /&gt;
* [[Front Page Warning | Removing the Front Page Warning]] - Your first go at branding&lt;br /&gt;
* [[Branding with confidence]] - ''one of the most common EPrints customisations is to add your own institution's branding and &amp;quot;look and feel&amp;quot; to the interface...''&lt;br /&gt;
** [[Branding, the next level]] - ''how to completely change the interface to your own design''&lt;br /&gt;
* [[OAI]]&lt;br /&gt;
* [[Adding new views]]&lt;br /&gt;
* Workflow&lt;br /&gt;
* Deposit Types&lt;br /&gt;
** [[Removing types]]&lt;br /&gt;
* Metadata&lt;br /&gt;
* Subjects (fold in with Organisation Hierarchy under &amp;quot;controled vocabularies&amp;quot;)&lt;br /&gt;
* [[EPrints_3_Organisation_Hierarchy|Organisation Hierarchy]] - ''how to put your own organisation's Hierarchy into EPrints 3''&lt;br /&gt;
* Searches&lt;br /&gt;
* [[Autocompletion and Authority Files (Romeo Autocomplete)]] - ''add autocomplete functionality to the Publication Title input field based on an authority file downloaded from EPrints Romeo...''&lt;br /&gt;
* [[Create Export Plugins]] - ''create a Perl Module that will export your data...''&lt;br /&gt;
* [[Login-Only Repository]] - ''require a username and password to access all pages (including search, browse, and the front page)...''&lt;br /&gt;
* [[Change Deposit Status in Bulk]] - ''move a large number of deposits from inbox to archive&lt;br /&gt;
* [[Demoprints Repository]] - ''How to set up and configure the demoprints.eprints.org repository.&lt;br /&gt;
* [[SWORD]] - ''How to configure the SWORD protocol on EPrints.&lt;br /&gt;
* [[:Category:Howto|more ...]]&lt;br /&gt;
&lt;br /&gt;
= How to contribute =&lt;br /&gt;
&lt;br /&gt;
There's a number of different ways you can contribute to the EPrints project. This section covers all the ones we can think of...&lt;br /&gt;
&lt;br /&gt;
Always make an entry on http://files.eprints.org/ for your contribution, even if you don't upload the files. This will make it the one-stop place for people to find EPrints extensions.&lt;br /&gt;
&lt;br /&gt;
* [[Contribute: Plugins | Plugins]]&lt;br /&gt;
* [[Contribute: Scripts | Scripts]]&lt;br /&gt;
* [[Contribute: Themes | Themes]]&lt;br /&gt;
* [[Contribute: Translations | Translations]]&lt;br /&gt;
* [[Contribute: Other | Other neighbourly things to do]]&lt;br /&gt;
* [[Extension Packages]]&lt;br /&gt;
&lt;br /&gt;
= Misc =&lt;br /&gt;
&lt;br /&gt;
* [[Preservation Support]] in EPrints 3&lt;br /&gt;
* [[:Category:Languages|Language support and translations]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td valign=&amp;quot;top&amp;quot; width=&amp;quot;33%&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Technical Reference =&lt;br /&gt;
&lt;br /&gt;
* [[EPrints Directory Structure]] - will be linked somewhere better, later.&lt;br /&gt;
&lt;br /&gt;
* [[Metadata]] - configuring metadata fields.&lt;br /&gt;
* [[Archives/ARCHIVEID/cfg/|Repository Configuration]]&lt;br /&gt;
* [[XML Configuration]] Files&lt;br /&gt;
** [[EPScript]] - documentation for the EP3 Scripting language (for use in citations and workflow files).&lt;br /&gt;
** [[EPrints Control Format]] - the structure used to embed EPScript in an XML configuration file.&lt;br /&gt;
** [[Citation Format]]&lt;br /&gt;
** [[Workflow Format]] - the structure of the EP3 workflow files&lt;br /&gt;
** [[Phrase Format]]&lt;br /&gt;
** [[Template Format]]&lt;br /&gt;
** [[XPAGE Format]]&lt;br /&gt;
* [[XML Export Format]]&lt;br /&gt;
* EPrints data structure &lt;br /&gt;
** of the software&lt;br /&gt;
** of the database (relating the dataobjects to each other using eprints fields)&lt;br /&gt;
* [[Data Object]]s and data sets&lt;br /&gt;
** The [[EPrint Object]]&lt;br /&gt;
** The [[User Object]]&lt;br /&gt;
** The [[Document Object]]&lt;br /&gt;
** The [[Subject Object]]&lt;br /&gt;
** The [[Saved Search Object]]&lt;br /&gt;
** The [[History Object]]&lt;br /&gt;
** The [[Access Object]]&lt;br /&gt;
** The [[Request Object]]&lt;br /&gt;
* Plugins&lt;br /&gt;
** Import&lt;br /&gt;
** [[Create Export Plugins|Export Plugins]]&lt;br /&gt;
** Components&lt;br /&gt;
** [[Screen Plugins]]&lt;br /&gt;
** Convert&lt;br /&gt;
* [[Autocompletion]]&lt;br /&gt;
** [[Understanding IDs in Workflow Forms]]&lt;br /&gt;
* [[API]]&lt;br /&gt;
* [[Dynamic Template System]]&lt;br /&gt;
&lt;br /&gt;
= The EPrints Bazaar =&lt;br /&gt;
* [[:Category:EPrints_Bazaar|The EPrints Bazaar]] (Start Here)&lt;br /&gt;
* The [[EPM Specification]]&lt;br /&gt;
* [[:Category:Bazaar_Package|Bazaar Packages]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Manual&amp;diff=11740</id>
		<title>Manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Manual&amp;diff=11740"/>
		<updated>2015-11-18T14:47:01Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* Getting Started */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Rubbish]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
See the [[Main Page]] for other areas of this wiki.&lt;br /&gt;
&lt;br /&gt;
* [[Introduction|Introduction to EPrints]] and [[History|History of EPrints]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table cellpadding=&amp;quot;10&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Installation and First Steps =&lt;br /&gt;
&lt;br /&gt;
* [[Quick Server Install Guide (Debian / Ubuntu Server)]]&lt;br /&gt;
&lt;br /&gt;
== Releases ==&lt;br /&gt;
&lt;br /&gt;
{{releasenotes}}&lt;br /&gt;
* (see also the note on [[EPrints Version Numbering]])&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
{{Download}}&lt;br /&gt;
&lt;br /&gt;
== Installing EPrints From Binary ==&lt;br /&gt;
* [[Installing EPrints 3 via Redhat RPM]]&lt;br /&gt;
* [[Installing EPrints 3 via Fedora RPM]]&lt;br /&gt;
* [[Installing EPrints 3 via apt (Debian/Ubuntu)]]&lt;br /&gt;
&lt;br /&gt;
== Using EPrints in the Cloud ==&lt;br /&gt;
* [[EPrints EC2]] - Running both a vanilla and training repository!&lt;br /&gt;
&lt;br /&gt;
== Using the Live CD ==&lt;br /&gt;
* [[EPrints Live CD Help]]&lt;br /&gt;
* [[Building the Live CD]]&lt;br /&gt;
&lt;br /&gt;
== Installing EPrints From Source (.tar.gz) ==&lt;br /&gt;
&lt;br /&gt;
* [[Recommended Platforms]]&lt;br /&gt;
* [[Required software]]&lt;br /&gt;
* Install Guides&lt;br /&gt;
** [[Installing Eprints 3 on Fedora Core 7]] (also applicable to FC6)&lt;br /&gt;
** [[Installing EPrints 3 on RedHat Enterprise 4]]&lt;br /&gt;
** [[Installing EPrints 3 on OS X]]&lt;br /&gt;
** [[Debian from source | Installing EPrints 3 on Debian/Ubuntu - The Quick Way]]&lt;br /&gt;
** [[Installing EPrints 3 on Ubuntu 6.10]]&lt;br /&gt;
** [[Installing EPrints 3 on Debian]]&lt;br /&gt;
** [[Installing in a chroot Debian/Ubuntu]]&lt;br /&gt;
** [[:Category:Installation|Installing]] EPrints on various platforms.&lt;br /&gt;
* [[Https3 | Installing EPrints 3 with an https server]]&lt;br /&gt;
&lt;br /&gt;
==Post Installation==&lt;br /&gt;
&lt;br /&gt;
* [[Upgrading EPrints 3 versions | Upgrading from an earlier version of EPrints3]]&lt;br /&gt;
* [[Migration|Migrating from EPrints 2.3]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-left: solid 1px #ccc; border-right: solid 1px #ccc;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Getting Started==&lt;br /&gt;
* [[EPrints Training Course]]&lt;br /&gt;
* [[Getting Started with EPrints 3|Getting Started]] &lt;br /&gt;
&lt;br /&gt;
* Maintenance &lt;br /&gt;
** [[Backups]]&lt;br /&gt;
** [[Generate Scripts]]&lt;br /&gt;
** [[Alerts]]&lt;br /&gt;
** [[Log Files]]&lt;br /&gt;
** [[Automating your maintenance]]&lt;br /&gt;
&lt;br /&gt;
* [[Troubleshooting]]&lt;br /&gt;
&lt;br /&gt;
= How-to Guides =&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Howto What is a how-to?]&lt;br /&gt;
&lt;br /&gt;
* Orientation &amp;lt;span style=&amp;quot;color: #f94; font-size: 130%&amp;quot;&amp;gt;(Start here)&amp;lt;/span&amp;gt;&lt;br /&gt;
** [[Configuration orientation|New to EPrints 3?]]  - ''before diving into the how-tos, take some time to read through this brief orientation guide and familiarise yourself with the EPrints configuration landscape...''&lt;br /&gt;
** [[EPrints_3_Configuration_orientation_for_EPrints_2_administrators|Migrated from EPrints 2?]] - ''this orientation guide is intended to help you re-orient yourselves in your new EPrints 3 set up...'' &lt;br /&gt;
* [[Front Page Warning | Removing the Front Page Warning]] - Your first go at branding&lt;br /&gt;
* [[Branding with confidence]] - ''one of the most common EPrints customisations is to add your own institution's branding and &amp;quot;look and feel&amp;quot; to the interface...''&lt;br /&gt;
** [[Branding, the next level]] - ''how to completely change the interface to your own design''&lt;br /&gt;
* [[OAI]]&lt;br /&gt;
* [[Adding new views]]&lt;br /&gt;
* Workflow&lt;br /&gt;
* Deposit Types&lt;br /&gt;
** [[Removing types]]&lt;br /&gt;
* Metadata&lt;br /&gt;
* Subjects (fold in with Organisation Hierarchy under &amp;quot;controled vocabularies&amp;quot;)&lt;br /&gt;
* [[EPrints_3_Organisation_Hierarchy|Organisation Hierarchy]] - ''how to put your own organisation's Hierarchy into EPrints 3''&lt;br /&gt;
* Searches&lt;br /&gt;
* [[Autocompletion and Authority Files (Romeo Autocomplete)]] - ''add autocomplete functionality to the Publication Title input field based on an authority file downloaded from EPrints Romeo...''&lt;br /&gt;
* [[Create Export Plugins]] - ''create a Perl Module that will export your data...''&lt;br /&gt;
* [[Login-Only Repository]] - ''require a username and password to access all pages (including search, browse, and the front page)...''&lt;br /&gt;
* [[Change Deposit Status in Bulk]] - ''move a large number of deposits from inbox to archive&lt;br /&gt;
* [[Demoprints Repository]] - ''How to set up and configure the demoprints.eprints.org repository.&lt;br /&gt;
* [[SWORD]] - ''How to configure the SWORD protocol on EPrints.&lt;br /&gt;
* [[:Category:Howto|more ...]]&lt;br /&gt;
&lt;br /&gt;
= How to contribute =&lt;br /&gt;
&lt;br /&gt;
There's a number of different ways you can contribute to the EPrints project. This section covers all the ones we can think of...&lt;br /&gt;
&lt;br /&gt;
Always make an entry on http://files.eprints.org/ for your contribution, even if you don't upload the files. This will make it the one-stop place for people to find EPrints extensions.&lt;br /&gt;
&lt;br /&gt;
* [[Contribute: Plugins | Plugins]]&lt;br /&gt;
* [[Contribute: Scripts | Scripts]]&lt;br /&gt;
* [[Contribute: Themes | Themes]]&lt;br /&gt;
* [[Contribute: Translations | Translations]]&lt;br /&gt;
* [[Contribute: Other | Other neighbourly things to do]]&lt;br /&gt;
* [[Extension Packages]]&lt;br /&gt;
&lt;br /&gt;
= Misc =&lt;br /&gt;
&lt;br /&gt;
* [[Preservation Support]] in EPrints 3&lt;br /&gt;
* [[:Category:Languages|Language support and translations]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td valign=&amp;quot;top&amp;quot; width=&amp;quot;33%&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Technical Reference =&lt;br /&gt;
&lt;br /&gt;
* [[EPrints Directory Structure]] - will be linked somewhere better, later.&lt;br /&gt;
&lt;br /&gt;
* [[Metadata]] - configuring metadata fields.&lt;br /&gt;
* [[Archives/ARCHIVEID/cfg/|Repository Configuration]]&lt;br /&gt;
* [[XML Configuration]] Files&lt;br /&gt;
** [[EPScript]] - documentation for the EP3 Scripting language (for use in citations and workflow files).&lt;br /&gt;
** [[EPrints Control Format]] - the structure used to embed EPScript in an XML configuration file.&lt;br /&gt;
** [[Citation Format]]&lt;br /&gt;
** [[Workflow Format]] - the structure of the EP3 workflow files&lt;br /&gt;
** [[Phrase Format]]&lt;br /&gt;
** [[Template Format]]&lt;br /&gt;
** [[XPAGE Format]]&lt;br /&gt;
* [[XML Export Format]]&lt;br /&gt;
* EPrints data structure &lt;br /&gt;
** of the software&lt;br /&gt;
** of the database (relating the dataobjects to each other using eprints fields)&lt;br /&gt;
* [[Data Object]]s and data sets&lt;br /&gt;
** The [[EPrint Object]]&lt;br /&gt;
** The [[User Object]]&lt;br /&gt;
** The [[Document Object]]&lt;br /&gt;
** The [[Subject Object]]&lt;br /&gt;
** The [[Saved Search Object]]&lt;br /&gt;
** The [[History Object]]&lt;br /&gt;
** The [[Access Object]]&lt;br /&gt;
** The [[Request Object]]&lt;br /&gt;
* Plugins&lt;br /&gt;
** Import&lt;br /&gt;
** [[Create Export Plugins|Export Plugins]]&lt;br /&gt;
** Components&lt;br /&gt;
** [[Screen Plugins]]&lt;br /&gt;
** Convert&lt;br /&gt;
* [[Autocompletion]]&lt;br /&gt;
** [[Understanding IDs in Workflow Forms]]&lt;br /&gt;
* [[API]]&lt;br /&gt;
* [[Dynamic Template System]]&lt;br /&gt;
&lt;br /&gt;
= The EPrints Bazaar =&lt;br /&gt;
* [[:Category:EPrints_Bazaar|The EPrints Bazaar]] (Start Here)&lt;br /&gt;
* The [[EPM Specification]]&lt;br /&gt;
* [[:Category:Bazaar_Package|Bazaar Packages]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Manual&amp;diff=11739</id>
		<title>Manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Manual&amp;diff=11739"/>
		<updated>2015-11-18T14:46:06Z</updated>

		<summary type="html">&lt;p&gt;Pm705: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Rubbish]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
See the [[Main Page]] for other areas of this wiki.&lt;br /&gt;
&lt;br /&gt;
* [[Introduction|Introduction to EPrints]] and [[History|History of EPrints]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table cellpadding=&amp;quot;10&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Installation and First Steps =&lt;br /&gt;
&lt;br /&gt;
* [[Quick Server Install Guide (Debian / Ubuntu Server)]]&lt;br /&gt;
&lt;br /&gt;
== Releases ==&lt;br /&gt;
&lt;br /&gt;
{{releasenotes}}&lt;br /&gt;
* (see also the note on [[EPrints Version Numbering]])&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
{{Download}}&lt;br /&gt;
&lt;br /&gt;
== Installing EPrints From Binary ==&lt;br /&gt;
* [[Installing EPrints 3 via Redhat RPM]]&lt;br /&gt;
* [[Installing EPrints 3 via Fedora RPM]]&lt;br /&gt;
* [[Installing EPrints 3 via apt (Debian/Ubuntu)]]&lt;br /&gt;
&lt;br /&gt;
== Using EPrints in the Cloud ==&lt;br /&gt;
* [[EPrints EC2]] - Running both a vanilla and training repository!&lt;br /&gt;
&lt;br /&gt;
== Using the Live CD ==&lt;br /&gt;
* [[EPrints Live CD Help]]&lt;br /&gt;
* [[Building the Live CD]]&lt;br /&gt;
&lt;br /&gt;
== Installing EPrints From Source (.tar.gz) ==&lt;br /&gt;
&lt;br /&gt;
* [[Recommended Platforms]]&lt;br /&gt;
* [[Required software]]&lt;br /&gt;
* Install Guides&lt;br /&gt;
** [[Installing Eprints 3 on Fedora Core 7]] (also applicable to FC6)&lt;br /&gt;
** [[Installing EPrints 3 on RedHat Enterprise 4]]&lt;br /&gt;
** [[Installing EPrints 3 on OS X]]&lt;br /&gt;
** [[Debian from source | Installing EPrints 3 on Debian/Ubuntu - The Quick Way]]&lt;br /&gt;
** [[Installing EPrints 3 on Ubuntu 6.10]]&lt;br /&gt;
** [[Installing EPrints 3 on Debian]]&lt;br /&gt;
** [[Installing in a chroot Debian/Ubuntu]]&lt;br /&gt;
** [[:Category:Installation|Installing]] EPrints on various platforms.&lt;br /&gt;
* [[Https3 | Installing EPrints 3 with an https server]]&lt;br /&gt;
&lt;br /&gt;
==Post Installation==&lt;br /&gt;
&lt;br /&gt;
* [[Upgrading EPrints 3 versions | Upgrading from an earlier version of EPrints3]]&lt;br /&gt;
* [[Migration|Migrating from EPrints 2.3]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;border-left: solid 1px #ccc; border-right: solid 1px #ccc;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Getting Started==&lt;br /&gt;
* [[Getting Started with EPrints 3|Getting Started]] &lt;br /&gt;
&lt;br /&gt;
* Maintenance &lt;br /&gt;
** [[Backups]]&lt;br /&gt;
** [[Generate Scripts]]&lt;br /&gt;
** [[Alerts]]&lt;br /&gt;
** [[Log Files]]&lt;br /&gt;
** [[Automating your maintenance]]&lt;br /&gt;
&lt;br /&gt;
* [[Troubleshooting]]&lt;br /&gt;
&lt;br /&gt;
= How-to Guides =&lt;br /&gt;
&lt;br /&gt;
''[http://en.wikipedia.org/wiki/Howto What is a how-to?]&lt;br /&gt;
&lt;br /&gt;
* Orientation &amp;lt;span style=&amp;quot;color: #f94; font-size: 130%&amp;quot;&amp;gt;(Start here)&amp;lt;/span&amp;gt;&lt;br /&gt;
** [[Configuration orientation|New to EPrints 3?]]  - ''before diving into the how-tos, take some time to read through this brief orientation guide and familiarise yourself with the EPrints configuration landscape...''&lt;br /&gt;
** [[EPrints_3_Configuration_orientation_for_EPrints_2_administrators|Migrated from EPrints 2?]] - ''this orientation guide is intended to help you re-orient yourselves in your new EPrints 3 set up...'' &lt;br /&gt;
* [[Front Page Warning | Removing the Front Page Warning]] - Your first go at branding&lt;br /&gt;
* [[Branding with confidence]] - ''one of the most common EPrints customisations is to add your own institution's branding and &amp;quot;look and feel&amp;quot; to the interface...''&lt;br /&gt;
** [[Branding, the next level]] - ''how to completely change the interface to your own design''&lt;br /&gt;
* [[OAI]]&lt;br /&gt;
* [[Adding new views]]&lt;br /&gt;
* Workflow&lt;br /&gt;
* Deposit Types&lt;br /&gt;
** [[Removing types]]&lt;br /&gt;
* Metadata&lt;br /&gt;
* Subjects (fold in with Organisation Hierarchy under &amp;quot;controled vocabularies&amp;quot;)&lt;br /&gt;
* [[EPrints_3_Organisation_Hierarchy|Organisation Hierarchy]] - ''how to put your own organisation's Hierarchy into EPrints 3''&lt;br /&gt;
* Searches&lt;br /&gt;
* [[Autocompletion and Authority Files (Romeo Autocomplete)]] - ''add autocomplete functionality to the Publication Title input field based on an authority file downloaded from EPrints Romeo...''&lt;br /&gt;
* [[Create Export Plugins]] - ''create a Perl Module that will export your data...''&lt;br /&gt;
* [[Login-Only Repository]] - ''require a username and password to access all pages (including search, browse, and the front page)...''&lt;br /&gt;
* [[Change Deposit Status in Bulk]] - ''move a large number of deposits from inbox to archive&lt;br /&gt;
* [[Demoprints Repository]] - ''How to set up and configure the demoprints.eprints.org repository.&lt;br /&gt;
* [[SWORD]] - ''How to configure the SWORD protocol on EPrints.&lt;br /&gt;
* [[:Category:Howto|more ...]]&lt;br /&gt;
&lt;br /&gt;
= How to contribute =&lt;br /&gt;
&lt;br /&gt;
There's a number of different ways you can contribute to the EPrints project. This section covers all the ones we can think of...&lt;br /&gt;
&lt;br /&gt;
Always make an entry on http://files.eprints.org/ for your contribution, even if you don't upload the files. This will make it the one-stop place for people to find EPrints extensions.&lt;br /&gt;
&lt;br /&gt;
* [[Contribute: Plugins | Plugins]]&lt;br /&gt;
* [[Contribute: Scripts | Scripts]]&lt;br /&gt;
* [[Contribute: Themes | Themes]]&lt;br /&gt;
* [[Contribute: Translations | Translations]]&lt;br /&gt;
* [[Contribute: Other | Other neighbourly things to do]]&lt;br /&gt;
* [[Extension Packages]]&lt;br /&gt;
&lt;br /&gt;
= Misc =&lt;br /&gt;
&lt;br /&gt;
* [[Preservation Support]] in EPrints 3&lt;br /&gt;
* [[:Category:Languages|Language support and translations]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td valign=&amp;quot;top&amp;quot; width=&amp;quot;33%&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Technical Reference =&lt;br /&gt;
&lt;br /&gt;
* [[EPrints Directory Structure]] - will be linked somewhere better, later.&lt;br /&gt;
&lt;br /&gt;
* [[Metadata]] - configuring metadata fields.&lt;br /&gt;
* [[Archives/ARCHIVEID/cfg/|Repository Configuration]]&lt;br /&gt;
* [[XML Configuration]] Files&lt;br /&gt;
** [[EPScript]] - documentation for the EP3 Scripting language (for use in citations and workflow files).&lt;br /&gt;
** [[EPrints Control Format]] - the structure used to embed EPScript in an XML configuration file.&lt;br /&gt;
** [[Citation Format]]&lt;br /&gt;
** [[Workflow Format]] - the structure of the EP3 workflow files&lt;br /&gt;
** [[Phrase Format]]&lt;br /&gt;
** [[Template Format]]&lt;br /&gt;
** [[XPAGE Format]]&lt;br /&gt;
* [[XML Export Format]]&lt;br /&gt;
* EPrints data structure &lt;br /&gt;
** of the software&lt;br /&gt;
** of the database (relating the dataobjects to each other using eprints fields)&lt;br /&gt;
* [[Data Object]]s and data sets&lt;br /&gt;
** The [[EPrint Object]]&lt;br /&gt;
** The [[User Object]]&lt;br /&gt;
** The [[Document Object]]&lt;br /&gt;
** The [[Subject Object]]&lt;br /&gt;
** The [[Saved Search Object]]&lt;br /&gt;
** The [[History Object]]&lt;br /&gt;
** The [[Access Object]]&lt;br /&gt;
** The [[Request Object]]&lt;br /&gt;
* Plugins&lt;br /&gt;
** Import&lt;br /&gt;
** [[Create Export Plugins|Export Plugins]]&lt;br /&gt;
** Components&lt;br /&gt;
** [[Screen Plugins]]&lt;br /&gt;
** Convert&lt;br /&gt;
* [[Autocompletion]]&lt;br /&gt;
** [[Understanding IDs in Workflow Forms]]&lt;br /&gt;
* [[API]]&lt;br /&gt;
* [[Dynamic Template System]]&lt;br /&gt;
&lt;br /&gt;
= The EPrints Bazaar =&lt;br /&gt;
* [[:Category:EPrints_Bazaar|The EPrints Bazaar]] (Start Here)&lt;br /&gt;
* The [[EPM Specification]]&lt;br /&gt;
* [[:Category:Bazaar_Package|Bazaar Packages]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Main_Page&amp;diff=11732</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Main_Page&amp;diff=11732"/>
		<updated>2015-11-18T14:38:47Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* Getting Started */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Howto]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
{{Box|title=EPrints Community Contributions Day|content=November 18th, 2015 is EPrints Community Contributions day.  We encourage everyone to participate.  See [[Community_Contributions_Day_November_2015|the event wiki page]]}}&lt;br /&gt;
&lt;br /&gt;
'''Welcome to the EPrints Wiki'''&lt;br /&gt;
&lt;br /&gt;
This wiki contains technical and user-contributed documentation for the [[Introduction|EPrints software]].&lt;br /&gt;
&lt;br /&gt;
[http://demoprints3.eprints.org/ Demoprints] is our live, online server that allows anyone to try EPrints without having to install it first.&lt;br /&gt;
&lt;br /&gt;
For more information on the EPrints project and related activities visit http://eprints.org/.&lt;br /&gt;
&lt;br /&gt;
'''New to EPrints?'''&lt;br /&gt;
&lt;br /&gt;
On this wiki you can find:&lt;br /&gt;
&lt;br /&gt;
*Training videos (link to a page of these?)&lt;br /&gt;
*Documentation  (link to)&lt;br /&gt;
*[[Working Groups]]&lt;br /&gt;
*Mailing lists&lt;br /&gt;
&lt;br /&gt;
There are two mail lists that you might like to join.&lt;br /&gt;
&lt;br /&gt;
'''The EPrints User Group Google Group''' https://groups.google.com/forum/#!forum/eprints-uk-user-group &lt;br /&gt;
&lt;br /&gt;
This group is for anyone involved in using EPrints.  Ask questions, share ideas, hear about forthcoming meetings.&lt;br /&gt;
&lt;br /&gt;
'''The Eprints Technical Mailing List''' &lt;br /&gt;
&lt;br /&gt;
Join the list at: http://wiki.eprints.org/w/Contact &lt;br /&gt;
&lt;br /&gt;
Offer solutions to peers or ask for help.&lt;br /&gt;
&lt;br /&gt;
*How to contribute to the wiki (link to the contributing to the wiki section on main page)&lt;br /&gt;
*Code Sharing Repository https://github.com/eprintsug&lt;br /&gt;
*Help - The EPrints mailing lists are useful starting points &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Download EPrints ==&lt;br /&gt;
&lt;br /&gt;
{{Download}}&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Installation|Installing]] EPrints on various platforms&lt;br /&gt;
&lt;br /&gt;
==Getting Started==&lt;br /&gt;
&lt;br /&gt;
* [[EPrints Manual|EPrints 3 Documentation]]&lt;br /&gt;
* [[Perl 101 for EPrints]]&lt;br /&gt;
* [http://www.eprints.org/software/training/ Training materials] provided by EPrints Services.&lt;br /&gt;
* [[Frequently Asked Questions]]&lt;br /&gt;
* [[:Category:Howto|How to...]]&lt;br /&gt;
* [[:Category:Plugins|Plugins and Bazaar packages for EPrints]&lt;br /&gt;
* [[EPrints Training Course]]&lt;br /&gt;
&lt;br /&gt;
==Getting Support==&lt;br /&gt;
&lt;br /&gt;
* [http://www.eprints.org/services/ EPrints Services] - premium support, training and hosting from EPrints experts&lt;br /&gt;
* [[Contact]] - mailing lists, bug reports etc.&lt;br /&gt;
&lt;br /&gt;
==Add-ons, patches and translations==&lt;br /&gt;
&lt;br /&gt;
* As of version 3.3 EPrints can now install plugins and translations through the [https://bazaar.eprints.org EPrints Bazaar] the wiki also has information about [[:Category:EPrints Bazaar|packaging plugins for the Bazaar]].&lt;br /&gt;
* The [http://files.eprints.org/ EPrints Files Repository] contains add-on and 3rd party scripts, patches and translations. This also provides an archive of all previous EPrints releases (3.0 onwards).&lt;br /&gt;
* [[:Category:Plugins|Plugins]]: Some Wiki pages about scripts and patches.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Register}}&lt;br /&gt;
&lt;br /&gt;
==Contributing to EPrints==&lt;br /&gt;
&lt;br /&gt;
* [[Usability|EPrints usability]]&lt;br /&gt;
* [[:Category:Releases|New features in EPrints]] - released and proposed&lt;br /&gt;
* [[How to contribute|How to contribute to EPrints development]]&lt;br /&gt;
* [http://trac.eprints.org/ EPrints Trac] - access nightly builds, tickets and changes (requires free registration to view source code)&lt;br /&gt;
&lt;br /&gt;
== Content management ==&lt;br /&gt;
&lt;br /&gt;
* [[Digital preservation]]: managing content for longer-term access and use&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=MediaWiki:Sidebar&amp;diff=11722</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=MediaWiki:Sidebar&amp;diff=11722"/>
		<updated>2015-11-18T14:30:21Z</updated>

		<summary type="html">&lt;p&gt;Pm705: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|Front Page&lt;br /&gt;
** Entire_Manual|EPrints 3 Manual&lt;br /&gt;
** EPrints Training Course|EPrints Training Course&lt;br /&gt;
** Category:Installation|Installing EPrints&lt;br /&gt;
** Category:Howto|How-to Configure EPrints&lt;br /&gt;
** Category:API|EPrints 3.2+ API&lt;br /&gt;
** Category:EPrints 3 Reference|EPrints 3 Reference&lt;br /&gt;
** Category:Plugins|EPrints Plugins&lt;br /&gt;
* Wiki&lt;br /&gt;
** Special:Categories|All categories&lt;br /&gt;
** Special:Recentchanges|Recent changes&lt;br /&gt;
** mainpage|mainpage&lt;br /&gt;
** helppage|help&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Main_Page&amp;diff=11721</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Main_Page&amp;diff=11721"/>
		<updated>2015-11-18T14:23:11Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* Getting Started */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Howto]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
{{Box|title=EPrints Community Contributions Day|content=November 18th, 2015 is EPrints Community Contributions day.  We encourage everyone to participate.  See [[Community_Contributions_Day_November_2015|the event wiki page]]}}&lt;br /&gt;
&lt;br /&gt;
'''Welcome to the EPrints Wiki'''&lt;br /&gt;
&lt;br /&gt;
This wiki contains technical and user-contributed documentation for the [[Introduction|EPrints software]].&lt;br /&gt;
&lt;br /&gt;
[http://demoprints3.eprints.org/ Demoprints] is our live, online server that allows anyone to try EPrints without having to install it first.&lt;br /&gt;
&lt;br /&gt;
For more information on the EPrints project and related activities visit http://eprints.org/.&lt;br /&gt;
&lt;br /&gt;
'''New to EPrints?'''&lt;br /&gt;
&lt;br /&gt;
On this wiki you can find:&lt;br /&gt;
&lt;br /&gt;
*Training videos (link to a page of these?)&lt;br /&gt;
*Documentation  (link to)&lt;br /&gt;
*[[Working Groups]]&lt;br /&gt;
*Mailing lists&lt;br /&gt;
&lt;br /&gt;
There are two mail lists that you might like to join.&lt;br /&gt;
&lt;br /&gt;
'''The EPrints User Group Google Group''' https://groups.google.com/forum/#!forum/eprints-uk-user-group &lt;br /&gt;
&lt;br /&gt;
This group is for anyone involved in using EPrints.  Ask questions, share ideas, hear about forthcoming meetings.&lt;br /&gt;
&lt;br /&gt;
'''The Eprints Technical Mailing List''' &lt;br /&gt;
&lt;br /&gt;
Join the list at: http://wiki.eprints.org/w/Contact &lt;br /&gt;
&lt;br /&gt;
Offer solutions to peers or ask for help.&lt;br /&gt;
&lt;br /&gt;
*How to contribute to the wiki (link to the contributing to the wiki section on main page)&lt;br /&gt;
*Code Sharing Repository https://github.com/eprintsug&lt;br /&gt;
*Help - The EPrints mailing lists are useful starting points &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Download EPrints ==&lt;br /&gt;
&lt;br /&gt;
{{Download}}&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Installation|Installing]] EPrints on various platforms&lt;br /&gt;
&lt;br /&gt;
==Getting Started==&lt;br /&gt;
&lt;br /&gt;
* [[EPrints Manual|EPrints 3 Documentation]]&lt;br /&gt;
* [[Perl 101 for EPrints]]&lt;br /&gt;
* [http://www.eprints.org/software/training/ Training materials] provided by EPrints Services.&lt;br /&gt;
* [[Frequently Asked Questions]]&lt;br /&gt;
* [[:Category:Howto|How to...]]&lt;br /&gt;
* [[IRStats2 API]]&lt;br /&gt;
* [[EPrints Training Course]]&lt;br /&gt;
&lt;br /&gt;
==Getting Support==&lt;br /&gt;
&lt;br /&gt;
* [http://www.eprints.org/services/ EPrints Services] - premium support, training and hosting from EPrints experts&lt;br /&gt;
* [[Contact]] - mailing lists, bug reports etc.&lt;br /&gt;
&lt;br /&gt;
==Add-ons, patches and translations==&lt;br /&gt;
&lt;br /&gt;
* As of version 3.3 EPrints can now install plugins and translations through the [https://bazaar.eprints.org EPrints Bazaar] the wiki also has information about [[:Category:EPrints Bazaar|packaging plugins for the Bazaar]].&lt;br /&gt;
* The [http://files.eprints.org/ EPrints Files Repository] contains add-on and 3rd party scripts, patches and translations. This also provides an archive of all previous EPrints releases (3.0 onwards).&lt;br /&gt;
* [[:Category:Plugins|Plugins]]: Some Wiki pages about scripts and patches.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Register}}&lt;br /&gt;
&lt;br /&gt;
==Contributing to EPrints==&lt;br /&gt;
&lt;br /&gt;
* [[Usability|EPrints usability]]&lt;br /&gt;
* [[:Category:Releases|New features in EPrints]] - released and proposed&lt;br /&gt;
* [[How to contribute|How to contribute to EPrints development]]&lt;br /&gt;
* [http://trac.eprints.org/ EPrints Trac] - access nightly builds, tickets and changes (requires free registration to view source code)&lt;br /&gt;
&lt;br /&gt;
== Content management ==&lt;br /&gt;
&lt;br /&gt;
* [[Digital preservation]]: managing content for longer-term access and use&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Community_Contributions_Day_November_2015&amp;diff=11675</id>
		<title>Community Contributions Day November 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Community_Contributions_Day_November_2015&amp;diff=11675"/>
		<updated>2015-11-18T12:46:39Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* Group 2: Technical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has been created in the run-up to the EPrints Community Contributions day on November 18th, 2015&lt;br /&gt;
&lt;br /&gt;
== Objectives ==&lt;br /&gt;
&lt;br /&gt;
This event is intended to bring the all parts of the EPrints community together to improve the software and documentation.  We hope to achieve:&lt;br /&gt;
&lt;br /&gt;
* code improvements&lt;br /&gt;
* wiki curation&lt;br /&gt;
* training and demonstration videos&lt;br /&gt;
* community members interacting and training each other&lt;br /&gt;
&lt;br /&gt;
== Event Run Up ==&lt;br /&gt;
&lt;br /&gt;
Things for participants to do before the event:&lt;br /&gt;
&lt;br /&gt;
* Register for the Wiki via the EPrints LDAP server at [http://trac.eprints.org/ldap/ http://trac.eprints.org/ldap/]&lt;br /&gt;
* If you have an a suggestion for an interest group, add it below&lt;br /&gt;
* Please add your name to an interest group that looks interesting (see [[Training_Video:EPrints_Wiki_Basics]] for how to edit the wiki)&lt;br /&gt;
&lt;br /&gt;
== On the Day ==&lt;br /&gt;
&lt;br /&gt;
=== Jumping In ===&lt;br /&gt;
&lt;br /&gt;
So, you have time to contribute and need to know how to get started.  Here are your options:&lt;br /&gt;
&lt;br /&gt;
* Pick an interest group below, and join it&lt;br /&gt;
* If you don't know how to join, contact one of the event organisers&lt;br /&gt;
** Adam Field&lt;br /&gt;
*** @gobfrey on twitter&lt;br /&gt;
*** af05v@ecs.soton.ac.uk&lt;br /&gt;
** Valerie McCutcheon&lt;br /&gt;
***valerie.mccutcheon@glasgow.ac.uk&lt;br /&gt;
*** 0141-330-2674&lt;br /&gt;
** Rachel Proudfoot&lt;br /&gt;
*** 0113 343 4554&lt;br /&gt;
&lt;br /&gt;
=== Interest Groups ===&lt;br /&gt;
&lt;br /&gt;
Any contribution that can be made is welcome, whether it's a minor edit to a wiki page or a bugfix.  However, it may be profitable to run a number of discussion groups in the morning around areas of interest.  These discussion groups can then set up work to be accomplished in the afternoon.&lt;br /&gt;
&lt;br /&gt;
* 10:00 - 11:00 Interest groups meet (skype, google hangout?), make decisions and assign tasks&lt;br /&gt;
** What problem are we solving?&lt;br /&gt;
** How will we work?&lt;br /&gt;
** What communication platform will we use? Skype, Google Hangouts, Google Docs, EMail?&lt;br /&gt;
** Who will do what?&lt;br /&gt;
* 11:00 - 13:00 Morning Contributions&lt;br /&gt;
* 14:00 - 16:00 Afternoon Contributions&lt;br /&gt;
* 16:00 - 16:30 Interest groups wrap-up and reporting.&lt;br /&gt;
&lt;br /&gt;
Each interest group should have a leader who is responsible for chairing the initial meeting, making sure the logistics run smoothly and creating some kind of record of the day (blog post, wiki page, etc).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Group 1: Community Training Course ====&lt;br /&gt;
&lt;br /&gt;
We're coordinating via a [https://docs.google.com/document/d/1CPegvGl9BO45E4ye5_Bpk7e3kurc_spEL3OcmGcUZyA/edit?usp=sharing Google Doc]&lt;br /&gt;
&lt;br /&gt;
This interest group is concerned with the wiki page at http://wiki.eprints.org/w/EPrints_Training_Course.&lt;br /&gt;
&lt;br /&gt;
Areas of Discussion&lt;br /&gt;
* Standard layout and content for training video pages&lt;br /&gt;
* Content of the training course&lt;br /&gt;
* Production of new content&lt;br /&gt;
* Linking to other wiki pages&lt;br /&gt;
&lt;br /&gt;
Members:&lt;br /&gt;
* Adam Field (willing to lead the group)&lt;br /&gt;
* Alan Stiles (alternatively contributing to Group 2)&lt;br /&gt;
* Lizz Jennings (likely to switch between this and Group 2)&lt;br /&gt;
* Mick Eadie&lt;br /&gt;
* George Mamalakis (may also help in some bug reports in Group 2 and also help in creating some Bazaar packages we've already started)&lt;br /&gt;
&lt;br /&gt;
==== Group 2: Technical ====&lt;br /&gt;
&lt;br /&gt;
This interest group will be looking at Github, folding in pull requests and evaluating bugs.&lt;br /&gt;
&lt;br /&gt;
Get on the google hangout now [https://hangouts.google.com/call/md4isxlevojprl6n3vpp2c3dtua https://hangouts.google.com/call/md4isxlevojprl6n3vpp2c3dtua]&lt;br /&gt;
&lt;br /&gt;
Topics of Discussion&lt;br /&gt;
* Vagrant build - see: https://github.com/eprintsug/eprints-vagrant (Good work! EP-Kudos and a cream bun to Robert Doiel!)&lt;br /&gt;
* Categorisation of issues: https://github.com/eprints/eprints/issues&lt;br /&gt;
* Building a [[How to build a development environment from source control]]&lt;br /&gt;
&lt;br /&gt;
Members&lt;br /&gt;
* Jiadi Yao&lt;br /&gt;
* Alan Stiles (alternative contributing to Group 1)&lt;br /&gt;
* Lizz Jennings (likely to switch between this and Group 1)&lt;br /&gt;
* Mick Eadie&lt;br /&gt;
* Patrick McSweeney (will lead the session ;o)&lt;br /&gt;
* John Salter (will assist with the leading of the session)&lt;br /&gt;
&lt;br /&gt;
==== Group 3: Community Contributions, Best Practices and Processes ====&lt;br /&gt;
&lt;br /&gt;
This group will look at how barriers to community contributions (at all levels) can be lowered and community engagement can be promoted. We'll also look at community best practices and processes in EPrints. '''If you don't make the 10 o'clock meeting, don't worry, just come and join us at the Google Doc below.'''&lt;br /&gt;
&lt;br /&gt;
Members&lt;br /&gt;
&lt;br /&gt;
* Rachel Proudfoot - skype 'rachel_proudfoot'&lt;br /&gt;
* Valerie McCutcheon -skype 'mccutchv'&lt;br /&gt;
* Adam Field (in and out, mainly in group 1)&lt;br /&gt;
&lt;br /&gt;
'''Working Document (Google doc)'''&lt;br /&gt;
* [https://docs.google.com/document/d/1YYqeB0r5S8A9rYO9UZN-SoQLBLb2B7WQuP_WW3EKXEU/edit?usp=sharing Group 3 Capture document] - if you can't edit it, contact Rachel or Valerie&lt;br /&gt;
&lt;br /&gt;
Possible subtopics - what do users want? &lt;br /&gt;
&lt;br /&gt;
* User friendly topic guide on wiki&lt;br /&gt;
* Impact&lt;br /&gt;
* Open Access - drafting community requirements for a standard functionality in EPrints.&lt;br /&gt;
&lt;br /&gt;
=== Independent Contribution ===&lt;br /&gt;
&lt;br /&gt;
Participants are encouraged to join an interest group, but have the option of working independently on their own pet project or objective.  Please put your name in the members list below, with a brief description of what you will be progressing.&lt;br /&gt;
&lt;br /&gt;
Members:&lt;br /&gt;
&lt;br /&gt;
* Luke Skywalker (I'll be researching the Force)&lt;br /&gt;
&lt;br /&gt;
=== Logistics ===&lt;br /&gt;
&lt;br /&gt;
Each interest group should decide on the appropriate platform to use for communications and coordination.&lt;br /&gt;
&lt;br /&gt;
== Post Event ==&lt;br /&gt;
&lt;br /&gt;
It would be appreciated if each team could produce a write-up of the days activities for the benefit of future events and to show the value of the day.  It should be no more than 400 words and a bulleted list of outcomes.  Feel free to post these on any blog or platform you wish, but Adam Field would quite like to gather them all together in a blog post about the day.&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Community_Contributions_Day_November_2015&amp;diff=11591</id>
		<title>Community Contributions Day November 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Community_Contributions_Day_November_2015&amp;diff=11591"/>
		<updated>2015-11-18T10:13:14Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* Group 2: Technical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has been created in the run-up to the EPrints Community Contributions day on November 18th, 2015&lt;br /&gt;
&lt;br /&gt;
== Objectives ==&lt;br /&gt;
&lt;br /&gt;
This event is intended to bring the all parts of the EPrints community together to improve the software and documentation.  We hope to achieve:&lt;br /&gt;
&lt;br /&gt;
* code improvements&lt;br /&gt;
* wiki curation&lt;br /&gt;
* training and demonstration videos&lt;br /&gt;
* community members interacting and training each other&lt;br /&gt;
&lt;br /&gt;
== Event Run Up ==&lt;br /&gt;
&lt;br /&gt;
Things for participants to do before the event:&lt;br /&gt;
&lt;br /&gt;
* Register for the Wiki via the EPrints LDAP server at [http://trac.eprints.org/ldap/ http://trac.eprints.org/ldap/]&lt;br /&gt;
* If you have an a suggestion for an interest group, add it below&lt;br /&gt;
* Please add your name to an interest group that looks interesting (see [[Training_Video:EPrints_Wiki_Basics]] for how to edit the wiki)&lt;br /&gt;
&lt;br /&gt;
== On the Day ==&lt;br /&gt;
&lt;br /&gt;
=== Jumping In ===&lt;br /&gt;
&lt;br /&gt;
So, you have time to contribute and need to know how to get started.  Here are your options:&lt;br /&gt;
&lt;br /&gt;
* Pick an interest group below, and join it&lt;br /&gt;
* If you don't know how to join, contact one of the event organisers&lt;br /&gt;
** Adam Field&lt;br /&gt;
*** @gobfrey on twitter&lt;br /&gt;
*** af05v@ecs.soton.ac.uk&lt;br /&gt;
** Valerie McCutcheon&lt;br /&gt;
***valerie.mccutcheon@glasgow.ac.uk&lt;br /&gt;
*** 0141-330-2674&lt;br /&gt;
** Rachel Proudfoot&lt;br /&gt;
*** 0113 343 4554&lt;br /&gt;
&lt;br /&gt;
=== Interest Groups ===&lt;br /&gt;
&lt;br /&gt;
Any contribution that can be made is welcome, whether it's a minor edit to a wiki page or a bugfix.  However, it may be profitable to run a number of discussion groups in the morning around areas of interest.  These discussion groups can then set up work to be accomplished in the afternoon.&lt;br /&gt;
&lt;br /&gt;
* 10:00 - 11:00 Interest groups meet (skype, google hangout?), make decisions and assign tasks&lt;br /&gt;
** What problem are we solving?&lt;br /&gt;
** How will we work?&lt;br /&gt;
** What communication platform will we use? Skype, Google Hangouts, Google Docs, EMail?&lt;br /&gt;
** Who will do what?&lt;br /&gt;
* 11:00 - 13:00 Morning Contributions&lt;br /&gt;
* 14:00 - 16:00 Afternoon Contributions&lt;br /&gt;
* 16:00 - 16:30 Interest groups wrap-up and reporting.&lt;br /&gt;
&lt;br /&gt;
Each interest group should have a leader who is responsible for chairing the initial meeting, making sure the logistics run smoothly and creating some kind of record of the day (blog post, wiki page, etc).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Group 1: Community Training Course ====&lt;br /&gt;
&lt;br /&gt;
The Google Hangout for this is at [https://plus.google.com/events/cne9khobpvgnbcib2o31agg38oc https://plus.google.com/events/cne9khobpvgnbcib2o31agg38oc]&lt;br /&gt;
&lt;br /&gt;
This interest group is concerned with the wiki page at http://wiki.eprints.org/w/EPrints_Training_Course.&lt;br /&gt;
&lt;br /&gt;
Areas of Discussion&lt;br /&gt;
* Standard layout and content for training video pages&lt;br /&gt;
* Content of the training course&lt;br /&gt;
* Production of new content&lt;br /&gt;
* Linking to other wiki pages&lt;br /&gt;
&lt;br /&gt;
Members:&lt;br /&gt;
* Adam Field (willing to lead the group)&lt;br /&gt;
* Alan Stiles (alternatively contributing to Group 2)&lt;br /&gt;
* Lizz Jennings (likely to switch between this and Group 2)&lt;br /&gt;
* Mick Eadie&lt;br /&gt;
* George Mamalakis (may also help in some bug reports in Group 2 and also help in creating some Bazaar packages we've already started)&lt;br /&gt;
&lt;br /&gt;
==== Group 2: Technical ====&lt;br /&gt;
&lt;br /&gt;
This interest group will be looking at Github, folding in pull requests and evaluating bugs.&lt;br /&gt;
&lt;br /&gt;
Get on the google hangout now [https://hangouts.google.com/call/md4isxlevojprl6n3vpp2c3dtua https://hangouts.google.com/call/md4isxlevojprl6n3vpp2c3dtua]&lt;br /&gt;
&lt;br /&gt;
Topics of Discussion&lt;br /&gt;
* Vagrant build - see: https://github.com/eprintsug/eprints-vagrant (Good work! EP-Kudos and a cream bun to Robert Doiel!)&lt;br /&gt;
&lt;br /&gt;
Members&lt;br /&gt;
* Jiadi Yao&lt;br /&gt;
* Alan Stiles (alternative contributing to Group 1)&lt;br /&gt;
* Lizz Jennings (likely to switch between this and Group 1)&lt;br /&gt;
* Mick Eadie&lt;br /&gt;
* Patrick McSweeney (will lead the session ;o)&lt;br /&gt;
* John Salter (will assist with the leading of the session)&lt;br /&gt;
&lt;br /&gt;
==== Group 3: Community Contributions, Best Practices and Processes ====&lt;br /&gt;
&lt;br /&gt;
This group will look at how barriers to community contributions (at all levels) can be lowered and community engagement can be promoted. We'll also look at community best practices and processes in EPrints. '''If you don't make the 10 o'clock meeting, don't worry, just come and join us at the Google Doc below.'''&lt;br /&gt;
&lt;br /&gt;
Members&lt;br /&gt;
&lt;br /&gt;
* Rachel Proudfoot - skype 'rachel_proudfoot'&lt;br /&gt;
* Valerie McCutcheon -skype 'mccutchv'&lt;br /&gt;
* Adam Field (in and out, mainly in group 1)&lt;br /&gt;
&lt;br /&gt;
'''Working Document (Google doc)'''&lt;br /&gt;
* [https://docs.google.com/document/d/1YYqeB0r5S8A9rYO9UZN-SoQLBLb2B7WQuP_WW3EKXEU/edit?usp=sharing Group 3 Capture document] - if you can't edit it, contact Rachel or Valerie&lt;br /&gt;
&lt;br /&gt;
Possible subtopics - what do users want? &lt;br /&gt;
&lt;br /&gt;
* User friendly topic guide on wiki&lt;br /&gt;
* Impact&lt;br /&gt;
* Open Access - drafting community requirements for a standard functionality in EPrints.&lt;br /&gt;
&lt;br /&gt;
=== Independent Contribution ===&lt;br /&gt;
&lt;br /&gt;
Participants are encouraged to join an interest group, but have the option of working independently on their own pet project or objective.  Please put your name in the members list below, with a brief description of what you will be progressing.&lt;br /&gt;
&lt;br /&gt;
Members:&lt;br /&gt;
&lt;br /&gt;
* Luke Skywalker (I'll be researching the Force)&lt;br /&gt;
&lt;br /&gt;
=== Logistics ===&lt;br /&gt;
&lt;br /&gt;
Each interest group should decide on the appropriate platform to use for communications and coordination.&lt;br /&gt;
&lt;br /&gt;
== Post Event ==&lt;br /&gt;
&lt;br /&gt;
It would be appreciated if each team could produce a write-up of the days activities for the benefit of future events and to show the value of the day.  It should be no more than 400 words and a bulleted list of outcomes.  Feel free to post these on any blog or platform you wish, but Adam Field would quite like to gather them all together in a blog post about the day.&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Community_Contributions_Day_November_2015&amp;diff=11586</id>
		<title>Community Contributions Day November 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Community_Contributions_Day_November_2015&amp;diff=11586"/>
		<updated>2015-11-18T09:58:35Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* Group 2: Technical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has been created in the run-up to the EPrints Community Contributions day on November 18th, 2015&lt;br /&gt;
&lt;br /&gt;
== Objectives ==&lt;br /&gt;
&lt;br /&gt;
This event is intended to bring the all parts of the EPrints community together to improve the software and documentation.  We hope to achieve:&lt;br /&gt;
&lt;br /&gt;
* code improvements&lt;br /&gt;
* wiki curation&lt;br /&gt;
* training and demonstration videos&lt;br /&gt;
* community members interacting and training each other&lt;br /&gt;
&lt;br /&gt;
== Event Run Up ==&lt;br /&gt;
&lt;br /&gt;
Things for participants to do before the event:&lt;br /&gt;
&lt;br /&gt;
* Register for the Wiki via the EPrints LDAP server at [http://trac.eprints.org/ldap/ http://trac.eprints.org/ldap/]&lt;br /&gt;
* If you have an a suggestion for an interest group, add it below&lt;br /&gt;
* Please add your name to an interest group that looks interesting (see [[Training_Video:EPrints_Wiki_Basics]] for how to edit the wiki)&lt;br /&gt;
&lt;br /&gt;
== On the Day ==&lt;br /&gt;
&lt;br /&gt;
=== Jumping In ===&lt;br /&gt;
&lt;br /&gt;
So, you have time to contribute and need to know how to get started.  Here are your options:&lt;br /&gt;
&lt;br /&gt;
* Pick an interest group below, and join it&lt;br /&gt;
* If you don't know how to join, contact one of the event organisers&lt;br /&gt;
** Adam Field&lt;br /&gt;
*** @gobfrey on twitter&lt;br /&gt;
*** af05v@ecs.soton.ac.uk&lt;br /&gt;
** Valerie McCutcheon&lt;br /&gt;
***valerie.mccutcheon@glasgow.ac.uk&lt;br /&gt;
** Rachel Proudfoot&lt;br /&gt;
*** 0113 343 4554&lt;br /&gt;
&lt;br /&gt;
=== Interest Groups ===&lt;br /&gt;
&lt;br /&gt;
Any contribution that can be made is welcome, whether it's a minor edit to a wiki page or a bugfix.  However, it may be profitable to run a number of discussion groups in the morning around areas of interest.  These discussion groups can then set up work to be accomplished in the afternoon.&lt;br /&gt;
&lt;br /&gt;
* 10:00 - 11:00 Interest groups meet (skype, google hangout?), make decisions and assign tasks&lt;br /&gt;
** What problem are we solving?&lt;br /&gt;
** How will we work?&lt;br /&gt;
** What communication platform will we use? Skype, Google Hangouts, Google Docs, EMail?&lt;br /&gt;
** Who will do what?&lt;br /&gt;
* 11:00 - 13:00 Morning Contributions&lt;br /&gt;
* 14:00 - 16:00 Afternoon Contributions&lt;br /&gt;
* 16:00 - 16:30 Interest groups wrap-up and reporting.&lt;br /&gt;
&lt;br /&gt;
Each interest group should have a leader who is responsible for chairing the initial meeting, making sure the logistics run smoothly and creating some kind of record of the day (blog post, wiki page, etc).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Group 1: Community Training Course ====&lt;br /&gt;
&lt;br /&gt;
The Google Hangout for this is at [https://plus.google.com/events/cne9khobpvgnbcib2o31agg38oc https://plus.google.com/events/cne9khobpvgnbcib2o31agg38oc]&lt;br /&gt;
&lt;br /&gt;
This interest group is concerned with the wiki page at http://wiki.eprints.org/w/EPrints_Training_Course.&lt;br /&gt;
&lt;br /&gt;
Areas of Discussion&lt;br /&gt;
* Standard layout and content for training video pages&lt;br /&gt;
* Content of the training course&lt;br /&gt;
* Production of new content&lt;br /&gt;
* Linking to other wiki pages&lt;br /&gt;
&lt;br /&gt;
Members:&lt;br /&gt;
* Adam Field (willing to lead the group)&lt;br /&gt;
* Alan Stiles (alternatively contributing to Group 2)&lt;br /&gt;
* Lizz Jennings (likely to switch between this and Group 2)&lt;br /&gt;
* Mick Eadie&lt;br /&gt;
* George Mamalakis (may also help in some bug reports in Group 2 and also help in creating some Bazaar packages we've already started)&lt;br /&gt;
&lt;br /&gt;
==== Group 2: Technical ====&lt;br /&gt;
&lt;br /&gt;
This interest group will be looking at Github, folding in pull requests and evaluating bugs.&lt;br /&gt;
&lt;br /&gt;
Get on the google hangout now [https://plus.google.com/events/ch5sefk3o51evmuotqvnnpi0im8 https://plus.google.com/events/ch5sefk3o51evmuotqvnnpi0im8]&lt;br /&gt;
&lt;br /&gt;
Topics of Discussion&lt;br /&gt;
* Vagrant build - see: https://github.com/eprintsug/eprints-vagrant (Good work! EP-Kudos and a cream bun to Robert Doiel!)&lt;br /&gt;
&lt;br /&gt;
Members&lt;br /&gt;
* Jiadi Yao&lt;br /&gt;
* Alan Stiles (alternative contributing to Group 1)&lt;br /&gt;
* Lizz Jennings (likely to switch between this and Group 1)&lt;br /&gt;
* Mick Eadie&lt;br /&gt;
* Patrick McSweeney (will lead the session ;o)&lt;br /&gt;
* John Salter (will assist with the leading of the session)&lt;br /&gt;
&lt;br /&gt;
==== Group 3: Community Contributions, Best Practices and Processes ====&lt;br /&gt;
&lt;br /&gt;
This group will look at how barriers to community contributions (at all levels) can be lowered and community engagement can be promoted. We'll also look at community best practices and processes in EPrints. &lt;br /&gt;
&lt;br /&gt;
Members&lt;br /&gt;
&lt;br /&gt;
* Rachel Proudfoot - skype 'rachel_proudfoot'&lt;br /&gt;
* Valerie McCutcheon -skype 'mccutchv'&lt;br /&gt;
* Adam Field (in and out, mainly in group 1)&lt;br /&gt;
&lt;br /&gt;
Working Document (Google doc)&lt;br /&gt;
* [https://docs.google.com/document/d/1YYqeB0r5S8A9rYO9UZN-SoQLBLb2B7WQuP_WW3EKXEU/edit?usp=sharing Group 3 Capture document] - if you can't edit it, contact Rachel or Valerie&lt;br /&gt;
&lt;br /&gt;
Possible subtopics - what do users want? &lt;br /&gt;
&lt;br /&gt;
* User friendly topic guide on wiki&lt;br /&gt;
* Impact&lt;br /&gt;
* Open Access - drafting community requirements for a standard functionality in EPrints.&lt;br /&gt;
&lt;br /&gt;
=== Independent Contribution ===&lt;br /&gt;
&lt;br /&gt;
Participants are encouraged to join an interest group, but have the option of working independently on their own pet project or objective.  Please put your name in the members list below, with a brief description of what you will be progressing.&lt;br /&gt;
&lt;br /&gt;
Members:&lt;br /&gt;
&lt;br /&gt;
* Luke Skywalker (I'll be researching the Force)&lt;br /&gt;
&lt;br /&gt;
=== Logistics ===&lt;br /&gt;
&lt;br /&gt;
Each interest group should decide on the appropriate platform to use for communications and coordination.&lt;br /&gt;
&lt;br /&gt;
== Post Event ==&lt;br /&gt;
&lt;br /&gt;
It would be appreciated if each team could produce a write-up of the days activities for the benefit of future events and to show the value of the day.  It should be no more than 400 words and a bulleted list of outcomes.  Feel free to post these on any blog or platform you wish, but Adam Field would quite like to gather them all together in a blog post about the day.&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=IRStats_development&amp;diff=11550</id>
		<title>IRStats development</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=IRStats_development&amp;diff=11550"/>
		<updated>2015-11-12T18:59:46Z</updated>

		<summary type="html">&lt;p&gt;Pm705: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:IRStats]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 2px solid red; background-color: yellow;padding:10px&amp;quot;&amp;gt;This is IRStats 1 documentation. IRStats 1 is now out of support. You may have been looking for [[IRStats 2]]&amp;lt;/div&amp;gt;&lt;br /&gt;
=IRStats Development Goals=&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* 'Browse View' style public stats.&lt;br /&gt;
* Non-public stats accessed via screen plugins.&lt;br /&gt;
* Default 'out-the-box' configuration.&lt;br /&gt;
* Generalisation to repository reporting tool.  Graphs available on e.g. citation counts.&lt;br /&gt;
* the ability to see users paths through the site.&lt;br /&gt;
* the ability to gather stats about how pages are used in eprints. Example: &amp;quot;how many times is this button used compared to this button&amp;quot; or &amp;quot;does anyone actually use this feature&amp;quot;&lt;br /&gt;
* new view, all-time downloads&lt;br /&gt;
* new view, like top ten table, but not limited to 10 (very useful according to one repository manager)&lt;br /&gt;
&lt;br /&gt;
==Back End==&lt;br /&gt;
* Full integration with EPrints Configuration.&lt;br /&gt;
* Replacement of ChartDirector with an open-source charting package.&lt;br /&gt;
* Anonymisation of downloaders to comply with privacy legislation.&lt;br /&gt;
* HTML produced with DOM objects (high priority - solves UTF8 issues)&lt;br /&gt;
* Import from apache logs&lt;br /&gt;
&lt;br /&gt;
==Wishlist==&lt;br /&gt;
Things which don't need to go in the first release, but we should keep in mind so we don't make them hard to add later.&lt;br /&gt;
* Recommender - people who downloaded this paper also looked at....&lt;br /&gt;
&lt;br /&gt;
==Bugs==&lt;br /&gt;
*removing a document leads to loss of stats.  Reported by Graham Stone, Huddersfield.&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=IRStats_Technical_Documentation&amp;diff=11549</id>
		<title>IRStats Technical Documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=IRStats_Technical_Documentation&amp;diff=11549"/>
		<updated>2015-11-12T18:59:28Z</updated>

		<summary type="html">&lt;p&gt;Pm705: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:IRStats]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 2px solid red; background-color: yellow;padding:10px&amp;quot;&amp;gt;This is IRStats 1 documentation. IRStats 1 is now out of support. You may have been looking for [[IRStats 2]]&amp;lt;/div&amp;gt;&lt;br /&gt;
= Directory Structure =&lt;br /&gt;
&lt;br /&gt;
== /opt/irstats/bin ==&lt;br /&gt;
Contains the scripts needed to update the table.&lt;br /&gt;
&lt;br /&gt;
*daily_update.sh - Runs all the scripts in the right order.&lt;br /&gt;
*extract_metadata_from_archive.pl - Extracts eprint, author and group metadata from the repository by iterating over every eprint.&lt;br /&gt;
*update_table.pl - Filters and processes new entries in the accesslog to update the irstats_true_acesses_table.  Uses 'SearchParser.pm' and 'repeatscache'.&lt;br /&gt;
* convert_ip_to_host.pl - Attempts to convert ip addresses of the new entries in irstats_true_acesses_table to hostnames.  Uses 'host_updated' to keep track of where it got to last time.&lt;br /&gt;
&lt;br /&gt;
Note that most of these scripts probably need to be tidied up.  They were written in a hurry and were never polished.&lt;br /&gt;
&lt;br /&gt;
== /opt/irstats/cache ==&lt;br /&gt;
Contains cache files.  These should probably be deleted whenever the database is updated.&lt;br /&gt;
&lt;br /&gt;
== /opt/irstats/cgi ==&lt;br /&gt;
&lt;br /&gt;
Contains two scripts, 'get_view and 'stats'.&lt;br /&gt;
&lt;br /&gt;
*get_view returns the output of a IRStats::View (see below), which is currently a chunk of html or csv, but could be almost anything.&lt;br /&gt;
*stats is a handy cgi form that passes arguements to get_view&lt;br /&gt;
&lt;br /&gt;
== /opt/irstats/img ==&lt;br /&gt;
&lt;br /&gt;
Conceptually, where any images would be kept (e.g. national flags).  At the moment, only the img/graphs directory is used.  This is where generated graphs are stored.&lt;br /&gt;
&lt;br /&gt;
== /opt/irstats/cfg ==&lt;br /&gt;
&lt;br /&gt;
Where the configuration file and the text files containing repository data are held.&lt;br /&gt;
&lt;br /&gt;
=== The Configuration File ===&lt;br /&gt;
&lt;br /&gt;
irstats.cfg contains a number of configuration strings.  Here are some of the more important ones, with the default in brackets:&lt;br /&gt;
&lt;br /&gt;
*configuration_path (/opt/irstats/cfg/) - The path of the configuration directory.&lt;br /&gt;
*view_path (/opt/irstats/perl_lib/IRStats/View/) - The directory containing the Views.&lt;br /&gt;
*cache_path (/opt/irstats/cache/) - The directory in which to store cache files.&lt;br /&gt;
*graph_path (/opt/irstats/img/graphs/) - The directory in which to store graph images.&lt;br /&gt;
*graph_relative_url_path (/img/graphs/) - The url of the directory in which the graph file is from the point of view of the web browser.&lt;br /&gt;
*update_lock_filename (/opt/irstats/bin/.lock) - The name of the file that is created to prevent the update process running twice concurrently&lt;br /&gt;
*The names of the files used to store set information&lt;br /&gt;
**set_member_full_citations_file (/opt/irstats/cfg/irstats_set_member_full_citations.txt)&lt;br /&gt;
**set_member_short_citations_file (/opt/irstats/cfg/irstats_set_member_short_citations.txt)&lt;br /&gt;
**set_membership_file (/opt/irstats/cfg/irstats_set_membership.txt)&lt;br /&gt;
**set_member_codes_file (/opt/irstats/cfg/irstats_set_member_codes.txt)&lt;br /&gt;
**set_member_urls_file (/opt/irstats/cfg/irstats_set_member_urls.txt)&lt;br /&gt;
*Referrer Scope Labels (note, if you change these, you should also change them in the database)&lt;br /&gt;
**referrer_scope_1 (Internal)&lt;br /&gt;
**referrer_scope_2 (ECS)&lt;br /&gt;
**referrer_scope_3 (Search)&lt;br /&gt;
**referrer_scope_4 (External)&lt;br /&gt;
**referrer_scope_no_referrer (None)&lt;br /&gt;
*awstats_search_engines (/usr/local/awstats/wwwroot/cgi-bin/lib/search_engines.pm) - The path to the awstats search engine module&lt;br /&gt;
*repeats_filter_file (/opt/irstats/bin/repeatscache) - The file to maintain state between updates&lt;br /&gt;
*repeats_filter_timeout (86400) - repeat timeout in seconds (the amount of time there needs to be between two hits for them both to be recorded, initially set to 60*60*24)&lt;br /&gt;
&lt;br /&gt;
*repository_url = http://eprints.ecs.soton.ac.uk - the path to the repository&lt;br /&gt;
&lt;br /&gt;
*database configuration&lt;br /&gt;
**database_driver (mysql)&lt;br /&gt;
**database_server (localhost)&lt;br /&gt;
**database_name&lt;br /&gt;
**database_user&lt;br /&gt;
**database_password&lt;br /&gt;
&lt;br /&gt;
*database_id_columns ([ requester_organisation, requester_host, referrer_scope, search_engine, search_terms, referring_entity_id ]) - The columns in the database that have a UID rather than data.  These need seperate tables in which to store the data.&lt;br /&gt;
&lt;br /&gt;
*Various table names and parts of names&lt;br /&gt;
**database_eprints_access_log_table (accesslog) ##Perhaps remove after update rewrite.&lt;br /&gt;
**database_main_stats_table (irstats_true_accesses_table)&lt;br /&gt;
**database_column_table_prefix (irstats_column_)&lt;br /&gt;
**database_set_table_prefix (irstats_set_)&lt;br /&gt;
**database_set_table_code_suffix (_code)&lt;br /&gt;
**database_set_table_citation_suffix (_citation)&lt;br /&gt;
&lt;br /&gt;
*id_parameters ([ start_date, end_date, eprints, view ]) - the parameters that are used to uniquely identify a view&lt;br /&gt;
*host_lookup_temp_dir (/opt/irstats/bin/convert_hosts_temp_files/) - The directory in which to store temp files for host lookups&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== /opt/irstats/perl_lib ==&lt;br /&gt;
&lt;br /&gt;
Contains all the irstats classes.&lt;br /&gt;
&lt;br /&gt;
= IRStats Classes =&lt;br /&gt;
&lt;br /&gt;
Note that the leading IRStats:: has been left out for brevity.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
This object acts as an interface to the configuration file.&lt;br /&gt;
=== Configuration Contstants ===&lt;br /&gt;
*$configuration_file - The path to the configuration file.&lt;br /&gt;
=== Functions ===&lt;br /&gt;
*new - Parses the configuration file and returns a new object.&lt;br /&gt;
*get_value(config_id) - Returns a value.&lt;br /&gt;
&lt;br /&gt;
== Params ==&lt;br /&gt;
This object holds the parameters that are used to generate the statistics.  This is passed around the system.&lt;br /&gt;
=== Configuration Constants ===&lt;br /&gt;
*$defaults - Any default parameters you wish to set.&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
*new(Configuration, [ CGI_object | params_hash ]) - returns new object&lt;br /&gt;
*mask(params_hash) - used when you want to temporarily overwrite parameter(s).  Overwrites values with contents of params_hash.  Overwritten values get pushed onto a stack.&lt;br /&gt;
*unmask - Sets parameters back to how they were before the last mask.&lt;br /&gt;
*get(param_name) - returns the value of a single parameter.&lt;br /&gt;
*create_id - Uses MD5 to create a unique ID from the id_params (see Constants above).  This is called whenever get('id') is called.&lt;br /&gt;
&lt;br /&gt;
== DatabaseInterface ==&lt;br /&gt;
This object does what it says on the tin.  Any access to the database is done though it.&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
*new(Configuration) - returns object.&lt;br /&gt;
*retreive_set_names() - returns a list of eprint sets.  This can be used to verify cgi input.&lt;br /&gt;
*get_membership(eprint_id, set_name) - For a given eprint ID, which of a named set does it belong to.  For example, we can find out which authors eprint 12614 has by get_membership(12614, 'author').&lt;br /&gt;
*get_citation(id, set, length) - returns a citation.  Every set member (eprint, author, group) has two citations.  short and full.  We only return a short citation if length == 'short'.  So, to get the short citation of a group 3: get_citation(3,'group','short').&lt;br /&gt;
*get_stats(params_object, query_params_hash) - returns a dbi object containing the stats we are interested.  i.e. the params_object's date range and eprints sets, and only the columns in query params hash.  The query params hash can contain the following key/value pairs&lt;br /&gt;
**columns =&amp;gt; column_name_array - Which columns are we interested in?&lt;br /&gt;
**order =&amp;gt; column_name - A hash containing a column name and directions (ASC or DESC)&lt;br /&gt;
**limit =&amp;gt; int - How many results to return&lt;br /&gt;
**group_by =&amp;gt; column_name - if we need to group by a column.&lt;br /&gt;
**where =&amp;gt; where_hash_array - if additional logic needs to be applied, this array contains hashes containing a column name, an operator and a value.  These are ANDed together.&lt;br /&gt;
*check_tables() - If any IRStats tables are missing, this function will create them.&lt;br /&gt;
*insert_main_table_row(column_array) - inserts the values in the array into the main table (taking into account any tables that contain only IDs).&lt;br /&gt;
*do_sql(sql_query_string) - takes a string and performs a query, returning the dbi object containing the results.  This is the only point where sql is sent to the database.&lt;br /&gt;
&lt;br /&gt;
== Date ==&lt;br /&gt;
A date object was implemented because there were some specific things that needed to be done with dates.&lt;br /&gt;
&lt;br /&gt;
===Functions===&lt;br /&gt;
*new(date_hash) - Creates a new date object when passed a hash with the keys 'day', 'month' and 'year'.&lt;br /&gt;
*validate() - If the date is not valid, it will be modified to a sensible value.  E.G. if it's Feb 30th, it will be modified to Feb 29th or 28th, dependant on if it's a leap year.&lt;br /&gt;
*set(part_name, int) - Sets part of the date ('year','month' or 'day') to a specific value.&lt;br /&gt;
*decrement(period) - increments the date by a period ('day', 'week', 'month', 'quarter', 'year').  Calls the mod_date function, which does the muscle work.&lt;br /&gt;
*increment(period) - decrements by calling mod_date.&lt;br /&gt;
*part(part_name, style - Returns the day, month or year.  For month, if style=='text', returns a three letter string, otherwise returns an integer.  For year, if style=='short', returns the last two digits, otherwise returns all four.&lt;br /&gt;
*difference(date_object) - returns the difference in days between itself and another date.&lt;br /&gt;
*less_than(date_object) - compares itself to another date object.  Returns 1 if it's less than it, otherwise returns 0.&lt;br /&gt;
*greater_than(date_object) - compares itself to another date object.  Returns 1 if it's greater than it, otherwise returns 0.&lt;br /&gt;
*month_name() - returns the three letter string of the month.&lt;br /&gt;
*render(format_string) - returns a date string.  Format can be:&lt;br /&gt;
**'short' - Calls render_abbreviated - returns a date like this: 05-Jul-77&lt;br /&gt;
**'numerical' (default) - Calls render_numerical - returns a date like this: 19770705&lt;br /&gt;
*clone - returns an new, identical date object.&lt;br /&gt;
&lt;br /&gt;
== Cache ==&lt;br /&gt;
The interface to the cache.&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
*new(id) - takes the ID of the params object we're using at the moment.&lt;br /&gt;
*exists() - returns true if there's a cached file, false if there isn't one.&lt;br /&gt;
*write(visualisation_object) - writes the data to the cache file.&lt;br /&gt;
*read() - returns the data from the cache.&lt;br /&gt;
&lt;br /&gt;
== Periods ==&lt;br /&gt;
The Periods object is used when you want to break a daterange down into sub-ranges.  Used with the params-&amp;gt;mask() function, stats can be retrieved for periods inside a date range.&lt;br /&gt;
===Functions===&lt;br /&gt;
*new(start_date_obj, end_date_obj) - doesn't do anything, just returns the object.&lt;br /&gt;
&lt;br /&gt;
The following functions all return an array of hashes.  Each hash has the keys 'start_date' and 'end_date', and the values are both IRStats::Date objects.&lt;br /&gt;
&lt;br /&gt;
*calandar_months - Returns full months (each element starts on the 1st, and ends on the last day).&lt;br /&gt;
*months - Returns month periods (if the start_date is the 15th, then each period starts on the 15th and ends on the 14th of the next month - except the last period, which only has about a 1/30 chance of doing so).&lt;br /&gt;
*weeks - returns 7-day periods (except the last, which has a 1/7 chance of being 7 days long).&lt;br /&gt;
*days - returns single days (for each period, the start_date and end_date are the same).&lt;br /&gt;
&lt;br /&gt;
== UserInterface::Controls ==&lt;br /&gt;
This is used to generate the drop boxes in the stats cgi script.&lt;br /&gt;
===Functions===&lt;br /&gt;
new(params_obj, database_interface_object) - returns the object.&lt;br /&gt;
start_date_control() - returns the html for the three drop-boxes for selecting the year, month and day of the start date.&lt;br /&gt;
end_date_control() - return the html for the three drop-boxes for selecting the year, month and day of the end date.&lt;br /&gt;
eprint_control() - returns the html for the eprints text box.&lt;br /&gt;
drop_box(id, contents_array) - returns the html for a drop box containing what is in the array (each array element is a hash containing 'value' and 'display').&lt;br /&gt;
&lt;br /&gt;
== View ==&lt;br /&gt;
A view processes the stats data filtered by the parameters and creates a visualisation.  It is intended that savvy users create their own views.&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
All views inherit:&lt;br /&gt;
*new(params_obj, database_interface_object) - returns the object.&lt;br /&gt;
*render - calls populate, then returns whatever the visualisation renders&lt;br /&gt;
All visualisations must implement:&lt;br /&gt;
*new - passes arguments to superclass, then calls 'initialise'.&lt;br /&gt;
*initialise - the Configuration Constants are set here.&lt;br /&gt;
*populate - The engine that powers IRStats.&lt;br /&gt;
&lt;br /&gt;
=== View::DownloadCountHTML ===&lt;br /&gt;
The DownloadCountHTML is an extremely simple view.  It retrieves one row from the database and does no processing, making it ideal for a quick walkthrough:&lt;br /&gt;
&lt;br /&gt;
==== Housekeeping ====&lt;br /&gt;
At the top of the file, we need:&lt;br /&gt;
 package IRStats::View::DownloadCountHTML;&lt;br /&gt;
 use strict;&lt;br /&gt;
 use warnings;&lt;br /&gt;
Now, which modules will we use.  I've included perchardir, the graph making package, even though we're not using it.&lt;br /&gt;
 use IRStats::DatabaseInterface;&lt;br /&gt;
 use IRStats::Cache;&lt;br /&gt;
 use IRStats::Visualisation::HTML;&lt;br /&gt;
 use IRStats::View;&lt;br /&gt;
 use perlchartdir;&lt;br /&gt;
And link to superclass. &lt;br /&gt;
 our @ISA = qw/ IRStats::View /;&lt;br /&gt;
&lt;br /&gt;
==== Configuration Constants ====&lt;br /&gt;
We aren't actually interested in any columns, just in the count, but we put that in the columns array anyway.&lt;br /&gt;
We also create our visualisation here.&lt;br /&gt;
 sub initialise&lt;br /&gt;
 {&lt;br /&gt;
        my ($self) = @_;&lt;br /&gt;
        $self-&amp;gt;{'sql_params'} = {columns =&amp;gt; [ 'COUNT' ]};&lt;br /&gt;
        $self-&amp;gt;{'visualisation'} = IRStats::Visualisation::HTML-&amp;gt;new();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== new ====&lt;br /&gt;
The new function shouldn't ever need to be any different from this:&lt;br /&gt;
 sub new&lt;br /&gt;
 {&lt;br /&gt;
        my( $class, $params, $database ) = @_;&lt;br /&gt;
        my $self = $class-&amp;gt;SUPER::new($params, $database);;&lt;br /&gt;
        $self-&amp;gt;initialise();&lt;br /&gt;
        return $self;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== populate ====&lt;br /&gt;
Almost every populate function should start by checking the cache.&lt;br /&gt;
&lt;br /&gt;
 sub populate&lt;br /&gt;
 {&lt;br /&gt;
    my ($self) = @_;&lt;br /&gt;
    my $cache = IRStats::Cache-&amp;gt;new($self-&amp;gt;{'params'}-&amp;gt;get('id'));&lt;br /&gt;
    if ($cache-&amp;gt;exists)&lt;br /&gt;
    {&lt;br /&gt;
        $self-&amp;gt;{'visualisation'} = $cache-&amp;gt;read();&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
Next, we have to retreive from the database:&lt;br /&gt;
&lt;br /&gt;
    my $query = $self-&amp;gt;{'database'}-&amp;gt;get_stats(&lt;br /&gt;
            $self-&amp;gt;{'params'},&lt;br /&gt;
            $self-&amp;gt;{'sql_params'}&lt;br /&gt;
            );&lt;br /&gt;
Now we process them.  In this case, we don't even need a loop as we know there's only going to be one row.  We'll stick the result straight into some html, and save it.  Don't forget that if there isn't any data, you still have to output something.&lt;br /&gt;
    my @row = $query-&amp;gt;fetchrow_array();&lt;br /&gt;
    my $html = '&amp;lt;span class=&amp;quot;irstats_view_fulltextcounthtml&amp;quot;&amp;gt;' . ($row[1] ? $row[1] : '0') . &amp;quot;&amp;lt;/span&amp;gt;&amp;quot;;&lt;br /&gt;
A little housekeeping:&lt;br /&gt;
    $query-&amp;gt;finish();&lt;br /&gt;
Pop the data into the visualisation:&lt;br /&gt;
    $self-&amp;gt;{'visualisation'}-&amp;gt;set('html',$html);&lt;br /&gt;
Finally, we should write to the cache so we don't have to query the database next time.&lt;br /&gt;
    $cache-&amp;gt;write($self-&amp;gt;{'visualisation'});&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And that's a really simple view.&lt;br /&gt;
&lt;br /&gt;
=== Using Periods ===&lt;br /&gt;
&lt;br /&gt;
If we wanted to break our daterange into periods, we'd need to do something like this:&lt;br /&gt;
&lt;br /&gt;
 my $periods = IRStats::Periods-&amp;gt;new($self-&amp;gt;{'params'}-&amp;gt;{'start_date'},$self-&amp;gt;{'params'}-&amp;gt;{'end_date'});&lt;br /&gt;
 foreach my $period ( @{$periods-&amp;gt;calandar_months()} )&lt;br /&gt;
 {&lt;br /&gt;
    $self-&amp;gt;{'params'}-&amp;gt;mask($period);&lt;br /&gt;
    my $query = $self-&amp;gt;{'database'}-&amp;gt;get_stats(&lt;br /&gt;
            $self-&amp;gt;{'params'},&lt;br /&gt;
            $self-&amp;gt;{'sql_params'}&lt;br /&gt;
    );&lt;br /&gt;
    $self-&amp;gt;{'params'}-&amp;gt;unmask();&lt;br /&gt;
    #process and put into variables&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Visualisation ==&lt;br /&gt;
Currently Visualisations are Graph, Table or HTML.  These are what the user will look at in the broswer or download (in the case of CSV).&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
All visualisations inherit:&lt;br /&gt;
*new(data_hash) - a hash can optionally be passed containing the values that would otherwise be set using the 'set' function.&lt;br /&gt;
*set(param_name, value) - sets something to something - see subclasses&lt;br /&gt;
&lt;br /&gt;
All visualisations must implement:&lt;br /&gt;
*render() - returns what will be passed to the script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Visualisation::HTML ==&lt;br /&gt;
The simplest visualisation.  Just a chunk of html.&lt;br /&gt;
&lt;br /&gt;
To Populate:&lt;br /&gt;
*set('html', html_string) - takes the html as a string.&lt;br /&gt;
&lt;br /&gt;
== Visualisation::Table ==&lt;br /&gt;
The Visualisation::Table currently just passes the buck to its superclass.&lt;br /&gt;
&lt;br /&gt;
There are currently three table Visualisations:&lt;br /&gt;
&lt;br /&gt;
=== Visualisation::Table::CSV ===&lt;br /&gt;
Returns a CSV table.&lt;br /&gt;
&lt;br /&gt;
To Populate:&lt;br /&gt;
*set('headings', headings_arrayref) - pass an array containing headings.&lt;br /&gt;
*set('rows', rows_arrayref) - an array of arrayrefs, each referencing a row of data.&lt;br /&gt;
&lt;br /&gt;
=== Visualisation::Table::HTML ===&lt;br /&gt;
A basic HTML table.&lt;br /&gt;
&lt;br /&gt;
To Populate:&lt;br /&gt;
*set('columns', headings_arrayref) - pass an array containing column headings.&lt;br /&gt;
*set('rows', rows_arrayref) - an array of arrayrefs, each referencing a row of data.&lt;br /&gt;
And then optionally&lt;br /&gt;
*set('totals', totals_arrayref) - an array of totals to put at the bottom of the table.&lt;br /&gt;
&lt;br /&gt;
=== Visualisation::Table::HTML_Columned ===&lt;br /&gt;
An HTML table that is rendered in several columns.&lt;br /&gt;
==== Configuration Constants ====&lt;br /&gt;
$default_number_of_rows - an int representing the maximum number of rows the table should have.  This is to prevent sending huge tables to browsers which may not be able to handle it.&lt;br /&gt;
&lt;br /&gt;
==== Overridden Functions ====&lt;br /&gt;
*new(data_hash, number_of_rows) - Both data_hash and number_of_rows are optional.  Both can be set with 'set'.&lt;br /&gt;
&lt;br /&gt;
To Populate:&lt;br /&gt;
*set('columns', headings_arrayref) - pass an array containing column headings.&lt;br /&gt;
*set('rows', rows_arrayref) - an array of arrayrefs, each referencing a row of data.&lt;br /&gt;
*set('number_of_rows', int) - set the maximum number of rows the table should have.&lt;br /&gt;
&lt;br /&gt;
== Visualisation::Graph ==&lt;br /&gt;
The graph objects all use Chart Director to generate graphs.  The Graph object initialised the colours that the graph may be using.&lt;br /&gt;
&lt;br /&gt;
Every graph must be created with at least the filename:&lt;br /&gt;
*new({filename =&amp;gt; string}) - the filename comes from the ID of the param object.&lt;br /&gt;
&lt;br /&gt;
=== Configuration Constants ===&lt;br /&gt;
These are set in the 'new' function.&lt;br /&gt;
*$graph_dir - the path to the directory where the image file will be saved.&lt;br /&gt;
*$url_relative - this will have the filename added to the end and put in the img html tag.&lt;br /&gt;
&lt;br /&gt;
=== Sub Classes ===&lt;br /&gt;
Note that in the Visualisation/Graph/ directory, there is 'GraphLegend.pm'.  This is used to create the html for the graph legends.&lt;br /&gt;
&lt;br /&gt;
====Visualisation::Graph::Bar.pm====&lt;br /&gt;
A Bar Graph.  It can have one or more bars in each division of the x axis.&lt;br /&gt;
&lt;br /&gt;
To implement:&lt;br /&gt;
*set('title',string) - The title that will be in the graph image.&lt;br /&gt;
*set('x_title',string) - The title of the x axis.&lt;br /&gt;
*set('y_title',string) - The title of the y axis.&lt;br /&gt;
*set('x_labels',array_ref) - an array containing the labels for the x axis&lt;br /&gt;
*set('data_series, array_ref) - an array of arrayrefs, referencing data for each set of bars&lt;br /&gt;
&lt;br /&gt;
====Visualisation::Graph::Line.pm====&lt;br /&gt;
A Line Graph.  There can be many lines on it&lt;br /&gt;
&lt;br /&gt;
To implement:&lt;br /&gt;
*set('title',string) - The title that will be in the graph image.&lt;br /&gt;
*set('x_title',string) - The title of the x axis.&lt;br /&gt;
*set('y_title',string) - The title of the y axis.&lt;br /&gt;
*set('x_labels',array_ref) - an array containing the labels for the x axis&lt;br /&gt;
*set('data_series, array_ref) - an array of arrayrefs, referencing data for each line&lt;br /&gt;
&lt;br /&gt;
====Visualisation::Graph::Pie.pm====&lt;br /&gt;
A Pie Graph&lt;br /&gt;
&lt;br /&gt;
To implement:&lt;br /&gt;
*set('title',string) - The title that will be in the graph image.&lt;br /&gt;
*set('data_series, array_ref) - an array of hashrefs, {data =&amp;gt; int, citation =&amp;gt; string}, one for each slice&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=IRStats&amp;diff=11548</id>
		<title>IRStats</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=IRStats&amp;diff=11548"/>
		<updated>2015-11-12T18:59:06Z</updated>

		<summary type="html">&lt;p&gt;Pm705: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:IRStats]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 2px solid red; background-color: yellow;padding:10px&amp;quot;&amp;gt;This is IRStats 1 documentation. IRStats 1 is now out of support. You may have been looking for [[IRStats 2]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IRStats is a flexible statistics package which allows easy processing of accesses to fulltext documents of eprints. It can be downloaded from the [http://files.eprints.org/722/ Eprints File repository]. For more detailed information, please see the [[IRStats Technical Documentation]], though it is now somewhat out of date.&lt;br /&gt;
&lt;br /&gt;
== The front end ==&lt;br /&gt;
&lt;br /&gt;
===The Query Form===&lt;br /&gt;
&lt;br /&gt;
The main interface to IRStats is found at the following URL (given a repository base URL of myrepository.ac.uk):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
myrepository.ac.uk/cgi/irstats.cgi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will be presented with a form allowing you to select the parameters with which to generate a report.&lt;br /&gt;
&lt;br /&gt;
===Advanced Report Generation (get_view2 params)===&lt;br /&gt;
&lt;br /&gt;
The following will help if you wish to create queries by setting the CGI parameters by hand.&lt;br /&gt;
&lt;br /&gt;
There are three fundamental parameters that IRStats uses.  There are:&lt;br /&gt;
* A Date Range (actually 6 parameters for day, month and year for both start and end dates)&lt;br /&gt;
* A Set of EPrints&lt;br /&gt;
* A View&lt;br /&gt;
&lt;br /&gt;
However, in order to add functionality, the get_view2 page will convert a larger number of parameters into these three.  The following table shows all parameters and values, with square brackets denoting variables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Possible Values&lt;br /&gt;
! Notes&lt;br /&gt;
|- &lt;br /&gt;
| IRS_datechoice || period, range || Controls whether the 6 date range parameters or the single period parameter is used.&lt;br /&gt;
|-&lt;br /&gt;
| period || -[X]m, Q[Z][YYYY] || Used when IRS_datechoice=period.&amp;lt;br/&amp;gt;Where m and Q are literal characters, X is a positive integer, Z is an integer in the range 1 to 4 and YYYY is a four digit year.&amp;lt;br/&amp;gt;Examples: &amp;lt;dl&amp;gt;&amp;lt;dt&amp;gt;-4m&amp;lt;dd&amp;gt;Go back exactly four months from today's date&amp;lt;dt&amp;gt;Q32004&amp;lt;dd&amp;gt;Quarter 3, 2004&amp;lt;/dl&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| start_day, start_month, start_year, end_day, end_month, end_year || integers (1-31, 1-12, four digit respectively) || Used when IRS_datechoice=range.&amp;lt;br/&amp;gt; Note that if a day value is higher than the highest day in the chosen month, it will be treated as the highest day -- e.g. start_day=31&amp;amp;start_month=02 is seen as valid and equivalent to February 28th.  Note that start_day=99 is also valid! &lt;br /&gt;
|-&lt;br /&gt;
| IRS_epchoice || All, EPrint, [set_id] || Controls whether stats will be generated on all eprints, a single eprints, or a set of eprints.  The 'All' option is the only one that does not require extra parameters.  Note that 'set_id' is the id of a valid set as defined in the IRStats configuration.&lt;br /&gt;
|-&lt;br /&gt;
| eprint || [eprintid] || Used when IRS_epchoice=EPrint.&amp;lt;br/&amp;gt;Any valid eprint ID (integer).&lt;br /&gt;
|-&lt;br /&gt;
| [set_id]s || [set_id]_[set_member_code] || Used when IRS_epchoice=[set_id].&amp;lt;br/&amp;gt;  Best described through example: &amp;lt;dl&amp;gt;&amp;lt;dt&amp;gt;IRS_epchoice=divisions&amp;amp;divisionss=divisions_art&amp;lt;dd&amp;gt;Will generate a report on the art department, given a standard EPrints repository and IRStats config, where the subject id 'art' exists in the divisions tree in EPrints.&lt;br /&gt;
|-&lt;br /&gt;
| view || [view classname] || The classname of the IRStats::View perl module.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===The Dashboard Form===&lt;br /&gt;
&lt;br /&gt;
A dashboard is a collection of reports on a single item or set of items (e.g. all items by John Smith).  To access the form to generate a report, go to the url:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
myrepository.ac.uk/cgi/irstats.cgi?page=db&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The configuration file ==&lt;br /&gt;
&lt;br /&gt;
Documentation to follow.&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=IRStats_Technical_Documentation&amp;diff=11547</id>
		<title>IRStats Technical Documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=IRStats_Technical_Documentation&amp;diff=11547"/>
		<updated>2015-11-12T18:58:26Z</updated>

		<summary type="html">&lt;p&gt;Pm705: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:IRStats]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 2px solid red; background-color: yellow;padding:10px&amp;quot;&amp;gt;This is IRStats1 documentation. IRStats1 is now out of support. You may have been looking for [[IRStats2]]&amp;lt;/div&amp;gt;&lt;br /&gt;
= Directory Structure =&lt;br /&gt;
&lt;br /&gt;
== /opt/irstats/bin ==&lt;br /&gt;
Contains the scripts needed to update the table.&lt;br /&gt;
&lt;br /&gt;
*daily_update.sh - Runs all the scripts in the right order.&lt;br /&gt;
*extract_metadata_from_archive.pl - Extracts eprint, author and group metadata from the repository by iterating over every eprint.&lt;br /&gt;
*update_table.pl - Filters and processes new entries in the accesslog to update the irstats_true_acesses_table.  Uses 'SearchParser.pm' and 'repeatscache'.&lt;br /&gt;
* convert_ip_to_host.pl - Attempts to convert ip addresses of the new entries in irstats_true_acesses_table to hostnames.  Uses 'host_updated' to keep track of where it got to last time.&lt;br /&gt;
&lt;br /&gt;
Note that most of these scripts probably need to be tidied up.  They were written in a hurry and were never polished.&lt;br /&gt;
&lt;br /&gt;
== /opt/irstats/cache ==&lt;br /&gt;
Contains cache files.  These should probably be deleted whenever the database is updated.&lt;br /&gt;
&lt;br /&gt;
== /opt/irstats/cgi ==&lt;br /&gt;
&lt;br /&gt;
Contains two scripts, 'get_view and 'stats'.&lt;br /&gt;
&lt;br /&gt;
*get_view returns the output of a IRStats::View (see below), which is currently a chunk of html or csv, but could be almost anything.&lt;br /&gt;
*stats is a handy cgi form that passes arguements to get_view&lt;br /&gt;
&lt;br /&gt;
== /opt/irstats/img ==&lt;br /&gt;
&lt;br /&gt;
Conceptually, where any images would be kept (e.g. national flags).  At the moment, only the img/graphs directory is used.  This is where generated graphs are stored.&lt;br /&gt;
&lt;br /&gt;
== /opt/irstats/cfg ==&lt;br /&gt;
&lt;br /&gt;
Where the configuration file and the text files containing repository data are held.&lt;br /&gt;
&lt;br /&gt;
=== The Configuration File ===&lt;br /&gt;
&lt;br /&gt;
irstats.cfg contains a number of configuration strings.  Here are some of the more important ones, with the default in brackets:&lt;br /&gt;
&lt;br /&gt;
*configuration_path (/opt/irstats/cfg/) - The path of the configuration directory.&lt;br /&gt;
*view_path (/opt/irstats/perl_lib/IRStats/View/) - The directory containing the Views.&lt;br /&gt;
*cache_path (/opt/irstats/cache/) - The directory in which to store cache files.&lt;br /&gt;
*graph_path (/opt/irstats/img/graphs/) - The directory in which to store graph images.&lt;br /&gt;
*graph_relative_url_path (/img/graphs/) - The url of the directory in which the graph file is from the point of view of the web browser.&lt;br /&gt;
*update_lock_filename (/opt/irstats/bin/.lock) - The name of the file that is created to prevent the update process running twice concurrently&lt;br /&gt;
*The names of the files used to store set information&lt;br /&gt;
**set_member_full_citations_file (/opt/irstats/cfg/irstats_set_member_full_citations.txt)&lt;br /&gt;
**set_member_short_citations_file (/opt/irstats/cfg/irstats_set_member_short_citations.txt)&lt;br /&gt;
**set_membership_file (/opt/irstats/cfg/irstats_set_membership.txt)&lt;br /&gt;
**set_member_codes_file (/opt/irstats/cfg/irstats_set_member_codes.txt)&lt;br /&gt;
**set_member_urls_file (/opt/irstats/cfg/irstats_set_member_urls.txt)&lt;br /&gt;
*Referrer Scope Labels (note, if you change these, you should also change them in the database)&lt;br /&gt;
**referrer_scope_1 (Internal)&lt;br /&gt;
**referrer_scope_2 (ECS)&lt;br /&gt;
**referrer_scope_3 (Search)&lt;br /&gt;
**referrer_scope_4 (External)&lt;br /&gt;
**referrer_scope_no_referrer (None)&lt;br /&gt;
*awstats_search_engines (/usr/local/awstats/wwwroot/cgi-bin/lib/search_engines.pm) - The path to the awstats search engine module&lt;br /&gt;
*repeats_filter_file (/opt/irstats/bin/repeatscache) - The file to maintain state between updates&lt;br /&gt;
*repeats_filter_timeout (86400) - repeat timeout in seconds (the amount of time there needs to be between two hits for them both to be recorded, initially set to 60*60*24)&lt;br /&gt;
&lt;br /&gt;
*repository_url = http://eprints.ecs.soton.ac.uk - the path to the repository&lt;br /&gt;
&lt;br /&gt;
*database configuration&lt;br /&gt;
**database_driver (mysql)&lt;br /&gt;
**database_server (localhost)&lt;br /&gt;
**database_name&lt;br /&gt;
**database_user&lt;br /&gt;
**database_password&lt;br /&gt;
&lt;br /&gt;
*database_id_columns ([ requester_organisation, requester_host, referrer_scope, search_engine, search_terms, referring_entity_id ]) - The columns in the database that have a UID rather than data.  These need seperate tables in which to store the data.&lt;br /&gt;
&lt;br /&gt;
*Various table names and parts of names&lt;br /&gt;
**database_eprints_access_log_table (accesslog) ##Perhaps remove after update rewrite.&lt;br /&gt;
**database_main_stats_table (irstats_true_accesses_table)&lt;br /&gt;
**database_column_table_prefix (irstats_column_)&lt;br /&gt;
**database_set_table_prefix (irstats_set_)&lt;br /&gt;
**database_set_table_code_suffix (_code)&lt;br /&gt;
**database_set_table_citation_suffix (_citation)&lt;br /&gt;
&lt;br /&gt;
*id_parameters ([ start_date, end_date, eprints, view ]) - the parameters that are used to uniquely identify a view&lt;br /&gt;
*host_lookup_temp_dir (/opt/irstats/bin/convert_hosts_temp_files/) - The directory in which to store temp files for host lookups&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== /opt/irstats/perl_lib ==&lt;br /&gt;
&lt;br /&gt;
Contains all the irstats classes.&lt;br /&gt;
&lt;br /&gt;
= IRStats Classes =&lt;br /&gt;
&lt;br /&gt;
Note that the leading IRStats:: has been left out for brevity.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
This object acts as an interface to the configuration file.&lt;br /&gt;
=== Configuration Contstants ===&lt;br /&gt;
*$configuration_file - The path to the configuration file.&lt;br /&gt;
=== Functions ===&lt;br /&gt;
*new - Parses the configuration file and returns a new object.&lt;br /&gt;
*get_value(config_id) - Returns a value.&lt;br /&gt;
&lt;br /&gt;
== Params ==&lt;br /&gt;
This object holds the parameters that are used to generate the statistics.  This is passed around the system.&lt;br /&gt;
=== Configuration Constants ===&lt;br /&gt;
*$defaults - Any default parameters you wish to set.&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
*new(Configuration, [ CGI_object | params_hash ]) - returns new object&lt;br /&gt;
*mask(params_hash) - used when you want to temporarily overwrite parameter(s).  Overwrites values with contents of params_hash.  Overwritten values get pushed onto a stack.&lt;br /&gt;
*unmask - Sets parameters back to how they were before the last mask.&lt;br /&gt;
*get(param_name) - returns the value of a single parameter.&lt;br /&gt;
*create_id - Uses MD5 to create a unique ID from the id_params (see Constants above).  This is called whenever get('id') is called.&lt;br /&gt;
&lt;br /&gt;
== DatabaseInterface ==&lt;br /&gt;
This object does what it says on the tin.  Any access to the database is done though it.&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
*new(Configuration) - returns object.&lt;br /&gt;
*retreive_set_names() - returns a list of eprint sets.  This can be used to verify cgi input.&lt;br /&gt;
*get_membership(eprint_id, set_name) - For a given eprint ID, which of a named set does it belong to.  For example, we can find out which authors eprint 12614 has by get_membership(12614, 'author').&lt;br /&gt;
*get_citation(id, set, length) - returns a citation.  Every set member (eprint, author, group) has two citations.  short and full.  We only return a short citation if length == 'short'.  So, to get the short citation of a group 3: get_citation(3,'group','short').&lt;br /&gt;
*get_stats(params_object, query_params_hash) - returns a dbi object containing the stats we are interested.  i.e. the params_object's date range and eprints sets, and only the columns in query params hash.  The query params hash can contain the following key/value pairs&lt;br /&gt;
**columns =&amp;gt; column_name_array - Which columns are we interested in?&lt;br /&gt;
**order =&amp;gt; column_name - A hash containing a column name and directions (ASC or DESC)&lt;br /&gt;
**limit =&amp;gt; int - How many results to return&lt;br /&gt;
**group_by =&amp;gt; column_name - if we need to group by a column.&lt;br /&gt;
**where =&amp;gt; where_hash_array - if additional logic needs to be applied, this array contains hashes containing a column name, an operator and a value.  These are ANDed together.&lt;br /&gt;
*check_tables() - If any IRStats tables are missing, this function will create them.&lt;br /&gt;
*insert_main_table_row(column_array) - inserts the values in the array into the main table (taking into account any tables that contain only IDs).&lt;br /&gt;
*do_sql(sql_query_string) - takes a string and performs a query, returning the dbi object containing the results.  This is the only point where sql is sent to the database.&lt;br /&gt;
&lt;br /&gt;
== Date ==&lt;br /&gt;
A date object was implemented because there were some specific things that needed to be done with dates.&lt;br /&gt;
&lt;br /&gt;
===Functions===&lt;br /&gt;
*new(date_hash) - Creates a new date object when passed a hash with the keys 'day', 'month' and 'year'.&lt;br /&gt;
*validate() - If the date is not valid, it will be modified to a sensible value.  E.G. if it's Feb 30th, it will be modified to Feb 29th or 28th, dependant on if it's a leap year.&lt;br /&gt;
*set(part_name, int) - Sets part of the date ('year','month' or 'day') to a specific value.&lt;br /&gt;
*decrement(period) - increments the date by a period ('day', 'week', 'month', 'quarter', 'year').  Calls the mod_date function, which does the muscle work.&lt;br /&gt;
*increment(period) - decrements by calling mod_date.&lt;br /&gt;
*part(part_name, style - Returns the day, month or year.  For month, if style=='text', returns a three letter string, otherwise returns an integer.  For year, if style=='short', returns the last two digits, otherwise returns all four.&lt;br /&gt;
*difference(date_object) - returns the difference in days between itself and another date.&lt;br /&gt;
*less_than(date_object) - compares itself to another date object.  Returns 1 if it's less than it, otherwise returns 0.&lt;br /&gt;
*greater_than(date_object) - compares itself to another date object.  Returns 1 if it's greater than it, otherwise returns 0.&lt;br /&gt;
*month_name() - returns the three letter string of the month.&lt;br /&gt;
*render(format_string) - returns a date string.  Format can be:&lt;br /&gt;
**'short' - Calls render_abbreviated - returns a date like this: 05-Jul-77&lt;br /&gt;
**'numerical' (default) - Calls render_numerical - returns a date like this: 19770705&lt;br /&gt;
*clone - returns an new, identical date object.&lt;br /&gt;
&lt;br /&gt;
== Cache ==&lt;br /&gt;
The interface to the cache.&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
*new(id) - takes the ID of the params object we're using at the moment.&lt;br /&gt;
*exists() - returns true if there's a cached file, false if there isn't one.&lt;br /&gt;
*write(visualisation_object) - writes the data to the cache file.&lt;br /&gt;
*read() - returns the data from the cache.&lt;br /&gt;
&lt;br /&gt;
== Periods ==&lt;br /&gt;
The Periods object is used when you want to break a daterange down into sub-ranges.  Used with the params-&amp;gt;mask() function, stats can be retrieved for periods inside a date range.&lt;br /&gt;
===Functions===&lt;br /&gt;
*new(start_date_obj, end_date_obj) - doesn't do anything, just returns the object.&lt;br /&gt;
&lt;br /&gt;
The following functions all return an array of hashes.  Each hash has the keys 'start_date' and 'end_date', and the values are both IRStats::Date objects.&lt;br /&gt;
&lt;br /&gt;
*calandar_months - Returns full months (each element starts on the 1st, and ends on the last day).&lt;br /&gt;
*months - Returns month periods (if the start_date is the 15th, then each period starts on the 15th and ends on the 14th of the next month - except the last period, which only has about a 1/30 chance of doing so).&lt;br /&gt;
*weeks - returns 7-day periods (except the last, which has a 1/7 chance of being 7 days long).&lt;br /&gt;
*days - returns single days (for each period, the start_date and end_date are the same).&lt;br /&gt;
&lt;br /&gt;
== UserInterface::Controls ==&lt;br /&gt;
This is used to generate the drop boxes in the stats cgi script.&lt;br /&gt;
===Functions===&lt;br /&gt;
new(params_obj, database_interface_object) - returns the object.&lt;br /&gt;
start_date_control() - returns the html for the three drop-boxes for selecting the year, month and day of the start date.&lt;br /&gt;
end_date_control() - return the html for the three drop-boxes for selecting the year, month and day of the end date.&lt;br /&gt;
eprint_control() - returns the html for the eprints text box.&lt;br /&gt;
drop_box(id, contents_array) - returns the html for a drop box containing what is in the array (each array element is a hash containing 'value' and 'display').&lt;br /&gt;
&lt;br /&gt;
== View ==&lt;br /&gt;
A view processes the stats data filtered by the parameters and creates a visualisation.  It is intended that savvy users create their own views.&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
All views inherit:&lt;br /&gt;
*new(params_obj, database_interface_object) - returns the object.&lt;br /&gt;
*render - calls populate, then returns whatever the visualisation renders&lt;br /&gt;
All visualisations must implement:&lt;br /&gt;
*new - passes arguments to superclass, then calls 'initialise'.&lt;br /&gt;
*initialise - the Configuration Constants are set here.&lt;br /&gt;
*populate - The engine that powers IRStats.&lt;br /&gt;
&lt;br /&gt;
=== View::DownloadCountHTML ===&lt;br /&gt;
The DownloadCountHTML is an extremely simple view.  It retrieves one row from the database and does no processing, making it ideal for a quick walkthrough:&lt;br /&gt;
&lt;br /&gt;
==== Housekeeping ====&lt;br /&gt;
At the top of the file, we need:&lt;br /&gt;
 package IRStats::View::DownloadCountHTML;&lt;br /&gt;
 use strict;&lt;br /&gt;
 use warnings;&lt;br /&gt;
Now, which modules will we use.  I've included perchardir, the graph making package, even though we're not using it.&lt;br /&gt;
 use IRStats::DatabaseInterface;&lt;br /&gt;
 use IRStats::Cache;&lt;br /&gt;
 use IRStats::Visualisation::HTML;&lt;br /&gt;
 use IRStats::View;&lt;br /&gt;
 use perlchartdir;&lt;br /&gt;
And link to superclass. &lt;br /&gt;
 our @ISA = qw/ IRStats::View /;&lt;br /&gt;
&lt;br /&gt;
==== Configuration Constants ====&lt;br /&gt;
We aren't actually interested in any columns, just in the count, but we put that in the columns array anyway.&lt;br /&gt;
We also create our visualisation here.&lt;br /&gt;
 sub initialise&lt;br /&gt;
 {&lt;br /&gt;
        my ($self) = @_;&lt;br /&gt;
        $self-&amp;gt;{'sql_params'} = {columns =&amp;gt; [ 'COUNT' ]};&lt;br /&gt;
        $self-&amp;gt;{'visualisation'} = IRStats::Visualisation::HTML-&amp;gt;new();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== new ====&lt;br /&gt;
The new function shouldn't ever need to be any different from this:&lt;br /&gt;
 sub new&lt;br /&gt;
 {&lt;br /&gt;
        my( $class, $params, $database ) = @_;&lt;br /&gt;
        my $self = $class-&amp;gt;SUPER::new($params, $database);;&lt;br /&gt;
        $self-&amp;gt;initialise();&lt;br /&gt;
        return $self;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== populate ====&lt;br /&gt;
Almost every populate function should start by checking the cache.&lt;br /&gt;
&lt;br /&gt;
 sub populate&lt;br /&gt;
 {&lt;br /&gt;
    my ($self) = @_;&lt;br /&gt;
    my $cache = IRStats::Cache-&amp;gt;new($self-&amp;gt;{'params'}-&amp;gt;get('id'));&lt;br /&gt;
    if ($cache-&amp;gt;exists)&lt;br /&gt;
    {&lt;br /&gt;
        $self-&amp;gt;{'visualisation'} = $cache-&amp;gt;read();&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
Next, we have to retreive from the database:&lt;br /&gt;
&lt;br /&gt;
    my $query = $self-&amp;gt;{'database'}-&amp;gt;get_stats(&lt;br /&gt;
            $self-&amp;gt;{'params'},&lt;br /&gt;
            $self-&amp;gt;{'sql_params'}&lt;br /&gt;
            );&lt;br /&gt;
Now we process them.  In this case, we don't even need a loop as we know there's only going to be one row.  We'll stick the result straight into some html, and save it.  Don't forget that if there isn't any data, you still have to output something.&lt;br /&gt;
    my @row = $query-&amp;gt;fetchrow_array();&lt;br /&gt;
    my $html = '&amp;lt;span class=&amp;quot;irstats_view_fulltextcounthtml&amp;quot;&amp;gt;' . ($row[1] ? $row[1] : '0') . &amp;quot;&amp;lt;/span&amp;gt;&amp;quot;;&lt;br /&gt;
A little housekeeping:&lt;br /&gt;
    $query-&amp;gt;finish();&lt;br /&gt;
Pop the data into the visualisation:&lt;br /&gt;
    $self-&amp;gt;{'visualisation'}-&amp;gt;set('html',$html);&lt;br /&gt;
Finally, we should write to the cache so we don't have to query the database next time.&lt;br /&gt;
    $cache-&amp;gt;write($self-&amp;gt;{'visualisation'});&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And that's a really simple view.&lt;br /&gt;
&lt;br /&gt;
=== Using Periods ===&lt;br /&gt;
&lt;br /&gt;
If we wanted to break our daterange into periods, we'd need to do something like this:&lt;br /&gt;
&lt;br /&gt;
 my $periods = IRStats::Periods-&amp;gt;new($self-&amp;gt;{'params'}-&amp;gt;{'start_date'},$self-&amp;gt;{'params'}-&amp;gt;{'end_date'});&lt;br /&gt;
 foreach my $period ( @{$periods-&amp;gt;calandar_months()} )&lt;br /&gt;
 {&lt;br /&gt;
    $self-&amp;gt;{'params'}-&amp;gt;mask($period);&lt;br /&gt;
    my $query = $self-&amp;gt;{'database'}-&amp;gt;get_stats(&lt;br /&gt;
            $self-&amp;gt;{'params'},&lt;br /&gt;
            $self-&amp;gt;{'sql_params'}&lt;br /&gt;
    );&lt;br /&gt;
    $self-&amp;gt;{'params'}-&amp;gt;unmask();&lt;br /&gt;
    #process and put into variables&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Visualisation ==&lt;br /&gt;
Currently Visualisations are Graph, Table or HTML.  These are what the user will look at in the broswer or download (in the case of CSV).&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
All visualisations inherit:&lt;br /&gt;
*new(data_hash) - a hash can optionally be passed containing the values that would otherwise be set using the 'set' function.&lt;br /&gt;
*set(param_name, value) - sets something to something - see subclasses&lt;br /&gt;
&lt;br /&gt;
All visualisations must implement:&lt;br /&gt;
*render() - returns what will be passed to the script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Visualisation::HTML ==&lt;br /&gt;
The simplest visualisation.  Just a chunk of html.&lt;br /&gt;
&lt;br /&gt;
To Populate:&lt;br /&gt;
*set('html', html_string) - takes the html as a string.&lt;br /&gt;
&lt;br /&gt;
== Visualisation::Table ==&lt;br /&gt;
The Visualisation::Table currently just passes the buck to its superclass.&lt;br /&gt;
&lt;br /&gt;
There are currently three table Visualisations:&lt;br /&gt;
&lt;br /&gt;
=== Visualisation::Table::CSV ===&lt;br /&gt;
Returns a CSV table.&lt;br /&gt;
&lt;br /&gt;
To Populate:&lt;br /&gt;
*set('headings', headings_arrayref) - pass an array containing headings.&lt;br /&gt;
*set('rows', rows_arrayref) - an array of arrayrefs, each referencing a row of data.&lt;br /&gt;
&lt;br /&gt;
=== Visualisation::Table::HTML ===&lt;br /&gt;
A basic HTML table.&lt;br /&gt;
&lt;br /&gt;
To Populate:&lt;br /&gt;
*set('columns', headings_arrayref) - pass an array containing column headings.&lt;br /&gt;
*set('rows', rows_arrayref) - an array of arrayrefs, each referencing a row of data.&lt;br /&gt;
And then optionally&lt;br /&gt;
*set('totals', totals_arrayref) - an array of totals to put at the bottom of the table.&lt;br /&gt;
&lt;br /&gt;
=== Visualisation::Table::HTML_Columned ===&lt;br /&gt;
An HTML table that is rendered in several columns.&lt;br /&gt;
==== Configuration Constants ====&lt;br /&gt;
$default_number_of_rows - an int representing the maximum number of rows the table should have.  This is to prevent sending huge tables to browsers which may not be able to handle it.&lt;br /&gt;
&lt;br /&gt;
==== Overridden Functions ====&lt;br /&gt;
*new(data_hash, number_of_rows) - Both data_hash and number_of_rows are optional.  Both can be set with 'set'.&lt;br /&gt;
&lt;br /&gt;
To Populate:&lt;br /&gt;
*set('columns', headings_arrayref) - pass an array containing column headings.&lt;br /&gt;
*set('rows', rows_arrayref) - an array of arrayrefs, each referencing a row of data.&lt;br /&gt;
*set('number_of_rows', int) - set the maximum number of rows the table should have.&lt;br /&gt;
&lt;br /&gt;
== Visualisation::Graph ==&lt;br /&gt;
The graph objects all use Chart Director to generate graphs.  The Graph object initialised the colours that the graph may be using.&lt;br /&gt;
&lt;br /&gt;
Every graph must be created with at least the filename:&lt;br /&gt;
*new({filename =&amp;gt; string}) - the filename comes from the ID of the param object.&lt;br /&gt;
&lt;br /&gt;
=== Configuration Constants ===&lt;br /&gt;
These are set in the 'new' function.&lt;br /&gt;
*$graph_dir - the path to the directory where the image file will be saved.&lt;br /&gt;
*$url_relative - this will have the filename added to the end and put in the img html tag.&lt;br /&gt;
&lt;br /&gt;
=== Sub Classes ===&lt;br /&gt;
Note that in the Visualisation/Graph/ directory, there is 'GraphLegend.pm'.  This is used to create the html for the graph legends.&lt;br /&gt;
&lt;br /&gt;
====Visualisation::Graph::Bar.pm====&lt;br /&gt;
A Bar Graph.  It can have one or more bars in each division of the x axis.&lt;br /&gt;
&lt;br /&gt;
To implement:&lt;br /&gt;
*set('title',string) - The title that will be in the graph image.&lt;br /&gt;
*set('x_title',string) - The title of the x axis.&lt;br /&gt;
*set('y_title',string) - The title of the y axis.&lt;br /&gt;
*set('x_labels',array_ref) - an array containing the labels for the x axis&lt;br /&gt;
*set('data_series, array_ref) - an array of arrayrefs, referencing data for each set of bars&lt;br /&gt;
&lt;br /&gt;
====Visualisation::Graph::Line.pm====&lt;br /&gt;
A Line Graph.  There can be many lines on it&lt;br /&gt;
&lt;br /&gt;
To implement:&lt;br /&gt;
*set('title',string) - The title that will be in the graph image.&lt;br /&gt;
*set('x_title',string) - The title of the x axis.&lt;br /&gt;
*set('y_title',string) - The title of the y axis.&lt;br /&gt;
*set('x_labels',array_ref) - an array containing the labels for the x axis&lt;br /&gt;
*set('data_series, array_ref) - an array of arrayrefs, referencing data for each line&lt;br /&gt;
&lt;br /&gt;
====Visualisation::Graph::Pie.pm====&lt;br /&gt;
A Pie Graph&lt;br /&gt;
&lt;br /&gt;
To implement:&lt;br /&gt;
*set('title',string) - The title that will be in the graph image.&lt;br /&gt;
*set('data_series, array_ref) - an array of hashrefs, {data =&amp;gt; int, citation =&amp;gt; string}, one for each slice&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=IRStats&amp;diff=11546</id>
		<title>IRStats</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=IRStats&amp;diff=11546"/>
		<updated>2015-11-12T18:58:06Z</updated>

		<summary type="html">&lt;p&gt;Pm705: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:IRStats]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 2px solid red; background-color: yellow;padding:10px&amp;quot;&amp;gt;This is IRStats1 documentation. IRStats1 is now out of support. You may have been looking for [[IRStats2]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IRStats is a flexible statistics package which allows easy processing of accesses to fulltext documents of eprints. It can be downloaded from the [http://files.eprints.org/722/ Eprints File repository]. For more detailed information, please see the [[IRStats Technical Documentation]], though it is now somewhat out of date.&lt;br /&gt;
&lt;br /&gt;
== The front end ==&lt;br /&gt;
&lt;br /&gt;
===The Query Form===&lt;br /&gt;
&lt;br /&gt;
The main interface to IRStats is found at the following URL (given a repository base URL of myrepository.ac.uk):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
myrepository.ac.uk/cgi/irstats.cgi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will be presented with a form allowing you to select the parameters with which to generate a report.&lt;br /&gt;
&lt;br /&gt;
===Advanced Report Generation (get_view2 params)===&lt;br /&gt;
&lt;br /&gt;
The following will help if you wish to create queries by setting the CGI parameters by hand.&lt;br /&gt;
&lt;br /&gt;
There are three fundamental parameters that IRStats uses.  There are:&lt;br /&gt;
* A Date Range (actually 6 parameters for day, month and year for both start and end dates)&lt;br /&gt;
* A Set of EPrints&lt;br /&gt;
* A View&lt;br /&gt;
&lt;br /&gt;
However, in order to add functionality, the get_view2 page will convert a larger number of parameters into these three.  The following table shows all parameters and values, with square brackets denoting variables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Possible Values&lt;br /&gt;
! Notes&lt;br /&gt;
|- &lt;br /&gt;
| IRS_datechoice || period, range || Controls whether the 6 date range parameters or the single period parameter is used.&lt;br /&gt;
|-&lt;br /&gt;
| period || -[X]m, Q[Z][YYYY] || Used when IRS_datechoice=period.&amp;lt;br/&amp;gt;Where m and Q are literal characters, X is a positive integer, Z is an integer in the range 1 to 4 and YYYY is a four digit year.&amp;lt;br/&amp;gt;Examples: &amp;lt;dl&amp;gt;&amp;lt;dt&amp;gt;-4m&amp;lt;dd&amp;gt;Go back exactly four months from today's date&amp;lt;dt&amp;gt;Q32004&amp;lt;dd&amp;gt;Quarter 3, 2004&amp;lt;/dl&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| start_day, start_month, start_year, end_day, end_month, end_year || integers (1-31, 1-12, four digit respectively) || Used when IRS_datechoice=range.&amp;lt;br/&amp;gt; Note that if a day value is higher than the highest day in the chosen month, it will be treated as the highest day -- e.g. start_day=31&amp;amp;start_month=02 is seen as valid and equivalent to February 28th.  Note that start_day=99 is also valid! &lt;br /&gt;
|-&lt;br /&gt;
| IRS_epchoice || All, EPrint, [set_id] || Controls whether stats will be generated on all eprints, a single eprints, or a set of eprints.  The 'All' option is the only one that does not require extra parameters.  Note that 'set_id' is the id of a valid set as defined in the IRStats configuration.&lt;br /&gt;
|-&lt;br /&gt;
| eprint || [eprintid] || Used when IRS_epchoice=EPrint.&amp;lt;br/&amp;gt;Any valid eprint ID (integer).&lt;br /&gt;
|-&lt;br /&gt;
| [set_id]s || [set_id]_[set_member_code] || Used when IRS_epchoice=[set_id].&amp;lt;br/&amp;gt;  Best described through example: &amp;lt;dl&amp;gt;&amp;lt;dt&amp;gt;IRS_epchoice=divisions&amp;amp;divisionss=divisions_art&amp;lt;dd&amp;gt;Will generate a report on the art department, given a standard EPrints repository and IRStats config, where the subject id 'art' exists in the divisions tree in EPrints.&lt;br /&gt;
|-&lt;br /&gt;
| view || [view classname] || The classname of the IRStats::View perl module.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===The Dashboard Form===&lt;br /&gt;
&lt;br /&gt;
A dashboard is a collection of reports on a single item or set of items (e.g. all items by John Smith).  To access the form to generate a report, go to the url:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
myrepository.ac.uk/cgi/irstats.cgi?page=db&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The configuration file ==&lt;br /&gt;
&lt;br /&gt;
Documentation to follow.&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=IRStats_development&amp;diff=11545</id>
		<title>IRStats development</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=IRStats_development&amp;diff=11545"/>
		<updated>2015-11-12T18:57:45Z</updated>

		<summary type="html">&lt;p&gt;Pm705: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:IRStats]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 2px solid red; background-color: yellow;padding:10px&amp;quot;&amp;gt;This is IRStats1 documentation. IRStats1 is now out of support. You may have been looking for [[IRStats2]]&amp;lt;/div&amp;gt;&lt;br /&gt;
=IRStats Development Goals=&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* 'Browse View' style public stats.&lt;br /&gt;
* Non-public stats accessed via screen plugins.&lt;br /&gt;
* Default 'out-the-box' configuration.&lt;br /&gt;
* Generalisation to repository reporting tool.  Graphs available on e.g. citation counts.&lt;br /&gt;
* the ability to see users paths through the site.&lt;br /&gt;
* the ability to gather stats about how pages are used in eprints. Example: &amp;quot;how many times is this button used compared to this button&amp;quot; or &amp;quot;does anyone actually use this feature&amp;quot;&lt;br /&gt;
* new view, all-time downloads&lt;br /&gt;
* new view, like top ten table, but not limited to 10 (very useful according to one repository manager)&lt;br /&gt;
&lt;br /&gt;
==Back End==&lt;br /&gt;
* Full integration with EPrints Configuration.&lt;br /&gt;
* Replacement of ChartDirector with an open-source charting package.&lt;br /&gt;
* Anonymisation of downloaders to comply with privacy legislation.&lt;br /&gt;
* HTML produced with DOM objects (high priority - solves UTF8 issues)&lt;br /&gt;
* Import from apache logs&lt;br /&gt;
&lt;br /&gt;
==Wishlist==&lt;br /&gt;
Things which don't need to go in the first release, but we should keep in mind so we don't make them hard to add later.&lt;br /&gt;
* Recommender - people who downloaded this paper also looked at....&lt;br /&gt;
&lt;br /&gt;
==Bugs==&lt;br /&gt;
*removing a document leads to loss of stats.  Reported by Graham Stone, Huddersfield.&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=IRStats_Technical_Documentation&amp;diff=11544</id>
		<title>IRStats Technical Documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=IRStats_Technical_Documentation&amp;diff=11544"/>
		<updated>2015-11-12T18:57:07Z</updated>

		<summary type="html">&lt;p&gt;Pm705: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:IRStats]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 2px solid red; background-color: yellow;padding:10px&amp;quot;&amp;gt;This is IRStats1 documentation. IRStats1 is now out of support. You may have been looking for IRStats2&amp;lt;/div&amp;gt;&lt;br /&gt;
= Directory Structure =&lt;br /&gt;
&lt;br /&gt;
== /opt/irstats/bin ==&lt;br /&gt;
Contains the scripts needed to update the table.&lt;br /&gt;
&lt;br /&gt;
*daily_update.sh - Runs all the scripts in the right order.&lt;br /&gt;
*extract_metadata_from_archive.pl - Extracts eprint, author and group metadata from the repository by iterating over every eprint.&lt;br /&gt;
*update_table.pl - Filters and processes new entries in the accesslog to update the irstats_true_acesses_table.  Uses 'SearchParser.pm' and 'repeatscache'.&lt;br /&gt;
* convert_ip_to_host.pl - Attempts to convert ip addresses of the new entries in irstats_true_acesses_table to hostnames.  Uses 'host_updated' to keep track of where it got to last time.&lt;br /&gt;
&lt;br /&gt;
Note that most of these scripts probably need to be tidied up.  They were written in a hurry and were never polished.&lt;br /&gt;
&lt;br /&gt;
== /opt/irstats/cache ==&lt;br /&gt;
Contains cache files.  These should probably be deleted whenever the database is updated.&lt;br /&gt;
&lt;br /&gt;
== /opt/irstats/cgi ==&lt;br /&gt;
&lt;br /&gt;
Contains two scripts, 'get_view and 'stats'.&lt;br /&gt;
&lt;br /&gt;
*get_view returns the output of a IRStats::View (see below), which is currently a chunk of html or csv, but could be almost anything.&lt;br /&gt;
*stats is a handy cgi form that passes arguements to get_view&lt;br /&gt;
&lt;br /&gt;
== /opt/irstats/img ==&lt;br /&gt;
&lt;br /&gt;
Conceptually, where any images would be kept (e.g. national flags).  At the moment, only the img/graphs directory is used.  This is where generated graphs are stored.&lt;br /&gt;
&lt;br /&gt;
== /opt/irstats/cfg ==&lt;br /&gt;
&lt;br /&gt;
Where the configuration file and the text files containing repository data are held.&lt;br /&gt;
&lt;br /&gt;
=== The Configuration File ===&lt;br /&gt;
&lt;br /&gt;
irstats.cfg contains a number of configuration strings.  Here are some of the more important ones, with the default in brackets:&lt;br /&gt;
&lt;br /&gt;
*configuration_path (/opt/irstats/cfg/) - The path of the configuration directory.&lt;br /&gt;
*view_path (/opt/irstats/perl_lib/IRStats/View/) - The directory containing the Views.&lt;br /&gt;
*cache_path (/opt/irstats/cache/) - The directory in which to store cache files.&lt;br /&gt;
*graph_path (/opt/irstats/img/graphs/) - The directory in which to store graph images.&lt;br /&gt;
*graph_relative_url_path (/img/graphs/) - The url of the directory in which the graph file is from the point of view of the web browser.&lt;br /&gt;
*update_lock_filename (/opt/irstats/bin/.lock) - The name of the file that is created to prevent the update process running twice concurrently&lt;br /&gt;
*The names of the files used to store set information&lt;br /&gt;
**set_member_full_citations_file (/opt/irstats/cfg/irstats_set_member_full_citations.txt)&lt;br /&gt;
**set_member_short_citations_file (/opt/irstats/cfg/irstats_set_member_short_citations.txt)&lt;br /&gt;
**set_membership_file (/opt/irstats/cfg/irstats_set_membership.txt)&lt;br /&gt;
**set_member_codes_file (/opt/irstats/cfg/irstats_set_member_codes.txt)&lt;br /&gt;
**set_member_urls_file (/opt/irstats/cfg/irstats_set_member_urls.txt)&lt;br /&gt;
*Referrer Scope Labels (note, if you change these, you should also change them in the database)&lt;br /&gt;
**referrer_scope_1 (Internal)&lt;br /&gt;
**referrer_scope_2 (ECS)&lt;br /&gt;
**referrer_scope_3 (Search)&lt;br /&gt;
**referrer_scope_4 (External)&lt;br /&gt;
**referrer_scope_no_referrer (None)&lt;br /&gt;
*awstats_search_engines (/usr/local/awstats/wwwroot/cgi-bin/lib/search_engines.pm) - The path to the awstats search engine module&lt;br /&gt;
*repeats_filter_file (/opt/irstats/bin/repeatscache) - The file to maintain state between updates&lt;br /&gt;
*repeats_filter_timeout (86400) - repeat timeout in seconds (the amount of time there needs to be between two hits for them both to be recorded, initially set to 60*60*24)&lt;br /&gt;
&lt;br /&gt;
*repository_url = http://eprints.ecs.soton.ac.uk - the path to the repository&lt;br /&gt;
&lt;br /&gt;
*database configuration&lt;br /&gt;
**database_driver (mysql)&lt;br /&gt;
**database_server (localhost)&lt;br /&gt;
**database_name&lt;br /&gt;
**database_user&lt;br /&gt;
**database_password&lt;br /&gt;
&lt;br /&gt;
*database_id_columns ([ requester_organisation, requester_host, referrer_scope, search_engine, search_terms, referring_entity_id ]) - The columns in the database that have a UID rather than data.  These need seperate tables in which to store the data.&lt;br /&gt;
&lt;br /&gt;
*Various table names and parts of names&lt;br /&gt;
**database_eprints_access_log_table (accesslog) ##Perhaps remove after update rewrite.&lt;br /&gt;
**database_main_stats_table (irstats_true_accesses_table)&lt;br /&gt;
**database_column_table_prefix (irstats_column_)&lt;br /&gt;
**database_set_table_prefix (irstats_set_)&lt;br /&gt;
**database_set_table_code_suffix (_code)&lt;br /&gt;
**database_set_table_citation_suffix (_citation)&lt;br /&gt;
&lt;br /&gt;
*id_parameters ([ start_date, end_date, eprints, view ]) - the parameters that are used to uniquely identify a view&lt;br /&gt;
*host_lookup_temp_dir (/opt/irstats/bin/convert_hosts_temp_files/) - The directory in which to store temp files for host lookups&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== /opt/irstats/perl_lib ==&lt;br /&gt;
&lt;br /&gt;
Contains all the irstats classes.&lt;br /&gt;
&lt;br /&gt;
= IRStats Classes =&lt;br /&gt;
&lt;br /&gt;
Note that the leading IRStats:: has been left out for brevity.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
This object acts as an interface to the configuration file.&lt;br /&gt;
=== Configuration Contstants ===&lt;br /&gt;
*$configuration_file - The path to the configuration file.&lt;br /&gt;
=== Functions ===&lt;br /&gt;
*new - Parses the configuration file and returns a new object.&lt;br /&gt;
*get_value(config_id) - Returns a value.&lt;br /&gt;
&lt;br /&gt;
== Params ==&lt;br /&gt;
This object holds the parameters that are used to generate the statistics.  This is passed around the system.&lt;br /&gt;
=== Configuration Constants ===&lt;br /&gt;
*$defaults - Any default parameters you wish to set.&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
*new(Configuration, [ CGI_object | params_hash ]) - returns new object&lt;br /&gt;
*mask(params_hash) - used when you want to temporarily overwrite parameter(s).  Overwrites values with contents of params_hash.  Overwritten values get pushed onto a stack.&lt;br /&gt;
*unmask - Sets parameters back to how they were before the last mask.&lt;br /&gt;
*get(param_name) - returns the value of a single parameter.&lt;br /&gt;
*create_id - Uses MD5 to create a unique ID from the id_params (see Constants above).  This is called whenever get('id') is called.&lt;br /&gt;
&lt;br /&gt;
== DatabaseInterface ==&lt;br /&gt;
This object does what it says on the tin.  Any access to the database is done though it.&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
*new(Configuration) - returns object.&lt;br /&gt;
*retreive_set_names() - returns a list of eprint sets.  This can be used to verify cgi input.&lt;br /&gt;
*get_membership(eprint_id, set_name) - For a given eprint ID, which of a named set does it belong to.  For example, we can find out which authors eprint 12614 has by get_membership(12614, 'author').&lt;br /&gt;
*get_citation(id, set, length) - returns a citation.  Every set member (eprint, author, group) has two citations.  short and full.  We only return a short citation if length == 'short'.  So, to get the short citation of a group 3: get_citation(3,'group','short').&lt;br /&gt;
*get_stats(params_object, query_params_hash) - returns a dbi object containing the stats we are interested.  i.e. the params_object's date range and eprints sets, and only the columns in query params hash.  The query params hash can contain the following key/value pairs&lt;br /&gt;
**columns =&amp;gt; column_name_array - Which columns are we interested in?&lt;br /&gt;
**order =&amp;gt; column_name - A hash containing a column name and directions (ASC or DESC)&lt;br /&gt;
**limit =&amp;gt; int - How many results to return&lt;br /&gt;
**group_by =&amp;gt; column_name - if we need to group by a column.&lt;br /&gt;
**where =&amp;gt; where_hash_array - if additional logic needs to be applied, this array contains hashes containing a column name, an operator and a value.  These are ANDed together.&lt;br /&gt;
*check_tables() - If any IRStats tables are missing, this function will create them.&lt;br /&gt;
*insert_main_table_row(column_array) - inserts the values in the array into the main table (taking into account any tables that contain only IDs).&lt;br /&gt;
*do_sql(sql_query_string) - takes a string and performs a query, returning the dbi object containing the results.  This is the only point where sql is sent to the database.&lt;br /&gt;
&lt;br /&gt;
== Date ==&lt;br /&gt;
A date object was implemented because there were some specific things that needed to be done with dates.&lt;br /&gt;
&lt;br /&gt;
===Functions===&lt;br /&gt;
*new(date_hash) - Creates a new date object when passed a hash with the keys 'day', 'month' and 'year'.&lt;br /&gt;
*validate() - If the date is not valid, it will be modified to a sensible value.  E.G. if it's Feb 30th, it will be modified to Feb 29th or 28th, dependant on if it's a leap year.&lt;br /&gt;
*set(part_name, int) - Sets part of the date ('year','month' or 'day') to a specific value.&lt;br /&gt;
*decrement(period) - increments the date by a period ('day', 'week', 'month', 'quarter', 'year').  Calls the mod_date function, which does the muscle work.&lt;br /&gt;
*increment(period) - decrements by calling mod_date.&lt;br /&gt;
*part(part_name, style - Returns the day, month or year.  For month, if style=='text', returns a three letter string, otherwise returns an integer.  For year, if style=='short', returns the last two digits, otherwise returns all four.&lt;br /&gt;
*difference(date_object) - returns the difference in days between itself and another date.&lt;br /&gt;
*less_than(date_object) - compares itself to another date object.  Returns 1 if it's less than it, otherwise returns 0.&lt;br /&gt;
*greater_than(date_object) - compares itself to another date object.  Returns 1 if it's greater than it, otherwise returns 0.&lt;br /&gt;
*month_name() - returns the three letter string of the month.&lt;br /&gt;
*render(format_string) - returns a date string.  Format can be:&lt;br /&gt;
**'short' - Calls render_abbreviated - returns a date like this: 05-Jul-77&lt;br /&gt;
**'numerical' (default) - Calls render_numerical - returns a date like this: 19770705&lt;br /&gt;
*clone - returns an new, identical date object.&lt;br /&gt;
&lt;br /&gt;
== Cache ==&lt;br /&gt;
The interface to the cache.&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
*new(id) - takes the ID of the params object we're using at the moment.&lt;br /&gt;
*exists() - returns true if there's a cached file, false if there isn't one.&lt;br /&gt;
*write(visualisation_object) - writes the data to the cache file.&lt;br /&gt;
*read() - returns the data from the cache.&lt;br /&gt;
&lt;br /&gt;
== Periods ==&lt;br /&gt;
The Periods object is used when you want to break a daterange down into sub-ranges.  Used with the params-&amp;gt;mask() function, stats can be retrieved for periods inside a date range.&lt;br /&gt;
===Functions===&lt;br /&gt;
*new(start_date_obj, end_date_obj) - doesn't do anything, just returns the object.&lt;br /&gt;
&lt;br /&gt;
The following functions all return an array of hashes.  Each hash has the keys 'start_date' and 'end_date', and the values are both IRStats::Date objects.&lt;br /&gt;
&lt;br /&gt;
*calandar_months - Returns full months (each element starts on the 1st, and ends on the last day).&lt;br /&gt;
*months - Returns month periods (if the start_date is the 15th, then each period starts on the 15th and ends on the 14th of the next month - except the last period, which only has about a 1/30 chance of doing so).&lt;br /&gt;
*weeks - returns 7-day periods (except the last, which has a 1/7 chance of being 7 days long).&lt;br /&gt;
*days - returns single days (for each period, the start_date and end_date are the same).&lt;br /&gt;
&lt;br /&gt;
== UserInterface::Controls ==&lt;br /&gt;
This is used to generate the drop boxes in the stats cgi script.&lt;br /&gt;
===Functions===&lt;br /&gt;
new(params_obj, database_interface_object) - returns the object.&lt;br /&gt;
start_date_control() - returns the html for the three drop-boxes for selecting the year, month and day of the start date.&lt;br /&gt;
end_date_control() - return the html for the three drop-boxes for selecting the year, month and day of the end date.&lt;br /&gt;
eprint_control() - returns the html for the eprints text box.&lt;br /&gt;
drop_box(id, contents_array) - returns the html for a drop box containing what is in the array (each array element is a hash containing 'value' and 'display').&lt;br /&gt;
&lt;br /&gt;
== View ==&lt;br /&gt;
A view processes the stats data filtered by the parameters and creates a visualisation.  It is intended that savvy users create their own views.&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
All views inherit:&lt;br /&gt;
*new(params_obj, database_interface_object) - returns the object.&lt;br /&gt;
*render - calls populate, then returns whatever the visualisation renders&lt;br /&gt;
All visualisations must implement:&lt;br /&gt;
*new - passes arguments to superclass, then calls 'initialise'.&lt;br /&gt;
*initialise - the Configuration Constants are set here.&lt;br /&gt;
*populate - The engine that powers IRStats.&lt;br /&gt;
&lt;br /&gt;
=== View::DownloadCountHTML ===&lt;br /&gt;
The DownloadCountHTML is an extremely simple view.  It retrieves one row from the database and does no processing, making it ideal for a quick walkthrough:&lt;br /&gt;
&lt;br /&gt;
==== Housekeeping ====&lt;br /&gt;
At the top of the file, we need:&lt;br /&gt;
 package IRStats::View::DownloadCountHTML;&lt;br /&gt;
 use strict;&lt;br /&gt;
 use warnings;&lt;br /&gt;
Now, which modules will we use.  I've included perchardir, the graph making package, even though we're not using it.&lt;br /&gt;
 use IRStats::DatabaseInterface;&lt;br /&gt;
 use IRStats::Cache;&lt;br /&gt;
 use IRStats::Visualisation::HTML;&lt;br /&gt;
 use IRStats::View;&lt;br /&gt;
 use perlchartdir;&lt;br /&gt;
And link to superclass. &lt;br /&gt;
 our @ISA = qw/ IRStats::View /;&lt;br /&gt;
&lt;br /&gt;
==== Configuration Constants ====&lt;br /&gt;
We aren't actually interested in any columns, just in the count, but we put that in the columns array anyway.&lt;br /&gt;
We also create our visualisation here.&lt;br /&gt;
 sub initialise&lt;br /&gt;
 {&lt;br /&gt;
        my ($self) = @_;&lt;br /&gt;
        $self-&amp;gt;{'sql_params'} = {columns =&amp;gt; [ 'COUNT' ]};&lt;br /&gt;
        $self-&amp;gt;{'visualisation'} = IRStats::Visualisation::HTML-&amp;gt;new();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== new ====&lt;br /&gt;
The new function shouldn't ever need to be any different from this:&lt;br /&gt;
 sub new&lt;br /&gt;
 {&lt;br /&gt;
        my( $class, $params, $database ) = @_;&lt;br /&gt;
        my $self = $class-&amp;gt;SUPER::new($params, $database);;&lt;br /&gt;
        $self-&amp;gt;initialise();&lt;br /&gt;
        return $self;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== populate ====&lt;br /&gt;
Almost every populate function should start by checking the cache.&lt;br /&gt;
&lt;br /&gt;
 sub populate&lt;br /&gt;
 {&lt;br /&gt;
    my ($self) = @_;&lt;br /&gt;
    my $cache = IRStats::Cache-&amp;gt;new($self-&amp;gt;{'params'}-&amp;gt;get('id'));&lt;br /&gt;
    if ($cache-&amp;gt;exists)&lt;br /&gt;
    {&lt;br /&gt;
        $self-&amp;gt;{'visualisation'} = $cache-&amp;gt;read();&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
Next, we have to retreive from the database:&lt;br /&gt;
&lt;br /&gt;
    my $query = $self-&amp;gt;{'database'}-&amp;gt;get_stats(&lt;br /&gt;
            $self-&amp;gt;{'params'},&lt;br /&gt;
            $self-&amp;gt;{'sql_params'}&lt;br /&gt;
            );&lt;br /&gt;
Now we process them.  In this case, we don't even need a loop as we know there's only going to be one row.  We'll stick the result straight into some html, and save it.  Don't forget that if there isn't any data, you still have to output something.&lt;br /&gt;
    my @row = $query-&amp;gt;fetchrow_array();&lt;br /&gt;
    my $html = '&amp;lt;span class=&amp;quot;irstats_view_fulltextcounthtml&amp;quot;&amp;gt;' . ($row[1] ? $row[1] : '0') . &amp;quot;&amp;lt;/span&amp;gt;&amp;quot;;&lt;br /&gt;
A little housekeeping:&lt;br /&gt;
    $query-&amp;gt;finish();&lt;br /&gt;
Pop the data into the visualisation:&lt;br /&gt;
    $self-&amp;gt;{'visualisation'}-&amp;gt;set('html',$html);&lt;br /&gt;
Finally, we should write to the cache so we don't have to query the database next time.&lt;br /&gt;
    $cache-&amp;gt;write($self-&amp;gt;{'visualisation'});&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
And that's a really simple view.&lt;br /&gt;
&lt;br /&gt;
=== Using Periods ===&lt;br /&gt;
&lt;br /&gt;
If we wanted to break our daterange into periods, we'd need to do something like this:&lt;br /&gt;
&lt;br /&gt;
 my $periods = IRStats::Periods-&amp;gt;new($self-&amp;gt;{'params'}-&amp;gt;{'start_date'},$self-&amp;gt;{'params'}-&amp;gt;{'end_date'});&lt;br /&gt;
 foreach my $period ( @{$periods-&amp;gt;calandar_months()} )&lt;br /&gt;
 {&lt;br /&gt;
    $self-&amp;gt;{'params'}-&amp;gt;mask($period);&lt;br /&gt;
    my $query = $self-&amp;gt;{'database'}-&amp;gt;get_stats(&lt;br /&gt;
            $self-&amp;gt;{'params'},&lt;br /&gt;
            $self-&amp;gt;{'sql_params'}&lt;br /&gt;
    );&lt;br /&gt;
    $self-&amp;gt;{'params'}-&amp;gt;unmask();&lt;br /&gt;
    #process and put into variables&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Visualisation ==&lt;br /&gt;
Currently Visualisations are Graph, Table or HTML.  These are what the user will look at in the broswer or download (in the case of CSV).&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
All visualisations inherit:&lt;br /&gt;
*new(data_hash) - a hash can optionally be passed containing the values that would otherwise be set using the 'set' function.&lt;br /&gt;
*set(param_name, value) - sets something to something - see subclasses&lt;br /&gt;
&lt;br /&gt;
All visualisations must implement:&lt;br /&gt;
*render() - returns what will be passed to the script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Visualisation::HTML ==&lt;br /&gt;
The simplest visualisation.  Just a chunk of html.&lt;br /&gt;
&lt;br /&gt;
To Populate:&lt;br /&gt;
*set('html', html_string) - takes the html as a string.&lt;br /&gt;
&lt;br /&gt;
== Visualisation::Table ==&lt;br /&gt;
The Visualisation::Table currently just passes the buck to its superclass.&lt;br /&gt;
&lt;br /&gt;
There are currently three table Visualisations:&lt;br /&gt;
&lt;br /&gt;
=== Visualisation::Table::CSV ===&lt;br /&gt;
Returns a CSV table.&lt;br /&gt;
&lt;br /&gt;
To Populate:&lt;br /&gt;
*set('headings', headings_arrayref) - pass an array containing headings.&lt;br /&gt;
*set('rows', rows_arrayref) - an array of arrayrefs, each referencing a row of data.&lt;br /&gt;
&lt;br /&gt;
=== Visualisation::Table::HTML ===&lt;br /&gt;
A basic HTML table.&lt;br /&gt;
&lt;br /&gt;
To Populate:&lt;br /&gt;
*set('columns', headings_arrayref) - pass an array containing column headings.&lt;br /&gt;
*set('rows', rows_arrayref) - an array of arrayrefs, each referencing a row of data.&lt;br /&gt;
And then optionally&lt;br /&gt;
*set('totals', totals_arrayref) - an array of totals to put at the bottom of the table.&lt;br /&gt;
&lt;br /&gt;
=== Visualisation::Table::HTML_Columned ===&lt;br /&gt;
An HTML table that is rendered in several columns.&lt;br /&gt;
==== Configuration Constants ====&lt;br /&gt;
$default_number_of_rows - an int representing the maximum number of rows the table should have.  This is to prevent sending huge tables to browsers which may not be able to handle it.&lt;br /&gt;
&lt;br /&gt;
==== Overridden Functions ====&lt;br /&gt;
*new(data_hash, number_of_rows) - Both data_hash and number_of_rows are optional.  Both can be set with 'set'.&lt;br /&gt;
&lt;br /&gt;
To Populate:&lt;br /&gt;
*set('columns', headings_arrayref) - pass an array containing column headings.&lt;br /&gt;
*set('rows', rows_arrayref) - an array of arrayrefs, each referencing a row of data.&lt;br /&gt;
*set('number_of_rows', int) - set the maximum number of rows the table should have.&lt;br /&gt;
&lt;br /&gt;
== Visualisation::Graph ==&lt;br /&gt;
The graph objects all use Chart Director to generate graphs.  The Graph object initialised the colours that the graph may be using.&lt;br /&gt;
&lt;br /&gt;
Every graph must be created with at least the filename:&lt;br /&gt;
*new({filename =&amp;gt; string}) - the filename comes from the ID of the param object.&lt;br /&gt;
&lt;br /&gt;
=== Configuration Constants ===&lt;br /&gt;
These are set in the 'new' function.&lt;br /&gt;
*$graph_dir - the path to the directory where the image file will be saved.&lt;br /&gt;
*$url_relative - this will have the filename added to the end and put in the img html tag.&lt;br /&gt;
&lt;br /&gt;
=== Sub Classes ===&lt;br /&gt;
Note that in the Visualisation/Graph/ directory, there is 'GraphLegend.pm'.  This is used to create the html for the graph legends.&lt;br /&gt;
&lt;br /&gt;
====Visualisation::Graph::Bar.pm====&lt;br /&gt;
A Bar Graph.  It can have one or more bars in each division of the x axis.&lt;br /&gt;
&lt;br /&gt;
To implement:&lt;br /&gt;
*set('title',string) - The title that will be in the graph image.&lt;br /&gt;
*set('x_title',string) - The title of the x axis.&lt;br /&gt;
*set('y_title',string) - The title of the y axis.&lt;br /&gt;
*set('x_labels',array_ref) - an array containing the labels for the x axis&lt;br /&gt;
*set('data_series, array_ref) - an array of arrayrefs, referencing data for each set of bars&lt;br /&gt;
&lt;br /&gt;
====Visualisation::Graph::Line.pm====&lt;br /&gt;
A Line Graph.  There can be many lines on it&lt;br /&gt;
&lt;br /&gt;
To implement:&lt;br /&gt;
*set('title',string) - The title that will be in the graph image.&lt;br /&gt;
*set('x_title',string) - The title of the x axis.&lt;br /&gt;
*set('y_title',string) - The title of the y axis.&lt;br /&gt;
*set('x_labels',array_ref) - an array containing the labels for the x axis&lt;br /&gt;
*set('data_series, array_ref) - an array of arrayrefs, referencing data for each line&lt;br /&gt;
&lt;br /&gt;
====Visualisation::Graph::Pie.pm====&lt;br /&gt;
A Pie Graph&lt;br /&gt;
&lt;br /&gt;
To implement:&lt;br /&gt;
*set('title',string) - The title that will be in the graph image.&lt;br /&gt;
*set('data_series, array_ref) - an array of hashrefs, {data =&amp;gt; int, citation =&amp;gt; string}, one for each slice&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=IRStats&amp;diff=11543</id>
		<title>IRStats</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=IRStats&amp;diff=11543"/>
		<updated>2015-11-12T18:55:50Z</updated>

		<summary type="html">&lt;p&gt;Pm705: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:IRStats]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 2px solid red; background-color: yellow;padding:10px&amp;quot;&amp;gt;This is IRStats1 documentation. IRStats1 is now out of support. You may have been looking for IRStats2&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IRStats is a flexible statistics package which allows easy processing of accesses to fulltext documents of eprints. It can be downloaded from the [http://files.eprints.org/722/ Eprints File repository]. For more detailed information, please see the [[IRStats Technical Documentation]], though it is now somewhat out of date.&lt;br /&gt;
&lt;br /&gt;
== The front end ==&lt;br /&gt;
&lt;br /&gt;
===The Query Form===&lt;br /&gt;
&lt;br /&gt;
The main interface to IRStats is found at the following URL (given a repository base URL of myrepository.ac.uk):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
myrepository.ac.uk/cgi/irstats.cgi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will be presented with a form allowing you to select the parameters with which to generate a report.&lt;br /&gt;
&lt;br /&gt;
===Advanced Report Generation (get_view2 params)===&lt;br /&gt;
&lt;br /&gt;
The following will help if you wish to create queries by setting the CGI parameters by hand.&lt;br /&gt;
&lt;br /&gt;
There are three fundamental parameters that IRStats uses.  There are:&lt;br /&gt;
* A Date Range (actually 6 parameters for day, month and year for both start and end dates)&lt;br /&gt;
* A Set of EPrints&lt;br /&gt;
* A View&lt;br /&gt;
&lt;br /&gt;
However, in order to add functionality, the get_view2 page will convert a larger number of parameters into these three.  The following table shows all parameters and values, with square brackets denoting variables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Possible Values&lt;br /&gt;
! Notes&lt;br /&gt;
|- &lt;br /&gt;
| IRS_datechoice || period, range || Controls whether the 6 date range parameters or the single period parameter is used.&lt;br /&gt;
|-&lt;br /&gt;
| period || -[X]m, Q[Z][YYYY] || Used when IRS_datechoice=period.&amp;lt;br/&amp;gt;Where m and Q are literal characters, X is a positive integer, Z is an integer in the range 1 to 4 and YYYY is a four digit year.&amp;lt;br/&amp;gt;Examples: &amp;lt;dl&amp;gt;&amp;lt;dt&amp;gt;-4m&amp;lt;dd&amp;gt;Go back exactly four months from today's date&amp;lt;dt&amp;gt;Q32004&amp;lt;dd&amp;gt;Quarter 3, 2004&amp;lt;/dl&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| start_day, start_month, start_year, end_day, end_month, end_year || integers (1-31, 1-12, four digit respectively) || Used when IRS_datechoice=range.&amp;lt;br/&amp;gt; Note that if a day value is higher than the highest day in the chosen month, it will be treated as the highest day -- e.g. start_day=31&amp;amp;start_month=02 is seen as valid and equivalent to February 28th.  Note that start_day=99 is also valid! &lt;br /&gt;
|-&lt;br /&gt;
| IRS_epchoice || All, EPrint, [set_id] || Controls whether stats will be generated on all eprints, a single eprints, or a set of eprints.  The 'All' option is the only one that does not require extra parameters.  Note that 'set_id' is the id of a valid set as defined in the IRStats configuration.&lt;br /&gt;
|-&lt;br /&gt;
| eprint || [eprintid] || Used when IRS_epchoice=EPrint.&amp;lt;br/&amp;gt;Any valid eprint ID (integer).&lt;br /&gt;
|-&lt;br /&gt;
| [set_id]s || [set_id]_[set_member_code] || Used when IRS_epchoice=[set_id].&amp;lt;br/&amp;gt;  Best described through example: &amp;lt;dl&amp;gt;&amp;lt;dt&amp;gt;IRS_epchoice=divisions&amp;amp;divisionss=divisions_art&amp;lt;dd&amp;gt;Will generate a report on the art department, given a standard EPrints repository and IRStats config, where the subject id 'art' exists in the divisions tree in EPrints.&lt;br /&gt;
|-&lt;br /&gt;
| view || [view classname] || The classname of the IRStats::View perl module.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===The Dashboard Form===&lt;br /&gt;
&lt;br /&gt;
A dashboard is a collection of reports on a single item or set of items (e.g. all items by John Smith).  To access the form to generate a report, go to the url:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
myrepository.ac.uk/cgi/irstats.cgi?page=db&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The configuration file ==&lt;br /&gt;
&lt;br /&gt;
Documentation to follow.&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Community_Contributions_Day_November_2015&amp;diff=11542</id>
		<title>Community Contributions Day November 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Community_Contributions_Day_November_2015&amp;diff=11542"/>
		<updated>2015-11-12T18:50:52Z</updated>

		<summary type="html">&lt;p&gt;Pm705: /* Group 2: Technical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has been created in the run-up to the EPrints Community Contributions day on November 18th, 2015&lt;br /&gt;
&lt;br /&gt;
== Objectives ==&lt;br /&gt;
&lt;br /&gt;
This event is intended to bring the all parts of the EPrints community together to improve the software and documentation.  We hope to achieve:&lt;br /&gt;
&lt;br /&gt;
* code improvements&lt;br /&gt;
* wiki curation&lt;br /&gt;
* training and demonstration videos&lt;br /&gt;
* community members interacting and training each other&lt;br /&gt;
&lt;br /&gt;
== Event Run Up ==&lt;br /&gt;
&lt;br /&gt;
Things to do before the event:&lt;br /&gt;
&lt;br /&gt;
* Register for the Wiki via the EPrints LDAP server at [http://trac.eprints.org/ldap/ http://trac.eprints.org/ldap/]&lt;br /&gt;
* If you have an a suggestion for an interest group, add it below&lt;br /&gt;
* Please add your name to an interest group that looks interesting.&lt;br /&gt;
&lt;br /&gt;
== On the Day ==&lt;br /&gt;
&lt;br /&gt;
=== Independent Contribution ===&lt;br /&gt;
&lt;br /&gt;
If contributors have particular projects they want to work on on their own and post back to the group, then there's no need to join an Interest Group.  Add you name below and a short text about what you plan to contribute.&lt;br /&gt;
&lt;br /&gt;
Members:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Interest Groups ===&lt;br /&gt;
&lt;br /&gt;
Any contribution that can be made is welcome, whether it's a minor edit to a wiki page or a bugfix.  However, it may be profitable to run a number of discussion groups in the morning around areas of interest.  These discussion groups can then set up work to be accomplished in the afternoon.&lt;br /&gt;
&lt;br /&gt;
* 10:00 - 11:00 Interest groups meet (google hangout?), make decisions and assign tasks&lt;br /&gt;
** What problem are we solving?&lt;br /&gt;
** How will we work?&lt;br /&gt;
** Who will do what?&lt;br /&gt;
* 11:00 - 13:00 Morning Contributions&lt;br /&gt;
* 14:00 - 16:00 Afternoon Contributions&lt;br /&gt;
* 16:00 - 16:30 Interest groups wrap-up and reporting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Each interest group should have a leader who is responsible for chairing the initial meeting, making sure the logistics run smoothly and creating some kind of record of the day (blog post, wiki page, etc).&lt;br /&gt;
&lt;br /&gt;
==== Group 1: Community Training Course ====&lt;br /&gt;
&lt;br /&gt;
This interest group is concerned with the wiki page at http://wiki.eprints.org/w/EPrints_Training_Course.&lt;br /&gt;
&lt;br /&gt;
Areas of Discussion&lt;br /&gt;
* Standard layout and content for training video pages&lt;br /&gt;
* Content of the training course&lt;br /&gt;
&lt;br /&gt;
Members:&lt;br /&gt;
* Adam Field&lt;br /&gt;
* Alan Stiles (alternatively contributing to Group 2)&lt;br /&gt;
* Lizz Jennings (likely to switch between this and Group 2)&lt;br /&gt;
* Mick Eadie&lt;br /&gt;
&lt;br /&gt;
==== Group 2: Technical ====&lt;br /&gt;
&lt;br /&gt;
This interest group will be looking at Github, folding in pull requests and evaluating bugs.&lt;br /&gt;
&lt;br /&gt;
Members&lt;br /&gt;
* Jiadi Yao&lt;br /&gt;
* Alan Stiles (alternative contributing to Group 1)&lt;br /&gt;
* Lizz Jennings (likely to switch between this and Group 1)&lt;br /&gt;
* Mick Eadie&lt;br /&gt;
* Patrick McSweeney&lt;br /&gt;
&lt;br /&gt;
==== Group 3: Community Contributions ====&lt;br /&gt;
&lt;br /&gt;
This group will look at how barriers to community contributions (at all levels) can be lowered and community engagement can be promoted.&lt;br /&gt;
&lt;br /&gt;
Members&lt;br /&gt;
&lt;br /&gt;
* Rachel Proudfoot&lt;br /&gt;
&lt;br /&gt;
==== Group 4: Best Practices and Processes ====&lt;br /&gt;
&lt;br /&gt;
This group is concerned with community best practices and processes in EPrints.&lt;br /&gt;
&lt;br /&gt;
Suggested subtopics - Impact, Open Access - drafting community requirements for a standard functionality in EPrints.  What else might we tackle on the day?&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1YaAFGG6KP6GgN9y2INYjCen1fVZ_XQKxghdW58TjYLc/edit Google Doc link]&lt;br /&gt;
&lt;br /&gt;
Members:&lt;br /&gt;
* Valerie McCutcheon ( I can lead this but happy for someone else to do it)&lt;br /&gt;
&lt;br /&gt;
=== Logistics ===&lt;br /&gt;
&lt;br /&gt;
== Post Event ==&lt;/div&gt;</summary>
		<author><name>Pm705</name></author>
		
	</entry>
</feed>