Difference between revisions of "New Features in EPrints 3.2"

From EPrints Documentation
Jump to: navigation, search
(Writing A Storage Plugin)
m (adding to new testing category)
 
(77 intermediate revisions by 7 users not shown)
Line 1: Line 1:
= New Features =
+
[[Category:Releases]]
 +
[[Category:Testing]]
 +
{{releasenotes}}
  
== Plug-in Based Storage Layer ==
+
==NOTE==
 +
* We now recommend LibXML in preference to GDOME. It's less buggy, and easier to install.
 +
* Upgrade may take several hours as it cleans up the unicode issues in the database.
  
The idea here is to separate the storage layer from the direct control of the repository and instead enable plugins to be written conforming to a common API which store and retrieve the relevant data upon request.
+
==Database==
 +
* In addition to MySQL, EPrints 3.2 now supports Oracle and Postgres
  
=== Influences ===
+
==API==
 +
* This release features a formal API. Not all functionality is yet available via the API, but will be added slowly and carefully in future releases.
 +
* The bugbear of EPrints internals, EPrints::Session has been merged into EPrints::Repository. All old code will still work.
  
The main key influences for this work come from the current Open Storage and Interoperability movement which became very clear at the [Open Repositories Conference 2008|http://or08.ecs.soton.ac.uk]. Both movements are being well backed by both [Sun|http://www.sun.com] and [Microsoft|http://www.microsoft.com] who are looking at Hardware and Software solutions respectively. Many projects are also doing a lot of promotion in this area not just for their own gain but also for that of the community include:
+
==Documents==
 +
* Thumbnails are now documents in their own right
 +
* Built in document-format icons, as well as those you configure yourself
 +
* Thumbnailing now happens in the background as part of the indexer process
  
* The Sun Honeycomb Project - Are promoting the use of an Open Storage layer for repository softwares (Eprints, Fedora and DSpace)
+
==Deposit Interface==
* [The Common Repository Interoperability Group|http://www.ukoln.ac.uk/repositories/digirep/index/CRIG] (CRIG) - Promote interopability through common APIs/Schemas and Open Storage.
+
* Edit Locking locks records reduces risk of 2 people editing a record at the same time.
* [Preserv | http://preserv.eprints.org] - Promoting and Developing Preservation tools/techniques for digital data in intitutional repositories. Both Interoperability and Open Storage lend themselves well towards digital preservation.
+
* Option to extract metadata and images from OpenXML files (.docx and .pptx)
 +
* Offers options to users and editors on the deposit screen if there are problems
 +
* Document upload screen has been redesgined to be clearer.
 +
* Split document uploading into adding a new document and editing existing documents
 +
* The documents inside an EPrint may now be re-ordered
 +
* Progress bar on file upload
 +
* Document upload methods (file, url, zip etc.) are now plugin-based and can be extended
 +
* When attempting to deposit an eprint with problems show Save button
 +
* Made it an option to provide action buttons top and bottom in workflow
 +
* Added support for "input_boxes" property to the workflow, so you can now specify the number of input boxes to show for multiple fields
 +
* epc: no longer crashes eprints on bad scripts, just reports an error
  
=== How it Works ===
+
==Search & Indexing==
 +
* The search library has been entirely re-written to reduce use of cache tables and to improve performance. Simple searches are now over ten times faster.
 +
* The indexer now uses plugins, so you can schedule other tasks, like thumbnail conversion, to be done in the background.
 +
* Added config option "cache_max" to limit the cachemap tables used
 +
* Added --clear option to cleanup old/broken indexer jobs
  
* 1 New Core EPrint Object - FileObj
+
==Unicode==
This contains all the file specific properties and a get_parent object which retrieves the Document object (from which the same method call returns the EPrint Object.
+
* EPrints use of unicode has been significantly improved.
* A Storage Controller
+
Is where the selection of the appropriate storage plug-in takes place based upon a set of user defined rules, e.g. files bigger than 1Gb use this stoage plug-in, user submitted files (pdf's) use these 3 plug-ins to be stored in several places etc etc.
+
* A Set of Storage Plug-Ins
+
Endless amounts of plug-ins can be written to handle submission directly to local disk/remote servers/cloud services and even other repositories.  
+
  
=== The File Object - FileObj ===
+
==REST==
 +
* A "REST" style interface to objects, via /rest/eprint/23/title.txt, for example. This can also support "PUT" to alter fields!
  
Location: perl_lib/EPrints/DataObj/File.pm
+
==SWORD2==
 +
* SWORD2 (1.3 Specification) is supported.
  
This class contains the technical metadata associated with a file. A file is a sequence of bytes stored in the storage layer (a "stored object"). Utility methods for storing and retrieving the stored object from the storage layer are made available.
+
==Linked Data Support==
 +
* Ability to establish arbitrary relations between objects or provide additional metadata in triple form.
  
Revision numbers on File work slightly differently to other objects. A File is only revised when it's stored object is changed and not when changes to it's metadata are made.
+
==Collections Support==
 +
* Collections can be built via use of linked data, object ids and relationships.  
  
This class is a subclass of EPrints::DataObj::SubObject
+
== Semantic Web / Linked Data (RDF) ==
  
CORE FIELDS
+
We have made a (difficult) decision to move these features to 3.2.1 (due out soon after 3.2.0) because testing showed it caused a significant slow down.
  
  fileid
+
We're rewriting it to do the same thing but with much less overhead!
    Unique identifier for this file.
+
 
+
  rev_number (int)
+
    The number of the current revision of this file.
+
 
+
  datasetid
+
    Id of the dataset of the parent object.
+
 
+
  objectid
+
    Id of the parent object.
+
 
+
  bucket
+
    Name of the bucket the file is in.
+
 
+
  filename
+
    Name of the file (may contain directory separators).
+
 
+
  mime_type
+
    MIME type of the file (e.g. "image/png").
+
 
+
  hash
+
    Check sum of the file.
+
 
+
  hash_type
+
    Name of check sum algorithm used (e.g. "MD5").
+
 
+
  filesize
+
    Size of the file in bytes.
+
 
+
  mtime
+
    Last modification time of the file.
+
  
METHODS
+
==Storage Layer==
 +
* Now uses plugins to store files
 +
** Local Filesystem
 +
** Amazon S3
 +
** Sun Cloud Storage
  
Constructor Methods
+
==Speed==
 +
* Search & Indexing much faster
 +
* Import is faster
 +
* Other parts of the code have been audited for speed, and optimised.
  
  $dataobj = EPrints::DataObj::File->new_from_filename( $session, $dataobj, $bucket, $filename )
+
==Import==
    Convenience method to get an existing File object for $filename stored in the $bucket in $dataobj.
+
* Modified Import UI to allow a per-plugin/single/bulk workflow
    Returns undef if no such record exists.
+
 
+
  $dataobj = EPrints::DataObj::File->create_from_data( $session, $data [, $dataset ] )
+
    Create a new File record using $data. If "_filehandle" is defined in $data it will be read from and stored.
+
  
Class Methods
+
==EPC & EPrints Script==
 +
* New EPC tag: epc:debug, which is like print but sends the XML to STDERR for debugging purposes.
 +
* New EPC tag: epc:set which defines a variable inside it's scope.
 +
* Improvements to the epc:foreach processing (better handling of multiple object types in lists)
 +
* Added "limit" option to epc:foreach to limit the number
 +
* Inside <epc:foreach> blocks an $index variable is set, allowing you to test which interation it's on.
 +
* New EPScript methods: citation_link, dataset, related_objects, url, doc_size, is_public, thumbnail_url, preview_link, icon, human_filesize, control_url, contact_email, property, substr, filter_compound_list, to_data_array, pretty_list, array_concat, action_list, action_button, action_title, action_description, action_icon
 +
* New Script methods:
 +
** $data.property($key) which takes a string and returns a property from a hash or dataobj.
 +
** $eprint.documents() which returns all the "real" (non-volatile) documents.
 +
* New Script inline math functions: + - / * %
 +
* New EPrints Script datatype: DATA_ARRAY: Represents a list of tuples of [$value, $epscript_type]
  
  $thing = EPrints::DataObj::File->get_system_field_info
+
==OAI==
    Core fields.
+
* Stateless OAI Interface means no timing-out
 
+
* Support for multiple constraints in custom OAI sets
  $dataset = EPrints::DataObj::File->get_dataset_id
+
  Returns the id of the EPrints::DataSet object to which this record belongs.
+
 
+
  $defaults = EPrints::DataObj::File->get_defaults( $session, $data )
+
    Return default values for this object based on the starting data.
+
  
Object Methods
+
==Unit Tests==
 +
* We have introduced unit-tests to improve both the short and long term quality of our code.
 +
==Metadata Types==
 +
* Counter (incrementing value)
 +
* Timestamp (defaults to the current time)
 +
* UUID
 +
* MetaField::Search now has two properties:
 +
** "namedfields" which is an array ref of field names to search OR
 +
** "namedfields_config" which is the name of a config variable
 +
* MetaField::Search can now be used in any workflow (not hard-coded to editpermfields)
 +
* A captcha pseudo-field based on http://recaptcha.net/
 +
* added "repeat_secret" property to secret fields that will render a confirmation box which is checked with validate()
 +
* Storable (store arbitrary Perl structures - internal use)
  
  $success = $stored->remove
+
==Administration Interface==
    Remove the stored file. Deletes all revisions of the contained object.
+
* Converted Admin screen into several tabs.
 
+
* Improved the BatchEdit interface
  $filename = $file->get_local_copy( [ $revision ] )
+
* Show a progress bar while records are updated during batch edit
    Return the name of a local copy of the file (may be a File::Temp object).
+
    Will retrieve and cache the remote object if necessary.
+
 
+
  $fh = $stored->get_fh( [ $revision ] )
+
    Retrieve a file handle to the stored file (this is a wrapper around EPrints::Storage::retrieve).
+
 
+
  $success = $file->add_file( $filepath, $filename [, $preserve_path ] )
+
    Read and store the contents of $filepath at $filename.
+
    If $preserve_path is untrue will strip any leading path in $filename.
+
 
+
  $success = $file->upload( $filehandle, $filename, $filesize [, $preserve_path ] )
+
    Read and store the data from $filehandle at $filename at the next revision number.
+
    If $preserve_path is untrue will strip any leading path in $filename.
+
 
+
  $success = $stored->write_copy( $filename [, $revision] )
+
    Write a copy of this file to $filename.
+
    Returns true if the written file contains the same number of bytes as the stored file.
+
 
+
  $success = $stored->write_copy_fh( $filehandle [, $revision ] )
+
    Write a copy of this file to $filehandle.
+
 
+
  $md5 = $stored->generate_md5
+
    Calculates and returns the MD5 for this file.
+
+
  
=== The Storage Controller & API (0.2 Alpha) ===
+
==Editorial Interface==
 +
* Improved "Review" Screen
 +
* The "Review buffer" can now be filtered for better management of large review buffers.
 +
* When an editor provide the "Move to Review" button if there are problems
  
  NOTES: This module is where the selection process of storage plugin takes place. Currently there is no configuration capability
+
==User Defined Datasets==
  on a per archive basis thus the controller can only be customised by editing this source file. At the moment it looks through the 
+
* Allows 3rd party tools to create their own additional datasets
  storage plugins directory and uses the first storage plug-in it finds for everything!
+
* Suite of interface screens to work with these new datasets
  
LOCATION: /perl_lib/EPrints/Storage.pm
+
==Command Line Tools==
 +
* Allow eprint ids to be specified for redo_thumbnails
  
This module is the storage control layer which uses EPrints::Plugin::Storage plugins to support various storage back-ends. It enables the storage, retrieval and deletion of data streams. The maximum size of a stream is dependent on the back-end storage mechanism.
+
==Export ==
 +
* Added support for OAI-ORE
 +
* Added support for JSONP
 +
* Added support for an 'n' argument to search exports
 +
* Added arguments support to export plugins. Passed by CGI arguments on abstract search or by the --arg option in bin/export
  
Each data stream is located at a repository unique location constructed from the data object id, bucket name and file name. This may be turned into a URI by the storage layer to achieve global uniqueness (e.g. by using the repository's hostname).
+
==Abstract Page==
Multiple Storage Mediums
+
* Now generated with a citation
 +
* Shows an "action list", so plugins can register to appear on this page
  
The storage layer may make use of multiple storage back-ends. To assist locating the correct place to store and retrieve streams the API requires the EPrints object and a "bucket" name.
+
==Phrases==
 +
* Primary method of editing phrases is now the web interface
 +
* Added "ref" option to phrases, which will cause the referenced phrase to be used instead - Equivalent to calling the referenced phrase directly
  
The EPrints object passed to the storage API may be used to choose different storage mediums or to add metadata to the stored stream (e.g. if the storage back end is another repository).
+
==Views==
 +
* Entire rendering of item lists and menus can be over-ridden by a function
  
The bucket is a string that identifies classes of streams. For instance EPrints::DataObj::Document objects (currently) have "data" and "thumbnail" buckets for storing files and thumbnails respectively.
+
==Misc. Changes ==
Revisions
+
* Can now disable a repository through a system configuration setting
 +
* Refactoured DataObj::get_defaults so that you can now specify default values through a "default_value" property
 +
* Most of get_defaults() can now be specified through the metafield spec.
 +
* Can now apply multiple changes to the same field (???? I assume this means metafield?)
 +
* Preference field for users (to store k/v pairs in)
 +
* Simplified Apache configuration: generate_apacheconf will no longer overwrite existing files
  
The storage layer may store multiple revisions located at the same filename.
+
==Key Bugfixes==
 +
* Fixed login/logout pages not using phrases
 +
* Fixed spurious history objects being created on document upload
 +
* Fixed an HTML insertion bug in the <title> element [Brian D. Gregg]
 +
* Fixed schema errors in uketd_dc and METS/MODS export plugins
 +
* Fixed bug in Compound creation of Set types that squashed the set options
 +
* Fixed order static directories are searched to: repository->theme->system
 +
* Support long values in browse views by using the MD5 of the value,
 +
* Subject inputform component can now be used with singular values
 +
* Fixed bug that is_advertised property on export plugins was being ignored.
 +
* Fixed bug in indexer which meant it didn't index in a round-robin fashion.
 +
* Fixed export not respecting metadata visibility
  
If the storage medium supports revisioning it is expected that repeated store() calls to the same location will result in multiple revisions. A retrieve() call without any revision will always return the data stored in the last store() call.
 
  
METHODS
 
  
  $store = EPrints::Storage->new( $session )
+
= Changes to repository configuration =
    Create a new storage object for $session. Should not be used directly, see EPrints::Session.
+
We've made some changes to the configuration of a new repository. These will not be automatically applied to your current repositories when upgrading.
 
+
  $success = $store->store( $fileobj, $filehandle )
+
    Read from and store all data from $filehandle for $fileobj. Returns false on error.
+
   
+
  $filehandle = $store->retrieve( $fileobj [, $revision ] )
+
    Retrieve a $filehandle to the object stored for $fileobj. If no $revision is specified returns the revision in $fileobj.
+
 
+
  $success = $store->delete( $fileobj [, $revision ] )
+
    Delete the object stored for $fileobj. If no $revision is specified deletes the revision in $fileobj.
+
 
+
  $filename = $store->get_local_copy( $fileobj [, $revision ] )
+
    Return the name of a local copy of the file (may be a File::Temp object). Will retrieve and cache the remote object if necessary.
+
   
+
  $size = $store->get_size( $fileobj [, $revision ] )
+
    Return the $size (in bytes) of the object stored at $fileobj. If no $revision is specified returns the size of the revision in $fileobj.
+
 
+
  @revisions = $store->get_revisions( $fileobj )
+
    Return a list of available revision numbers for $fileobj, in order from latest to oldest.
+
  
=== Writing A Storage Plugin ===
+
== Suggested Changes ==
  
Implement the methods above for your chosen storage medium. Note that the plug-in is resposible for any mapping from fileobj to a URI or path where the file exists. This leaves URI generation flexible however it must remain replicatable from the fileobj.  
+
If upgrading from 3.1 to 3.2, the following changes to your own configuration are suggested to gain the features described above.
  
Currently a local storage plug-in exists which replicates all legacy behaviour of the eprints storage system prior to containing a seporate storage layer.  
+
* cp lib/defaultcfg/cfg.d/rdf* archives/YOURID/cfg/cfg.d/
 +
* run epadmin recommit
 +
* edit cfg/lang/en/static/index.xpage and add the following to the <xpage:head> section.  
 +
<xpage:head>
 +
  <link rel="alternate" type="application/rss+xml" title="Items in {phrase('archive_name')}" href="{$config{http_cgiurl}}/latest_tool?output=RSS2"></link>
 +
  <link rel="alternate" type="application/atom+xml" title="Items in {phrase('archive_name')}" href="{$config{http_cgiurl}}/latest_tool?output=Atom"></link>
 +
  <link rel="alternate" type="application/rdf+xml" title="Repository Summary RDF+XML" href="{$config{http_cgiurl}}/repositoryinfo/RDFXML/devel.rdf"></link>
 +
  <link rel="alternate" type="text/n3" title="Repository Summary RDF+N3" href="{$config{http_cgiurl}}/repositoryinfo/RDFN3/devel.n3"></link>
 +
</xpage:head>
 +
(you may already have the rss & atom bits)
  
As a quick guide to writing a storage plug-in the following provides a template:
+
* This list has NOT been completed yet, we're working on it!
  
  Package EPrints::Plugin::Storage::NAME;
+
==New and Altered Config options==
   
+
 
  use URI;
+
These need documenting and noting which ones we recommend setting/altering when upgrading.
  use URI::Escape;
+
 
 
+
* Set "hide_document_conversion" to hide the Convert link on the document workflow
  use EPrints::Plugin::Storage;
+
* Broke up SystemSettings into logically named files
 
+
* Can now disable a repository through a system configuration setting
  @ISA = ( "EPrints::Plugin::Storage" );
+
* Moved most of eprint_render.pl into a citation file: summary_page.xml
 
+
* Updated defaults views.pl to show current configuration style
  use strict;
+
* Improved document_upload.pl layout to make it easier to add/remove suffix to mimetype mappings.
   
+
* Added URI to EPrint Summary Page
  sub new
+
* Added RDF+XML and N3+NT Document formats
  {
+
* New metafield option: $defaults{render_max_search_values} = 5;
        my( $class, %params ) = @_;
+
* Added "show_help" option to workflow component to disable collapsing Usage: show_help={always,toggle,never}
 
+
* Added config option "cache_max" to limit the cachemap tables used
        my $self = $class->SUPER::new( %params );
+
* user defined datasets
 
+
* Made it an option to provide action buttons top and bottom in workflow
        $self->{name} = "NAME Storage Plugin";
+
**$c->{locking}->{eprint}->{enable} = 1;
 
+
**$c->{locking}->{eprint}->{timeout} = 600;
        return $self;
+
*REST privs
  }
+
*check registation email callback
 
+
*epc:debug, epc:set, changes to epc:foreach
  sub store
+
*lots of eprints script functions (see list above)
  {
+
*views.pl
        my( $self, $fileobj, $fh ) = @_;
+
** "DEFAULT;render_fn=render_view_items_3col_boxes",
       
+
** render_menu => "render_view_menu_3col_boxes"
        ...
+
** ranges & variations were introduced in 3.1.? but need documenting.
 
+
* Storage plugins
        return $success;
+
* adding actions to abstract page
  }
+
* select targz,zip,plain etc. in workflow/upload
 
+
  sub retrieve
+
  {
+
        my( $self, $fileobj, $revision ) = @_;
+
   
+
        ...
+
 
+
        return $in_file_handle;                       
+
  }
+
 
+
  sub delete
+
  {
+
        my( $self, $fileobj, $revision ) = @_;
+
       
+
        ...
+
 
+
        return $success;
+
  }      
+
 
+
  sub get_size
+
  {
+
        my( $self, $fileobj, $revision ) = @_;
+
       
+
        ...
+
 
+
        return $size;
+
  }       
+
 
+
  # Optional methods
+
 
+
  # get_local_copy() is provided by Storage::Plugin so does
+
  # not have to be implemented. If the file is stored
+
  # locally it may be more efficient to return it's filename
+
  # here rather than copying to a temporary file.
+
 
+
  sub get_local_copy
+
  {
+
        my( $self, $fileobj, $revision ) = @_;
+
       
+
        ...
+
       
+
        return $filename;
+
  }
+
 
+
  # (get_revisions is yet to be finalised)
+
 
+
  sub get_revisions
+
  {
+
        my( $self, $fileobj ) = @_;
+
       
+
        ...
+
 
+
        return @revisions;
+
  }
+

Latest revision as of 05:52, 30 August 2018

Release Notes:

3.4

3.3 | 3.3.5 | 3.3.6 | 3.3.7 | 3.3.8 | 3.3.9 | 3.3.10 | 3.3.11 | 3.3.13 | 3.3.14 | 3.3.15 | 3.3.16

3.2.0 | 3.2.1 | 3.2.2 | 3.2.3 | 3.2.4 | 3.2.5 | 3.2.6 | 3.2.7 | 3.2.8 | 3.2.9

3.1.0

NOTE

  • We now recommend LibXML in preference to GDOME. It's less buggy, and easier to install.
  • Upgrade may take several hours as it cleans up the unicode issues in the database.

Database

  • In addition to MySQL, EPrints 3.2 now supports Oracle and Postgres

API

  • This release features a formal API. Not all functionality is yet available via the API, but will be added slowly and carefully in future releases.
  • The bugbear of EPrints internals, EPrints::Session has been merged into EPrints::Repository. All old code will still work.

Documents

  • Thumbnails are now documents in their own right
  • Built in document-format icons, as well as those you configure yourself
  • Thumbnailing now happens in the background as part of the indexer process

Deposit Interface

  • Edit Locking locks records reduces risk of 2 people editing a record at the same time.
  • Option to extract metadata and images from OpenXML files (.docx and .pptx)
  • Offers options to users and editors on the deposit screen if there are problems
  • Document upload screen has been redesgined to be clearer.
  • Split document uploading into adding a new document and editing existing documents
  • The documents inside an EPrint may now be re-ordered
  • Progress bar on file upload
  • Document upload methods (file, url, zip etc.) are now plugin-based and can be extended
  • When attempting to deposit an eprint with problems show Save button
  • Made it an option to provide action buttons top and bottom in workflow
  • Added support for "input_boxes" property to the workflow, so you can now specify the number of input boxes to show for multiple fields
  • epc: no longer crashes eprints on bad scripts, just reports an error

Search & Indexing

  • The search library has been entirely re-written to reduce use of cache tables and to improve performance. Simple searches are now over ten times faster.
  • The indexer now uses plugins, so you can schedule other tasks, like thumbnail conversion, to be done in the background.
  • Added config option "cache_max" to limit the cachemap tables used
  • Added --clear option to cleanup old/broken indexer jobs

Unicode

  • EPrints use of unicode has been significantly improved.

REST

  • A "REST" style interface to objects, via /rest/eprint/23/title.txt, for example. This can also support "PUT" to alter fields!

SWORD2

  • SWORD2 (1.3 Specification) is supported.

Linked Data Support

  • Ability to establish arbitrary relations between objects or provide additional metadata in triple form.

Collections Support

  • Collections can be built via use of linked data, object ids and relationships.

Semantic Web / Linked Data (RDF)

We have made a (difficult) decision to move these features to 3.2.1 (due out soon after 3.2.0) because testing showed it caused a significant slow down.

We're rewriting it to do the same thing but with much less overhead!

Storage Layer

  • Now uses plugins to store files
    • Local Filesystem
    • Amazon S3
    • Sun Cloud Storage

Speed

  • Search & Indexing much faster
  • Import is faster
  • Other parts of the code have been audited for speed, and optimised.

Import

  • Modified Import UI to allow a per-plugin/single/bulk workflow

EPC & EPrints Script

  • New EPC tag: epc:debug, which is like print but sends the XML to STDERR for debugging purposes.
  • New EPC tag: epc:set which defines a variable inside it's scope.
  • Improvements to the epc:foreach processing (better handling of multiple object types in lists)
  • Added "limit" option to epc:foreach to limit the number
  • Inside <epc:foreach> blocks an $index variable is set, allowing you to test which interation it's on.
  • New EPScript methods: citation_link, dataset, related_objects, url, doc_size, is_public, thumbnail_url, preview_link, icon, human_filesize, control_url, contact_email, property, substr, filter_compound_list, to_data_array, pretty_list, array_concat, action_list, action_button, action_title, action_description, action_icon
  • New Script methods:
    • $data.property($key) which takes a string and returns a property from a hash or dataobj.
    • $eprint.documents() which returns all the "real" (non-volatile) documents.
  • New Script inline math functions: + - / * %
  • New EPrints Script datatype: DATA_ARRAY: Represents a list of tuples of [$value, $epscript_type]

OAI

  • Stateless OAI Interface means no timing-out
  • Support for multiple constraints in custom OAI sets

Unit Tests

  • We have introduced unit-tests to improve both the short and long term quality of our code.

Metadata Types

  • Counter (incrementing value)
  • Timestamp (defaults to the current time)
  • UUID
  • MetaField::Search now has two properties:
    • "namedfields" which is an array ref of field names to search OR
    • "namedfields_config" which is the name of a config variable
  • MetaField::Search can now be used in any workflow (not hard-coded to editpermfields)
  • A captcha pseudo-field based on http://recaptcha.net/
  • added "repeat_secret" property to secret fields that will render a confirmation box which is checked with validate()
  • Storable (store arbitrary Perl structures - internal use)

Administration Interface

  • Converted Admin screen into several tabs.
  • Improved the BatchEdit interface
  • Show a progress bar while records are updated during batch edit

Editorial Interface

  • Improved "Review" Screen
  • The "Review buffer" can now be filtered for better management of large review buffers.
  • When an editor provide the "Move to Review" button if there are problems

User Defined Datasets

  • Allows 3rd party tools to create their own additional datasets
  • Suite of interface screens to work with these new datasets

Command Line Tools

  • Allow eprint ids to be specified for redo_thumbnails

Export

  • Added support for OAI-ORE
  • Added support for JSONP
  • Added support for an 'n' argument to search exports
  • Added arguments support to export plugins. Passed by CGI arguments on abstract search or by the --arg option in bin/export

Abstract Page

  • Now generated with a citation
  • Shows an "action list", so plugins can register to appear on this page

Phrases

  • Primary method of editing phrases is now the web interface
  • Added "ref" option to phrases, which will cause the referenced phrase to be used instead - Equivalent to calling the referenced phrase directly

Views

  • Entire rendering of item lists and menus can be over-ridden by a function

Misc. Changes

  • Can now disable a repository through a system configuration setting
  • Refactoured DataObj::get_defaults so that you can now specify default values through a "default_value" property
  • Most of get_defaults() can now be specified through the metafield spec.
  • Can now apply multiple changes to the same field (???? I assume this means metafield?)
  • Preference field for users (to store k/v pairs in)
  • Simplified Apache configuration: generate_apacheconf will no longer overwrite existing files

Key Bugfixes

  • Fixed login/logout pages not using phrases
  • Fixed spurious history objects being created on document upload
  • Fixed an HTML insertion bug in the <title> element [Brian D. Gregg]
  • Fixed schema errors in uketd_dc and METS/MODS export plugins
  • Fixed bug in Compound creation of Set types that squashed the set options
  • Fixed order static directories are searched to: repository->theme->system
  • Support long values in browse views by using the MD5 of the value,
  • Subject inputform component can now be used with singular values
  • Fixed bug that is_advertised property on export plugins was being ignored.
  • Fixed bug in indexer which meant it didn't index in a round-robin fashion.
  • Fixed export not respecting metadata visibility


Changes to repository configuration

We've made some changes to the configuration of a new repository. These will not be automatically applied to your current repositories when upgrading.

Suggested Changes

If upgrading from 3.1 to 3.2, the following changes to your own configuration are suggested to gain the features described above.

  • cp lib/defaultcfg/cfg.d/rdf* archives/YOURID/cfg/cfg.d/
  • run epadmin recommit
  • edit cfg/lang/en/static/index.xpage and add the following to the <xpage:head> section.
<xpage:head>
  <link rel="alternate" type="application/rss+xml" title="Items in {phrase('archive_name')}" href="{$config{http_cgiurl}}/latest_tool?output=RSS2"></link>
  <link rel="alternate" type="application/atom+xml" title="Items in {phrase('archive_name')}" href="{$config{http_cgiurl}}/latest_tool?output=Atom"></link>
  <link rel="alternate" type="application/rdf+xml" title="Repository Summary RDF+XML" href="{$config{http_cgiurl}}/repositoryinfo/RDFXML/devel.rdf"></link>
  <link rel="alternate" type="text/n3" title="Repository Summary RDF+N3" href="{$config{http_cgiurl}}/repositoryinfo/RDFN3/devel.n3"></link>
</xpage:head>

(you may already have the rss & atom bits)

  • This list has NOT been completed yet, we're working on it!

New and Altered Config options

These need documenting and noting which ones we recommend setting/altering when upgrading.

  • Set "hide_document_conversion" to hide the Convert link on the document workflow
  • Broke up SystemSettings into logically named files
  • Can now disable a repository through a system configuration setting
  • Moved most of eprint_render.pl into a citation file: summary_page.xml
  • Updated defaults views.pl to show current configuration style
  • Improved document_upload.pl layout to make it easier to add/remove suffix to mimetype mappings.
  • Added URI to EPrint Summary Page
  • Added RDF+XML and N3+NT Document formats
  • New metafield option: $defaults{render_max_search_values} = 5;
  • Added "show_help" option to workflow component to disable collapsing Usage: show_help={always,toggle,never}
  • Added config option "cache_max" to limit the cachemap tables used
  • user defined datasets
  • Made it an option to provide action buttons top and bottom in workflow
    • $c->{locking}->{eprint}->{enable} = 1;
    • $c->{locking}->{eprint}->{timeout} = 600;
  • REST privs
  • check registation email callback
  • epc:debug, epc:set, changes to epc:foreach
  • lots of eprints script functions (see list above)
  • views.pl
    • "DEFAULT;render_fn=render_view_items_3col_boxes",
    • render_menu => "render_view_menu_3col_boxes"
    • ranges & variations were introduced in 3.1.? but need documenting.
  • Storage plugins
  • adding actions to abstract page
  • select targz,zip,plain etc. in workflow/upload