<?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=Alan.stiles%40open.ac.uk</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=Alan.stiles%40open.ac.uk"/>
	<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/Special:Contributions/Alan.stiles@open.ac.uk"/>
	<updated>2026-05-16T08:46:04Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.8</generator>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Views.pl&amp;diff=16249</id>
		<title>Views.pl</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Views.pl&amp;diff=16249"/>
		<updated>2024-07-02T16:45:18Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* Sections */   fixed typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Browse Views]]&lt;br /&gt;
{{dirs}}&lt;br /&gt;
{{cfgd}}&lt;br /&gt;
&lt;br /&gt;
'''views.pl''' contains configuration for rendering ''views''.  Conceptually a ''view'' is a browsable list of eprints split into ''menus'' and a ''list''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-color:black; border-style:solid; border-width:1px 1px 0 1px; margin:0; padding:0; text-align:center; font-size:10px&amp;quot; |Menu1&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-color:black; border-style:solid; border-width:0 1px; text-align: left; margin:0; padding:0; font-size:10px&amp;quot;| &amp;amp;nbsp; Item1_1 ------&lt;br /&gt;
| style=&amp;quot;font-size:10px&amp;quot;|---&amp;gt;&lt;br /&gt;
| style=&amp;quot;border-color:black; border-style:solid; border-width:1px 1px 0 1px; margin:0; padding:0; text-align:center; font-size:10px&amp;quot;|Menu2&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-color:black; border-style:solid; border-width:0 1px; text-align: left; font-size:10px&amp;quot;| &amp;amp;nbsp; Item1_2 &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|style=&amp;quot;border-color:black; border-style:solid; border-width:0 1px; text-align: left; margin:0; padding:0; font-size:10px&amp;quot;| &amp;amp;nbsp; Item2_1 ----- &lt;br /&gt;
|style=&amp;quot;font-size:10px&amp;quot;|---&amp;gt;&lt;br /&gt;
|style=&amp;quot;border-color:black; border-style:solid; border-width:1px 1px 0 1px; margin:0; padding:0; text-align:center; font-size:10px&amp;quot;| &amp;amp;nbsp; &amp;amp;nbsp; LIST &amp;amp;nbsp; &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-color:black; border-style:solid; border-width:0 1px 1px 1px; margin:0; padding:0; text-align:left; font-size:10px&amp;quot;| &amp;amp;nbsp; ....&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|style=&amp;quot;border-color:black; border-style:solid; border-width:0 1px; text-align: left; margin:0; padding:0; font-size:10px&amp;quot;| &amp;amp;nbsp; Item2_2&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|style=&amp;quot;border-color:black; border-style:solid; border-width:0 1px 1px 1px; margin:0; padding:0; text-align:left; font-size:10px&amp;quot;| &amp;amp;nbsp; ....&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|style=&amp;quot;border-color:black; border-style:solid; border-width:0 1px 1px 1px; margin:0; padding:0; text-align:left; font-size:10px&amp;quot;| &amp;amp;nbsp; ....&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|&amp;amp;nbsp;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
In a ''menu'' values of one (or more) fields are listed, and a link points to the collection of all items with that particular value in that field.&lt;br /&gt;
&lt;br /&gt;
The ''list'' contains the final list of eprints with field values as determined by the menus above it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Options available for the views config ==&lt;br /&gt;
This link is an [http://wiki.eprints.org/w/Adding_new_views 'How to' about views] with examples.&lt;br /&gt;
&lt;br /&gt;
The general form of views definition is&lt;br /&gt;
&lt;br /&gt;
  $c-&amp;gt;{browse_views} = [&lt;br /&gt;
    { &amp;lt;first view definition&amp;gt; },&lt;br /&gt;
    { &amp;lt;second view definition&amp;gt; },&lt;br /&gt;
    ...&lt;br /&gt;
    { &amp;lt;last view definition&amp;gt; },&lt;br /&gt;
  ];&lt;br /&gt;
&lt;br /&gt;
(be careful about commas and semicolons). The order of the view definitions determines the order in which these will appear in the &amp;lt;nowiki&amp;gt;http://repoid/view/&amp;lt;/nowiki&amp;gt; page.&lt;br /&gt;
&lt;br /&gt;
Each view definition is a collection of attributes, given as&lt;br /&gt;
&lt;br /&gt;
    attribute1 =&amp;gt; value1,&lt;br /&gt;
    attribute2 =&amp;gt; value2,&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
(again, the ''value'' should end by a comma). The ''value'' can be&lt;br /&gt;
*''integer''&lt;br /&gt;
*''string'' enclosed by quotation marks (&amp;quot;) or by apostrophes (')&lt;br /&gt;
*''array'' which starts by a square bracket [ followed by the elements of the array (separated by commas) and closed by ] or &lt;br /&gt;
*''hash'' which is a list of &amp;quot;attribute =&amp;gt; value&amp;quot; pairs enclosed by curly brackets { and }.&lt;br /&gt;
Thus the browse_views definition is an array of hashes.&lt;br /&gt;
&lt;br /&gt;
Attributes marked by &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px&amp;quot;&amp;gt;(V)&amp;lt;/sup&amp;gt; are ''view'' attributes and are in the view definition; attributes marked by &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px&amp;quot;&amp;gt;(M)&amp;lt;/sup&amp;gt; are ''menu'' attributes and should be used only in [[#Menu options|menu definitions]].&lt;br /&gt;
&lt;br /&gt;
==Basic options==&lt;br /&gt;
&lt;br /&gt;
Options in the first category are ''view'' options.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| id &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(V)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| (mandatory) String, this is the ID by which you will refer to this view, and also the name of the top directory in &amp;lt;nowiki&amp;gt;http://repoid/view/&amp;lt;/nowiki&amp;gt;. This is the value of the ''browse_link'' attribute in [[eprint_fields.pl]]. Example:&lt;br /&gt;
&lt;br /&gt;
    id =&amp;gt; 'divisions',&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|fields &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(V)&amp;lt;/sup&amp;gt; &lt;br /&gt;
|(deprecated) This attribute describes the field(s) by which the view is built. It has been replaced by the more general [[#Menu options|menus]] attribute.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|hideempty &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(V)&amp;lt;/sup&amp;gt;&lt;br /&gt;
allow_null &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(V)&amp;lt;/sup&amp;gt;&lt;br /&gt;
new_column_at &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(V)&amp;lt;/sup&amp;gt;&lt;br /&gt;
render_menu &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(V)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|These define the default values of the same attributes in all [[#Menu options|menus]]. I.e, if not defined otherwise there, they take this as the default value in this view. &amp;quot;Hideempty&amp;quot; is also used when rendering the [[#View list options|view]] list.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|menus &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(V)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|An array of ''[[#Menu options|menu descriptions]]''. Each ''menu'' is a refinement of the previous ones, and last menu points to the [[#View list options|view list(s)]]. In each menu, as minimum, you should give the field(s) which are used to define entries at that level. The menus definition looks like&lt;br /&gt;
  menus =&amp;gt; [&lt;br /&gt;
     { &amp;lt;first menu definition&amp;gt; },&lt;br /&gt;
     { &amp;lt;second level menu&amp;gt; },&lt;br /&gt;
     { &amp;lt;last level&amp;gt; },&lt;br /&gt;
  ],&lt;br /&gt;
You must have at least one menu level.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|template &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(V)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|Define an alternate template for all pages in this view. The template page should be a proper xml file in the &amp;lt;tt&amp;gt;repoid/cfg/lang/&amp;lt;langid&amp;gt;/templates/&amp;lt;/tt&amp;gt; directory. The best way is to copy the default.xml file and edit it according to taste. &lt;br /&gt;
  template =&amp;gt; 'view_template',&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|nolink &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(V)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|When this is set to 1 by adding&lt;br /&gt;
  nolink =&amp;gt; 1,&lt;br /&gt;
then this view won't appear in the outmost &amp;lt;nowiki&amp;gt;http://repoid/view/&amp;lt;/nowiki&amp;gt; browse page.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| max_menu_age&amp;amp;nbsp;&amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(V)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Defaults to 86400 (one day in seconds). If the menus in this view has been generated more than that many seconds ago, it is regenerated.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| max_items &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(V)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|Defaults to 2000.  If the items list is larger increase the number enough to accomodate the number of items needed to be displayed.&lt;br /&gt;
  max_items =&amp;gt; 3000,&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===View list options===&lt;br /&gt;
These are the options which determine how the last list page in the menu chain should look like. They must be entered at the outmost ''view'' level. &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|order &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(V)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|This defines how the items in the view list (at the lowest level) are ordered. The format is 'foo/-bar'. This means that the list will be sorted by 'foo' and then any equal 'foo' values will be reverse sorted by 'bar'. More than 2 fields can be specified. Example:&lt;br /&gt;
  order =&amp;gt; &amp;quot;-date/title&amp;quot;,&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|hideup &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(V)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|Don't show the &amp;quot;up one level&amp;quot; link in the list page. You ''must'' set this attribute for each menu separately, it is not inherited.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|hideempty &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(V)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|Do not list the empty (undefined) entry in the list. This property inherits to the menus.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|nocount &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(V)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|If set, the &amp;quot;Number of items&amp;quot; line at the top of the page is omitted.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|notimestamp &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(V)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|If set, the &amp;quot;This list was generated on&amp;quot; line at the bottom of the list is omitted.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|variations &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(V)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|An array of strings describing different rendering of the items at the ''list''. For datails see [[#Variations|variations]]. Example:&lt;br /&gt;
    variation =&amp;gt; [ &amp;quot;creators_name;first_letter&amp;quot;, &lt;br /&gt;
        &amp;quot;type&amp;quot;, &amp;quot;DEFAULT&amp;quot;, ],&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|layout &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(V)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|Possible values are &lt;br /&gt;
*paragraph (default)&lt;br /&gt;
*orderedlist&lt;br /&gt;
*unorderedlist&lt;br /&gt;
Determines how items in the list (or sublist) is rendered. In the first case each item is a paragraph by itself. In the other cases items are rendered as an ordered (unordered) list.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|citation &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(V)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|The citation style defined in archives/&amp;lt;REPOID&amp;gt;/cfg/citations/eprint/ which is used to render each item. Example:&lt;br /&gt;
  citation =&amp;gt; 'screen',&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|max_list_age&amp;amp;nbsp;&amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(V)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|Defaults to 86400 (one day in seconds). If the lists in this view were generated more than than many seconds ago, it is regenerated.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Variations===&lt;br /&gt;
&lt;br /&gt;
Variations, if defined, determine how the final list is rendered. ''Variations'' is an array of strings, for example,&lt;br /&gt;
&lt;br /&gt;
 [ &amp;quot;creators_name;first_letter&amp;quot;,&lt;br /&gt;
   &amp;quot;type&amp;quot;,&lt;br /&gt;
   &amp;quot;DEFAULT&amp;quot;,&lt;br /&gt;
 ]&lt;br /&gt;
&lt;br /&gt;
For each string in the list, a different rendering is produced, and you can switch from one to the other. The variation &amp;quot;DEFAULT&amp;quot; is the default one, it is always a good practice to include it in the list. If no variation is given, &amp;quot;DEFAULT&amp;quot; is used.&lt;br /&gt;
&lt;br /&gt;
A ''variation definition'' consists of a field name, followed by zero, one or more ''options'' after a semicolon. Options are separated by commas. An ''option'' is either a single attribute, or an attribute, an equal sign, and the value of the attribute. For example,&lt;br /&gt;
    &amp;quot;creators_name;truncate=4,hideup&amp;quot;&lt;br /&gt;
sets the attribute value &amp;quot;truncate&amp;quot; to 4, and &amp;quot;hideup&amp;quot; to 1 (or true).&lt;br /&gt;
&lt;br /&gt;
The following options are available. These options are ''part of the string'' defining the variation, and ''should not be entered'' as attributes.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|reverse&lt;br /&gt;
|Reverses the order in which the groupings are shown.  Default is the ordervalue for that field (usually alphanumeric).  Useful for dates as you may want the highest values first.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|filename&lt;br /&gt;
|Changes the filename of the view variation.  The default is the name of the metadata field used, so if two variations use the same metadata field with different options, this is needed.&lt;br /&gt;
 filename=different_filename&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|first_value&lt;br /&gt;
|If a field is multiple, only use the first value.  Otherwise each item will appear once for each value.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|first_initial&lt;br /&gt;
|If using a name, truncate the given name to the first initial.  This will make items like &amp;quot;Les Carr&amp;quot; and &amp;quot;Leslie Carr&amp;quot; appear together.  Note it will also make &amp;quot;John Smith&amp;quot; and &amp;quot;Jake Smith&amp;quot; appear together too, showing that you really never can win.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|first_letter&lt;br /&gt;
|The same as 'truncate=1'&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|truncate&lt;br /&gt;
|Use the first X characters of a value to group by.  truncate=4 may be useful for dates as it will group by the first four digits (the year) only.&lt;br /&gt;
 truncate=4&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|tags&lt;br /&gt;
|Useful for fields like keywords where values may be separated by commas or semi-colons.  The value is split on these two characters ( , and ; ) and a heading is created for each.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|cloud&lt;br /&gt;
|Creates a tag cloud.  Sets jump to 'plain', cloudmax to 200, cloudmin to 80 and no_separator, then resizes the jump-to links according to frequency of use.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|cloudmax&lt;br /&gt;
|The % size of the largest tag in a tag cloud.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|cloudmin&lt;br /&gt;
|The % size of the smallest tag in a tag cloud.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|jump&lt;br /&gt;
|Possible values are 'plain', 'default', and 'none'. Example:&lt;br /&gt;
  jump=plain&lt;br /&gt;
When set to 'plain' turns off the 'jump to' text before the list of subheading navigation links. When 'none', then the 'jump' part is not rendered.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|no_seperator (sic)&lt;br /&gt;
|Turns of the separator between each subheading navigation link (by default a vertical bar symbol).&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|string&lt;br /&gt;
|Uses values 'as is'.  No ordervalues, no phrases.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|hideup (since 3.1.1) &lt;br /&gt;
|Defaults to &amp;quot;0&amp;quot;. If set to &amp;quot;1&amp;quot; this hides the &amp;quot;up to parent&amp;quot; link (often you want to hide this on .include files)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|render_fn&lt;br /&gt;
|Name of a function to render this groupings list of items. For an example, see views_render_items_example.pl&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Menu options===&lt;br /&gt;
&lt;br /&gt;
These options can only be used in the '''menu definitions'''.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|fields  &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(M)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|Obligatory, an array of field identifiers. Items in all fields are merged together. For example, to define a list of those those who are either authors or editors or both, use the definition&lt;br /&gt;
&lt;br /&gt;
    fields =&amp;gt; [ &amp;quot;creators_id&amp;quot;, &amp;quot;editors_id&amp;quot; ],&lt;br /&gt;
&lt;br /&gt;
Even if there is a single field, you must use square brackets, such as&lt;br /&gt;
&lt;br /&gt;
    fields =&amp;gt; [ &amp;quot;subjects&amp;quot; ],&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: #662211; background-color:#ddffdc; border:1px solid black; padding:3px;&amp;quot;&amp;gt;'''Important!''' All fields must have the same type - i.e. you cannot mix titles and authors, say.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also add extra rendering info to the field name, without the &amp;quot;render_&amp;quot; prefix. For example, to make a date have resolution year, you would write&lt;br /&gt;
&lt;br /&gt;
    fields =&amp;gt; [ &amp;quot;date;res=year&amp;quot; ],&lt;br /&gt;
&lt;br /&gt;
or, ordering authors by their ''given'' names rather than by their family names:&lt;br /&gt;
&lt;br /&gt;
    fields =&amp;gt; [ &amp;quot;creators_name;order=gf&amp;quot; ],&lt;br /&gt;
&lt;br /&gt;
You can add &amp;quot;;quiet&amp;quot; to the field name to force non-existing values to appear as empty space rather than the ugly &amp;quot;UNDEFINED&amp;quot; (see the allow_null property below). You can find the available rendering properties of different fields in the [[Metadata]] section.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|allow_null &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(M)&amp;lt;/sup&amp;gt; &lt;br /&gt;
|The ''undefined'' value among the possible values of the fields does not show up in the generated view. To allow the undefined value to appear as well, set&lt;br /&gt;
&lt;br /&gt;
  allow_null =&amp;gt; 1,&lt;br /&gt;
&lt;br /&gt;
Beware: the title of the undefined entries will be the ugly UNDEFINED. You might consider to use the &amp;quot;;quiet&amp;quot; rendering option for field names.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|hideempty &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(M)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|If a category is empty, don't show it as an entry. Default value: show all entries, even if they contain no entries. Used only in menus, not at the lower level (list).&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
    hideempty =&amp;gt; 1,&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|reverse_order &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(M)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|If set, then the ordering of items in this menu is reversed. Example:&lt;br /&gt;
&lt;br /&gt;
    reverse_order =&amp;gt; 1,&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|mode &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(M)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|Possible values: ''[[#Sections|sections]]'' and ''default'' (default). When defined as ''sections'' then grouping can be defined by the following data:&lt;br /&gt;
* ''grouping_function'' (group by first character if not defined)&lt;br /&gt;
* ''group_sorting_function'' (how to sort members of a group)&lt;br /&gt;
* ''group_range_function''&lt;br /&gt;
* ''open_first_section'' the front page should show the first section&lt;br /&gt;
See [[#Sections|below]].&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|hideup &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(M)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|When set to 1, don't show the &amp;quot;move one level up&amp;quot; link at the top of the page.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|render_menu &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(M)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|The configuration parameter which renders this menu. This should be a string, and also you should define a routine with the same name. For example if you write&lt;br /&gt;
    render_menu =&amp;gt; 'render_view_menu_3col_boxes',&lt;br /&gt;
then this menu will be rendered by the routine which is defined in [[views_render_menu_example.pl]] as&lt;br /&gt;
  $c-&amp;gt;{render_view_menu_3col_boxes} = sub&lt;br /&gt;
  {&lt;br /&gt;
       ...&lt;br /&gt;
  }&lt;br /&gt;
See there for hints how to tweak your own routine.&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|new_column_at &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(M)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|Used in menus (not lists) and in default mode. This is an array of integers representing the number of items in a view list before another column is added.  For example:&lt;br /&gt;
&lt;br /&gt;
 [ 11 ]&lt;br /&gt;
&lt;br /&gt;
The menu is rendered as a single column data if there are less than 11 entries, then there would be 2 columns.&lt;br /&gt;
&lt;br /&gt;
 [ 11, 21 ]&lt;br /&gt;
&lt;br /&gt;
This would have one column if there were ten or less values, two columns if there are twenty or less, and three columns for all other cases.&lt;br /&gt;
&lt;br /&gt;
 [ 0, 0 ]&lt;br /&gt;
&lt;br /&gt;
This would always have three columns.&lt;br /&gt;
&lt;br /&gt;
 [ 2, 3 ]&lt;br /&gt;
&lt;br /&gt;
This would have one column for a single data, two columns for two, and three columns for three or more data.&lt;br /&gt;
&lt;br /&gt;
Add one to the number of integers in the array and you get the maximum number of columns. The entries are evenly distributed in the columns.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Sections===&lt;br /&gt;
&lt;br /&gt;
When a menu is using &amp;quot;sections&amp;quot;, then items on the menu are grouped together. The exact method is defined by defining values for several options. These options go to the ''menus section'' as well.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|grouping_function &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(M)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|This function determines how grouping is done. The following predefined functions can be used:&lt;br /&gt;
*&amp;quot;EPrints::Update::Views::group_by_a_to_z&amp;quot;&lt;br /&gt;
*&amp;quot;EPrints::Update::Views::group_by_first_character&amp;quot; (default)&lt;br /&gt;
*&amp;quot;EPrints::Update::Views::group_by_2_characters&amp;quot;&lt;br /&gt;
*&amp;quot;EPrints::Update::Views::group_by_3_characters&amp;quot;&lt;br /&gt;
*&amp;quot;EPrints::Update::Views::group_by_4_characters&amp;quot;&lt;br /&gt;
*&amp;quot;EPrints::Update::Views::group_by_5_characters&amp;quot;&lt;br /&gt;
with the usual meaning. If you use 'group_by_a_to_z', all entries not starting with a letter will be discarded.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|group_sorting_function &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(M)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|A custom function which sorts the group identifiers. The only available function&lt;br /&gt;
*&amp;quot;EPrints::Update::Views::default_sort&amp;quot;&lt;br /&gt;
sorts alphabetically.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|group_range_function &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(M)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|Splits the groups (as determined by the grouping function) into sections so that a group never splits. Groups are rendered separately, but a section is kept on a single page. Available grouping functions are&lt;br /&gt;
*&amp;quot;Eprints::Update::Views::no_ranges&amp;quot; (default)&lt;br /&gt;
*&amp;quot;EPrints::Update::Views::cluster_ranges_&amp;lt;range&amp;gt;&amp;quot;&lt;br /&gt;
where &amp;lt;range&amp;gt; is one of 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, and 200.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|open_first_section &amp;lt;sup style=&amp;quot;font-weight:bold; font-size:10px;&amp;quot;&amp;gt;(M)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|if set, the first section is included in the front page.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Phrases==&lt;br /&gt;
&lt;br /&gt;
Views can have their own titles and other phrases. If they do not exist, then a default one is used (usually containing the view's id). For examples, see the views.xml file.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|viewname_eprint_&amp;lt;viewid&amp;gt;&lt;br /&gt;
|the name of the browse pages&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|viewintro_&amp;lt;viewid&amp;gt;&lt;br /&gt;
|The phrase to replace the text &amp;quot;Please select a value to browse from the list below.&amp;quot; in the top level menu&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|viewintro_&amp;lt;viewid&amp;gt;/&amp;lt;value&amp;gt;&lt;br /&gt;
|Intro phrase on the next level&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|viewtitle_eprint_&amp;lt;viewid&amp;gt;_menu_&amp;lt;level&amp;gt;&lt;br /&gt;
|Title of browse page at level &amp;lt;level&amp;gt;, which is 1, 2, ... In the phrase you can use the pins &amp;quot;value1&amp;quot;, &amp;quot;value2&amp;quot;, etc. where the number can be one less than the present level; the value of the pin is the actual value of the previous levels. See the example below.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|viewgroup_eprint_&amp;lt;viewid&amp;gt;_&amp;lt;filename&amp;gt;&lt;br /&gt;
|Used as a pin value for the title on the list pages, when [[#Variations|variations]] are used. &amp;lt;Filename&amp;gt; is the filename defined as the option of the variation, or, if it is not defined, then it is the fieldname at the beginning.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|viewtitle_eprint_&amp;lt;viewid&amp;gt;_list&lt;br /&gt;
|Title of the list pages of the view. You can use the same pins as before (&amp;quot;value1&amp;quot;, &amp;quot;value2&amp;quot;, etc.). If the list was generated by a [[#Variations|variation]] then the &amp;quot;grouping&amp;quot; pin is also available.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following example shows how to define these values.&lt;br /&gt;
 &amp;lt;epp:phrase id=&amp;quot;viewname_eprint_divisions&amp;quot;&amp;gt;Divisions&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;
 &amp;lt;epp:phrase id=&amp;quot;viewtitle_eprint_divisions_menu_1&amp;quot;&amp;gt;&lt;br /&gt;
    Browse by Division and Year&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;
 &amp;lt;epp:phrase id=&amp;quot;viewtitle_eprint_divisions_menu_2&amp;quot;&amp;gt;&lt;br /&gt;
    Browse by Year where Division is&lt;br /&gt;
     &amp;lt;epc:pin name=&amp;quot;value1&amp;quot; /&amp;gt; &amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Other==&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|heading_level&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|include&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|subheadings&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|nohtml&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|noindex&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Example=&lt;br /&gt;
==EPrints 3.2 example==&lt;br /&gt;
===cfg/cfg.d/views.pl===&lt;br /&gt;
  { id         =&amp;gt; &amp;quot;target&amp;quot;,  # The 'name' for this view&lt;br /&gt;
    allow_null =&amp;gt; 0,&lt;br /&gt;
    hide_empty =&amp;gt; 1,&lt;br /&gt;
    menus      =&amp;gt; [&lt;br /&gt;
      { fields =&amp;gt; [&amp;quot;broker_reponame&amp;quot;], # The field(s) to use - in this case the 'reponame' sub-element of the 'broker' field&lt;br /&gt;
        new_column_at      =&amp;gt; [0],    # force 2 columns, even if the&lt;br /&gt;
                                      # second is blank&lt;br /&gt;
        mode               =&amp;gt; &amp;quot;sections&amp;quot;,&lt;br /&gt;
        open_first_section =&amp;gt; 1,&lt;br /&gt;
        group_range_function   =&amp;gt; &amp;quot;EPrints::Update::Views::cluster_ranges_30&amp;quot;,&lt;br /&gt;
        group_sorting_function =&amp;gt; &amp;quot;EPrints::Update::Views::default_sort&amp;quot;,&lt;br /&gt;
      },&lt;br /&gt;
    ],&lt;br /&gt;
    order =&amp;gt; &amp;quot;-date/title&amp;quot;,&lt;br /&gt;
    citation =&amp;gt; 'router',    # This defines the file in cfg/citations/eprint/&lt;br /&gt;
    layout   =&amp;gt; 'router',    # This is used in Views.pm to determine how to&lt;br /&gt;
                             # join individual citations together...&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
This creates a view, which will be 2-columns wide.&lt;br /&gt;
Two important definitions here are:&lt;br /&gt;
* '''citation''' defines the citation file used to create the block of html for each record to be displayed, and&lt;br /&gt;
* '''layout''' indicates how those blocks are joined together.&lt;br /&gt;
&lt;br /&gt;
====Layout====&lt;br /&gt;
'''Layout''' can be one of:&lt;br /&gt;
* paragraph (the default)&lt;br /&gt;
puts &amp;amp;lt;p&amp;gt; elements round each citation&lt;br /&gt;
&lt;br /&gt;
* orderedlist&lt;br /&gt;
makes an ordered list (1,2,3,4 or whatever the CSS defines)&lt;br /&gt;
&lt;br /&gt;
* unorderedlist&lt;br /&gt;
makes an unordered list&lt;br /&gt;
&lt;br /&gt;
* ''anything else''&lt;br /&gt;
just puts a newline (in the page source) after each citation&lt;br /&gt;
&lt;br /&gt;
====citation====&lt;br /&gt;
In our example, we're using a home-made citation layout&lt;br /&gt;
&lt;br /&gt;
The citation file is in &amp;lt;code&amp;gt;/cfg/citations/eprint/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above view, we have defined the citation format to be '''router''', therefore we need a file called '''router.xml''' in the citations directory.&lt;br /&gt;
&lt;br /&gt;
Remember this format is used for each record, so needs to be complete in it's own right - and if you want records to line up vertically, you need to plan that in advance.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br /&gt;
    &amp;amp;lt;!-- &lt;br /&gt;
  	Full citation for an eprint. &lt;br /&gt;
    --&amp;gt;&lt;br /&gt;
    &amp;amp;lt;cite:citation xmlns:xhtml=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; xmlns=&amp;quot;http://eprints.org/ep3/control&amp;quot; xmlns:cite=&amp;quot;http://eprints.org/ep3/citation&amp;quot; &amp;gt;&lt;br /&gt;
    &amp;amp;lt;table class='ep_rt_citation'&amp;gt;;&lt;br /&gt;
    &amp;amp;lt;tr&amp;gt;&amp;amp;lt;td colspan='2'&amp;gt;&lt;br /&gt;
    &amp;amp;lt;choose&amp;gt;&lt;br /&gt;
      &amp;amp;lt;when test=&amp;quot;type = 'book' and is_set( creators )&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;amp;lt;span class='strong'&amp;gt;&amp;amp;lt;print expr=&amp;quot;creators_name&amp;quot;/&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;amp;lt;/when&amp;gt;&lt;br /&gt;
      .... more code ....&lt;br /&gt;
    &amp;amp;lt;/choose&amp;gt;&lt;br /&gt;
    &amp;amp;lt;/td&amp;gt;&amp;amp;lt;td style=&amp;quot;width:8em&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;amp;lt;if test=&amp;quot;date&amp;quot;&amp;gt;&amp;amp;lt;span class='right strong'&amp;gt;(&amp;amp;lt;print expr=&amp;quot;date&amp;quot; opts=&amp;quot;res=year&amp;quot;/&amp;gt;)&amp;amp;lt;/span&amp;gt;&amp;amp;lt;/if&amp;gt;&lt;br /&gt;
    &amp;amp;lt;/td&amp;gt;&amp;amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;amp;lt;tr&amp;gt;&amp;amp;lt;td style=&amp;quot;width:50%&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;amp;lt;cite:linkhere&amp;gt;&amp;amp;lt;xhtml:em&amp;gt;&amp;amp;lt;print expr=&amp;quot;title&amp;quot; opts=&amp;quot;magicstop&amp;quot;/&amp;gt;&amp;amp;lt;/xhtml:em&amp;gt;&amp;amp;lt;/cite:linkhere&amp;gt;&lt;br /&gt;
    &amp;amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;amp;lt;choose&amp;gt;&lt;br /&gt;
     .... more code&lt;br /&gt;
    &amp;amp;lt;when test=&amp;quot;type = 'article'&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;amp;lt;if test=&amp;quot;publication&amp;quot;&amp;gt;&amp;amp;lt;print expr=&amp;quot;publication&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;amp;lt;if test=&amp;quot;volume&amp;quot;&amp;gt;, &amp;amp;lt;print expr=&amp;quot;volume&amp;quot;/&amp;gt;&amp;amp;lt;/if&amp;gt;&lt;br /&gt;
        &amp;amp;lt;if test=&amp;quot;number&amp;quot;&amp;gt; (&amp;amp;lt;print expr=&amp;quot;number&amp;quot;/&amp;gt;)&amp;amp;lt;/if&amp;gt;&lt;br /&gt;
        .&amp;amp;lt;/if&amp;gt;&lt;br /&gt;
      &amp;amp;lt;if test=&amp;quot;pagerange&amp;quot;&amp;gt; &amp;amp;lt;print expr=&amp;quot;pagerange&amp;quot;/&amp;gt;.&amp;amp;lt;/if&amp;gt;&lt;br /&gt;
      &amp;amp;lt;/td&amp;gt;&amp;amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;amp;lt;if test=&amp;quot;issn&amp;quot;&amp;gt;&amp;lt;span class='right'&amp;gt; ISSN &amp;lt;print expr=&amp;quot;issn&amp;quot;/&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/if&amp;gt;&lt;br /&gt;
      &amp;amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;amp;lt;/when&amp;gt;&lt;br /&gt;
    .... more code&lt;br /&gt;
  &amp;amp;lt;/choose&amp;gt;&lt;br /&gt;
  &amp;amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;amp;lt;if test=&amp;quot; ! type.one_of( 'patent','thesis' )&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;amp;lt;if test=&amp;quot;ispublished.one_of('unpub', 'submitted', 'inpress')&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;amp;lt;tr&amp;gt;&amp;amp;lt;td colspan='2'&amp;gt;&lt;br /&gt;
     (&amp;amp;lt;print expr=&amp;quot;ispublished&amp;quot;/&amp;gt;)&lt;br /&gt;
    &amp;amp;lt;/td&amp;gt;&amp;amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;amp;lt;/if&amp;gt;&lt;br /&gt;
  &amp;amp;lt;/if&amp;gt;&lt;br /&gt;
  &amp;amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;amp;lt;/cite:citation&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This creates a table for each record, and CSS is used to manage the size &amp;amp; position of the various elements&lt;br /&gt;
&lt;br /&gt;
===cfg/cfg.d/eprint_render.pl===&lt;br /&gt;
When viewing a record, the main abstract view page can also be altered&lt;br /&gt;
&lt;br /&gt;
In &amp;lt;code&amp;gt;cfg/cfg.d/eprint_render.pl&amp;lt;/code&amp;gt;, towards the bottom of the subroutine &amp;lt;code&amp;gt;$c-&amp;gt;{eprint_render}&amp;lt;/code&amp;gt; is the following line:&lt;br /&gt;
&lt;br /&gt;
   my $page = $eprint-&amp;gt;render_citation( &amp;quot;router_page&amp;quot;, %fragments, flags=&amp;gt;$flags );&lt;br /&gt;
&lt;br /&gt;
Here, '''router_page''' is the name of the citation file for creating the abstract page..... '''router_page.xml''' in this case&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Adding_new_views&amp;diff=16248</id>
		<title>Adding new views</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Adding_new_views&amp;diff=16248"/>
		<updated>2024-07-02T16:32:06Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* The basics */  fixed typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Manual]]&lt;br /&gt;
[[Category:Browse Views]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Browse views provide a way for visitors to your site to discover relevant content without a specific item in mind (for example, browsing all the content associated with a particular topic). Visitors arriving directly at the page for a specific item in the repository (for example, via a search engine) also use views you have defined to discover related content. &lt;br /&gt;
&lt;br /&gt;
There are two default views in EPrints - '''By Year''' and '''By Subject'''. This guide describes how to add additional views to your repository. &lt;br /&gt;
Instead with this link you can read a [http://wiki.eprints.org/w/Views.pl complete list of all options] avaible for views.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
===The basics===&lt;br /&gt;
&lt;br /&gt;
The views for your repository are defined in the views configuration file:&lt;br /&gt;
&lt;br /&gt;
 /opt/eprints3/archives/ARCHIVEID/cfg/cfg.d/views.pl&lt;br /&gt;
&lt;br /&gt;
Open this file and find the browse_views configuration setting:&lt;br /&gt;
&lt;br /&gt;
 $c-&amp;gt;{browse_views} = [&lt;br /&gt;
        {&lt;br /&gt;
                id =&amp;gt; &amp;quot;year&amp;quot;,&lt;br /&gt;
                fields =&amp;gt; &amp;quot;-date;res=year&amp;quot;,&lt;br /&gt;
                ...&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
                id =&amp;gt; &amp;quot;subjects&amp;quot;,&lt;br /&gt;
                fields =&amp;gt; &amp;quot;subjects&amp;quot;,&lt;br /&gt;
                ...&lt;br /&gt;
        },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
The views are defined using a special (Perl) syntax: the view definition consists of a pair of curly braces (''note the comma after each closing brace'') enclosing a list of property/value pairs (note ''the comma'' after each line).&lt;br /&gt;
&lt;br /&gt;
The key part of the view definition is the '''fields''' property. This names the metadata field (or fields) that EPrints will use to construct the view. For example, for the '''By Year''' view, EPrints groups the records in the repository according to their '''date''' (note that the '''res=year''' suffix tells EPrints to only consider the year part), and constructs a Web page for each date listing the records. Similarly, the '''Browse by Subjects''' view, groups the records according to the ''subjects'' they have been assigned to (a record may appear in more than one group!).&lt;br /&gt;
&lt;br /&gt;
Both the '''Browse by Year''' and '''Browse by Subject''' views are constructed using the values of a single field ('''date''' and '''subjects''' respectively).&lt;br /&gt;
&lt;br /&gt;
It is also possible to construct a view using the ''combined'' values of two or more fields (eg. group records by author '''and''' editor), or even using a sequence of two or more fields (eg. group records by journal title '''and then''' by volume number).&lt;br /&gt;
&lt;br /&gt;
===Worked example: browse by organisational structure===&lt;br /&gt;
&lt;br /&gt;
By default, EPrints has a ''divisions'' metadata field which allows authors to associate their deposits with the divisions (units, faculties, schools, departments, institutes, centres..) that were involved in producing their item (for example, the author's department, and the departments of any co-authors). This worked example allows visitors to browse the repository content by division.&lt;br /&gt;
&lt;br /&gt;
Open the views configuration file:&lt;br /&gt;
&lt;br /&gt;
 /opt/eprints3/archives/ARCHIVEID/cfg/cfg.d/views.pl&lt;br /&gt;
&lt;br /&gt;
Add the following definition to the browse_views setting:&lt;br /&gt;
&lt;br /&gt;
 $c-&amp;gt;{browse_views} = [&lt;br /&gt;
        {&lt;br /&gt;
                id =&amp;gt; &amp;quot;year&amp;quot;,&lt;br /&gt;
                ...&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
                id =&amp;gt; &amp;quot;subjects&amp;quot;,&lt;br /&gt;
                ...&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
                id =&amp;gt; &amp;quot;divisions&amp;quot;,&lt;br /&gt;
                fields =&amp;gt; &amp;quot;divisions&amp;quot;,&lt;br /&gt;
                order =&amp;gt; &amp;quot;-date/title&amp;quot;,&lt;br /&gt;
                hideempty =&amp;gt; 1,&lt;br /&gt;
        },&lt;br /&gt;
 ];&lt;br /&gt;
&lt;br /&gt;
Save the file and generate the new view pages (this will also re-generate any existing views defined in the views configuration file):&lt;br /&gt;
&lt;br /&gt;
 bin/generate_views ARCHIVEID --verbose&lt;br /&gt;
&lt;br /&gt;
Open the view page in a Web browser:&lt;br /&gt;
&lt;br /&gt;
 http://your.repository.url/view/&lt;br /&gt;
&lt;br /&gt;
The view page lists all the available views. You should see your new views on the list:&lt;br /&gt;
&lt;br /&gt;
[[Image:View_page2.png|frame|none|The view page lists available views]]&lt;br /&gt;
&lt;br /&gt;
'''Fixing the undefined phrase warning''' The new view may appear on the views page with an ''undefined phrase'' warning (you may also notice a similar warning message when running generate_views):&lt;br /&gt;
&lt;br /&gt;
 [&amp;quot;viewname_eprint_divisions&amp;quot; not defined]&lt;br /&gt;
&lt;br /&gt;
Each view you create needs to be assigned a ''human-readable'' name, which EPrints will use on the view Web pages.&lt;br /&gt;
&lt;br /&gt;
Edit the language-specific phrases file for view names:&lt;br /&gt;
&lt;br /&gt;
 /opt/eprints3/archives/ARCHIVEID/cfg/lang/en/phrases/views.xml&lt;br /&gt;
&lt;br /&gt;
Add an appropriate phrase which describes the new view, for example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;epp:phrase id=&amp;quot;viewname_eprint_divisions&amp;quot;&amp;gt;Division&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Save the phrases file and regenerate the view pages:&lt;br /&gt;
&lt;br /&gt;
 bin/generate_views ARCHIVEID --verbose&lt;br /&gt;
&lt;br /&gt;
===Example view definitions===&lt;br /&gt;
&lt;br /&gt;
====Browse by type (3.3.8)====&lt;br /&gt;
&lt;br /&gt;
Every deposit in EPrints has a type (article, book, thesis...). To allow visitors to browse your repository content by type, add the following definition to the browse_views setting:&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    id=&amp;gt;&amp;quot;doctype&amp;quot;, &lt;br /&gt;
    menus =&amp;gt; [ &lt;br /&gt;
    { &lt;br /&gt;
      fields =&amp;gt; [ &amp;quot;type&amp;quot; ], &lt;br /&gt;
    },], &lt;br /&gt;
    order=&amp;gt;&amp;quot;-date&amp;quot;,&lt;br /&gt;
 },&lt;br /&gt;
&lt;br /&gt;
====Browse by author====&lt;br /&gt;
&lt;br /&gt;
===Example views (combined fields)===&lt;br /&gt;
&lt;br /&gt;
====Browse by author and editor====&lt;br /&gt;
&lt;br /&gt;
===Example views (multiple fields)===&lt;br /&gt;
&lt;br /&gt;
====Browse by journal title, then by volume====&lt;br /&gt;
&lt;br /&gt;
This example lets visitors browse the journals items in your repository have been published in, and then volumes within each journal.&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
        id=&amp;gt;&amp;quot;journal_volume&amp;quot;,&lt;br /&gt;
        fields=&amp;gt;&amp;quot;publication,volume&amp;quot;,&lt;br /&gt;
        order=&amp;gt;&amp;quot;-date/title&amp;quot;,&lt;br /&gt;
        hideempty =&amp;gt; 1,&lt;br /&gt;
 },&lt;br /&gt;
&lt;br /&gt;
[[Image:Browse_by_journal.png|border]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Browse_by_journal_volume.png|border]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Linking in your view===&lt;br /&gt;
&lt;br /&gt;
You now need to add a link to your repository pages which takes visitors directly to your new view, or to the views page from where they can access all available views.&lt;br /&gt;
&lt;br /&gt;
[[Image:Browse_by_navbar.png]]&lt;br /&gt;
&lt;br /&gt;
====Generating CVs etc====&lt;br /&gt;
&lt;br /&gt;
===Linking items back to views===&lt;br /&gt;
===Views as collections===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===New options in EPrints 3.1===&lt;br /&gt;
&lt;br /&gt;
====subfield no longer supported====&lt;br /&gt;
&lt;br /&gt;
The subfield option is no longer supported in EPrints 3.1.&lt;br /&gt;
&lt;br /&gt;
====new_column_at====&lt;br /&gt;
&lt;br /&gt;
This is an array of integers representing the number of items in a view list before another column is added.  For example:&lt;br /&gt;
&lt;br /&gt;
 [ 10 ]&lt;br /&gt;
&lt;br /&gt;
This would have one column of values until there were 11, then there would be 2 columns.&lt;br /&gt;
&lt;br /&gt;
 [ 10, 10 ]&lt;br /&gt;
&lt;br /&gt;
This would have one column if there were ten or less values, two columns if there were between eleven and twenty (ten + ten) values, and three columns for all other cases.&lt;br /&gt;
&lt;br /&gt;
 [ 0, 0 ]&lt;br /&gt;
&lt;br /&gt;
This would always have three columns.&lt;br /&gt;
&lt;br /&gt;
Add one to the number of integers in the array and you get the maximum number of columns.  The value of each integer defines the point at which that column becomes full, and more values cause an 'overflow' into the next column.&lt;br /&gt;
&lt;br /&gt;
====variations====&lt;br /&gt;
&lt;br /&gt;
This controls the various ways in which a browse view can be subheaded.  It consists of a list of strings.  Each string is the name of a non-compound metadata field (or the keyword DEFAULT, for an unsubheaded list), optionally followed by a semi-colon and a comma separated list of options.  E.G:&lt;br /&gt;
&lt;br /&gt;
 variations =&amp;gt; [&lt;br /&gt;
  &amp;quot;creators_name;first_letter&amp;quot;,&lt;br /&gt;
  &amp;quot;type&amp;quot;,&lt;br /&gt;
  &amp;quot;DEFAULT&amp;quot;&lt;br /&gt;
 ],&lt;br /&gt;
&lt;br /&gt;
See [[views.pl]] for the list of options.&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Upgrading_3.3.12%2B_to_3.4&amp;diff=16116</id>
		<title>Upgrading 3.3.12+ to 3.4</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Upgrading_3.3.12%2B_to_3.4&amp;diff=16116"/>
		<updated>2023-09-14T14:22:49Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* Pre-upgrade */ clarified epm download source.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These instructions help you upgrade EPrints 3.3.16+ (or any newer version of EPrints 3.3) to EPrints 3.4 while keeping all your eprints, documents and local configuration changes.&lt;br /&gt;
&lt;br /&gt;
It assumes your EPrints 3.3.16+ was installed using a tarball (tar.gz) file and installed in &amp;lt;code&amp;gt;/opt/eprints3&amp;lt;/code&amp;gt;. The commands in these instructions assume Centos 7 OS and run as the eprints user, unless it is stated to run as the root user.&lt;br /&gt;
&lt;br /&gt;
=Upgrade from Tarball=&lt;br /&gt;
&lt;br /&gt;
==Pre-upgrade==&lt;br /&gt;
* If you have local modifications to the core files (in /opt/eprints3/perl_lib), you may need to manually migrate your changes.&lt;br /&gt;
* If you use Twitter integration, use CPAN to install LWP::Authen::OAuth as this is no longer in perl_lib.  To do so, as root run:&lt;br /&gt;
 cpan LWP::Authen::OAuth&lt;br /&gt;
* Download each of the Bazaar plugins you have installed as EPM files from your existing repository.&lt;br /&gt;
* Make a backup of your local configurations.&lt;br /&gt;
&lt;br /&gt;
==Process==&lt;br /&gt;
&lt;br /&gt;
We will move your existing eprints 3.3.16+ installation from &amp;lt;code&amp;gt;/opt/eprints3/&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;/opt/eprints3.3&amp;lt;/code&amp;gt;, install eprints 3.4, then migrate your configurations into EPrints 3.4; cf. [https://wiki.eprints.org/w/Category:Installation Category Installation]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''as root'''&lt;br /&gt;
 apachectl stop&lt;br /&gt;
 cd /opt&lt;br /&gt;
 eprints3/bin/epindexer stop&lt;br /&gt;
 mv eprints3 eprints3.3&lt;br /&gt;
&lt;br /&gt;
* Download EPrints 3.4 core and publication flavour tarball and install them from [http://files.eprints.org/ Files.eprints.org] with&lt;br /&gt;
 wget https://files.eprints.org/2551/7/eprints-3.4.3.tar.gz&lt;br /&gt;
 wget https://files.eprints.org/2551/8/eprints-3.4.3-flavours.tar.gz&lt;br /&gt;
'''as root'''&lt;br /&gt;
 cd /root&lt;br /&gt;
 tar xvzf eprints-3.4.3.tar.gz&lt;br /&gt;
 tar xvzf eprints-3.4.3-flavours.tar.gz&lt;br /&gt;
&lt;br /&gt;
* Have a look to &amp;lt;code&amp;gt;/root/eprints-3.4.3/INSTALL&amp;lt;/code&amp;gt; for some local adaption options.&lt;br /&gt;
'''as root'''&lt;br /&gt;
 cd eprints-3.4.3&lt;br /&gt;
 ./configure&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
* Move your current repository from 3.3 to 3.4&lt;br /&gt;
'''as root'''&lt;br /&gt;
 cd /opt&lt;br /&gt;
 mv eprints3.3/archives/ARCHIVENAME eprints3/archives/&lt;br /&gt;
* After moving, make sure all files inside &amp;lt;code&amp;gt;/opt/eprints3&amp;lt;/code&amp;gt; are still owned by eprints user and belongs to eprints group, thus&lt;br /&gt;
'''as root'''&lt;br /&gt;
 chown -R eprints:eprints /opt/eprints3&lt;br /&gt;
&lt;br /&gt;
* Create &amp;lt;code&amp;gt;/opt/eprints3/archives/ARCHIVENAME/cfg/cfg.d/00_flavour.pl&amp;lt;/code&amp;gt; to set the appropriate flavour, typically 'pub', i.e. &lt;br /&gt;
 echo &amp;quot;\$c-&amp;gt;{flavour} = 'pub';&amp;quot; &amp;gt; /opt/eprints3/archives/ARCHIVENAME/cfg/cfg.d/00_flavour.pl&lt;br /&gt;
&lt;br /&gt;
* create a symbolic link to &amp;lt;tt&amp;gt;default.xml&amp;lt;/tt&amp;gt; &lt;br /&gt;
 cd /opt/eprints3/archives/ARCHIVENAME/cfg/templates/ (or /opt/eprints3/archives/ARCHIVENAME/cfg/lang/en/templates/&lt;br /&gt;
 ln -s default.xml default_internal.xml&lt;br /&gt;
&lt;br /&gt;
* Audit each of their local config files against the pub_lib flavours config files:&lt;br /&gt;
#The first &amp;lt;code&amp;gt;diff&amp;lt;/code&amp;gt; below will identify all the files that are the same.  If so, delete the ones in &amp;lt;code&amp;gt;archives/ARCHIVENAME/cfg/cfg.d/&amp;lt;/code&amp;gt;.  You almost certainly should not find any, as the files in &amp;lt;code&amp;gt;flavours/pub_lib/cfg.d&amp;lt;/code&amp;gt; will at very least have updated copyright/licensing boilerplate.&lt;br /&gt;
#The second &amp;lt;code&amp;gt;diff&amp;lt;/code&amp;gt; will find where files exists in both directory are different.  Here they should be compared to see, if the local differences are superficial (e.g. slightly different comments or spacing) and therefore can be removed.  Also the pub_lib flavour version may fix an outstanding bug or perform the required functionality more succinctly.  If this is the only change, then the local archive version can be deleted, otherwise the change should be incorporated in the local version.&lt;br /&gt;
 cd /opt/eprints3/&lt;br /&gt;
 diff -rs archives/ARCHIVENAME/cfg/cfg.d flavours/pub_lib/cfg.d | egrep '^Files .+ and .+ are identical$'&lt;br /&gt;
 diff -rq archives/ARCHIVENAME/cfg/cfg.d flavours/pub_lib/cfg.d | egrep '^Files .+ and .+ differ$'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Compare &amp;lt;code&amp;gt;archives/ARCHIVENAME/cfg/cfg.d/eprint_fields.pl&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;flavours/pub_lib/cfg/cfg.d/eprint_fields_pub.pl&amp;lt;/code&amp;gt;  maybe with the help of [http://diffuse.sourceforge.net/download_de.html ''diffuse''] to overcome this business easier:&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If these are different and fields are present in &amp;lt;code&amp;gt;eprint_fields_pub.pl&amp;lt;/code&amp;gt; and not &amp;lt;code&amp;gt;eprint_fields.pl&amp;lt;/code&amp;gt; or the definitions (e.g. type, options, etc.)  for the same field are different then:&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy &amp;lt;code&amp;gt;flavours/pub_lib/cfg.d/eprint_fields_pub.pl&amp;lt;/code&amp;gt; to their archive's &amp;lt;code&amp;gt;cfg/cfg.d/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;li&amp;gt;Modify the fields in their archive's &amp;lt;code&amp;gt;cfg/cfg.d/eprint_fields_pub.pl&amp;lt;/code&amp;gt; where they have different definitions (e.g. type, options, etc.) to those in &amp;lt;code&amp;gt;eprint_fields.pl&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;li&amp;gt;Remove all fields in their archive's &amp;lt;code&amp;gt;cfg/cfg.d/eprint_fields.pl&amp;lt;/code&amp;gt; where they also occur in their archive's &amp;lt;code&amp;gt;cfg/cfg.d/eprint_fields_pub.pl&amp;lt;/code&amp;gt;, no matter if already transferred due to previous item or initially the same.&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If there are only additional fields in &amp;lt;code&amp;gt;archives/ARCHIVENAME/cfg/cfg.d/eprint_fields.pl&amp;lt;/code&amp;gt; then just do the last step.&lt;br /&gt;
&amp;lt;li&amp;gt;If the two files are identical then you need to do nothing.  However, this is extremly unlikely.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Finally, the specification is still the same, but mostly split into two distinct files, which obey the known rule ''Local version overrides central one''.&amp;lt;/ul&amp;gt;&lt;br /&gt;
* Synchronise &amp;lt;code&amp;gt;archives/ARCHIVENAME/cfg/cfg.d/epm.pl&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;ingredients/bazaar/cfg.d/epm.pl&amp;lt;/code&amp;gt;, i.e. remove &amp;lt;code&amp;gt;archives/ARCHIVENAME/cfg/cfg.d/epm.pl&amp;lt;/code&amp;gt; in case of ''no'' local modifications.&lt;br /&gt;
&lt;br /&gt;
* Ensure the following bazaar files are disabled by renaming to FILENAME.pl''.disabled''.  Once they have been reinstalled via the Bazaar then they can be moved back into place.  Using &amp;lt;code&amp;gt;epadmin test&amp;lt;/code&amp;gt; is a good way of discovering which files need this doing, but below is a list of common files that should be temporarily moved, if they exist in your archive's &amp;lt;code&amp;gt;cfg/cfg.d/&amp;lt;/code&amp;gt; directory:&lt;br /&gt;
 mv z_orcid_support.pl z_orcid_support.pl.disabled&lt;br /&gt;
 mv zz_hefce_oa_fields.pl zz_hefce_oa_fields.pl.disabled&lt;br /&gt;
 mv zz_rioxx2.pl zz_rioxx2.pl.disabled&lt;br /&gt;
 mv z_meprints.pl z_meprints.pl.disabled &lt;br /&gt;
&lt;br /&gt;
* As the eprints user, run &amp;lt;code&amp;gt;epadmin update&amp;lt;/code&amp;gt; to add any new fields that were not previously present (typically this is embargo_reason for documents and requester_email for request)&lt;br /&gt;
 /opt/eprints3/bin/epadmin update ARCHIVENAME&lt;br /&gt;
&lt;br /&gt;
* Generate new Apache configuration and as root test (fixing any issues) and restart Apache after necessary site-specific adaption are done.&lt;br /&gt;
 /opt/eprints3/bin/generate_apacheconf --system --replace ARCHIVENAME&lt;br /&gt;
'''as root'''&lt;br /&gt;
 apachectl configtest&lt;br /&gt;
 apachectl restart&lt;br /&gt;
&lt;br /&gt;
* Once confirming that EPrints is generally working.  Go to Admin-&amp;gt;Bazaar then install the Bazaar plugins you downloaded from your 3.3 repository before starting the upgrade process.  This can be done by going to the Available tab in the Bazaar and strolling to the Upload section at the bottom.  Unfortunately, you cannot do a bulk upload, so will need to install each plugin in turn. &lt;br /&gt;
&lt;br /&gt;
* Move back the files you renamed to FILENAME''.disabled'' earlier, the epindexer into service and reload Apache&lt;br /&gt;
'''as root'''&lt;br /&gt;
 /opt/eprints3/bin/epindexer start&lt;br /&gt;
 apachectl graceful&lt;br /&gt;
&lt;br /&gt;
* Finally, run &amp;lt;code&amp;gt;generate_static&amp;lt;/code&amp;gt; to make sure all pages are regenerated with any changes to configuration.&lt;br /&gt;
  /opt/eprints3/bin/generate_static ARCHIVEID&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
* 3.4 does not automatically update an archive's &amp;lt;code&amp;gt;html/en/&amp;lt;/code&amp;gt; files. If there are any bugs with broken Javascript or unexpected CSS, try deleting the archives &amp;lt;code&amp;gt;html/en/javascript/auto.js&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;html/en/style/auto.css&amp;lt;/code&amp;gt;.  Similarly if a static page cannot be changed try deleting it under the archive's &amp;lt;code&amp;gt;html/en/&amp;lt;/code&amp;gt; or running &amp;lt;code&amp;gt;generate_static&amp;lt;/code&amp;gt;.&lt;br /&gt;
* If some perl modules are giving out error messages like: &lt;br /&gt;
  Can't locate object method &amp;quot;new&amp;quot; via package &amp;quot;EPrints::Plugin::Event::PIRUS&amp;quot; at /opt/eprints3/bin/../perl_lib/EPrints/PluginFactory.pm line 276.&lt;br /&gt;
  Can't locate object method &amp;quot;new&amp;quot; via package &amp;quot;EPrints::Plugin::Screen::EPrint::Box::Tools::SUPER&amp;quot; at /opt/eprints3/site_lib/plugins/EPrints/Plugin/Screen/EPrint/Box/Tools.pm line 12.&lt;br /&gt;
It is because their parent module has not been initialised. This happens when the parent module lives in perl_lib, and the problem module live in elsewhere; e.g. parent module of PIRUS(Event.pm) is in &amp;lt;code&amp;gt;./perl_lib&amp;lt;/code&amp;gt;, while the &amp;lt;code&amp;gt;PIRUS.pm&amp;lt;/code&amp;gt; is in &amp;lt;code&amp;gt;./pub_lib&amp;lt;/code&amp;gt;. &lt;br /&gt;
Just need to &amp;lt;code&amp;gt;use&amp;lt;/code&amp;gt; the parent module before the &amp;lt;code&amp;gt;ISA&amp;lt;/code&amp;gt; line:&lt;br /&gt;
 use EPrints::Plugin::Event;&lt;br /&gt;
&lt;br /&gt;
[[Category:Upgrading]]&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Installing_EPrints_on_RHEL/Fedora/CentOS&amp;diff=13102</id>
		<title>Installing EPrints on RHEL/Fedora/CentOS</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Installing_EPrints_on_RHEL/Fedora/CentOS&amp;diff=13102"/>
		<updated>2018-12-04T10:41:04Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* Installing from EPrints 3.3.x RPM */   Added note about proxy parameter to rpm calls&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Installation]]&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
&lt;br /&gt;
* RedHat Enterprise (RHEL) / CentOS 7 or Fedora 25+.  These instructions will more than likely work for RHEL / CentOS 6 but have not been as thoroughly tested.&lt;br /&gt;
&lt;br /&gt;
* Pre-installed MySQL server and client.&lt;br /&gt;
** RHEL / Fedora:&lt;br /&gt;
 yum install mysql-server mysql&lt;br /&gt;
** CentOS:&lt;br /&gt;
 yum install mariadb-server mariadb&lt;br /&gt;
&lt;br /&gt;
== Installing from EPrints 3.3.x RPM ==&lt;br /&gt;
&lt;br /&gt;
Add the rpm.eprints.org repository key:&lt;br /&gt;
&lt;br /&gt;
 rpm -ivh http://rpm.eprints.org/rpm-eprints-org-key-1-1.noarch.rpm&lt;br /&gt;
&lt;br /&gt;
Next, add the rpm.eprints.org EPrints repository:&lt;br /&gt;
&lt;br /&gt;
 rpm -ivh http://rpm.eprints.org/eprints/noarch/rpm-eprints-org-1-1.noarch.rpm&lt;br /&gt;
&lt;br /&gt;
Note: if these fail to connect to the repository and you have a proxy server, try adding the parameter &amp;quot;--httpproxy http://your.proxy.address&amp;quot; (export http_proxy doesn't affect rpm call)&lt;br /&gt;
&lt;br /&gt;
Install required XML libraries (Use ''yum upgrade'' if these are already installed):&lt;br /&gt;
&lt;br /&gt;
 yum install libxml2 libxslt perl-XML-LibXML perl-XML-LibXSLT&lt;br /&gt;
&lt;br /&gt;
Finally, install EPrints 3:&lt;br /&gt;
&lt;br /&gt;
 yum install eprints &lt;br /&gt;
&lt;br /&gt;
=== Other Non-critical Dependencies ===&lt;br /&gt;
Some of EPrints non-core functionality may not work out of the box as these dependencies are not included as part of the RPM.  Here is a list of known additional packages (and the YUM repositories in which they can be found) or CPAN modules than can be installed.  &lt;br /&gt;
&lt;br /&gt;
Some of these known additional packages are only available through the Extra Packages for Enterprise Linux (EPEL) YUM repository, which can be installed as the root user as follows:&lt;br /&gt;
&lt;br /&gt;
 yum -y install epel-release&lt;br /&gt;
 yum repolist &lt;br /&gt;
&lt;br /&gt;
CPAN modules should be installed using the ''cpan'' command as the root user.&lt;br /&gt;
 &lt;br /&gt;
* '''perl-Geo-IP (epel)''' - Allows IRstats2 to determine the location of views/downloads for publications.]&lt;br /&gt;
* '''perl-Spreadsheet-WriteExcel (epel)''' - To allow Multiline Excel export.&lt;br /&gt;
* '''CPAN module Text::Refer''' - Required for EndNote import.&lt;br /&gt;
* '''perl-Image-ExifTool (epel)''' - Sometimes needed to support generation of thumbnails for uploaded documents/images.&lt;br /&gt;
* '''perl-LWP-Protocol-https (base)''' - Needed by DataCite plugin to register repository DOIs.&lt;br /&gt;
&lt;br /&gt;
== Installing EPrints 3.3.x from Source ==&lt;br /&gt;
'''N.B. Installing from source is generally discouraged particularly for production repositories.  However, if want to develop the EPrints code or a plugin or Bazaar package it may be useful to install from source, ideally from [https://github.com/eprints/eprints EPrints Core Git repository].'''&lt;br /&gt;
&lt;br /&gt;
First, install the EPEL YUM package repository and run yum repolist to ensure the GPG key is installed:&lt;br /&gt;
&lt;br /&gt;
 yum install epel-release&lt;br /&gt;
 yum repolist&lt;br /&gt;
&lt;br /&gt;
Now, install all the dependencies that would be installed through the eprints RPM.&lt;br /&gt;
&lt;br /&gt;
 yum install libxml2 libxslt httpd mod_perl perl-DBI perl-DBD-MySQL perl-IO-Socket-SSL perl-Time-HiRes perl-CGI \&lt;br /&gt;
     perl-Digest-MD5 perl-Digest-SHA perl-XML-LibXML perl-XML-LibXSLT perl-XML-SAX perl-MIME-Lite tetex-latex wget \&lt;br /&gt;
     gzip tar ImageMagick unzip elinks poppler-utils chkconfig&lt;br /&gt;
&lt;br /&gt;
Next, create the eprints user&lt;br /&gt;
&lt;br /&gt;
 adduser eprints&lt;br /&gt;
&lt;br /&gt;
Next, clone the Git repository from GitHub to /opt/ and set the eprints user as the owner.  It is probably best to checkout the latest release rather than using HEAD, which may have known issues:&lt;br /&gt;
&lt;br /&gt;
 yum install git&lt;br /&gt;
 git clone https://github.com/eprints/eprints.git /opt/eprints3&lt;br /&gt;
 cd /opt/eprints3/&lt;br /&gt;
 git checkout tags/v3.3.15&lt;br /&gt;
 chown -R eprints:eprints . &lt;br /&gt;
&lt;br /&gt;
Next, as the eprints user copy /opt/eprints3/perl_lib/EPrints/SystemSettings.pm.tmpl to /opt/eprints3/perl_lib/Eprints/SystemSettings.pm&lt;br /&gt;
&lt;br /&gt;
EPrints is now fully installed at /opt/eprints3. However, you will not yet have a running archive. Follow the [[Getting Started with EPrints 3]] instructions to set this up.&lt;br /&gt;
&lt;br /&gt;
Now update Apache configuration to set it up to use the eprints user and group, by ensuring the following lines are set thus in /etc/httpd/conf/httpd.conf:&lt;br /&gt;
&lt;br /&gt;
 User  eprints&lt;br /&gt;
 Group eprints&lt;br /&gt;
&lt;br /&gt;
Now add the file /etc/httpd/conf.d/eprints.conf with the following line:&lt;br /&gt;
&lt;br /&gt;
 Include /opt/eprints3/cfg/apache.conf&lt;br /&gt;
&lt;br /&gt;
There is a good chance your operating system will have SELinux enabled.  If so, follow the instructions under Troubleshooting for how to let EPrints do what it needs to do through SELinux.&lt;br /&gt;
&lt;br /&gt;
Finally, restart Apache:&lt;br /&gt;
&lt;br /&gt;
  service httpd restart&lt;br /&gt;
&lt;br /&gt;
You should now be able to access your vanilla repository at the hostname you specified when running '''epadmin create''' from the [[Getting Started with EPrints 3]] instructions.&lt;br /&gt;
&lt;br /&gt;
== Next steps ==&lt;br /&gt;
&lt;br /&gt;
Configure eprints per [[Getting_Started_with_EPrints_3]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== Starting database and webserver at boot ===&lt;br /&gt;
As with any database-backed web application, if you have not already done so you should ensure the database and webserver start up automatically after booting.  For Redhat  and Fedora use the following commands as root:&lt;br /&gt;
&lt;br /&gt;
 chkconfig httpd on&lt;br /&gt;
 chkconfig mysqld on&lt;br /&gt;
&lt;br /&gt;
For CentOS it will instead be:&lt;br /&gt;
&lt;br /&gt;
 chkconfig httpd on&lt;br /&gt;
 chkconfig mariadb on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Failed to parse XML file ===&lt;br /&gt;
When installing EPrints on RHEL6 (may apply to other versions), If you get the error:&lt;br /&gt;
 Failed to parse XML file:&lt;br /&gt;
 /usr/share/eprints/lib/lang/en/phrases/system.xml: Entity: line 396: parser error : Entity 'nbsp' not defined age or title page. If there are more...&lt;br /&gt;
&lt;br /&gt;
Run&lt;br /&gt;
 sed -i 's/'''&amp;amp;'''nbsp;/ /g' /usr/share/eprints/lib/lang/en/phrases/system.xml&lt;br /&gt;
&lt;br /&gt;
then navigate to the root of your EPrints install (/opt/eprints or /usr/share/eprints) and run&lt;br /&gt;
 bin/generate_views *repository_id*&lt;br /&gt;
 bin/epadmin reload *repository_id*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Upgrade from previous 3.3 ===&lt;br /&gt;
After a upgrading from previous 3.3, your existing repository's database may need updating. &lt;br /&gt;
 bin/epadmin update [archive_id]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Apache in eprints group ===&lt;br /&gt;
&lt;br /&gt;
If you choose not to run apache as the eprints user (for example you have another application on the same server) you will need to change https's groups and update the permissions on some directories&lt;br /&gt;
&lt;br /&gt;
Add apache to eprints's group.&lt;br /&gt;
 usermod apache -G eprints&lt;br /&gt;
&lt;br /&gt;
One way to run httpd as 'apache' but still access eprints files is to add httpd to the eprints group.&lt;br /&gt;
 chmod 770 /usr/share/eprints/var&lt;br /&gt;
 chmod 770 /usr/share/eprints/lib/epm/&lt;br /&gt;
&lt;br /&gt;
Be aware that other directories will need to be writable by eprints user group/apache ; those depend on whether you will be using eprints bazaar.&lt;br /&gt;
&lt;br /&gt;
=== Using SELinux ===&lt;br /&gt;
If you're using SELinux on your server you will need to give Apache read/write access to the documents directory for all repositories you create and the eprints var folder (indexer log, ticker files):&lt;br /&gt;
&lt;br /&gt;
 chcon -R -h -t httpd_sys_script_rw_t [eprintspath]/archives/[repoid]/documents/&lt;br /&gt;
 chcon -R -h -t httpd_sys_script_rw_t [eprintspath]/var/&lt;br /&gt;
 chcon -R -h -t httpd_sys_script_rw_t /usr/share/eprints/lib/&lt;br /&gt;
&lt;br /&gt;
You may also need to tell SELinux to allow Apache to talk on the network, if you intend to run your database on a separate server.&lt;br /&gt;
&lt;br /&gt;
 setsebool -P httpd_can_network_connect=1&lt;br /&gt;
&lt;br /&gt;
=== Using firewalld ===&lt;br /&gt;
Typically RHEL/Fedora/CentOS run a firewall that will block remote connections to you webserver.  To overcome this run the following commands as root:&lt;br /&gt;
&lt;br /&gt;
 firewall-cmd --permanent --add-service=http&lt;br /&gt;
 service firewalld restart&lt;br /&gt;
&lt;br /&gt;
You will need to same https if you intend to set that up as well.  Otherwise, you can just disable the firewall altogether if you have an institutional level firewall:&lt;br /&gt;
&lt;br /&gt;
 service firewalld stop&lt;br /&gt;
 chkconfig firewalld off&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=GDPR&amp;diff=12750</id>
		<title>GDPR</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=GDPR&amp;diff=12750"/>
		<updated>2018-04-25T13:59:14Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* Non-Active Users Report */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has been created to gather information and share code snippets to help EPrints repositories handle GDPR responsibilities.&lt;br /&gt;
&lt;br /&gt;
==Last Login Time==&lt;br /&gt;
Storing the last login time of a user can be useful to identify which users are active and which are not to help ensure data is not being stored longer than is necessary.&lt;br /&gt;
&lt;br /&gt;
First a new user field for storing the time is required in user_fields.pl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
##user_fields.pl&lt;br /&gt;
&lt;br /&gt;
push @{$c-&amp;gt;{fields}-&amp;gt;{user}},&lt;br /&gt;
    {&lt;br /&gt;
        'name' =&amp;gt; 'last_login',&lt;br /&gt;
        'type' =&amp;gt; 'timestamp',&lt;br /&gt;
    },&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then add the following code to $c-&amp;gt;{check_user_password} in user_login.pl to store the time at which a user successfully logs in.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
##user_login.pl&lt;br /&gt;
&lt;br /&gt;
#get user from username&lt;br /&gt;
my $user = EPrints::DataObj::User::user_with_username( $repository, $username );&lt;br /&gt;
return 0 unless $user;&lt;br /&gt;
&lt;br /&gt;
#get time and compile a string&lt;br /&gt;
my( @local ) = localtime( time );&lt;br /&gt;
my ( $sec, $min, $hour, $day, $mon, $year ) = ( $local[0], $local[1], $local[2], $local[3], $local[4]+1, $local[5]+1900 );&lt;br /&gt;
my $loginTime = &amp;quot;$year-$mon-$day $hour:$min:$sec&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#store the value&lt;br /&gt;
$user-&amp;gt;set_value( &amp;quot;last_login&amp;quot;, $loginTime );&lt;br /&gt;
$user-&amp;gt;commit();&lt;br /&gt;
&lt;br /&gt;
#return user&lt;br /&gt;
return 1;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JLRS: An alternative approach (please discuss which is better) is to set the trigger on the loginticket dataset (different field spec from above - bigint):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
push @{$c-&amp;gt;{fields}-&amp;gt;{user}},&lt;br /&gt;
{&lt;br /&gt;
        name=&amp;gt;&amp;quot;last_login&amp;quot;,&lt;br /&gt;
        type=&amp;gt;&amp;quot;bigint&amp;quot;, #same as 'expires' field in EPrints::DataObj::LoginTicket&lt;br /&gt;
        required=&amp;gt;0,&lt;br /&gt;
        volatile=&amp;gt;1&lt;br /&gt;
}&lt;br /&gt;
;&lt;br /&gt;
$c-&amp;gt;add_dataset_trigger( 'loginticket', EPrints::Const::EP_TRIGGER_CREATED, sub&lt;br /&gt;
{&lt;br /&gt;
        my( %args ) = @_;&lt;br /&gt;
        my( $repo, $loginticket ) = @args{qw( repository dataobj )};&lt;br /&gt;
&lt;br /&gt;
        # trigger is global - check that current repository 'user' dataset has last_login field to be updated&lt;br /&gt;
        return unless $repo-&amp;gt;get_dataset( &amp;quot;user&amp;quot; )-&amp;gt;has_field( &amp;quot;last_login&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        #update volatile field in user record&lt;br /&gt;
        my $user = EPrints::DataObj::User-&amp;gt;new( $repo, $loginticket-&amp;gt;get_value( &amp;quot;userid&amp;quot; ) );&lt;br /&gt;
        if( defined $user ){&lt;br /&gt;
                $user-&amp;gt;set_value( &amp;quot;last_login&amp;quot;, $loginticket-&amp;gt;get_value( &amp;quot;expires&amp;quot; ) );&lt;br /&gt;
                $user-&amp;gt;commit();&lt;br /&gt;
        }&lt;br /&gt;
}, priority =&amp;gt; 100 );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Non-Active Users Report==&lt;br /&gt;
TODO&lt;br /&gt;
worth having a count of items linked with the user on the report, along with their statuses?&lt;br /&gt;
&lt;br /&gt;
==Delete User Action==&lt;br /&gt;
*Suggestion* Cron job to select all user accounts which have been inactive over a certain time threshold, check those users for affiliation to a publication (creator, editor, depositor etc.) which is either archive or buffer status and, where no connection exists, remove those user accounts.&lt;br /&gt;
&lt;br /&gt;
Admin will be able to select user accounts from the report to delete (within the report or individually?)&lt;br /&gt;
&lt;br /&gt;
==Add 'Agree to privacy and data statement' checkbox on registration or request forms==&lt;br /&gt;
TODO - should be 'versioned' - so if the statement changes, the version that was agreed to can be shown.&lt;br /&gt;
Possibly a set/namedset, with the available options limited to only one when rendered to a user?&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=GDPR&amp;diff=12749</id>
		<title>GDPR</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=GDPR&amp;diff=12749"/>
		<updated>2018-04-25T13:58:59Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* Delete User Action */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has been created to gather information and share code snippets to help EPrints repositories handle GDPR responsibilities.&lt;br /&gt;
&lt;br /&gt;
==Last Login Time==&lt;br /&gt;
Storing the last login time of a user can be useful to identify which users are active and which are not to help ensure data is not being stored longer than is necessary.&lt;br /&gt;
&lt;br /&gt;
First a new user field for storing the time is required in user_fields.pl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
##user_fields.pl&lt;br /&gt;
&lt;br /&gt;
push @{$c-&amp;gt;{fields}-&amp;gt;{user}},&lt;br /&gt;
    {&lt;br /&gt;
        'name' =&amp;gt; 'last_login',&lt;br /&gt;
        'type' =&amp;gt; 'timestamp',&lt;br /&gt;
    },&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then add the following code to $c-&amp;gt;{check_user_password} in user_login.pl to store the time at which a user successfully logs in.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
##user_login.pl&lt;br /&gt;
&lt;br /&gt;
#get user from username&lt;br /&gt;
my $user = EPrints::DataObj::User::user_with_username( $repository, $username );&lt;br /&gt;
return 0 unless $user;&lt;br /&gt;
&lt;br /&gt;
#get time and compile a string&lt;br /&gt;
my( @local ) = localtime( time );&lt;br /&gt;
my ( $sec, $min, $hour, $day, $mon, $year ) = ( $local[0], $local[1], $local[2], $local[3], $local[4]+1, $local[5]+1900 );&lt;br /&gt;
my $loginTime = &amp;quot;$year-$mon-$day $hour:$min:$sec&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#store the value&lt;br /&gt;
$user-&amp;gt;set_value( &amp;quot;last_login&amp;quot;, $loginTime );&lt;br /&gt;
$user-&amp;gt;commit();&lt;br /&gt;
&lt;br /&gt;
#return user&lt;br /&gt;
return 1;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JLRS: An alternative approach (please discuss which is better) is to set the trigger on the loginticket dataset (different field spec from above - bigint):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
push @{$c-&amp;gt;{fields}-&amp;gt;{user}},&lt;br /&gt;
{&lt;br /&gt;
        name=&amp;gt;&amp;quot;last_login&amp;quot;,&lt;br /&gt;
        type=&amp;gt;&amp;quot;bigint&amp;quot;, #same as 'expires' field in EPrints::DataObj::LoginTicket&lt;br /&gt;
        required=&amp;gt;0,&lt;br /&gt;
        volatile=&amp;gt;1&lt;br /&gt;
}&lt;br /&gt;
;&lt;br /&gt;
$c-&amp;gt;add_dataset_trigger( 'loginticket', EPrints::Const::EP_TRIGGER_CREATED, sub&lt;br /&gt;
{&lt;br /&gt;
        my( %args ) = @_;&lt;br /&gt;
        my( $repo, $loginticket ) = @args{qw( repository dataobj )};&lt;br /&gt;
&lt;br /&gt;
        # trigger is global - check that current repository 'user' dataset has last_login field to be updated&lt;br /&gt;
        return unless $repo-&amp;gt;get_dataset( &amp;quot;user&amp;quot; )-&amp;gt;has_field( &amp;quot;last_login&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        #update volatile field in user record&lt;br /&gt;
        my $user = EPrints::DataObj::User-&amp;gt;new( $repo, $loginticket-&amp;gt;get_value( &amp;quot;userid&amp;quot; ) );&lt;br /&gt;
        if( defined $user ){&lt;br /&gt;
                $user-&amp;gt;set_value( &amp;quot;last_login&amp;quot;, $loginticket-&amp;gt;get_value( &amp;quot;expires&amp;quot; ) );&lt;br /&gt;
                $user-&amp;gt;commit();&lt;br /&gt;
        }&lt;br /&gt;
}, priority =&amp;gt; 100 );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Non-Active Users Report==&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==Delete User Action==&lt;br /&gt;
*Suggestion* Cron job to select all user accounts which have been inactive over a certain time threshold, check those users for affiliation to a publication (creator, editor, depositor etc.) which is either archive or buffer status and, where no connection exists, remove those user accounts.&lt;br /&gt;
&lt;br /&gt;
Admin will be able to select user accounts from the report to delete (within the report or individually?)&lt;br /&gt;
&lt;br /&gt;
==Add 'Agree to privacy and data statement' checkbox on registration or request forms==&lt;br /&gt;
TODO - should be 'versioned' - so if the statement changes, the version that was agreed to can be shown.&lt;br /&gt;
Possibly a set/namedset, with the available options limited to only one when rendered to a user?&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Talk:GDPR&amp;diff=12748</id>
		<title>Talk:GDPR</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Talk:GDPR&amp;diff=12748"/>
		<updated>2018-04-25T13:28:49Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm kind of torn between the two methods - John's has the advantage that it isn't dependent upon the mechanism by which someone creates a login ticket so should be more universal (e.g. for us), but Will's has the advantage that it's perhaps easier to understand for the less specialist eprints dev / admin.  I.e. it doesn't use the magic of triggers, and it uses a date format that can be easily read rather than epoch timestamp (which apparently not everyone tracks on a daily basis) - Alan (2018-04-25 14:12:30z+01:00)&lt;br /&gt;
&lt;br /&gt;
== Code queries ==&lt;br /&gt;
&lt;br /&gt;
John, Are you deliberately storing just the expiry date of the login ticket rather than the specific login time?  Grand scheme I don't suppose it makes a lot of difference if there's an extra 7 days in the delete check. - Alan&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Talk:GDPR&amp;diff=12747</id>
		<title>Talk:GDPR</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Talk:GDPR&amp;diff=12747"/>
		<updated>2018-04-25T13:28:27Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* Code queries */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm kind of torn between the two methods - John's has the advantage that it isn't dependent upon the mechanism by which someone creates a login ticket so should be more universal (e.g. for us), but Will's has the advantage that it's perhaps easier to understand for the less specialist eprints dev / admin.  I.e. it doesn't use the magic of triggers, and it uses a date format that can be easily read rather than epoch timestamp (which apparently not everyone tracks on a daily basis) - Alan (2018-04-25 14:12:30z+01:00)&lt;br /&gt;
&lt;br /&gt;
== Code queries ==&lt;br /&gt;
&lt;br /&gt;
John, Are you deliberately storing just the expiry date of the login ticket rather than the specific login time?  Grand scheme I don't suppose it makes a lot of difference if there's an extra 7 days in the delete check.&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Talk:GDPR&amp;diff=12746</id>
		<title>Talk:GDPR</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Talk:GDPR&amp;diff=12746"/>
		<updated>2018-04-25T13:12:58Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm kind of torn between the two methods - John's has the advantage that it isn't dependent upon the mechanism by which someone creates a login ticket so should be more universal (e.g. for us), but Will's has the advantage that it's perhaps easier to understand for the less specialist eprints dev / admin.  I.e. it doesn't use the magic of triggers, and it uses a date format that can be easily read rather than epoch timestamp (which apparently not everyone tracks on a daily basis) - Alan (2018-04-25 14:12:30z+01:00)&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Talk:GDPR&amp;diff=12745</id>
		<title>Talk:GDPR</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Talk:GDPR&amp;diff=12745"/>
		<updated>2018-04-25T13:12:05Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: Created page with &amp;quot;I'm kind of torn between the two methods - John's has the advantage that it isn't dependent upon the mechanism by which someone creates a login ticket so should be more univer...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm kind of torn between the two methods - John's has the advantage that it isn't dependent upon the mechanism by which someone creates a login ticket so should be more universal (e.g. for us), but Will's has the advantage that it's perhaps easier to understand for the less specialist eprints dev / admin.  I.e. it doesn't use the magic of triggers, and it uses a date format that can be easily read rather than epoch timestamp (which apparently not everyone tracks on a daily basis)&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Id_field&amp;diff=12245</id>
		<title>Id field</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Id_field&amp;diff=12245"/>
		<updated>2016-12-19T14:45:01Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: updated description around deprecation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{fieldtypes}}&lt;br /&gt;
&lt;br /&gt;
[[Metadata]] field.&lt;br /&gt;
&lt;br /&gt;
Was marked as 'Deprecated. This is a lingering part of EPrints 2 and should not be used'  but has continued to be used through 3.3.x versions and as the basis of new Identifier types e.g. ORCID.&lt;br /&gt;
Useful in search as a 'match full value' rather than partial match of e.g. type 'text'&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Category:EPrints_Metadata_Fields&amp;diff=12244</id>
		<title>Category:EPrints Metadata Fields</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Category:EPrints_Metadata_Fields&amp;diff=12244"/>
		<updated>2016-12-19T14:42:48Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* Internal-use and Deprecated Field Types */  removed deprecation from ID field&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:EPrints 3 Reference]]&lt;br /&gt;
{{fieldtypes}}&lt;br /&gt;
== Metadata Field Types ==&lt;br /&gt;
&lt;br /&gt;
There are many different types of metadata field. The type controls how a field is rendered, indexed, searched and so forth. A field always has a type and a name property, and usually has several more. Most properties are documented on this page, but some properties are only available to certain types of field, and they are listed on the page for that field. &lt;br /&gt;
&lt;br /&gt;
Some of these subclasses provide very rich features, others very simple. For example the [[url field]] works just like the text field except that it's only valid if it looks like a url and when rendered it is a hyper-link.&lt;br /&gt;
&lt;br /&gt;
A metadata field describes one field of data in one type of [[Data Object]]. For example the &amp;quot;title&amp;quot; field of an [[EPrint Object]] or the &amp;quot;email&amp;quot; field in a [[User Object]]. &lt;br /&gt;
&lt;br /&gt;
Every [[Data Object]] has system fields (which are set by the system, and not alterable), but the [[User Object]] and [[EPrint Object]] have additional fields which are configured on a per-repository basis.&lt;br /&gt;
&lt;br /&gt;
These can be customised in the [[user_fields.pl]] and [[eprint_fields.pl]] files. Note that changing these files does not automatically modify the underlying database so should (generally) only be done before the database is created. Some metadata properties do not affect the database, and are marked as such. &lt;br /&gt;
&lt;br /&gt;
If you add or remove fields, or modify a property which affects the database then you'll need to alter the database to match.  In 3.0 this must be done by hand, but we have plans to build a tool to do this for you.&lt;br /&gt;
&lt;br /&gt;
Default values marked *config indicate that the default value for the repository may be modified in the configuration file [[field_property_defaults.pl]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Inheritance ==&lt;br /&gt;
&lt;br /&gt;
This is the list of ''useful'' field types. Under it is listed the other field types which are just included for completeness and are not intended to be used as part of the configuration.&lt;br /&gt;
&lt;br /&gt;
Some field types inherit the properties of another, and then modify them in some way. For example the [[namedset field]] works like a [[set field]] except that it gets its options from a namedsets file not from the options=&amp;gt;[] in the field properties.&lt;br /&gt;
&lt;br /&gt;
* '''Basic metadata field''' - this is abstract, fields must be one of the types listed below...&lt;br /&gt;
** '''[[Boolean field|Boolean]]''' - TRUE or FALSE (or can be unset, of course)&lt;br /&gt;
** '''[[Compound field|Compound]]''' - virtual field, joins together several &amp;quot;multiple&amp;quot; fields, e.g. author_name and author_email&lt;br /&gt;
*** '''[[Multilang field|Multilang]]''' - allows language variants of a field, e.g. titles in French, German and/or English.&lt;br /&gt;
** '''[[Date field|Date]]''' - stores a date&lt;br /&gt;
*** '''[[Time field|Time]]''' - stores a date and time&lt;br /&gt;
** '''[[Float field|Float]]''' - stores a floating-point value&lt;br /&gt;
** '''[[Int field|Int]]''' - a positive integer value&lt;br /&gt;
*** '''[[Itemref field|Itemref]]''' - a reference to another [[Data Object]] (e.g. a user or other eprint)&lt;br /&gt;
*** '''[[Pagerange field|Pagerange]]''' - a pagerange, e.g. 122-130&lt;br /&gt;
** '''[[Search field|Search]]''' - a serialised search &lt;br /&gt;
** '''[[Set field|Set]]''' - a limited set of options&lt;br /&gt;
*** '''[[Namedset field|Namedset]]''' - like a normal set, but takes its options from a [[namedset]] configuration file.&lt;br /&gt;
*** '''[[Subject field|Subject]]''' - possible values are taken from the [[Subject]] heirarchy. &lt;br /&gt;
** '''[[Text field|Text]]''' - the basic text field. Maximum 255 bytes. nb. uft-8 means some chars take more than one byte.&lt;br /&gt;
*** '''[[Email field|Email]]''' - an email address&lt;br /&gt;
*** '''[[Longtext field|Longtext]]''' - like text but allows much longer text (65,000 bytes)&lt;br /&gt;
*** '''[[Name field|Name]]''' - Stores a person's name broken up into logical parts.&lt;br /&gt;
*** '''[[Url field|Url]]''' - stores a URL&lt;br /&gt;
&lt;br /&gt;
=== Internal-use and Deprecated Field Types ===&lt;br /&gt;
&lt;br /&gt;
* '''Basic metadata field'''&lt;br /&gt;
** '''[[File field|File]]''' - virtual field represtenting the files in a document&lt;br /&gt;
** '''[[Id field|Id]]'''&lt;br /&gt;
** '''Int'''&lt;br /&gt;
*** '''[[Year field|Year]]''' - deprecated (do not use)&lt;br /&gt;
** '''[[Search field|Search]]''' - a serialised search &lt;br /&gt;
** '''Set'''&lt;br /&gt;
*** '''[[Arclanguage field|Arclanguage]]''' - as for set, but the options are the valid languages of this repository&lt;br /&gt;
*** '''[[Fields field|Fields]]''' - as for set, but the options are the fields in a dataset.&lt;br /&gt;
*** '''[[Langid field|Langid]]''' - used internally by [[multilang field]]s to store the language id.&lt;br /&gt;
** '''[[Subobject field|Subobject]]''' - a virtual field, similar to itemref, but representing an object or objects which are sub-parts of the current object (as oppose to just related in some way)&lt;br /&gt;
** '''Text'''&lt;br /&gt;
*** '''[[Fulltext field|Fulltext]]''' - virtual field used to represent the full text of an eprint&lt;br /&gt;
*** '''[[Secret field|Secret]]''' - used to store passwords&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
&lt;br /&gt;
Note that true/false properties use 1 and 0 to indicate their setting.&lt;br /&gt;
&lt;br /&gt;
Some properties can be temporarily set or overridden by the [[Workflow Format]] and [[Citation Format]] files.&lt;br /&gt;
&lt;br /&gt;
=== Core Properties ===&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| name || default ||  description&lt;br /&gt;
|-&lt;br /&gt;
| '''name''' || n/a ||  '''This property is always required (except on sub-fields of compound fields). This property affects the database structure.''' This is the internal name of the field. It should only contain a-z and underscores. It will be used to identify this field in scripts, other configuration files, in the database, and in the XML export/import system, etc. It must be unique within the object (so the [[EPrint Object]] can't have two fields called &amp;quot;email&amp;quot; but the eprint object and [[User Object]] could have a field each of the same name.&lt;br /&gt;
|-&lt;br /&gt;
| '''type''' || n/a || '''This property is always required. This property affects the database structure.''' This sets the type of the metafield, which in turn affects what other properties it may have. The value must be one of the metafield types listed above.&lt;br /&gt;
|-&lt;br /&gt;
| '''multiple''' || 0 || '''This property affects the database structure.''' This indicates if this field is a single value or a list of values. eg. &amp;quot;title&amp;quot; is only a single [[longtext field]] but &amp;quot;creators&amp;quot; is a multiple [[name field]]. In the database a non-multiple field is stored in one (or more) columns in the main object table, but a multiple field gets its own table.&lt;br /&gt;
|-&lt;br /&gt;
| '''sql_index''' || 1 ||  When the database is created this field indicates that an SQL index should be created to speed searching. Different field types override the default value with the sensible option for that type of field. It's not worth putting an sql index on a field that is only ever searched for words in it (like title or abstract) but it is worth indexing fields whoes values are explicitly searched for, or where ranges are searched - date fields, set fields etc. It's unlikely you'll need to set this by hand. You could change it after the database has been created; it won't break anything. In fact, it won't do anything at all.&lt;br /&gt;
|- &lt;br /&gt;
| '''sub_name''' || undef || '''This property affects the database structure.''' This is a special property which is required INSTEAD of the name field for the sub fields inside compound fields. The actual name of these fields is then forced to be parent field name+&amp;quot;_&amp;quot;+sub_name. For example in compound field &amp;quot;creators&amp;quot; is a sub field with sub_name &amp;quot;name&amp;quot;. In this case the actual name of the name field in the system, database etc. is creators_name.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Rendering Properties ===&lt;br /&gt;
&lt;br /&gt;
These properties affect how values of the metadata in this field are rendered.&lt;br /&gt;
&lt;br /&gt;
Certain of these properties can be turned on temporarily by the [[Citation Format]] files - render_magicstop for example.&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| name || default ||  description&lt;br /&gt;
|-&lt;br /&gt;
| '''browse_link''' || undef || This is the name of a [[view]] which values of this field should be linked to. For example if their was a browse by publishers view configured named &amp;quot;pubs&amp;quot;, then adding browse_link=&amp;gt;&amp;quot;pubs&amp;quot; to the publisher field would cause it to be linked into the page for the named publisher whenever it is rendered.&lt;br /&gt;
|-&lt;br /&gt;
| '''render_quiet''' || 0 || Normally if a field is rendered an it isn't set, it is rendered as a big ugly &amp;quot;UNSPECIFIED&amp;quot;. Setting render_quiet on a field means it just gets rendered as nothing if it's empty.&lt;br /&gt;
|-&lt;br /&gt;
| '''render_magicstop''' || 0 || If true then this renders a full stop at the end of this field. Unless the last character is a dot, question mark or exclamation mark. This helps avoid the ugly &amp;quot;World without Cheese?.&amp;quot; affect you get when titles end in ? or !.&lt;br /&gt;
|-&lt;br /&gt;
| '''render_noreturn''' || 0 || If true then all CR and LF's are turned into normal spaces.&lt;br /&gt;
|-&lt;br /&gt;
| '''render_dont_link''' || 0 || Set this to true to stop this field hyperlinking itself when rendered. Currently only affects [[url field]]s and [[email field]]s.&lt;br /&gt;
|-&lt;br /&gt;
| '''render_single_value''' || undef || The value of this property is the name of a subroutine to call to render values from this field. For a multiple field this is called once per value in the list of values. The function should take the following parameters: ( $session, $field, $value, $object). It should return an [[XHTML DOM]] object of the rendered value.&lt;br /&gt;
|- &lt;br /&gt;
| '''render_value''' || undef || As with render single value, but this gets passed the entire list of values (an array reference) if it's a multiple field. Parameters passed are: ( $session, $self, $value, $all_langs, $no_link, $object ). $all_langs indicates that all language variants should be shown - only really useful for multilang fields. $no_link being true is a request to place no hyperlinks in the resulting HTML. It should return an [[XHTML DOM]] object of the rendered value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Input and Validation Properties ===&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| name || default ||  description&lt;br /&gt;
|-&lt;br /&gt;
| '''required''' || 0 || If this is set to true then the field is always marked as required, no matter what the workflow says.&lt;br /&gt;
|-&lt;br /&gt;
| '''input_add_boxes''' || 2 *config || The number of rows to add when clicking the &amp;quot;more rows&amp;quot; button in a multiple or multilang field.&lt;br /&gt;
|- &lt;br /&gt;
| '''input_boxes''' || 3 *config || The number of input rows to initially show in a multiple field.&lt;br /&gt;
|-&lt;br /&gt;
| '''input_cols''' || 60 *config || The number of columns in a text input field.&lt;br /&gt;
|-&lt;br /&gt;
| '''input_rows''' || 10 *config || For longtext input fields, the number of rows of input to show. For set fields this is the number of items to show in a select menu.&lt;br /&gt;
|-&lt;br /&gt;
| '''input_lookup_url''' || undef || The URL to use for autocompletion. This is generally set using the workflow configuration rather than directly in the field configuration. The URL must be on the same server hostname as the repository.&lt;br /&gt;
|-&lt;br /&gt;
| '''input_lookup_params''' || undef || Additional parameters to pass to the input_lookup_url. For example an indication of which autocomplete file to use.&lt;br /&gt;
|-&lt;br /&gt;
| '''input_ordered''' || 1 || This is true by default. In some multiple fields, such as creators, the order of the values is important and by default numbers are shown to the left of input rows and to the right are &amp;quot;move up&amp;quot; and &amp;quot;move down&amp;quot; arrows. However, with some multiple fields the order is not important in which case you can set this to zero to stop the arrows and numbers being shown.&lt;br /&gt;
|-&lt;br /&gt;
| '''render_input''' || undef || The name of a subroutine which will render the input for this field. This is a bit tricky to use as it must return the same CGI parameters as the default input form would have. It's easiest on simple fields. The subroutine is passed the following parameters ( $field, $session, $current_value, $dataset, $staff, $hidden_fields, $object, $basename ). It should return the [[XHTML DOM]] object of the chunk of HTML form.&lt;br /&gt;
|-&lt;br /&gt;
| '''maxlength''' || 255 || This is a limit to the maximum allowed size of a value. It may be useful, for example, as a very simple validation check. Also it may confuse users to be allowed to type in 255 characters in a &amp;quot;postcode/zipcode&amp;quot; field.&lt;br /&gt;
|-&lt;br /&gt;
| '''toform''' || undef || This function is allowed to modify the current value which appears in the form. For example, if your database stores userids in a field, but you want to allow people to edit them as usernames, then this function can be used to take the current value (a userid) and return the associated username. This value is what appears in the field in the search form. It is passed ( $value, $session, $object, $basename ) and returns the user-facing version of $value. **As of version 3.3.13 this only gets passed $value and $session in Metafield.pm**&lt;br /&gt;
|-&lt;br /&gt;
| '''fromform''' || undef || The inverse of toform. This takes the value from the form and converts it into the value that will be stored in the database. It is passed the parameters ( $value, $session) when $value is the value entered on the web form, and the return value is the value to be stored in the database. This function is not called when editing the eprint is cancelled.&lt;br /&gt;
|-&lt;br /&gt;
| '''help_xhtml''' || undef || This can only be set via the [[Workflow Format]] configuration not via the metadata field directly. It is used to contain the XHTML to use as the help for this field. This is so that the workflow can conditionally change the help on a field.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Ordering, Indexing and Searching ===&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| name || default ||  description&lt;br /&gt;
|-&lt;br /&gt;
| '''text_index''' || 0 || If set to true the the indexer considers this field for full text indexing. Otherwise not. Some types of metadata field have a default of true, for example text and longtext.&lt;br /&gt;
|-&lt;br /&gt;
| '''search_cols''' || 40 *config || How many columns (characters) wide the input field for searching this type of field. If one search field searches more than one field then the properties from the first listed field are used.&lt;br /&gt;
|-&lt;br /&gt;
| '''make_single_value_orderkey''' || undef || The orderkey is the (potentially language specific) string used to order by this field. This property allows you to define a method to override the default eprints orderkey generation. This property is passed each value from multiple fields, in turn. It is passed ($field, $value) and returns an ordervalue string.&lt;br /&gt;
|-&lt;br /&gt;
| '''make_value_orderkey''' || undef || As with make_single_value_orderkey but this is passed the array reference for a multiple field rather than just single values. It should return the orderkey string for the entire value. It is passed ( $field, $value, $session, $language_id ).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Other Properties ===&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| name || default ||  description&lt;br /&gt;
|-&lt;br /&gt;
| '''can_clone''' || 1 || If this is set to false then this field is not copied when the object is &lt;br /&gt;
cloned. This is mostly used by system fields such as &amp;quot;dir&amp;quot; or &amp;quot;datestamp&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| '''show_in_fieldlist''' || 1 || Set this to false to prevent this field appearing in [[fields field]] lists. This is primarily to allow you to remove it from the list of fields in the user configuration which are used to control which fields appear as columns in the Items and Review screens.&lt;br /&gt;
|-&lt;br /&gt;
| '''show_in_html''' || 1 || If set to false then this field is not shown in the Details tab of the eprint control page. This is mostly used to hide confusing internal system fields like &amp;quot;dir&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| '''export_as_xml''' || 1 || Set this to false to prevent the field being exported in the XML export. This is handy to supress either confidential or confusing fields, like the fileinfo system field.&lt;br /&gt;
|-&lt;br /&gt;
| '''import''' || 1 || If set to false then new eprints can't be created with this value. For example &amp;quot;eprintid&amp;quot;, &amp;quot;dir&amp;quot; and so forth have this set to false. This can also prevent fields being set when import tools are used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Internal Properties ===&lt;br /&gt;
&lt;br /&gt;
These are set by the system. Editing them by hand will do '''''strange things'''''.&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| name || default ||  description&lt;br /&gt;
|-&lt;br /&gt;
| '''parent_name''' || undef || On subfields of compound fields this is set automatically to be the name of the parent field.&lt;br /&gt;
|-&lt;br /&gt;
| '''confid''' || *special || This is set to the id of the dataset that this field belongs to and is used to work out what phrase ids etc. it uses.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Deprecated or Buggy Properties ===&lt;br /&gt;
&lt;br /&gt;
Don't use these!&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
| name || default ||  description&lt;br /&gt;
|-&lt;br /&gt;
| '''input_advice_right''' || undef || Do not use.&lt;br /&gt;
|-&lt;br /&gt;
| '''input_advice_right''' || undef || Do not use.&lt;br /&gt;
|-&lt;br /&gt;
| '''input_assist''' || undef || Do not use.&lt;br /&gt;
|-&lt;br /&gt;
| '''requiredlangs''' || [] || Do not use.&lt;br /&gt;
|-&lt;br /&gt;
| '''allow_null''' || 0 || Do not use. Planned for use with compound fields, but not implemented in 3.0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Required Phrases ==&lt;br /&gt;
&lt;br /&gt;
These are phrases which you need to define in the local repository phrases file to control how this field renders. Some types of field (eg. [[set field]]s) have additional phrases in addition to the ones listed below.&lt;br /&gt;
&lt;br /&gt;
The actual name of the field, as it will appear to users is stored in &lt;br /&gt;
&lt;br /&gt;
 datasetid + &amp;quot;_fieldname_&amp;quot; + fieldname&lt;br /&gt;
&lt;br /&gt;
The default help to display, when the field is being input, is stored in&lt;br /&gt;
&lt;br /&gt;
 datasetid + &amp;quot;_fieldhelp_&amp;quot; + fieldname&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;epp:phrase id=&amp;quot;eprint_fieldname_abstract&amp;quot;&amp;gt;Abstract&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;
    &amp;lt;epp:phrase id=&amp;quot;eprint_fieldhelp_abstract&amp;quot;&amp;gt;A summary of the items content. &lt;br /&gt;
       If the item has a formal abstract then that is what should be entered &lt;br /&gt;
       here. No complicated text formatting is possible.&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Database ==&lt;br /&gt;
&lt;br /&gt;
Most fields have a representation in the SQL database using one or more columns. The sub-pages for each field type give the details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
When you request (or set) a value of a metadata field, it is usually handled as a perl scalar (which is a string or number).&lt;br /&gt;
&lt;br /&gt;
ALL values passed around in the API should be encoded in utf-8 or BAD THINGS may happen.&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
 $eprint-&amp;gt;set_value( &amp;quot;title&amp;quot;, &amp;quot;For Us, The Living&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
Sets the title to the given string.&lt;br /&gt;
&lt;br /&gt;
 my $foo = $eprint-&amp;gt;get_value( &amp;quot;title&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
Sets $foo to the string of the title, eg. &amp;quot;For Us, The Living&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Multiple Fields ===&lt;br /&gt;
&lt;br /&gt;
If a field is set to multiple, then instead of a single value, a reference to an array of values is used. Eg.&lt;br /&gt;
&lt;br /&gt;
 $eprint-&amp;gt;set_value( &amp;quot;corp_creators&amp;quot;, [ &amp;quot;Jims Research&amp;quot;, &amp;quot;Jones Research ] );&lt;br /&gt;
&lt;br /&gt;
=== Other Exceptions ===&lt;br /&gt;
&lt;br /&gt;
See the specific page for the full details.&lt;br /&gt;
&lt;br /&gt;
* [[name field]]s are represented as a hash of the parts.&lt;br /&gt;
&lt;br /&gt;
* [[compound field]]s do something a bit clever.&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=ORCID&amp;diff=12230</id>
		<title>ORCID</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=ORCID&amp;diff=12230"/>
		<updated>2016-10-27T14:16:40Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* Eprints Contributors (e.g. creators, editors) */  capital 'O'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has been created to gather information about how different EPrints repositories have integrated ORCID.&lt;br /&gt;
At this time (April 2016) there doesn't seem to be a 'best practice' approach that has been adopted widely - this will hopefully change over time.&lt;br /&gt;
&lt;br /&gt;
==Field Recommendations==&lt;br /&gt;
As at 2016-10-18 these are the recommended field names and types as discussed at the Jisc ORCID hack day in London - Alan Stiles, John Salter, Adam Vials Moore, Peter West, Andrew Beeken&lt;br /&gt;
&lt;br /&gt;
===New MetaField Type===&lt;br /&gt;
* Type 'Orcid' is a subtype of 'id', provides validation and render methods  &lt;br /&gt;
N.B. Store the 16 digit, hyphen separated value, without the authority (host) details e.g. 'nnnn-nnnn-nnnn-nnnn'  (as per the value returned by the ORCID API)&lt;br /&gt;
&lt;br /&gt;
===User Object===&lt;br /&gt;
*new field named 'orcid', type 'Orcid' to store the value of the ORCID id for that user&lt;br /&gt;
&lt;br /&gt;
====Suggested fields====&lt;br /&gt;
*'orcid_auth_code', type text - to hold the long authorisation token returned by the ORCID API at the end of a successful OAuth2 process&lt;br /&gt;
*'orcid_granted_permissions', type text - to hold the permissions granted via the ORCID API during the authorisation process&lt;br /&gt;
*'orcid_token_expires', type time - to hold the expiry timestamp for the authorisation code above (time now plus expires duration returned by the ORCID API)&lt;br /&gt;
*'orcid_last_update_timestamp', type text - to hold the timestamp of the last time the user's ORCID record was processed, to enable quicker reprocessing in the future.&lt;br /&gt;
*'orcid_webhook_ref', type text - to hold the value provided when configuring the webhook notification to validate new notifications have come from ORCID&lt;br /&gt;
&lt;br /&gt;
Also potential fields for requested permissions .e.g. boolean flags or text to capture auth codes if individual permissions captured separately? (e.g. Peter West work)&lt;br /&gt;
&lt;br /&gt;
===Eprints Contributors (e.g. creators, editors)===&lt;br /&gt;
*new sub-field of contributor_orcid  (e.g. creator_orcid, editor_orcid) type 'Orcid' to store the value of the ORCID id for that contributor&lt;br /&gt;
&lt;br /&gt;
==Previous Discussions==&lt;br /&gt;
If you are looking to retrieve publications from the ORCID service, the [http://bazaar.eprints.org/354/ Import from ORCID (Tier 1 API)] Bazaar package, or the [https://github.com/eprintsug/orcidt2 ORCID Tier 2 api framework] are good places to start.&lt;br /&gt;
&lt;br /&gt;
2016-05-20 [[User:Alan.stiles@open.ac.uk|Alan Stiles]] at The Open University is working on a plugin to connect EPrints with ORCID via the Tier 2 Members API to retrieve ORCID ids and synchronise publications and affiliation details.&lt;br /&gt;
&lt;br /&gt;
Some aspects that need to be considered when adopting ORCIDs, and making them available to other systems are:&lt;br /&gt;
&lt;br /&gt;
* storing the ORCID (see: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier)&lt;br /&gt;
* rendering the ORCID in abstract pages (see [http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier link above])&lt;br /&gt;
* exposing ORCIDs over OAI-PMH metadata profiles e.g. RIOXX&lt;br /&gt;
&lt;br /&gt;
NB The examples below may refer to the 'creators' field - but the same approach could be used to extend other 'person' fields - e.g. contributors.&lt;br /&gt;
&lt;br /&gt;
= Re-using creators.id subfield =&lt;br /&gt;
&lt;br /&gt;
The creators.id field is labelled 'email' by default, but as it's an 'id' type field, it can be used to store ORCIDs.&lt;br /&gt;
To re-label the field, a simple addition to a phrase file in &amp;lt;code&amp;gt;archives/ARCHIVEID/cfg/lang/en/phrases/&amp;lt;/code&amp;gt; needs to be made:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;epp:phrase id=&amp;quot;eprint_fieldname_creators_id&amp;quot;&amp;gt;ORCID / Creators email (if known)&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rendering the ORCID in a citation ==&lt;br /&gt;
The rendering of this field then needs to be changed to accommodate an author with an ORCID. The following script adds methods that can be called via the EPScript language:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# add to e.g. ~/archives/ARCHIVEID/cfg/cfg.d/z_add_to_EPrints_Script_Compiled.pl&lt;br /&gt;
# Write into EPrints::Script::Compiled package to allow use of function in epscript&lt;br /&gt;
{&lt;br /&gt;
package EPrints::Script::Compiled;&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
sub run_wrro_people_with_orcids&lt;br /&gt;
{&lt;br /&gt;
  my( $self, $state, $value ) = @_;&lt;br /&gt;
&lt;br /&gt;
  my $session = $state-&amp;gt;{session};&lt;br /&gt;
  my $r = $state-&amp;gt;{session}-&amp;gt;make_doc_fragment;&lt;br /&gt;
&lt;br /&gt;
  my $creators = $value-&amp;gt;[0];&lt;br /&gt;
&lt;br /&gt;
  foreach my $i (0..$#$creators){&lt;br /&gt;
&lt;br /&gt;
    my $creator = @$creators[$i];&lt;br /&gt;
&lt;br /&gt;
    if( $i &amp;gt; 0 ){&lt;br /&gt;
      #not first item (or only one item)&lt;br /&gt;
      if( $i == $#$creators ){&lt;br /&gt;
        #last item&lt;br /&gt;
        $r-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot; and &amp;quot; ) );&lt;br /&gt;
      } else {&lt;br /&gt;
        $r-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;, &amp;quot; ) );&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    my $person_span = $session-&amp;gt;make_element( &amp;quot;span&amp;quot;, &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;person&amp;quot; );&lt;br /&gt;
    $person_span-&amp;gt;appendChild( $session-&amp;gt;render_name( $creator-&amp;gt;{name} ) );&lt;br /&gt;
&lt;br /&gt;
    my $id = $creator-&amp;gt;{id};&lt;br /&gt;
    if( defined $id &amp;amp;&amp;amp; $id =~ m/^(?:orcid.org\/)?(\d{4}\-\d{4}\-\d{4}\-\d{3}(?:\d|X))$/ )&lt;br /&gt;
    {&lt;br /&gt;
      my $orcid_span = $session-&amp;gt;make_element( &amp;quot;span&amp;quot;, &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;orcid&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
#   According to https://orcid.org/trademark-and-id-display-guidelines&lt;br /&gt;
#     &amp;quot;recommended display is a hyperlinked URI preceded by the iD icon&amp;quot;&lt;br /&gt;
#   This looks terrible in a citation. Removed for the time being.&lt;br /&gt;
#&lt;br /&gt;
#   my $orcid_link = $session-&amp;gt;make_element(&lt;br /&gt;
#     &amp;quot;a&amp;quot;,&lt;br /&gt;
#     &amp;quot;href&amp;quot; =&amp;gt; &amp;quot;http://orcid.org/&amp;quot;,&lt;br /&gt;
#     &amp;quot;target&amp;quot; =&amp;gt; &amp;quot;_blank&amp;quot;,&lt;br /&gt;
#     &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;orcid-icon&amp;quot;&lt;br /&gt;
#   );&lt;br /&gt;
#   $orcid_link-&amp;gt;appendChild( $session-&amp;gt;make_element(&lt;br /&gt;
#     &amp;quot;img&amp;quot;,&lt;br /&gt;
#     &amp;quot;src&amp;quot; =&amp;gt; &amp;quot;/images/orcid_16x16.png&amp;quot;,&lt;br /&gt;
#     &amp;quot;title&amp;quot; =&amp;gt; &amp;quot;ORCID&amp;quot;&lt;br /&gt;
#   ) );&lt;br /&gt;
#   $orcid_span-&amp;gt;appendChild( $orcid_link );&lt;br /&gt;
&lt;br /&gt;
      my $link = $session-&amp;gt;make_element(&lt;br /&gt;
        &amp;quot;a&amp;quot;,&lt;br /&gt;
        &amp;quot;href&amp;quot; =&amp;gt; &amp;quot;http://orcid.org/$1&amp;quot;,&lt;br /&gt;
        &amp;quot;target&amp;quot; =&amp;gt; &amp;quot;_blank&amp;quot;,&lt;br /&gt;
      );&lt;br /&gt;
      $link-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;orcid.org/$1&amp;quot; ) );&lt;br /&gt;
&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;(&amp;quot; ) );&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $link );&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;)&amp;quot; ) );&lt;br /&gt;
&lt;br /&gt;
      $person_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot; &amp;quot; ) );&lt;br /&gt;
      $person_span-&amp;gt;appendChild( $orcid_span );&lt;br /&gt;
    }&lt;br /&gt;
    $r-&amp;gt;appendChild( $person_span );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return [ $r, &amp;quot;XHTML&amp;quot; ];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
# END EPrints::Script::Compiled additions&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also want a bit of CSS to style ORCID links&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Add to e.g. ~/archives/ARCHIVEID/cfg/static/style/auto/zzz_orcid.css */&lt;br /&gt;
.person:hover {border-bottom: 1px dashed #a6ce39;}&lt;br /&gt;
.orcid {}&lt;br /&gt;
.orcid a:hover {&lt;br /&gt;
        color: #a6ce39;&lt;br /&gt;
}&lt;br /&gt;
.orcid-icon {}&lt;br /&gt;
.orcid-icon img { vertical-align: text-bottom; margin: 0 4px 0 2px; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And finally, you have to call the new EPScript function from a citation file e.g. &amp;lt;code&amp;gt;archives/ARCHIVEID/cfg/citations/eprint/default.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- replace reference to e.g. &amp;lt;print expr=&amp;quot;creators_name&amp;quot;/&amp;gt; with this: --&amp;gt;&lt;br /&gt;
    &amp;lt;print expr=&amp;quot;wrro_people_with_orcids(creators)&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exposing the ORCID in RIOXX ==&lt;br /&gt;
Based on re-using the creators.id field, this block of code over-writes the default &amp;lt;code&amp;gt;rioxx2_value_author&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# Add to e.g. ~/archives/ARCHIVEID/cfg/cfg.d/zzz_rioxx2_overwrites.pl&lt;br /&gt;
$c-&amp;gt;{rioxx2_value_author} = sub {&lt;br /&gt;
  my( $eprint ) = @_;&lt;br /&gt;
&lt;br /&gt;
  my @authors;&lt;br /&gt;
  for( @{ $eprint-&amp;gt;value( &amp;quot;creators&amp;quot; ) } )&lt;br /&gt;
  {&lt;br /&gt;
    my $id = $_-&amp;gt;{id}; # if you use a custom 'orcid' field, reference that here instead of 'id'&lt;br /&gt;
    if( defined $id &amp;amp;&amp;amp; $id =~ m/^(?:orcid.org\/)?(\d{4}\-\d{4}\-\d{4}\-\d{3}(?:\d|X))$/ )&lt;br /&gt;
    {&lt;br /&gt;
      push @authors, {&lt;br /&gt;
        author =&amp;gt; EPrints::Utils::make_name_string( $_-&amp;gt;{name} ),&lt;br /&gt;
        id =&amp;gt; &amp;quot;http://orcid.org/$1&amp;quot;&lt;br /&gt;
      };&lt;br /&gt;
    } else {&lt;br /&gt;
      push @authors, {&lt;br /&gt;
        author =&amp;gt; EPrints::Utils::make_name_string( $_-&amp;gt;{name} ),&lt;br /&gt;
      };&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #NB If your corp_creators has DOIs or ISNIs for the entries, a similar method could be used to include these here.&lt;br /&gt;
  foreach my $corp ( @{ $eprint-&amp;gt;value( &amp;quot;corp_creators&amp;quot; ) } )&lt;br /&gt;
  {&lt;br /&gt;
    my $entry = {};&lt;br /&gt;
    $entry-&amp;gt;{name} = $corp;&lt;br /&gt;
    push @authors, { author =&amp;gt; $corp };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return \@authors;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Add additional identifiers to creators =&lt;br /&gt;
Another approach to storing ORCIDs is to add an additional sub-field to the creator field.&lt;br /&gt;
This has been discussed on the Eprints tech list. If you know how to do this, please document it here!&lt;br /&gt;
&lt;br /&gt;
This is how University of Bath has done it.  We're getting the ORCID data from another system, so have used a text field to capture it for display.  At present there is no special rendering on it, it's just displaying as a number.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	name =&amp;gt; 'creators',&lt;br /&gt;
	type =&amp;gt; 'compound',&lt;br /&gt;
	multiple =&amp;gt; 1,&lt;br /&gt;
	fields =&amp;gt; [&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'name',&lt;br /&gt;
			type =&amp;gt; 'name',&lt;br /&gt;
			hide_honourific =&amp;gt; 1,&lt;br /&gt;
			hide_lineage =&amp;gt; 1,&lt;br /&gt;
			family_first =&amp;gt; 1,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'id',&lt;br /&gt;
			type =&amp;gt; 'text',&lt;br /&gt;
			input_cols =&amp;gt; 20,&lt;br /&gt;
			allow_null =&amp;gt; 1,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'orcid',&lt;br /&gt;
			type =&amp;gt; 'text',&lt;br /&gt;
			input_cols =&amp;gt; 20,&lt;br /&gt;
			allow_null =&amp;gt; 1,&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	],&lt;br /&gt;
	input_boxes =&amp;gt; 4,&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This is how University of Pittsburgh has done it:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
          {&lt;br /&gt;
            'name' =&amp;gt; 'creators',&lt;br /&gt;
            'type' =&amp;gt; 'compound',&lt;br /&gt;
            'multiple' =&amp;gt; 1,&lt;br /&gt;
            'fields' =&amp;gt; [&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'name',&lt;br /&gt;
                            'type' =&amp;gt; 'name',&lt;br /&gt;
                            'hide_honourific' =&amp;gt; 1,&lt;br /&gt;
                            'hide_lineage' =&amp;gt; 1,&lt;br /&gt;
                            'family_first' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'email',&lt;br /&gt;
                            'type' =&amp;gt; 'text',&lt;br /&gt;
                            'input_cols' =&amp;gt; 20,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'id',&lt;br /&gt;
                            'type' =&amp;gt; 'text',&lt;br /&gt;
                            'input_cols' =&amp;gt; 20,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'orcid',&lt;br /&gt;
                            'type' =&amp;gt; 'id',&lt;br /&gt;
                            'input_cols' =&amp;gt; 19,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                        ],&lt;br /&gt;
            'input_boxes' =&amp;gt; 4,&lt;br /&gt;
            'render_value' =&amp;gt; 'custom_render_creators_with_orcid',&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notes from Pittsburgh:==&lt;br /&gt;
(Information courtesy of Brian Gregg - bdgregg@pitt.edu)&lt;br /&gt;
&lt;br /&gt;
We have added some ORCID functionality in our IR System here at the University of Pittsburgh.  We however have not “linked” our IR with orcid.org in anyway such as we do not have a lookup user in ORCID or the ability to add publications from ORCID to our IR.  The only link is the entering of the ORCID into the system so that it can be displayed.&lt;br /&gt;
&lt;br /&gt;
An example record is available here: [http://d-scholarship.pitt.edu/28114/ http://d-scholarship.pitt.edu/28114/]&lt;br /&gt;
&lt;br /&gt;
# Users have an ORCID field in their profile – user_fields.pl&lt;br /&gt;
# Any “Creator” types have an ORCID field added to the workflow – eprint_fields.pl&lt;br /&gt;
# We have added ORCID validation adhering to this document: [http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier] - eprint_validate.pl&lt;br /&gt;
# We have added the ORCID to the “lookup” function to populate the ORCID field from any user entries in the database. – cgi/users/lookup/name&lt;br /&gt;
# We display the ORCID as such on the input form, where the green icon links out to our own orcid.pitt.edu site, but could be to orcid.org by default.&lt;br /&gt;
# We display the ORCID as such on the public display of the record where the ORCID is linked out to orcid.org (see [http://d-scholarship.pitt.edu/28114/ example record])&lt;br /&gt;
&lt;br /&gt;
ORCID Validator - snippet for eprints_validate.pl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
        # ORCID ID Validator for individuals&lt;br /&gt;
        # Reference: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier&lt;br /&gt;
        # REGEX: ^\d{4}-\d{4}-\d{4}-(\d{3}X|\d{4})$&lt;br /&gt;
        #&lt;br /&gt;
        my @name_fields = qw( creators contributors exhibitors producers conductors lyricists );  #which ever name fields you added 'orcid' to.&lt;br /&gt;
        foreach my $name_field ( @name_fields )&lt;br /&gt;
        {&lt;br /&gt;
           if( $eprint-&amp;gt;is_set( $name_field ) )&lt;br /&gt;
           {&lt;br /&gt;
              foreach my $creator ( @{ $eprint-&amp;gt;value( $name_field ) } )&lt;br /&gt;
              {&lt;br /&gt;
                 my $orcid = $creator-&amp;gt;{orcid};&lt;br /&gt;
                 next unless defined $orcid;&lt;br /&gt;
                 if ($repository-&amp;gt;get_repository-&amp;gt;can_call ( &amp;quot;validators&amp;quot;, &amp;quot;isValidORCID&amp;quot; ) )&lt;br /&gt;
                 {&lt;br /&gt;
                    if (!$repository-&amp;gt;get_repository-&amp;gt;call( [ &amp;quot;validators&amp;quot;, &amp;quot;isValidORCID&amp;quot; ], $orcid ))&lt;br /&gt;
                    {&lt;br /&gt;
                       my $field_text = $repository-&amp;gt;html_phrase( &amp;quot;eprint_fieldname_$name_field&amp;quot; );&lt;br /&gt;
                       my $field_frag = $repository-&amp;gt;make_element( &amp;quot;span&amp;quot;, class=&amp;gt;&amp;quot;ep_problem_field:$name_field&amp;quot; );&lt;br /&gt;
                       $field_frag-&amp;gt;appendChild($field_text);&lt;br /&gt;
                       push @problems, $repository-&amp;gt;html_phrase( &amp;quot;warnings:orcid_invalid&amp;quot;,&lt;br /&gt;
                            orcid =&amp;gt; $repository-&amp;gt;get_repository-&amp;gt;make_text($orcid),&lt;br /&gt;
                            field =&amp;gt; $field_frag,&lt;br /&gt;
                        );&lt;br /&gt;
                    }&lt;br /&gt;
                 } else {&lt;br /&gt;
                    $repository-&amp;gt;get_repository-&amp;gt;log( &amp;quot;Can not call isValidORCID.&amp;quot; );&lt;br /&gt;
                 }&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Phrase for &amp;quot;warnings:orcid_invalid&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;epp:phrase id=&amp;quot;warnings:orcid_invalid&amp;quot;&amp;gt;The ORCID ID: &amp;lt;b&amp;gt;&amp;lt;epc:pin name=&amp;quot;orcid&amp;quot;/&amp;gt;&amp;lt;/b&amp;gt; is not a valid ORCID ID as it does not conform to the ORCID ID specification.  Please edit the &amp;lt;epc:pin name=&amp;quot;field&amp;quot;/&amp;gt; with the associated ORCID or remove it from the name completely.&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additional Function that can be placed either at the end of eprints_validate.pl (after the final };) or elsewhere:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
############################################&lt;br /&gt;
# Function:     isValidORCID&lt;br /&gt;
# Description:  Used to validate ORCID IDs&lt;br /&gt;
# &lt;br /&gt;
# From: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier (Checksum)&lt;br /&gt;
#&lt;br /&gt;
$c-&amp;gt;{validators}-&amp;gt;{isValidORCID} = sub {&lt;br /&gt;
   my $ORCID = $_[0];&lt;br /&gt;
   #Check for valid length of 19 characters.&lt;br /&gt;
   my $size = length($ORCID);&lt;br /&gt;
   if ($size &amp;gt; 19 )&lt;br /&gt;
   {&lt;br /&gt;
        return 0;&lt;br /&gt;
   } else {&lt;br /&gt;
      #Check actual validity of the ID mathematically.&lt;br /&gt;
      $ORCID =~ s/\-//g;&lt;br /&gt;
      my @chars = split(//, $ORCID);&lt;br /&gt;
      my $total = 0;&lt;br /&gt;
      for ( my $i=0; $i&amp;lt;15; $i++) {&lt;br /&gt;
         $total = ($total + $chars[$i]) *2;&lt;br /&gt;
      }&lt;br /&gt;
      my $remainder = $total % 11;&lt;br /&gt;
      my $result = (12 - $remainder) % 11;&lt;br /&gt;
      return ($chars[15] == ($result==10 ? 'X' : $result))&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additionally you will have to define a custom render to add the fields to be displayed in the abstract/summary page.&lt;br /&gt;
&lt;br /&gt;
= Rendering with Bootstrap =&lt;br /&gt;
&lt;br /&gt;
[[File:orcid_bootstrap.png|thumb|left|alt=ORCIDs displaying in the Bootstrap theme|ORCID and Bootstrap]]&lt;br /&gt;
&lt;br /&gt;
In a recent redesign of [http://eprints.whiterose.ac.uk White Rose Research Online] the [https://github.com/eprintsug/bootstrap Bootstrap theme] was used.&lt;br /&gt;
The ORCID links are now enhanced with a tooltip and the green icon. There may be examples on the [http://eprints.whiterose.ac.uk/cgi/latest_tool latest 20 additions] page.&lt;br /&gt;
&lt;br /&gt;
== Bootstrap tooltop ==&lt;br /&gt;
This block of code finds anything with a class of 'orcid', and adds the green logo to it, and a tooltip that reads 'ORCID: ''orcid-value''', as shown in the image.&lt;br /&gt;
&lt;br /&gt;
The example code below is based on the following rendering of a person who may have an ORCID:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- NB line-breaks added here for readability are not normally output by EPrints! --&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;person&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;person_name&amp;quot;&amp;gt;Castillo Ortiz, P.J.&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;a href=&amp;quot;http://orcid.org/0000-0003-4540-1855&amp;quot; target=&amp;quot;_blank&amp;quot; class=&amp;quot;orcid&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;span&amp;gt;orcid.org/0000-0003-4540-1855&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== jQuery ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// selector used here depends on your rendering. You may want to use something like a[href*='orcid.org/0000-']&lt;br /&gt;
jQuery('.orcid').tooltip({&lt;br /&gt;
	'placement': 'auto',&lt;br /&gt;
	'title': function(){ return &amp;quot;ORCID: &amp;quot;+ jQuery(this).text()},&lt;br /&gt;
}).append('&amp;lt;img src=&amp;quot;/images/orcid_16x16.png&amp;quot; alt=&amp;quot;&amp;quot; /&amp;gt;').find('span').hide();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSS ==&lt;br /&gt;
The green colouring is added using the following css, which also makes the background of the tooltip opaque, not semi-transparent as it is by default.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.person + .tooltip &amp;gt; .tooltip-inner,&lt;br /&gt;
.orcid + .tooltip &amp;gt; .tooltip-inner {&lt;br /&gt;
  background-color: #A6CE39;&lt;br /&gt;
  border: 1px solid #000000;&lt;br /&gt;
  white-space: pre;&lt;br /&gt;
  max-width: none;&lt;br /&gt;
}&lt;br /&gt;
.person + .tooltip.in,&lt;br /&gt;
.orcid + .tooltip.in {&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  filter: alpha(opacity=100);&lt;br /&gt;
}&lt;br /&gt;
/* This adds a green dashed line under an author's name when hovered. This helps in big author lists to tie initials and surname together */&lt;br /&gt;
.person:hover {border-bottom: 1px dashed #a6ce39;}&lt;br /&gt;
.orcid a:hover {&lt;br /&gt;
        color: #a6ce39;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OAI-PMH (Experimental) =&lt;br /&gt;
'''[[User:Libjlrs]] 2016-09-29 Warning: this is experimental. I hope others will read, understand, question and improve on this before it becomes some form of best practice!'''&lt;br /&gt;
&lt;br /&gt;
Some metadata profiles support attributes that are useful to propagate ORCIDs e.g. RIOXX (see the [[#Exposing_the_ORCID_in_RIOXX]] section above, and the 'rioxxterms:author' section on http://www.rioxx.net/profiles/v2-0-final/ ).&lt;br /&gt;
&lt;br /&gt;
A lot of harvesters use the oai_dc metadata profile when harvesting records. The DC schema doesn't allow attributes on the dc:creator element, so ORCIDs cannot be added in a sensible way to this profile.&lt;br /&gt;
&lt;br /&gt;
The details below create an additional metadata prefix that adds an attribute to the dc:creator field. The original &amp;lt;code&amp;gt;metadataPrefix=oai_dc&amp;lt;/code&amp;gt; output remains unchanged. Using &amp;lt;code&amp;gt;metadataPrefix=oai_dc_orcid&amp;lt;/code&amp;gt; will add the orcid attribute where available.&lt;br /&gt;
&lt;br /&gt;
Currently there is not an XSD that describes this change, so a harvester that validates the feed may stop when it encounters an ORCID.&lt;br /&gt;
&lt;br /&gt;
This example is based on the &amp;lt;code&amp;gt;EPrints::Plugin::Export::OAI_DC&amp;lt;/code&amp;gt; module from EPrints 3.3.10. You may need to tweak it to make it work for you!&lt;br /&gt;
&lt;br /&gt;
File: &amp;lt;code&amp;gt;~/archives/ARCHIVEID/cfg/plugins/EPrints/Plugin/Export/OAI_DC_ORCID.pm&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
package EPrints::Plugin::Export::OAI_DC_ORCID;&lt;br /&gt;
&lt;br /&gt;
use EPrints::Plugin::Export::OAI_DC;&lt;br /&gt;
&lt;br /&gt;
@ISA = ( &amp;quot;EPrints::Plugin::Export::OAI_DC&amp;quot;, &amp;quot;EPrints::Plugin::Export::DC&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
sub new&lt;br /&gt;
{&lt;br /&gt;
        my( $class, %opts ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $self = $class-&amp;gt;SUPER::new( %opts );&lt;br /&gt;
&lt;br /&gt;
        $self-&amp;gt;{name} = &amp;quot;Dublin Core - OAI + ORCID Schema&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{accept} = [ 'dataobj/eprint' ];&lt;br /&gt;
        $self-&amp;gt;{visible} = &amp;quot;&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{suffix} = &amp;quot;.xml&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{mimetype} = &amp;quot;text/xml&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        $self-&amp;gt;{metadataPrefix} = &amp;quot;oai_dc_orcid&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{xmlns} = &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc/&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{schemaLocation} = &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc.xsd&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub xml_dataobj&lt;br /&gt;
{&lt;br /&gt;
        my( $plugin, $dataobj ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $data = $plugin-&amp;gt;convert_dataobj( $dataobj );&lt;br /&gt;
&lt;br /&gt;
        my $dc = $plugin-&amp;gt;{session}-&amp;gt;make_element(&lt;br /&gt;
                &amp;quot;oai_dc:dc&amp;quot;,&lt;br /&gt;
                &amp;quot;xmlns:oai_dc&amp;quot; =&amp;gt; &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc/&amp;quot;,&lt;br /&gt;
                &amp;quot;xmlns:dc&amp;quot; =&amp;gt; &amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;,&lt;br /&gt;
                &amp;quot;xmlns:xsi&amp;quot; =&amp;gt; &amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;,&lt;br /&gt;
                &amp;quot;xsi:schemaLocation&amp;quot; =&amp;gt;&lt;br /&gt;
        &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        # turn the list of pairs into XML blocks (indented by 8) and add them&lt;br /&gt;
        # them to the DC element.&lt;br /&gt;
        foreach( @{$data} )&lt;br /&gt;
        {&lt;br /&gt;
                $dc-&amp;gt;appendChild(  $plugin-&amp;gt;{session}-&amp;gt;render_data_element( 8, &amp;quot;dc:&amp;quot;.$_-&amp;gt;[0], $_-&amp;gt;[1], %{$_-&amp;gt;[2]} ) );&lt;br /&gt;
                # produces &amp;lt;key&amp;gt;value&amp;lt;/key&amp;gt;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $dc;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub convert_dataobj&lt;br /&gt;
{&lt;br /&gt;
        my( $plugin, $eprint ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $dataset = $eprint-&amp;gt;{dataset};&lt;br /&gt;
&lt;br /&gt;
        my @dcdata = ();&lt;br /&gt;
&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, title =&amp;gt; &amp;quot;title&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;creators&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $creators = $eprint-&amp;gt;get_value( &amp;quot;creators&amp;quot; );&lt;br /&gt;
                foreach my $creator ( @$creators )&lt;br /&gt;
                {&lt;br /&gt;
                        next if !defined $creator;&lt;br /&gt;
&lt;br /&gt;
                        # NOTE THIS IS VERY CRUDE, and should be replaced with more elegant methods (possibly from examples elsewhere on this page).&lt;br /&gt;
                        if( defined $creator-&amp;gt;{id} &amp;amp;&amp;amp; $creator-&amp;gt;{id} =~ /0000/ ){&lt;br /&gt;
                                push @dcdata, [ &amp;quot;creator&amp;quot;, EPrints::Utils::make_name_string( $creator-&amp;gt;{name} ), { 'orcid' =&amp;gt; $creator-&amp;gt;{id} } ];&lt;br /&gt;
                        } else {&lt;br /&gt;
                                push @dcdata, [ &amp;quot;creator&amp;quot;, EPrints::Utils::make_name_string( $creator-&amp;gt;{name} ) ];&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;subjects&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $subjectid;&lt;br /&gt;
                foreach $subjectid ( @{$eprint-&amp;gt;get_value( &amp;quot;subjects&amp;quot; )} )&lt;br /&gt;
                {&lt;br /&gt;
                        my $subject = EPrints::DataObj::Subject-&amp;gt;new( $plugin-&amp;gt;{session}, $subjectid );&lt;br /&gt;
                        # avoid problems with bad subjects&lt;br /&gt;
                                next unless( defined $subject );&lt;br /&gt;
                        push @dcdata, [ &amp;quot;subject&amp;quot;, EPrints::Utils::tree_to_utf8( $subject-&amp;gt;render_description() ) ];&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, abstract =&amp;gt; &amp;quot;description&amp;quot; );&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, publisher =&amp;gt; &amp;quot;publisher&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;editors_name&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $editors = $eprint-&amp;gt;get_value( &amp;quot;editors_name&amp;quot; );&lt;br /&gt;
                if( defined $editors )&lt;br /&gt;
                {&lt;br /&gt;
                        foreach my $editor ( @{$editors} )&lt;br /&gt;
                        {&lt;br /&gt;
                                push @dcdata, [ &amp;quot;contributor&amp;quot;, EPrints::Utils::make_name_string( $editor ) ];&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        ## Date for discovery. For a month/day we don't have, assume 01.&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;date&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $date = $eprint-&amp;gt;get_value( &amp;quot;date&amp;quot; );&lt;br /&gt;
                if( defined $date )&lt;br /&gt;
                {&lt;br /&gt;
                        $date =~ s/(-0+)+$//;&lt;br /&gt;
                        push @dcdata, [ &amp;quot;date&amp;quot;, $date ];&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;type&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                push @dcdata, [ &amp;quot;type&amp;quot;, EPrints::Utils::tree_to_utf8( $eprint-&amp;gt;render_value( &amp;quot;type&amp;quot; ) ) ];&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        my $ref = &amp;quot;NonPeerReviewed&amp;quot;;&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;refereed&amp;quot; ) &amp;amp;&amp;amp; $eprint-&amp;gt;get_value( &amp;quot;refereed&amp;quot; ) eq &amp;quot;TRUE&amp;quot; )&lt;br /&gt;
        {&lt;br /&gt;
                $ref = &amp;quot;PeerReviewed&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        push @dcdata, [ &amp;quot;type&amp;quot;, $ref ];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        my @documents = $eprint-&amp;gt;get_all_documents();&lt;br /&gt;
        my $mimetypes = $plugin-&amp;gt;{session}-&amp;gt;get_repository-&amp;gt;get_conf( &amp;quot;oai&amp;quot;, &amp;quot;mime_types&amp;quot; );&lt;br /&gt;
        foreach( @documents )&lt;br /&gt;
        {&lt;br /&gt;
                my $format = $mimetypes-&amp;gt;{$_-&amp;gt;get_value(&amp;quot;format&amp;quot;)};&lt;br /&gt;
                $format = $_-&amp;gt;get_value(&amp;quot;format&amp;quot;) unless defined $format;&lt;br /&gt;
                #$format = &amp;quot;application/octet-stream&amp;quot; unless defined $format;&lt;br /&gt;
                push @dcdata, [ &amp;quot;format&amp;quot;, $format ];&lt;br /&gt;
                push @dcdata, [ &amp;quot;identifier&amp;quot;, $_-&amp;gt;get_url() ];&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        # Most commonly a DOI or journal link&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, official_url =&amp;gt; &amp;quot;relation&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        # The citation for this eprint&lt;br /&gt;
        push @dcdata, [ &amp;quot;identifier&amp;quot;,&lt;br /&gt;
                EPrints::Utils::tree_to_utf8( $eprint-&amp;gt;render_citation() ) ];&lt;br /&gt;
&lt;br /&gt;
        # The URL of the abstract page&lt;br /&gt;
        if( $eprint-&amp;gt;is_set( &amp;quot;eprintid&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                push @dcdata, [ &amp;quot;relation&amp;quot;, $eprint-&amp;gt;get_url() ];&lt;br /&gt;
        }&lt;br /&gt;
        # dc.language not handled yet.&lt;br /&gt;
        # dc.source not handled yet.&lt;br /&gt;
        # dc.coverage not handled yet.&lt;br /&gt;
        # dc.rights not handled yet.&lt;br /&gt;
&lt;br /&gt;
        return \@dcdata;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=ORCID&amp;diff=12229</id>
		<title>ORCID</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=ORCID&amp;diff=12229"/>
		<updated>2016-10-27T14:15:52Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* User Object */  capital 'O'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has been created to gather information about how different EPrints repositories have integrated ORCID.&lt;br /&gt;
At this time (April 2016) there doesn't seem to be a 'best practice' approach that has been adopted widely - this will hopefully change over time.&lt;br /&gt;
&lt;br /&gt;
==Field Recommendations==&lt;br /&gt;
As at 2016-10-18 these are the recommended field names and types as discussed at the Jisc ORCID hack day in London - Alan Stiles, John Salter, Adam Vials Moore, Peter West, Andrew Beeken&lt;br /&gt;
&lt;br /&gt;
===New MetaField Type===&lt;br /&gt;
* Type 'Orcid' is a subtype of 'id', provides validation and render methods  &lt;br /&gt;
N.B. Store the 16 digit, hyphen separated value, without the authority (host) details e.g. 'nnnn-nnnn-nnnn-nnnn'  (as per the value returned by the ORCID API)&lt;br /&gt;
&lt;br /&gt;
===User Object===&lt;br /&gt;
*new field named 'orcid', type 'Orcid' to store the value of the ORCID id for that user&lt;br /&gt;
&lt;br /&gt;
====Suggested fields====&lt;br /&gt;
*'orcid_auth_code', type text - to hold the long authorisation token returned by the ORCID API at the end of a successful OAuth2 process&lt;br /&gt;
*'orcid_granted_permissions', type text - to hold the permissions granted via the ORCID API during the authorisation process&lt;br /&gt;
*'orcid_token_expires', type time - to hold the expiry timestamp for the authorisation code above (time now plus expires duration returned by the ORCID API)&lt;br /&gt;
*'orcid_last_update_timestamp', type text - to hold the timestamp of the last time the user's ORCID record was processed, to enable quicker reprocessing in the future.&lt;br /&gt;
*'orcid_webhook_ref', type text - to hold the value provided when configuring the webhook notification to validate new notifications have come from ORCID&lt;br /&gt;
&lt;br /&gt;
Also potential fields for requested permissions .e.g. boolean flags or text to capture auth codes if individual permissions captured separately? (e.g. Peter West work)&lt;br /&gt;
&lt;br /&gt;
===Eprints Contributors (e.g. creators, editors)===&lt;br /&gt;
*new sub-field of contributor_orcid  (e.g. creator_orcid, editor_orcid) type 'orcid' to store the value of the ORCID id for that contributor&lt;br /&gt;
&lt;br /&gt;
==Previous Discussions==&lt;br /&gt;
If you are looking to retrieve publications from the ORCID service, the [http://bazaar.eprints.org/354/ Import from ORCID (Tier 1 API)] Bazaar package, or the [https://github.com/eprintsug/orcidt2 ORCID Tier 2 api framework] are good places to start.&lt;br /&gt;
&lt;br /&gt;
2016-05-20 [[User:Alan.stiles@open.ac.uk|Alan Stiles]] at The Open University is working on a plugin to connect EPrints with ORCID via the Tier 2 Members API to retrieve ORCID ids and synchronise publications and affiliation details.&lt;br /&gt;
&lt;br /&gt;
Some aspects that need to be considered when adopting ORCIDs, and making them available to other systems are:&lt;br /&gt;
&lt;br /&gt;
* storing the ORCID (see: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier)&lt;br /&gt;
* rendering the ORCID in abstract pages (see [http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier link above])&lt;br /&gt;
* exposing ORCIDs over OAI-PMH metadata profiles e.g. RIOXX&lt;br /&gt;
&lt;br /&gt;
NB The examples below may refer to the 'creators' field - but the same approach could be used to extend other 'person' fields - e.g. contributors.&lt;br /&gt;
&lt;br /&gt;
= Re-using creators.id subfield =&lt;br /&gt;
&lt;br /&gt;
The creators.id field is labelled 'email' by default, but as it's an 'id' type field, it can be used to store ORCIDs.&lt;br /&gt;
To re-label the field, a simple addition to a phrase file in &amp;lt;code&amp;gt;archives/ARCHIVEID/cfg/lang/en/phrases/&amp;lt;/code&amp;gt; needs to be made:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;epp:phrase id=&amp;quot;eprint_fieldname_creators_id&amp;quot;&amp;gt;ORCID / Creators email (if known)&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rendering the ORCID in a citation ==&lt;br /&gt;
The rendering of this field then needs to be changed to accommodate an author with an ORCID. The following script adds methods that can be called via the EPScript language:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# add to e.g. ~/archives/ARCHIVEID/cfg/cfg.d/z_add_to_EPrints_Script_Compiled.pl&lt;br /&gt;
# Write into EPrints::Script::Compiled package to allow use of function in epscript&lt;br /&gt;
{&lt;br /&gt;
package EPrints::Script::Compiled;&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
sub run_wrro_people_with_orcids&lt;br /&gt;
{&lt;br /&gt;
  my( $self, $state, $value ) = @_;&lt;br /&gt;
&lt;br /&gt;
  my $session = $state-&amp;gt;{session};&lt;br /&gt;
  my $r = $state-&amp;gt;{session}-&amp;gt;make_doc_fragment;&lt;br /&gt;
&lt;br /&gt;
  my $creators = $value-&amp;gt;[0];&lt;br /&gt;
&lt;br /&gt;
  foreach my $i (0..$#$creators){&lt;br /&gt;
&lt;br /&gt;
    my $creator = @$creators[$i];&lt;br /&gt;
&lt;br /&gt;
    if( $i &amp;gt; 0 ){&lt;br /&gt;
      #not first item (or only one item)&lt;br /&gt;
      if( $i == $#$creators ){&lt;br /&gt;
        #last item&lt;br /&gt;
        $r-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot; and &amp;quot; ) );&lt;br /&gt;
      } else {&lt;br /&gt;
        $r-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;, &amp;quot; ) );&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    my $person_span = $session-&amp;gt;make_element( &amp;quot;span&amp;quot;, &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;person&amp;quot; );&lt;br /&gt;
    $person_span-&amp;gt;appendChild( $session-&amp;gt;render_name( $creator-&amp;gt;{name} ) );&lt;br /&gt;
&lt;br /&gt;
    my $id = $creator-&amp;gt;{id};&lt;br /&gt;
    if( defined $id &amp;amp;&amp;amp; $id =~ m/^(?:orcid.org\/)?(\d{4}\-\d{4}\-\d{4}\-\d{3}(?:\d|X))$/ )&lt;br /&gt;
    {&lt;br /&gt;
      my $orcid_span = $session-&amp;gt;make_element( &amp;quot;span&amp;quot;, &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;orcid&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
#   According to https://orcid.org/trademark-and-id-display-guidelines&lt;br /&gt;
#     &amp;quot;recommended display is a hyperlinked URI preceded by the iD icon&amp;quot;&lt;br /&gt;
#   This looks terrible in a citation. Removed for the time being.&lt;br /&gt;
#&lt;br /&gt;
#   my $orcid_link = $session-&amp;gt;make_element(&lt;br /&gt;
#     &amp;quot;a&amp;quot;,&lt;br /&gt;
#     &amp;quot;href&amp;quot; =&amp;gt; &amp;quot;http://orcid.org/&amp;quot;,&lt;br /&gt;
#     &amp;quot;target&amp;quot; =&amp;gt; &amp;quot;_blank&amp;quot;,&lt;br /&gt;
#     &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;orcid-icon&amp;quot;&lt;br /&gt;
#   );&lt;br /&gt;
#   $orcid_link-&amp;gt;appendChild( $session-&amp;gt;make_element(&lt;br /&gt;
#     &amp;quot;img&amp;quot;,&lt;br /&gt;
#     &amp;quot;src&amp;quot; =&amp;gt; &amp;quot;/images/orcid_16x16.png&amp;quot;,&lt;br /&gt;
#     &amp;quot;title&amp;quot; =&amp;gt; &amp;quot;ORCID&amp;quot;&lt;br /&gt;
#   ) );&lt;br /&gt;
#   $orcid_span-&amp;gt;appendChild( $orcid_link );&lt;br /&gt;
&lt;br /&gt;
      my $link = $session-&amp;gt;make_element(&lt;br /&gt;
        &amp;quot;a&amp;quot;,&lt;br /&gt;
        &amp;quot;href&amp;quot; =&amp;gt; &amp;quot;http://orcid.org/$1&amp;quot;,&lt;br /&gt;
        &amp;quot;target&amp;quot; =&amp;gt; &amp;quot;_blank&amp;quot;,&lt;br /&gt;
      );&lt;br /&gt;
      $link-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;orcid.org/$1&amp;quot; ) );&lt;br /&gt;
&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;(&amp;quot; ) );&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $link );&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;)&amp;quot; ) );&lt;br /&gt;
&lt;br /&gt;
      $person_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot; &amp;quot; ) );&lt;br /&gt;
      $person_span-&amp;gt;appendChild( $orcid_span );&lt;br /&gt;
    }&lt;br /&gt;
    $r-&amp;gt;appendChild( $person_span );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return [ $r, &amp;quot;XHTML&amp;quot; ];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
# END EPrints::Script::Compiled additions&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also want a bit of CSS to style ORCID links&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Add to e.g. ~/archives/ARCHIVEID/cfg/static/style/auto/zzz_orcid.css */&lt;br /&gt;
.person:hover {border-bottom: 1px dashed #a6ce39;}&lt;br /&gt;
.orcid {}&lt;br /&gt;
.orcid a:hover {&lt;br /&gt;
        color: #a6ce39;&lt;br /&gt;
}&lt;br /&gt;
.orcid-icon {}&lt;br /&gt;
.orcid-icon img { vertical-align: text-bottom; margin: 0 4px 0 2px; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And finally, you have to call the new EPScript function from a citation file e.g. &amp;lt;code&amp;gt;archives/ARCHIVEID/cfg/citations/eprint/default.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- replace reference to e.g. &amp;lt;print expr=&amp;quot;creators_name&amp;quot;/&amp;gt; with this: --&amp;gt;&lt;br /&gt;
    &amp;lt;print expr=&amp;quot;wrro_people_with_orcids(creators)&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exposing the ORCID in RIOXX ==&lt;br /&gt;
Based on re-using the creators.id field, this block of code over-writes the default &amp;lt;code&amp;gt;rioxx2_value_author&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# Add to e.g. ~/archives/ARCHIVEID/cfg/cfg.d/zzz_rioxx2_overwrites.pl&lt;br /&gt;
$c-&amp;gt;{rioxx2_value_author} = sub {&lt;br /&gt;
  my( $eprint ) = @_;&lt;br /&gt;
&lt;br /&gt;
  my @authors;&lt;br /&gt;
  for( @{ $eprint-&amp;gt;value( &amp;quot;creators&amp;quot; ) } )&lt;br /&gt;
  {&lt;br /&gt;
    my $id = $_-&amp;gt;{id}; # if you use a custom 'orcid' field, reference that here instead of 'id'&lt;br /&gt;
    if( defined $id &amp;amp;&amp;amp; $id =~ m/^(?:orcid.org\/)?(\d{4}\-\d{4}\-\d{4}\-\d{3}(?:\d|X))$/ )&lt;br /&gt;
    {&lt;br /&gt;
      push @authors, {&lt;br /&gt;
        author =&amp;gt; EPrints::Utils::make_name_string( $_-&amp;gt;{name} ),&lt;br /&gt;
        id =&amp;gt; &amp;quot;http://orcid.org/$1&amp;quot;&lt;br /&gt;
      };&lt;br /&gt;
    } else {&lt;br /&gt;
      push @authors, {&lt;br /&gt;
        author =&amp;gt; EPrints::Utils::make_name_string( $_-&amp;gt;{name} ),&lt;br /&gt;
      };&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #NB If your corp_creators has DOIs or ISNIs for the entries, a similar method could be used to include these here.&lt;br /&gt;
  foreach my $corp ( @{ $eprint-&amp;gt;value( &amp;quot;corp_creators&amp;quot; ) } )&lt;br /&gt;
  {&lt;br /&gt;
    my $entry = {};&lt;br /&gt;
    $entry-&amp;gt;{name} = $corp;&lt;br /&gt;
    push @authors, { author =&amp;gt; $corp };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return \@authors;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Add additional identifiers to creators =&lt;br /&gt;
Another approach to storing ORCIDs is to add an additional sub-field to the creator field.&lt;br /&gt;
This has been discussed on the Eprints tech list. If you know how to do this, please document it here!&lt;br /&gt;
&lt;br /&gt;
This is how University of Bath has done it.  We're getting the ORCID data from another system, so have used a text field to capture it for display.  At present there is no special rendering on it, it's just displaying as a number.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	name =&amp;gt; 'creators',&lt;br /&gt;
	type =&amp;gt; 'compound',&lt;br /&gt;
	multiple =&amp;gt; 1,&lt;br /&gt;
	fields =&amp;gt; [&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'name',&lt;br /&gt;
			type =&amp;gt; 'name',&lt;br /&gt;
			hide_honourific =&amp;gt; 1,&lt;br /&gt;
			hide_lineage =&amp;gt; 1,&lt;br /&gt;
			family_first =&amp;gt; 1,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'id',&lt;br /&gt;
			type =&amp;gt; 'text',&lt;br /&gt;
			input_cols =&amp;gt; 20,&lt;br /&gt;
			allow_null =&amp;gt; 1,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'orcid',&lt;br /&gt;
			type =&amp;gt; 'text',&lt;br /&gt;
			input_cols =&amp;gt; 20,&lt;br /&gt;
			allow_null =&amp;gt; 1,&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	],&lt;br /&gt;
	input_boxes =&amp;gt; 4,&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This is how University of Pittsburgh has done it:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
          {&lt;br /&gt;
            'name' =&amp;gt; 'creators',&lt;br /&gt;
            'type' =&amp;gt; 'compound',&lt;br /&gt;
            'multiple' =&amp;gt; 1,&lt;br /&gt;
            'fields' =&amp;gt; [&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'name',&lt;br /&gt;
                            'type' =&amp;gt; 'name',&lt;br /&gt;
                            'hide_honourific' =&amp;gt; 1,&lt;br /&gt;
                            'hide_lineage' =&amp;gt; 1,&lt;br /&gt;
                            'family_first' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'email',&lt;br /&gt;
                            'type' =&amp;gt; 'text',&lt;br /&gt;
                            'input_cols' =&amp;gt; 20,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'id',&lt;br /&gt;
                            'type' =&amp;gt; 'text',&lt;br /&gt;
                            'input_cols' =&amp;gt; 20,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'orcid',&lt;br /&gt;
                            'type' =&amp;gt; 'id',&lt;br /&gt;
                            'input_cols' =&amp;gt; 19,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                        ],&lt;br /&gt;
            'input_boxes' =&amp;gt; 4,&lt;br /&gt;
            'render_value' =&amp;gt; 'custom_render_creators_with_orcid',&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notes from Pittsburgh:==&lt;br /&gt;
(Information courtesy of Brian Gregg - bdgregg@pitt.edu)&lt;br /&gt;
&lt;br /&gt;
We have added some ORCID functionality in our IR System here at the University of Pittsburgh.  We however have not “linked” our IR with orcid.org in anyway such as we do not have a lookup user in ORCID or the ability to add publications from ORCID to our IR.  The only link is the entering of the ORCID into the system so that it can be displayed.&lt;br /&gt;
&lt;br /&gt;
An example record is available here: [http://d-scholarship.pitt.edu/28114/ http://d-scholarship.pitt.edu/28114/]&lt;br /&gt;
&lt;br /&gt;
# Users have an ORCID field in their profile – user_fields.pl&lt;br /&gt;
# Any “Creator” types have an ORCID field added to the workflow – eprint_fields.pl&lt;br /&gt;
# We have added ORCID validation adhering to this document: [http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier] - eprint_validate.pl&lt;br /&gt;
# We have added the ORCID to the “lookup” function to populate the ORCID field from any user entries in the database. – cgi/users/lookup/name&lt;br /&gt;
# We display the ORCID as such on the input form, where the green icon links out to our own orcid.pitt.edu site, but could be to orcid.org by default.&lt;br /&gt;
# We display the ORCID as such on the public display of the record where the ORCID is linked out to orcid.org (see [http://d-scholarship.pitt.edu/28114/ example record])&lt;br /&gt;
&lt;br /&gt;
ORCID Validator - snippet for eprints_validate.pl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
        # ORCID ID Validator for individuals&lt;br /&gt;
        # Reference: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier&lt;br /&gt;
        # REGEX: ^\d{4}-\d{4}-\d{4}-(\d{3}X|\d{4})$&lt;br /&gt;
        #&lt;br /&gt;
        my @name_fields = qw( creators contributors exhibitors producers conductors lyricists );  #which ever name fields you added 'orcid' to.&lt;br /&gt;
        foreach my $name_field ( @name_fields )&lt;br /&gt;
        {&lt;br /&gt;
           if( $eprint-&amp;gt;is_set( $name_field ) )&lt;br /&gt;
           {&lt;br /&gt;
              foreach my $creator ( @{ $eprint-&amp;gt;value( $name_field ) } )&lt;br /&gt;
              {&lt;br /&gt;
                 my $orcid = $creator-&amp;gt;{orcid};&lt;br /&gt;
                 next unless defined $orcid;&lt;br /&gt;
                 if ($repository-&amp;gt;get_repository-&amp;gt;can_call ( &amp;quot;validators&amp;quot;, &amp;quot;isValidORCID&amp;quot; ) )&lt;br /&gt;
                 {&lt;br /&gt;
                    if (!$repository-&amp;gt;get_repository-&amp;gt;call( [ &amp;quot;validators&amp;quot;, &amp;quot;isValidORCID&amp;quot; ], $orcid ))&lt;br /&gt;
                    {&lt;br /&gt;
                       my $field_text = $repository-&amp;gt;html_phrase( &amp;quot;eprint_fieldname_$name_field&amp;quot; );&lt;br /&gt;
                       my $field_frag = $repository-&amp;gt;make_element( &amp;quot;span&amp;quot;, class=&amp;gt;&amp;quot;ep_problem_field:$name_field&amp;quot; );&lt;br /&gt;
                       $field_frag-&amp;gt;appendChild($field_text);&lt;br /&gt;
                       push @problems, $repository-&amp;gt;html_phrase( &amp;quot;warnings:orcid_invalid&amp;quot;,&lt;br /&gt;
                            orcid =&amp;gt; $repository-&amp;gt;get_repository-&amp;gt;make_text($orcid),&lt;br /&gt;
                            field =&amp;gt; $field_frag,&lt;br /&gt;
                        );&lt;br /&gt;
                    }&lt;br /&gt;
                 } else {&lt;br /&gt;
                    $repository-&amp;gt;get_repository-&amp;gt;log( &amp;quot;Can not call isValidORCID.&amp;quot; );&lt;br /&gt;
                 }&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Phrase for &amp;quot;warnings:orcid_invalid&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;epp:phrase id=&amp;quot;warnings:orcid_invalid&amp;quot;&amp;gt;The ORCID ID: &amp;lt;b&amp;gt;&amp;lt;epc:pin name=&amp;quot;orcid&amp;quot;/&amp;gt;&amp;lt;/b&amp;gt; is not a valid ORCID ID as it does not conform to the ORCID ID specification.  Please edit the &amp;lt;epc:pin name=&amp;quot;field&amp;quot;/&amp;gt; with the associated ORCID or remove it from the name completely.&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additional Function that can be placed either at the end of eprints_validate.pl (after the final };) or elsewhere:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
############################################&lt;br /&gt;
# Function:     isValidORCID&lt;br /&gt;
# Description:  Used to validate ORCID IDs&lt;br /&gt;
# &lt;br /&gt;
# From: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier (Checksum)&lt;br /&gt;
#&lt;br /&gt;
$c-&amp;gt;{validators}-&amp;gt;{isValidORCID} = sub {&lt;br /&gt;
   my $ORCID = $_[0];&lt;br /&gt;
   #Check for valid length of 19 characters.&lt;br /&gt;
   my $size = length($ORCID);&lt;br /&gt;
   if ($size &amp;gt; 19 )&lt;br /&gt;
   {&lt;br /&gt;
        return 0;&lt;br /&gt;
   } else {&lt;br /&gt;
      #Check actual validity of the ID mathematically.&lt;br /&gt;
      $ORCID =~ s/\-//g;&lt;br /&gt;
      my @chars = split(//, $ORCID);&lt;br /&gt;
      my $total = 0;&lt;br /&gt;
      for ( my $i=0; $i&amp;lt;15; $i++) {&lt;br /&gt;
         $total = ($total + $chars[$i]) *2;&lt;br /&gt;
      }&lt;br /&gt;
      my $remainder = $total % 11;&lt;br /&gt;
      my $result = (12 - $remainder) % 11;&lt;br /&gt;
      return ($chars[15] == ($result==10 ? 'X' : $result))&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additionally you will have to define a custom render to add the fields to be displayed in the abstract/summary page.&lt;br /&gt;
&lt;br /&gt;
= Rendering with Bootstrap =&lt;br /&gt;
&lt;br /&gt;
[[File:orcid_bootstrap.png|thumb|left|alt=ORCIDs displaying in the Bootstrap theme|ORCID and Bootstrap]]&lt;br /&gt;
&lt;br /&gt;
In a recent redesign of [http://eprints.whiterose.ac.uk White Rose Research Online] the [https://github.com/eprintsug/bootstrap Bootstrap theme] was used.&lt;br /&gt;
The ORCID links are now enhanced with a tooltip and the green icon. There may be examples on the [http://eprints.whiterose.ac.uk/cgi/latest_tool latest 20 additions] page.&lt;br /&gt;
&lt;br /&gt;
== Bootstrap tooltop ==&lt;br /&gt;
This block of code finds anything with a class of 'orcid', and adds the green logo to it, and a tooltip that reads 'ORCID: ''orcid-value''', as shown in the image.&lt;br /&gt;
&lt;br /&gt;
The example code below is based on the following rendering of a person who may have an ORCID:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- NB line-breaks added here for readability are not normally output by EPrints! --&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;person&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;person_name&amp;quot;&amp;gt;Castillo Ortiz, P.J.&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;a href=&amp;quot;http://orcid.org/0000-0003-4540-1855&amp;quot; target=&amp;quot;_blank&amp;quot; class=&amp;quot;orcid&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;span&amp;gt;orcid.org/0000-0003-4540-1855&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== jQuery ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// selector used here depends on your rendering. You may want to use something like a[href*='orcid.org/0000-']&lt;br /&gt;
jQuery('.orcid').tooltip({&lt;br /&gt;
	'placement': 'auto',&lt;br /&gt;
	'title': function(){ return &amp;quot;ORCID: &amp;quot;+ jQuery(this).text()},&lt;br /&gt;
}).append('&amp;lt;img src=&amp;quot;/images/orcid_16x16.png&amp;quot; alt=&amp;quot;&amp;quot; /&amp;gt;').find('span').hide();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSS ==&lt;br /&gt;
The green colouring is added using the following css, which also makes the background of the tooltip opaque, not semi-transparent as it is by default.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.person + .tooltip &amp;gt; .tooltip-inner,&lt;br /&gt;
.orcid + .tooltip &amp;gt; .tooltip-inner {&lt;br /&gt;
  background-color: #A6CE39;&lt;br /&gt;
  border: 1px solid #000000;&lt;br /&gt;
  white-space: pre;&lt;br /&gt;
  max-width: none;&lt;br /&gt;
}&lt;br /&gt;
.person + .tooltip.in,&lt;br /&gt;
.orcid + .tooltip.in {&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  filter: alpha(opacity=100);&lt;br /&gt;
}&lt;br /&gt;
/* This adds a green dashed line under an author's name when hovered. This helps in big author lists to tie initials and surname together */&lt;br /&gt;
.person:hover {border-bottom: 1px dashed #a6ce39;}&lt;br /&gt;
.orcid a:hover {&lt;br /&gt;
        color: #a6ce39;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OAI-PMH (Experimental) =&lt;br /&gt;
'''[[User:Libjlrs]] 2016-09-29 Warning: this is experimental. I hope others will read, understand, question and improve on this before it becomes some form of best practice!'''&lt;br /&gt;
&lt;br /&gt;
Some metadata profiles support attributes that are useful to propagate ORCIDs e.g. RIOXX (see the [[#Exposing_the_ORCID_in_RIOXX]] section above, and the 'rioxxterms:author' section on http://www.rioxx.net/profiles/v2-0-final/ ).&lt;br /&gt;
&lt;br /&gt;
A lot of harvesters use the oai_dc metadata profile when harvesting records. The DC schema doesn't allow attributes on the dc:creator element, so ORCIDs cannot be added in a sensible way to this profile.&lt;br /&gt;
&lt;br /&gt;
The details below create an additional metadata prefix that adds an attribute to the dc:creator field. The original &amp;lt;code&amp;gt;metadataPrefix=oai_dc&amp;lt;/code&amp;gt; output remains unchanged. Using &amp;lt;code&amp;gt;metadataPrefix=oai_dc_orcid&amp;lt;/code&amp;gt; will add the orcid attribute where available.&lt;br /&gt;
&lt;br /&gt;
Currently there is not an XSD that describes this change, so a harvester that validates the feed may stop when it encounters an ORCID.&lt;br /&gt;
&lt;br /&gt;
This example is based on the &amp;lt;code&amp;gt;EPrints::Plugin::Export::OAI_DC&amp;lt;/code&amp;gt; module from EPrints 3.3.10. You may need to tweak it to make it work for you!&lt;br /&gt;
&lt;br /&gt;
File: &amp;lt;code&amp;gt;~/archives/ARCHIVEID/cfg/plugins/EPrints/Plugin/Export/OAI_DC_ORCID.pm&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
package EPrints::Plugin::Export::OAI_DC_ORCID;&lt;br /&gt;
&lt;br /&gt;
use EPrints::Plugin::Export::OAI_DC;&lt;br /&gt;
&lt;br /&gt;
@ISA = ( &amp;quot;EPrints::Plugin::Export::OAI_DC&amp;quot;, &amp;quot;EPrints::Plugin::Export::DC&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
sub new&lt;br /&gt;
{&lt;br /&gt;
        my( $class, %opts ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $self = $class-&amp;gt;SUPER::new( %opts );&lt;br /&gt;
&lt;br /&gt;
        $self-&amp;gt;{name} = &amp;quot;Dublin Core - OAI + ORCID Schema&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{accept} = [ 'dataobj/eprint' ];&lt;br /&gt;
        $self-&amp;gt;{visible} = &amp;quot;&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{suffix} = &amp;quot;.xml&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{mimetype} = &amp;quot;text/xml&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        $self-&amp;gt;{metadataPrefix} = &amp;quot;oai_dc_orcid&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{xmlns} = &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc/&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{schemaLocation} = &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc.xsd&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub xml_dataobj&lt;br /&gt;
{&lt;br /&gt;
        my( $plugin, $dataobj ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $data = $plugin-&amp;gt;convert_dataobj( $dataobj );&lt;br /&gt;
&lt;br /&gt;
        my $dc = $plugin-&amp;gt;{session}-&amp;gt;make_element(&lt;br /&gt;
                &amp;quot;oai_dc:dc&amp;quot;,&lt;br /&gt;
                &amp;quot;xmlns:oai_dc&amp;quot; =&amp;gt; &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc/&amp;quot;,&lt;br /&gt;
                &amp;quot;xmlns:dc&amp;quot; =&amp;gt; &amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;,&lt;br /&gt;
                &amp;quot;xmlns:xsi&amp;quot; =&amp;gt; &amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;,&lt;br /&gt;
                &amp;quot;xsi:schemaLocation&amp;quot; =&amp;gt;&lt;br /&gt;
        &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        # turn the list of pairs into XML blocks (indented by 8) and add them&lt;br /&gt;
        # them to the DC element.&lt;br /&gt;
        foreach( @{$data} )&lt;br /&gt;
        {&lt;br /&gt;
                $dc-&amp;gt;appendChild(  $plugin-&amp;gt;{session}-&amp;gt;render_data_element( 8, &amp;quot;dc:&amp;quot;.$_-&amp;gt;[0], $_-&amp;gt;[1], %{$_-&amp;gt;[2]} ) );&lt;br /&gt;
                # produces &amp;lt;key&amp;gt;value&amp;lt;/key&amp;gt;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $dc;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub convert_dataobj&lt;br /&gt;
{&lt;br /&gt;
        my( $plugin, $eprint ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $dataset = $eprint-&amp;gt;{dataset};&lt;br /&gt;
&lt;br /&gt;
        my @dcdata = ();&lt;br /&gt;
&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, title =&amp;gt; &amp;quot;title&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;creators&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $creators = $eprint-&amp;gt;get_value( &amp;quot;creators&amp;quot; );&lt;br /&gt;
                foreach my $creator ( @$creators )&lt;br /&gt;
                {&lt;br /&gt;
                        next if !defined $creator;&lt;br /&gt;
&lt;br /&gt;
                        # NOTE THIS IS VERY CRUDE, and should be replaced with more elegant methods (possibly from examples elsewhere on this page).&lt;br /&gt;
                        if( defined $creator-&amp;gt;{id} &amp;amp;&amp;amp; $creator-&amp;gt;{id} =~ /0000/ ){&lt;br /&gt;
                                push @dcdata, [ &amp;quot;creator&amp;quot;, EPrints::Utils::make_name_string( $creator-&amp;gt;{name} ), { 'orcid' =&amp;gt; $creator-&amp;gt;{id} } ];&lt;br /&gt;
                        } else {&lt;br /&gt;
                                push @dcdata, [ &amp;quot;creator&amp;quot;, EPrints::Utils::make_name_string( $creator-&amp;gt;{name} ) ];&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;subjects&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $subjectid;&lt;br /&gt;
                foreach $subjectid ( @{$eprint-&amp;gt;get_value( &amp;quot;subjects&amp;quot; )} )&lt;br /&gt;
                {&lt;br /&gt;
                        my $subject = EPrints::DataObj::Subject-&amp;gt;new( $plugin-&amp;gt;{session}, $subjectid );&lt;br /&gt;
                        # avoid problems with bad subjects&lt;br /&gt;
                                next unless( defined $subject );&lt;br /&gt;
                        push @dcdata, [ &amp;quot;subject&amp;quot;, EPrints::Utils::tree_to_utf8( $subject-&amp;gt;render_description() ) ];&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, abstract =&amp;gt; &amp;quot;description&amp;quot; );&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, publisher =&amp;gt; &amp;quot;publisher&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;editors_name&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $editors = $eprint-&amp;gt;get_value( &amp;quot;editors_name&amp;quot; );&lt;br /&gt;
                if( defined $editors )&lt;br /&gt;
                {&lt;br /&gt;
                        foreach my $editor ( @{$editors} )&lt;br /&gt;
                        {&lt;br /&gt;
                                push @dcdata, [ &amp;quot;contributor&amp;quot;, EPrints::Utils::make_name_string( $editor ) ];&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        ## Date for discovery. For a month/day we don't have, assume 01.&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;date&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $date = $eprint-&amp;gt;get_value( &amp;quot;date&amp;quot; );&lt;br /&gt;
                if( defined $date )&lt;br /&gt;
                {&lt;br /&gt;
                        $date =~ s/(-0+)+$//;&lt;br /&gt;
                        push @dcdata, [ &amp;quot;date&amp;quot;, $date ];&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;type&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                push @dcdata, [ &amp;quot;type&amp;quot;, EPrints::Utils::tree_to_utf8( $eprint-&amp;gt;render_value( &amp;quot;type&amp;quot; ) ) ];&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        my $ref = &amp;quot;NonPeerReviewed&amp;quot;;&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;refereed&amp;quot; ) &amp;amp;&amp;amp; $eprint-&amp;gt;get_value( &amp;quot;refereed&amp;quot; ) eq &amp;quot;TRUE&amp;quot; )&lt;br /&gt;
        {&lt;br /&gt;
                $ref = &amp;quot;PeerReviewed&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        push @dcdata, [ &amp;quot;type&amp;quot;, $ref ];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        my @documents = $eprint-&amp;gt;get_all_documents();&lt;br /&gt;
        my $mimetypes = $plugin-&amp;gt;{session}-&amp;gt;get_repository-&amp;gt;get_conf( &amp;quot;oai&amp;quot;, &amp;quot;mime_types&amp;quot; );&lt;br /&gt;
        foreach( @documents )&lt;br /&gt;
        {&lt;br /&gt;
                my $format = $mimetypes-&amp;gt;{$_-&amp;gt;get_value(&amp;quot;format&amp;quot;)};&lt;br /&gt;
                $format = $_-&amp;gt;get_value(&amp;quot;format&amp;quot;) unless defined $format;&lt;br /&gt;
                #$format = &amp;quot;application/octet-stream&amp;quot; unless defined $format;&lt;br /&gt;
                push @dcdata, [ &amp;quot;format&amp;quot;, $format ];&lt;br /&gt;
                push @dcdata, [ &amp;quot;identifier&amp;quot;, $_-&amp;gt;get_url() ];&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        # Most commonly a DOI or journal link&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, official_url =&amp;gt; &amp;quot;relation&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        # The citation for this eprint&lt;br /&gt;
        push @dcdata, [ &amp;quot;identifier&amp;quot;,&lt;br /&gt;
                EPrints::Utils::tree_to_utf8( $eprint-&amp;gt;render_citation() ) ];&lt;br /&gt;
&lt;br /&gt;
        # The URL of the abstract page&lt;br /&gt;
        if( $eprint-&amp;gt;is_set( &amp;quot;eprintid&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                push @dcdata, [ &amp;quot;relation&amp;quot;, $eprint-&amp;gt;get_url() ];&lt;br /&gt;
        }&lt;br /&gt;
        # dc.language not handled yet.&lt;br /&gt;
        # dc.source not handled yet.&lt;br /&gt;
        # dc.coverage not handled yet.&lt;br /&gt;
        # dc.rights not handled yet.&lt;br /&gt;
&lt;br /&gt;
        return \@dcdata;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=ORCID&amp;diff=12228</id>
		<title>ORCID</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=ORCID&amp;diff=12228"/>
		<updated>2016-10-27T14:15:18Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* Field Recommendations */  capitalise O of Orcid metafield type&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has been created to gather information about how different EPrints repositories have integrated ORCID.&lt;br /&gt;
At this time (April 2016) there doesn't seem to be a 'best practice' approach that has been adopted widely - this will hopefully change over time.&lt;br /&gt;
&lt;br /&gt;
==Field Recommendations==&lt;br /&gt;
As at 2016-10-18 these are the recommended field names and types as discussed at the Jisc ORCID hack day in London - Alan Stiles, John Salter, Adam Vials Moore, Peter West, Andrew Beeken&lt;br /&gt;
&lt;br /&gt;
===New MetaField Type===&lt;br /&gt;
* Type 'Orcid' is a subtype of 'id', provides validation and render methods  &lt;br /&gt;
N.B. Store the 16 digit, hyphen separated value, without the authority (host) details e.g. 'nnnn-nnnn-nnnn-nnnn'  (as per the value returned by the ORCID API)&lt;br /&gt;
&lt;br /&gt;
===User Object===&lt;br /&gt;
*new field named 'orcid', type 'orcid' to store the value of the ORCID id for that user&lt;br /&gt;
&lt;br /&gt;
====Suggested fields====&lt;br /&gt;
*'orcid_auth_code', type text - to hold the long authorisation token returned by the ORCID API at the end of a successful OAuth2 process&lt;br /&gt;
*'orcid_granted_permissions', type text - to hold the permissions granted via the ORCID API during the authorisation process&lt;br /&gt;
*'orcid_token_expires', type time - to hold the expiry timestamp for the authorisation code above (time now plus expires duration returned by the ORCID API)&lt;br /&gt;
*'orcid_last_update_timestamp', type text - to hold the timestamp of the last time the user's ORCID record was processed, to enable quicker reprocessing in the future.&lt;br /&gt;
*'orcid_webhook_ref', type text - to hold the value provided when configuring the webhook notification to validate new notifications have come from ORCID&lt;br /&gt;
&lt;br /&gt;
Also potential fields for requested permissions .e.g. boolean flags or text to capture auth codes if individual permissions captured separately? (e.g. Peter West work)&lt;br /&gt;
&lt;br /&gt;
===Eprints Contributors (e.g. creators, editors)===&lt;br /&gt;
*new sub-field of contributor_orcid  (e.g. creator_orcid, editor_orcid) type 'orcid' to store the value of the ORCID id for that contributor&lt;br /&gt;
&lt;br /&gt;
==Previous Discussions==&lt;br /&gt;
If you are looking to retrieve publications from the ORCID service, the [http://bazaar.eprints.org/354/ Import from ORCID (Tier 1 API)] Bazaar package, or the [https://github.com/eprintsug/orcidt2 ORCID Tier 2 api framework] are good places to start.&lt;br /&gt;
&lt;br /&gt;
2016-05-20 [[User:Alan.stiles@open.ac.uk|Alan Stiles]] at The Open University is working on a plugin to connect EPrints with ORCID via the Tier 2 Members API to retrieve ORCID ids and synchronise publications and affiliation details.&lt;br /&gt;
&lt;br /&gt;
Some aspects that need to be considered when adopting ORCIDs, and making them available to other systems are:&lt;br /&gt;
&lt;br /&gt;
* storing the ORCID (see: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier)&lt;br /&gt;
* rendering the ORCID in abstract pages (see [http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier link above])&lt;br /&gt;
* exposing ORCIDs over OAI-PMH metadata profiles e.g. RIOXX&lt;br /&gt;
&lt;br /&gt;
NB The examples below may refer to the 'creators' field - but the same approach could be used to extend other 'person' fields - e.g. contributors.&lt;br /&gt;
&lt;br /&gt;
= Re-using creators.id subfield =&lt;br /&gt;
&lt;br /&gt;
The creators.id field is labelled 'email' by default, but as it's an 'id' type field, it can be used to store ORCIDs.&lt;br /&gt;
To re-label the field, a simple addition to a phrase file in &amp;lt;code&amp;gt;archives/ARCHIVEID/cfg/lang/en/phrases/&amp;lt;/code&amp;gt; needs to be made:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;epp:phrase id=&amp;quot;eprint_fieldname_creators_id&amp;quot;&amp;gt;ORCID / Creators email (if known)&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rendering the ORCID in a citation ==&lt;br /&gt;
The rendering of this field then needs to be changed to accommodate an author with an ORCID. The following script adds methods that can be called via the EPScript language:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# add to e.g. ~/archives/ARCHIVEID/cfg/cfg.d/z_add_to_EPrints_Script_Compiled.pl&lt;br /&gt;
# Write into EPrints::Script::Compiled package to allow use of function in epscript&lt;br /&gt;
{&lt;br /&gt;
package EPrints::Script::Compiled;&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
sub run_wrro_people_with_orcids&lt;br /&gt;
{&lt;br /&gt;
  my( $self, $state, $value ) = @_;&lt;br /&gt;
&lt;br /&gt;
  my $session = $state-&amp;gt;{session};&lt;br /&gt;
  my $r = $state-&amp;gt;{session}-&amp;gt;make_doc_fragment;&lt;br /&gt;
&lt;br /&gt;
  my $creators = $value-&amp;gt;[0];&lt;br /&gt;
&lt;br /&gt;
  foreach my $i (0..$#$creators){&lt;br /&gt;
&lt;br /&gt;
    my $creator = @$creators[$i];&lt;br /&gt;
&lt;br /&gt;
    if( $i &amp;gt; 0 ){&lt;br /&gt;
      #not first item (or only one item)&lt;br /&gt;
      if( $i == $#$creators ){&lt;br /&gt;
        #last item&lt;br /&gt;
        $r-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot; and &amp;quot; ) );&lt;br /&gt;
      } else {&lt;br /&gt;
        $r-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;, &amp;quot; ) );&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    my $person_span = $session-&amp;gt;make_element( &amp;quot;span&amp;quot;, &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;person&amp;quot; );&lt;br /&gt;
    $person_span-&amp;gt;appendChild( $session-&amp;gt;render_name( $creator-&amp;gt;{name} ) );&lt;br /&gt;
&lt;br /&gt;
    my $id = $creator-&amp;gt;{id};&lt;br /&gt;
    if( defined $id &amp;amp;&amp;amp; $id =~ m/^(?:orcid.org\/)?(\d{4}\-\d{4}\-\d{4}\-\d{3}(?:\d|X))$/ )&lt;br /&gt;
    {&lt;br /&gt;
      my $orcid_span = $session-&amp;gt;make_element( &amp;quot;span&amp;quot;, &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;orcid&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
#   According to https://orcid.org/trademark-and-id-display-guidelines&lt;br /&gt;
#     &amp;quot;recommended display is a hyperlinked URI preceded by the iD icon&amp;quot;&lt;br /&gt;
#   This looks terrible in a citation. Removed for the time being.&lt;br /&gt;
#&lt;br /&gt;
#   my $orcid_link = $session-&amp;gt;make_element(&lt;br /&gt;
#     &amp;quot;a&amp;quot;,&lt;br /&gt;
#     &amp;quot;href&amp;quot; =&amp;gt; &amp;quot;http://orcid.org/&amp;quot;,&lt;br /&gt;
#     &amp;quot;target&amp;quot; =&amp;gt; &amp;quot;_blank&amp;quot;,&lt;br /&gt;
#     &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;orcid-icon&amp;quot;&lt;br /&gt;
#   );&lt;br /&gt;
#   $orcid_link-&amp;gt;appendChild( $session-&amp;gt;make_element(&lt;br /&gt;
#     &amp;quot;img&amp;quot;,&lt;br /&gt;
#     &amp;quot;src&amp;quot; =&amp;gt; &amp;quot;/images/orcid_16x16.png&amp;quot;,&lt;br /&gt;
#     &amp;quot;title&amp;quot; =&amp;gt; &amp;quot;ORCID&amp;quot;&lt;br /&gt;
#   ) );&lt;br /&gt;
#   $orcid_span-&amp;gt;appendChild( $orcid_link );&lt;br /&gt;
&lt;br /&gt;
      my $link = $session-&amp;gt;make_element(&lt;br /&gt;
        &amp;quot;a&amp;quot;,&lt;br /&gt;
        &amp;quot;href&amp;quot; =&amp;gt; &amp;quot;http://orcid.org/$1&amp;quot;,&lt;br /&gt;
        &amp;quot;target&amp;quot; =&amp;gt; &amp;quot;_blank&amp;quot;,&lt;br /&gt;
      );&lt;br /&gt;
      $link-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;orcid.org/$1&amp;quot; ) );&lt;br /&gt;
&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;(&amp;quot; ) );&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $link );&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;)&amp;quot; ) );&lt;br /&gt;
&lt;br /&gt;
      $person_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot; &amp;quot; ) );&lt;br /&gt;
      $person_span-&amp;gt;appendChild( $orcid_span );&lt;br /&gt;
    }&lt;br /&gt;
    $r-&amp;gt;appendChild( $person_span );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return [ $r, &amp;quot;XHTML&amp;quot; ];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
# END EPrints::Script::Compiled additions&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also want a bit of CSS to style ORCID links&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Add to e.g. ~/archives/ARCHIVEID/cfg/static/style/auto/zzz_orcid.css */&lt;br /&gt;
.person:hover {border-bottom: 1px dashed #a6ce39;}&lt;br /&gt;
.orcid {}&lt;br /&gt;
.orcid a:hover {&lt;br /&gt;
        color: #a6ce39;&lt;br /&gt;
}&lt;br /&gt;
.orcid-icon {}&lt;br /&gt;
.orcid-icon img { vertical-align: text-bottom; margin: 0 4px 0 2px; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And finally, you have to call the new EPScript function from a citation file e.g. &amp;lt;code&amp;gt;archives/ARCHIVEID/cfg/citations/eprint/default.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- replace reference to e.g. &amp;lt;print expr=&amp;quot;creators_name&amp;quot;/&amp;gt; with this: --&amp;gt;&lt;br /&gt;
    &amp;lt;print expr=&amp;quot;wrro_people_with_orcids(creators)&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exposing the ORCID in RIOXX ==&lt;br /&gt;
Based on re-using the creators.id field, this block of code over-writes the default &amp;lt;code&amp;gt;rioxx2_value_author&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# Add to e.g. ~/archives/ARCHIVEID/cfg/cfg.d/zzz_rioxx2_overwrites.pl&lt;br /&gt;
$c-&amp;gt;{rioxx2_value_author} = sub {&lt;br /&gt;
  my( $eprint ) = @_;&lt;br /&gt;
&lt;br /&gt;
  my @authors;&lt;br /&gt;
  for( @{ $eprint-&amp;gt;value( &amp;quot;creators&amp;quot; ) } )&lt;br /&gt;
  {&lt;br /&gt;
    my $id = $_-&amp;gt;{id}; # if you use a custom 'orcid' field, reference that here instead of 'id'&lt;br /&gt;
    if( defined $id &amp;amp;&amp;amp; $id =~ m/^(?:orcid.org\/)?(\d{4}\-\d{4}\-\d{4}\-\d{3}(?:\d|X))$/ )&lt;br /&gt;
    {&lt;br /&gt;
      push @authors, {&lt;br /&gt;
        author =&amp;gt; EPrints::Utils::make_name_string( $_-&amp;gt;{name} ),&lt;br /&gt;
        id =&amp;gt; &amp;quot;http://orcid.org/$1&amp;quot;&lt;br /&gt;
      };&lt;br /&gt;
    } else {&lt;br /&gt;
      push @authors, {&lt;br /&gt;
        author =&amp;gt; EPrints::Utils::make_name_string( $_-&amp;gt;{name} ),&lt;br /&gt;
      };&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #NB If your corp_creators has DOIs or ISNIs for the entries, a similar method could be used to include these here.&lt;br /&gt;
  foreach my $corp ( @{ $eprint-&amp;gt;value( &amp;quot;corp_creators&amp;quot; ) } )&lt;br /&gt;
  {&lt;br /&gt;
    my $entry = {};&lt;br /&gt;
    $entry-&amp;gt;{name} = $corp;&lt;br /&gt;
    push @authors, { author =&amp;gt; $corp };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return \@authors;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Add additional identifiers to creators =&lt;br /&gt;
Another approach to storing ORCIDs is to add an additional sub-field to the creator field.&lt;br /&gt;
This has been discussed on the Eprints tech list. If you know how to do this, please document it here!&lt;br /&gt;
&lt;br /&gt;
This is how University of Bath has done it.  We're getting the ORCID data from another system, so have used a text field to capture it for display.  At present there is no special rendering on it, it's just displaying as a number.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	name =&amp;gt; 'creators',&lt;br /&gt;
	type =&amp;gt; 'compound',&lt;br /&gt;
	multiple =&amp;gt; 1,&lt;br /&gt;
	fields =&amp;gt; [&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'name',&lt;br /&gt;
			type =&amp;gt; 'name',&lt;br /&gt;
			hide_honourific =&amp;gt; 1,&lt;br /&gt;
			hide_lineage =&amp;gt; 1,&lt;br /&gt;
			family_first =&amp;gt; 1,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'id',&lt;br /&gt;
			type =&amp;gt; 'text',&lt;br /&gt;
			input_cols =&amp;gt; 20,&lt;br /&gt;
			allow_null =&amp;gt; 1,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'orcid',&lt;br /&gt;
			type =&amp;gt; 'text',&lt;br /&gt;
			input_cols =&amp;gt; 20,&lt;br /&gt;
			allow_null =&amp;gt; 1,&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	],&lt;br /&gt;
	input_boxes =&amp;gt; 4,&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This is how University of Pittsburgh has done it:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
          {&lt;br /&gt;
            'name' =&amp;gt; 'creators',&lt;br /&gt;
            'type' =&amp;gt; 'compound',&lt;br /&gt;
            'multiple' =&amp;gt; 1,&lt;br /&gt;
            'fields' =&amp;gt; [&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'name',&lt;br /&gt;
                            'type' =&amp;gt; 'name',&lt;br /&gt;
                            'hide_honourific' =&amp;gt; 1,&lt;br /&gt;
                            'hide_lineage' =&amp;gt; 1,&lt;br /&gt;
                            'family_first' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'email',&lt;br /&gt;
                            'type' =&amp;gt; 'text',&lt;br /&gt;
                            'input_cols' =&amp;gt; 20,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'id',&lt;br /&gt;
                            'type' =&amp;gt; 'text',&lt;br /&gt;
                            'input_cols' =&amp;gt; 20,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'orcid',&lt;br /&gt;
                            'type' =&amp;gt; 'id',&lt;br /&gt;
                            'input_cols' =&amp;gt; 19,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                        ],&lt;br /&gt;
            'input_boxes' =&amp;gt; 4,&lt;br /&gt;
            'render_value' =&amp;gt; 'custom_render_creators_with_orcid',&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notes from Pittsburgh:==&lt;br /&gt;
(Information courtesy of Brian Gregg - bdgregg@pitt.edu)&lt;br /&gt;
&lt;br /&gt;
We have added some ORCID functionality in our IR System here at the University of Pittsburgh.  We however have not “linked” our IR with orcid.org in anyway such as we do not have a lookup user in ORCID or the ability to add publications from ORCID to our IR.  The only link is the entering of the ORCID into the system so that it can be displayed.&lt;br /&gt;
&lt;br /&gt;
An example record is available here: [http://d-scholarship.pitt.edu/28114/ http://d-scholarship.pitt.edu/28114/]&lt;br /&gt;
&lt;br /&gt;
# Users have an ORCID field in their profile – user_fields.pl&lt;br /&gt;
# Any “Creator” types have an ORCID field added to the workflow – eprint_fields.pl&lt;br /&gt;
# We have added ORCID validation adhering to this document: [http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier] - eprint_validate.pl&lt;br /&gt;
# We have added the ORCID to the “lookup” function to populate the ORCID field from any user entries in the database. – cgi/users/lookup/name&lt;br /&gt;
# We display the ORCID as such on the input form, where the green icon links out to our own orcid.pitt.edu site, but could be to orcid.org by default.&lt;br /&gt;
# We display the ORCID as such on the public display of the record where the ORCID is linked out to orcid.org (see [http://d-scholarship.pitt.edu/28114/ example record])&lt;br /&gt;
&lt;br /&gt;
ORCID Validator - snippet for eprints_validate.pl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
        # ORCID ID Validator for individuals&lt;br /&gt;
        # Reference: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier&lt;br /&gt;
        # REGEX: ^\d{4}-\d{4}-\d{4}-(\d{3}X|\d{4})$&lt;br /&gt;
        #&lt;br /&gt;
        my @name_fields = qw( creators contributors exhibitors producers conductors lyricists );  #which ever name fields you added 'orcid' to.&lt;br /&gt;
        foreach my $name_field ( @name_fields )&lt;br /&gt;
        {&lt;br /&gt;
           if( $eprint-&amp;gt;is_set( $name_field ) )&lt;br /&gt;
           {&lt;br /&gt;
              foreach my $creator ( @{ $eprint-&amp;gt;value( $name_field ) } )&lt;br /&gt;
              {&lt;br /&gt;
                 my $orcid = $creator-&amp;gt;{orcid};&lt;br /&gt;
                 next unless defined $orcid;&lt;br /&gt;
                 if ($repository-&amp;gt;get_repository-&amp;gt;can_call ( &amp;quot;validators&amp;quot;, &amp;quot;isValidORCID&amp;quot; ) )&lt;br /&gt;
                 {&lt;br /&gt;
                    if (!$repository-&amp;gt;get_repository-&amp;gt;call( [ &amp;quot;validators&amp;quot;, &amp;quot;isValidORCID&amp;quot; ], $orcid ))&lt;br /&gt;
                    {&lt;br /&gt;
                       my $field_text = $repository-&amp;gt;html_phrase( &amp;quot;eprint_fieldname_$name_field&amp;quot; );&lt;br /&gt;
                       my $field_frag = $repository-&amp;gt;make_element( &amp;quot;span&amp;quot;, class=&amp;gt;&amp;quot;ep_problem_field:$name_field&amp;quot; );&lt;br /&gt;
                       $field_frag-&amp;gt;appendChild($field_text);&lt;br /&gt;
                       push @problems, $repository-&amp;gt;html_phrase( &amp;quot;warnings:orcid_invalid&amp;quot;,&lt;br /&gt;
                            orcid =&amp;gt; $repository-&amp;gt;get_repository-&amp;gt;make_text($orcid),&lt;br /&gt;
                            field =&amp;gt; $field_frag,&lt;br /&gt;
                        );&lt;br /&gt;
                    }&lt;br /&gt;
                 } else {&lt;br /&gt;
                    $repository-&amp;gt;get_repository-&amp;gt;log( &amp;quot;Can not call isValidORCID.&amp;quot; );&lt;br /&gt;
                 }&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Phrase for &amp;quot;warnings:orcid_invalid&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;epp:phrase id=&amp;quot;warnings:orcid_invalid&amp;quot;&amp;gt;The ORCID ID: &amp;lt;b&amp;gt;&amp;lt;epc:pin name=&amp;quot;orcid&amp;quot;/&amp;gt;&amp;lt;/b&amp;gt; is not a valid ORCID ID as it does not conform to the ORCID ID specification.  Please edit the &amp;lt;epc:pin name=&amp;quot;field&amp;quot;/&amp;gt; with the associated ORCID or remove it from the name completely.&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additional Function that can be placed either at the end of eprints_validate.pl (after the final };) or elsewhere:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
############################################&lt;br /&gt;
# Function:     isValidORCID&lt;br /&gt;
# Description:  Used to validate ORCID IDs&lt;br /&gt;
# &lt;br /&gt;
# From: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier (Checksum)&lt;br /&gt;
#&lt;br /&gt;
$c-&amp;gt;{validators}-&amp;gt;{isValidORCID} = sub {&lt;br /&gt;
   my $ORCID = $_[0];&lt;br /&gt;
   #Check for valid length of 19 characters.&lt;br /&gt;
   my $size = length($ORCID);&lt;br /&gt;
   if ($size &amp;gt; 19 )&lt;br /&gt;
   {&lt;br /&gt;
        return 0;&lt;br /&gt;
   } else {&lt;br /&gt;
      #Check actual validity of the ID mathematically.&lt;br /&gt;
      $ORCID =~ s/\-//g;&lt;br /&gt;
      my @chars = split(//, $ORCID);&lt;br /&gt;
      my $total = 0;&lt;br /&gt;
      for ( my $i=0; $i&amp;lt;15; $i++) {&lt;br /&gt;
         $total = ($total + $chars[$i]) *2;&lt;br /&gt;
      }&lt;br /&gt;
      my $remainder = $total % 11;&lt;br /&gt;
      my $result = (12 - $remainder) % 11;&lt;br /&gt;
      return ($chars[15] == ($result==10 ? 'X' : $result))&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additionally you will have to define a custom render to add the fields to be displayed in the abstract/summary page.&lt;br /&gt;
&lt;br /&gt;
= Rendering with Bootstrap =&lt;br /&gt;
&lt;br /&gt;
[[File:orcid_bootstrap.png|thumb|left|alt=ORCIDs displaying in the Bootstrap theme|ORCID and Bootstrap]]&lt;br /&gt;
&lt;br /&gt;
In a recent redesign of [http://eprints.whiterose.ac.uk White Rose Research Online] the [https://github.com/eprintsug/bootstrap Bootstrap theme] was used.&lt;br /&gt;
The ORCID links are now enhanced with a tooltip and the green icon. There may be examples on the [http://eprints.whiterose.ac.uk/cgi/latest_tool latest 20 additions] page.&lt;br /&gt;
&lt;br /&gt;
== Bootstrap tooltop ==&lt;br /&gt;
This block of code finds anything with a class of 'orcid', and adds the green logo to it, and a tooltip that reads 'ORCID: ''orcid-value''', as shown in the image.&lt;br /&gt;
&lt;br /&gt;
The example code below is based on the following rendering of a person who may have an ORCID:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- NB line-breaks added here for readability are not normally output by EPrints! --&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;person&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;person_name&amp;quot;&amp;gt;Castillo Ortiz, P.J.&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;a href=&amp;quot;http://orcid.org/0000-0003-4540-1855&amp;quot; target=&amp;quot;_blank&amp;quot; class=&amp;quot;orcid&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;span&amp;gt;orcid.org/0000-0003-4540-1855&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== jQuery ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// selector used here depends on your rendering. You may want to use something like a[href*='orcid.org/0000-']&lt;br /&gt;
jQuery('.orcid').tooltip({&lt;br /&gt;
	'placement': 'auto',&lt;br /&gt;
	'title': function(){ return &amp;quot;ORCID: &amp;quot;+ jQuery(this).text()},&lt;br /&gt;
}).append('&amp;lt;img src=&amp;quot;/images/orcid_16x16.png&amp;quot; alt=&amp;quot;&amp;quot; /&amp;gt;').find('span').hide();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSS ==&lt;br /&gt;
The green colouring is added using the following css, which also makes the background of the tooltip opaque, not semi-transparent as it is by default.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.person + .tooltip &amp;gt; .tooltip-inner,&lt;br /&gt;
.orcid + .tooltip &amp;gt; .tooltip-inner {&lt;br /&gt;
  background-color: #A6CE39;&lt;br /&gt;
  border: 1px solid #000000;&lt;br /&gt;
  white-space: pre;&lt;br /&gt;
  max-width: none;&lt;br /&gt;
}&lt;br /&gt;
.person + .tooltip.in,&lt;br /&gt;
.orcid + .tooltip.in {&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  filter: alpha(opacity=100);&lt;br /&gt;
}&lt;br /&gt;
/* This adds a green dashed line under an author's name when hovered. This helps in big author lists to tie initials and surname together */&lt;br /&gt;
.person:hover {border-bottom: 1px dashed #a6ce39;}&lt;br /&gt;
.orcid a:hover {&lt;br /&gt;
        color: #a6ce39;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OAI-PMH (Experimental) =&lt;br /&gt;
'''[[User:Libjlrs]] 2016-09-29 Warning: this is experimental. I hope others will read, understand, question and improve on this before it becomes some form of best practice!'''&lt;br /&gt;
&lt;br /&gt;
Some metadata profiles support attributes that are useful to propagate ORCIDs e.g. RIOXX (see the [[#Exposing_the_ORCID_in_RIOXX]] section above, and the 'rioxxterms:author' section on http://www.rioxx.net/profiles/v2-0-final/ ).&lt;br /&gt;
&lt;br /&gt;
A lot of harvesters use the oai_dc metadata profile when harvesting records. The DC schema doesn't allow attributes on the dc:creator element, so ORCIDs cannot be added in a sensible way to this profile.&lt;br /&gt;
&lt;br /&gt;
The details below create an additional metadata prefix that adds an attribute to the dc:creator field. The original &amp;lt;code&amp;gt;metadataPrefix=oai_dc&amp;lt;/code&amp;gt; output remains unchanged. Using &amp;lt;code&amp;gt;metadataPrefix=oai_dc_orcid&amp;lt;/code&amp;gt; will add the orcid attribute where available.&lt;br /&gt;
&lt;br /&gt;
Currently there is not an XSD that describes this change, so a harvester that validates the feed may stop when it encounters an ORCID.&lt;br /&gt;
&lt;br /&gt;
This example is based on the &amp;lt;code&amp;gt;EPrints::Plugin::Export::OAI_DC&amp;lt;/code&amp;gt; module from EPrints 3.3.10. You may need to tweak it to make it work for you!&lt;br /&gt;
&lt;br /&gt;
File: &amp;lt;code&amp;gt;~/archives/ARCHIVEID/cfg/plugins/EPrints/Plugin/Export/OAI_DC_ORCID.pm&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
package EPrints::Plugin::Export::OAI_DC_ORCID;&lt;br /&gt;
&lt;br /&gt;
use EPrints::Plugin::Export::OAI_DC;&lt;br /&gt;
&lt;br /&gt;
@ISA = ( &amp;quot;EPrints::Plugin::Export::OAI_DC&amp;quot;, &amp;quot;EPrints::Plugin::Export::DC&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
sub new&lt;br /&gt;
{&lt;br /&gt;
        my( $class, %opts ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $self = $class-&amp;gt;SUPER::new( %opts );&lt;br /&gt;
&lt;br /&gt;
        $self-&amp;gt;{name} = &amp;quot;Dublin Core - OAI + ORCID Schema&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{accept} = [ 'dataobj/eprint' ];&lt;br /&gt;
        $self-&amp;gt;{visible} = &amp;quot;&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{suffix} = &amp;quot;.xml&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{mimetype} = &amp;quot;text/xml&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        $self-&amp;gt;{metadataPrefix} = &amp;quot;oai_dc_orcid&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{xmlns} = &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc/&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{schemaLocation} = &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc.xsd&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub xml_dataobj&lt;br /&gt;
{&lt;br /&gt;
        my( $plugin, $dataobj ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $data = $plugin-&amp;gt;convert_dataobj( $dataobj );&lt;br /&gt;
&lt;br /&gt;
        my $dc = $plugin-&amp;gt;{session}-&amp;gt;make_element(&lt;br /&gt;
                &amp;quot;oai_dc:dc&amp;quot;,&lt;br /&gt;
                &amp;quot;xmlns:oai_dc&amp;quot; =&amp;gt; &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc/&amp;quot;,&lt;br /&gt;
                &amp;quot;xmlns:dc&amp;quot; =&amp;gt; &amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;,&lt;br /&gt;
                &amp;quot;xmlns:xsi&amp;quot; =&amp;gt; &amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;,&lt;br /&gt;
                &amp;quot;xsi:schemaLocation&amp;quot; =&amp;gt;&lt;br /&gt;
        &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        # turn the list of pairs into XML blocks (indented by 8) and add them&lt;br /&gt;
        # them to the DC element.&lt;br /&gt;
        foreach( @{$data} )&lt;br /&gt;
        {&lt;br /&gt;
                $dc-&amp;gt;appendChild(  $plugin-&amp;gt;{session}-&amp;gt;render_data_element( 8, &amp;quot;dc:&amp;quot;.$_-&amp;gt;[0], $_-&amp;gt;[1], %{$_-&amp;gt;[2]} ) );&lt;br /&gt;
                # produces &amp;lt;key&amp;gt;value&amp;lt;/key&amp;gt;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $dc;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub convert_dataobj&lt;br /&gt;
{&lt;br /&gt;
        my( $plugin, $eprint ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $dataset = $eprint-&amp;gt;{dataset};&lt;br /&gt;
&lt;br /&gt;
        my @dcdata = ();&lt;br /&gt;
&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, title =&amp;gt; &amp;quot;title&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;creators&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $creators = $eprint-&amp;gt;get_value( &amp;quot;creators&amp;quot; );&lt;br /&gt;
                foreach my $creator ( @$creators )&lt;br /&gt;
                {&lt;br /&gt;
                        next if !defined $creator;&lt;br /&gt;
&lt;br /&gt;
                        # NOTE THIS IS VERY CRUDE, and should be replaced with more elegant methods (possibly from examples elsewhere on this page).&lt;br /&gt;
                        if( defined $creator-&amp;gt;{id} &amp;amp;&amp;amp; $creator-&amp;gt;{id} =~ /0000/ ){&lt;br /&gt;
                                push @dcdata, [ &amp;quot;creator&amp;quot;, EPrints::Utils::make_name_string( $creator-&amp;gt;{name} ), { 'orcid' =&amp;gt; $creator-&amp;gt;{id} } ];&lt;br /&gt;
                        } else {&lt;br /&gt;
                                push @dcdata, [ &amp;quot;creator&amp;quot;, EPrints::Utils::make_name_string( $creator-&amp;gt;{name} ) ];&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;subjects&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $subjectid;&lt;br /&gt;
                foreach $subjectid ( @{$eprint-&amp;gt;get_value( &amp;quot;subjects&amp;quot; )} )&lt;br /&gt;
                {&lt;br /&gt;
                        my $subject = EPrints::DataObj::Subject-&amp;gt;new( $plugin-&amp;gt;{session}, $subjectid );&lt;br /&gt;
                        # avoid problems with bad subjects&lt;br /&gt;
                                next unless( defined $subject );&lt;br /&gt;
                        push @dcdata, [ &amp;quot;subject&amp;quot;, EPrints::Utils::tree_to_utf8( $subject-&amp;gt;render_description() ) ];&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, abstract =&amp;gt; &amp;quot;description&amp;quot; );&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, publisher =&amp;gt; &amp;quot;publisher&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;editors_name&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $editors = $eprint-&amp;gt;get_value( &amp;quot;editors_name&amp;quot; );&lt;br /&gt;
                if( defined $editors )&lt;br /&gt;
                {&lt;br /&gt;
                        foreach my $editor ( @{$editors} )&lt;br /&gt;
                        {&lt;br /&gt;
                                push @dcdata, [ &amp;quot;contributor&amp;quot;, EPrints::Utils::make_name_string( $editor ) ];&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        ## Date for discovery. For a month/day we don't have, assume 01.&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;date&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $date = $eprint-&amp;gt;get_value( &amp;quot;date&amp;quot; );&lt;br /&gt;
                if( defined $date )&lt;br /&gt;
                {&lt;br /&gt;
                        $date =~ s/(-0+)+$//;&lt;br /&gt;
                        push @dcdata, [ &amp;quot;date&amp;quot;, $date ];&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;type&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                push @dcdata, [ &amp;quot;type&amp;quot;, EPrints::Utils::tree_to_utf8( $eprint-&amp;gt;render_value( &amp;quot;type&amp;quot; ) ) ];&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        my $ref = &amp;quot;NonPeerReviewed&amp;quot;;&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;refereed&amp;quot; ) &amp;amp;&amp;amp; $eprint-&amp;gt;get_value( &amp;quot;refereed&amp;quot; ) eq &amp;quot;TRUE&amp;quot; )&lt;br /&gt;
        {&lt;br /&gt;
                $ref = &amp;quot;PeerReviewed&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        push @dcdata, [ &amp;quot;type&amp;quot;, $ref ];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        my @documents = $eprint-&amp;gt;get_all_documents();&lt;br /&gt;
        my $mimetypes = $plugin-&amp;gt;{session}-&amp;gt;get_repository-&amp;gt;get_conf( &amp;quot;oai&amp;quot;, &amp;quot;mime_types&amp;quot; );&lt;br /&gt;
        foreach( @documents )&lt;br /&gt;
        {&lt;br /&gt;
                my $format = $mimetypes-&amp;gt;{$_-&amp;gt;get_value(&amp;quot;format&amp;quot;)};&lt;br /&gt;
                $format = $_-&amp;gt;get_value(&amp;quot;format&amp;quot;) unless defined $format;&lt;br /&gt;
                #$format = &amp;quot;application/octet-stream&amp;quot; unless defined $format;&lt;br /&gt;
                push @dcdata, [ &amp;quot;format&amp;quot;, $format ];&lt;br /&gt;
                push @dcdata, [ &amp;quot;identifier&amp;quot;, $_-&amp;gt;get_url() ];&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        # Most commonly a DOI or journal link&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, official_url =&amp;gt; &amp;quot;relation&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        # The citation for this eprint&lt;br /&gt;
        push @dcdata, [ &amp;quot;identifier&amp;quot;,&lt;br /&gt;
                EPrints::Utils::tree_to_utf8( $eprint-&amp;gt;render_citation() ) ];&lt;br /&gt;
&lt;br /&gt;
        # The URL of the abstract page&lt;br /&gt;
        if( $eprint-&amp;gt;is_set( &amp;quot;eprintid&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                push @dcdata, [ &amp;quot;relation&amp;quot;, $eprint-&amp;gt;get_url() ];&lt;br /&gt;
        }&lt;br /&gt;
        # dc.language not handled yet.&lt;br /&gt;
        # dc.source not handled yet.&lt;br /&gt;
        # dc.coverage not handled yet.&lt;br /&gt;
        # dc.rights not handled yet.&lt;br /&gt;
&lt;br /&gt;
        return \@dcdata;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=ORCID&amp;diff=12226</id>
		<title>ORCID</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=ORCID&amp;diff=12226"/>
		<updated>2016-10-18T14:14:51Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* Field Recommendations */  suggested fields&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has been created to gather information about how different EPrints repositories have integrated ORCID.&lt;br /&gt;
At this time (April 2016) there doesn't seem to be a 'best practice' approach that has been adopted widely - this will hopefully change over time.&lt;br /&gt;
&lt;br /&gt;
==Field Recommendations==&lt;br /&gt;
As at 2016-10-18 these are the recommended field names and types as discussed at the Jisc ORCID hack day in London - Alan Stiles, John Salter, Adam Vials Moore, Peter West, Andrew Beeken&lt;br /&gt;
&lt;br /&gt;
===New MetaField Type===&lt;br /&gt;
* Type 'orcid' is a subtype of 'id', provides validation and render methods  &lt;br /&gt;
N.B. Store the 16 digit, hyphen separated value, without the authority (host) details e.g. 'nnnn-nnnn-nnnn-nnnn'  (as per the value returned by the ORCID API)&lt;br /&gt;
&lt;br /&gt;
===User Object===&lt;br /&gt;
*new field named 'orcid', type 'orcid' to store the value of the ORCID id for that user&lt;br /&gt;
&lt;br /&gt;
====Suggested fields====&lt;br /&gt;
*'orcid_auth_code', type text - to hold the long authorisation token returned by the ORCID API at the end of a successful OAuth2 process&lt;br /&gt;
*'orcid_granted_permissions', type text - to hold the permissions granted via the ORCID API during the authorisation process&lt;br /&gt;
*'orcid_token_expires', type time - to hold the expiry timestamp for the authorisation code above (time now plus expires duration returned by the ORCID API)&lt;br /&gt;
*'orcid_last_update_timestamp', type text - to hold the timestamp of the last time the user's ORCID record was processed, to enable quicker reprocessing in the future.&lt;br /&gt;
*'orcid_webhook_ref', type text - to hold the value provided when configuring the webhook notification to validate new notifications have come from ORCID&lt;br /&gt;
&lt;br /&gt;
Also potential fields for requested permissions .e.g. boolean flags or text to capture auth codes if individual permissions captured separately? (e.g. Peter West work)&lt;br /&gt;
&lt;br /&gt;
===Eprints Contributors (e.g. creators, editors)===&lt;br /&gt;
*new sub-field of contributor_orcid  (e.g. creator_orcid, editor_orcid) type 'orcid' to store the value of the ORCID id for that contributor&lt;br /&gt;
&lt;br /&gt;
==Previous Discussions==&lt;br /&gt;
If you are looking to retrieve publications from the ORCID service, the [http://bazaar.eprints.org/354/ Import from ORCID (Tier 1 API)] Bazaar package, or the [https://github.com/eprintsug/orcidt2 ORCID Tier 2 api framework] are good places to start.&lt;br /&gt;
&lt;br /&gt;
2016-05-20 [[User:Alan.stiles@open.ac.uk|Alan Stiles]] at The Open University is working on a plugin to connect EPrints with ORCID via the Tier 2 Members API to retrieve ORCID ids and synchronise publications and affiliation details.&lt;br /&gt;
&lt;br /&gt;
Some aspects that need to be considered when adopting ORCIDs, and making them available to other systems are:&lt;br /&gt;
&lt;br /&gt;
* storing the ORCID (see: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier)&lt;br /&gt;
* rendering the ORCID in abstract pages (see [http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier link above])&lt;br /&gt;
* exposing ORCIDs over OAI-PMH metadata profiles e.g. RIOXX&lt;br /&gt;
&lt;br /&gt;
NB The examples below may refer to the 'creators' field - but the same approach could be used to extend other 'person' fields - e.g. contributors.&lt;br /&gt;
&lt;br /&gt;
= Re-using creators.id subfield =&lt;br /&gt;
&lt;br /&gt;
The creators.id field is labelled 'email' by default, but as it's an 'id' type field, it can be used to store ORCIDs.&lt;br /&gt;
To re-label the field, a simple addition to a phrase file in &amp;lt;code&amp;gt;archives/ARCHIVEID/cfg/lang/en/phrases/&amp;lt;/code&amp;gt; needs to be made:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;epp:phrase id=&amp;quot;eprint_fieldname_creators_id&amp;quot;&amp;gt;ORCID / Creators email (if known)&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rendering the ORCID in a citation ==&lt;br /&gt;
The rendering of this field then needs to be changed to accommodate an author with an ORCID. The following script adds methods that can be called via the EPScript language:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# add to e.g. ~/archives/ARCHIVEID/cfg/cfg.d/z_add_to_EPrints_Script_Compiled.pl&lt;br /&gt;
# Write into EPrints::Script::Compiled package to allow use of function in epscript&lt;br /&gt;
{&lt;br /&gt;
package EPrints::Script::Compiled;&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
sub run_wrro_people_with_orcids&lt;br /&gt;
{&lt;br /&gt;
  my( $self, $state, $value ) = @_;&lt;br /&gt;
&lt;br /&gt;
  my $session = $state-&amp;gt;{session};&lt;br /&gt;
  my $r = $state-&amp;gt;{session}-&amp;gt;make_doc_fragment;&lt;br /&gt;
&lt;br /&gt;
  my $creators = $value-&amp;gt;[0];&lt;br /&gt;
&lt;br /&gt;
  foreach my $i (0..$#$creators){&lt;br /&gt;
&lt;br /&gt;
    my $creator = @$creators[$i];&lt;br /&gt;
&lt;br /&gt;
    if( $i &amp;gt; 0 ){&lt;br /&gt;
      #not first item (or only one item)&lt;br /&gt;
      if( $i == $#$creators ){&lt;br /&gt;
        #last item&lt;br /&gt;
        $r-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot; and &amp;quot; ) );&lt;br /&gt;
      } else {&lt;br /&gt;
        $r-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;, &amp;quot; ) );&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    my $person_span = $session-&amp;gt;make_element( &amp;quot;span&amp;quot;, &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;person&amp;quot; );&lt;br /&gt;
    $person_span-&amp;gt;appendChild( $session-&amp;gt;render_name( $creator-&amp;gt;{name} ) );&lt;br /&gt;
&lt;br /&gt;
    my $id = $creator-&amp;gt;{id};&lt;br /&gt;
    if( defined $id &amp;amp;&amp;amp; $id =~ m/^(?:orcid.org\/)?(\d{4}\-\d{4}\-\d{4}\-\d{3}(?:\d|X))$/ )&lt;br /&gt;
    {&lt;br /&gt;
      my $orcid_span = $session-&amp;gt;make_element( &amp;quot;span&amp;quot;, &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;orcid&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
#   According to https://orcid.org/trademark-and-id-display-guidelines&lt;br /&gt;
#     &amp;quot;recommended display is a hyperlinked URI preceded by the iD icon&amp;quot;&lt;br /&gt;
#   This looks terrible in a citation. Removed for the time being.&lt;br /&gt;
#&lt;br /&gt;
#   my $orcid_link = $session-&amp;gt;make_element(&lt;br /&gt;
#     &amp;quot;a&amp;quot;,&lt;br /&gt;
#     &amp;quot;href&amp;quot; =&amp;gt; &amp;quot;http://orcid.org/&amp;quot;,&lt;br /&gt;
#     &amp;quot;target&amp;quot; =&amp;gt; &amp;quot;_blank&amp;quot;,&lt;br /&gt;
#     &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;orcid-icon&amp;quot;&lt;br /&gt;
#   );&lt;br /&gt;
#   $orcid_link-&amp;gt;appendChild( $session-&amp;gt;make_element(&lt;br /&gt;
#     &amp;quot;img&amp;quot;,&lt;br /&gt;
#     &amp;quot;src&amp;quot; =&amp;gt; &amp;quot;/images/orcid_16x16.png&amp;quot;,&lt;br /&gt;
#     &amp;quot;title&amp;quot; =&amp;gt; &amp;quot;ORCID&amp;quot;&lt;br /&gt;
#   ) );&lt;br /&gt;
#   $orcid_span-&amp;gt;appendChild( $orcid_link );&lt;br /&gt;
&lt;br /&gt;
      my $link = $session-&amp;gt;make_element(&lt;br /&gt;
        &amp;quot;a&amp;quot;,&lt;br /&gt;
        &amp;quot;href&amp;quot; =&amp;gt; &amp;quot;http://orcid.org/$1&amp;quot;,&lt;br /&gt;
        &amp;quot;target&amp;quot; =&amp;gt; &amp;quot;_blank&amp;quot;,&lt;br /&gt;
      );&lt;br /&gt;
      $link-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;orcid.org/$1&amp;quot; ) );&lt;br /&gt;
&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;(&amp;quot; ) );&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $link );&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;)&amp;quot; ) );&lt;br /&gt;
&lt;br /&gt;
      $person_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot; &amp;quot; ) );&lt;br /&gt;
      $person_span-&amp;gt;appendChild( $orcid_span );&lt;br /&gt;
    }&lt;br /&gt;
    $r-&amp;gt;appendChild( $person_span );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return [ $r, &amp;quot;XHTML&amp;quot; ];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
# END EPrints::Script::Compiled additions&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also want a bit of CSS to style ORCID links&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Add to e.g. ~/archives/ARCHIVEID/cfg/static/style/auto/zzz_orcid.css */&lt;br /&gt;
.person:hover {border-bottom: 1px dashed #a6ce39;}&lt;br /&gt;
.orcid {}&lt;br /&gt;
.orcid a:hover {&lt;br /&gt;
        color: #a6ce39;&lt;br /&gt;
}&lt;br /&gt;
.orcid-icon {}&lt;br /&gt;
.orcid-icon img { vertical-align: text-bottom; margin: 0 4px 0 2px; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And finally, you have to call the new EPScript function from a citation file e.g. &amp;lt;code&amp;gt;archives/ARCHIVEID/cfg/citations/eprint/default.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- replace reference to e.g. &amp;lt;print expr=&amp;quot;creators_name&amp;quot;/&amp;gt; with this: --&amp;gt;&lt;br /&gt;
    &amp;lt;print expr=&amp;quot;wrro_people_with_orcids(creators)&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exposing the ORCID in RIOXX ==&lt;br /&gt;
Based on re-using the creators.id field, this block of code over-writes the default &amp;lt;code&amp;gt;rioxx2_value_author&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# Add to e.g. ~/archives/ARCHIVEID/cfg/cfg.d/zzz_rioxx2_overwrites.pl&lt;br /&gt;
$c-&amp;gt;{rioxx2_value_author} = sub {&lt;br /&gt;
  my( $eprint ) = @_;&lt;br /&gt;
&lt;br /&gt;
  my @authors;&lt;br /&gt;
  for( @{ $eprint-&amp;gt;value( &amp;quot;creators&amp;quot; ) } )&lt;br /&gt;
  {&lt;br /&gt;
    my $id = $_-&amp;gt;{id};&lt;br /&gt;
    if( defined $id &amp;amp;&amp;amp; $id =~ m/^(?:orcid.org\/)?(\d{4}\-\d{4}\-\d{4}\-\d{3}(?:\d|X))$/ )&lt;br /&gt;
    {&lt;br /&gt;
      push @authors, {&lt;br /&gt;
        author =&amp;gt; EPrints::Utils::make_name_string( $_-&amp;gt;{name} ),&lt;br /&gt;
        id =&amp;gt; &amp;quot;http://orcid.org/$1&amp;quot;&lt;br /&gt;
      };&lt;br /&gt;
    } else {&lt;br /&gt;
      push @authors, {&lt;br /&gt;
        author =&amp;gt; EPrints::Utils::make_name_string( $_-&amp;gt;{name} ),&lt;br /&gt;
      };&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #NB If your corp_creators has DOIs or ISNIs for the entries, a similar method could be used to include these here.&lt;br /&gt;
  foreach my $corp ( @{ $eprint-&amp;gt;value( &amp;quot;corp_creators&amp;quot; ) } )&lt;br /&gt;
  {&lt;br /&gt;
    my $entry = {};&lt;br /&gt;
    $entry-&amp;gt;{name} = $corp;&lt;br /&gt;
    push @authors, { author =&amp;gt; $corp };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return \@authors;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Add additional identifiers to creators =&lt;br /&gt;
Another approach to storing ORCIDs is to add an additional sub-field to the creator field.&lt;br /&gt;
This has been discussed on the Eprints tech list. If you know how to do this, please document it here!&lt;br /&gt;
&lt;br /&gt;
This is how University of Bath has done it.  We're getting the ORCID data from another system, so have used a text field to capture it for display.  At present there is no special rendering on it, it's just displaying as a number.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	name =&amp;gt; 'creators',&lt;br /&gt;
	type =&amp;gt; 'compound',&lt;br /&gt;
	multiple =&amp;gt; 1,&lt;br /&gt;
	fields =&amp;gt; [&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'name',&lt;br /&gt;
			type =&amp;gt; 'name',&lt;br /&gt;
			hide_honourific =&amp;gt; 1,&lt;br /&gt;
			hide_lineage =&amp;gt; 1,&lt;br /&gt;
			family_first =&amp;gt; 1,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'id',&lt;br /&gt;
			type =&amp;gt; 'text',&lt;br /&gt;
			input_cols =&amp;gt; 20,&lt;br /&gt;
			allow_null =&amp;gt; 1,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'orcid',&lt;br /&gt;
			type =&amp;gt; 'text',&lt;br /&gt;
			input_cols =&amp;gt; 20,&lt;br /&gt;
			allow_null =&amp;gt; 1,&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	],&lt;br /&gt;
	input_boxes =&amp;gt; 4,&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This is how University of Pittsburgh has done it:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
          {&lt;br /&gt;
            'name' =&amp;gt; 'creators',&lt;br /&gt;
            'type' =&amp;gt; 'compound',&lt;br /&gt;
            'multiple' =&amp;gt; 1,&lt;br /&gt;
            'fields' =&amp;gt; [&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'name',&lt;br /&gt;
                            'type' =&amp;gt; 'name',&lt;br /&gt;
                            'hide_honourific' =&amp;gt; 1,&lt;br /&gt;
                            'hide_lineage' =&amp;gt; 1,&lt;br /&gt;
                            'family_first' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'email',&lt;br /&gt;
                            'type' =&amp;gt; 'text',&lt;br /&gt;
                            'input_cols' =&amp;gt; 20,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'id',&lt;br /&gt;
                            'type' =&amp;gt; 'text',&lt;br /&gt;
                            'input_cols' =&amp;gt; 20,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'orcid',&lt;br /&gt;
                            'type' =&amp;gt; 'id',&lt;br /&gt;
                            'input_cols' =&amp;gt; 19,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                        ],&lt;br /&gt;
            'input_boxes' =&amp;gt; 4,&lt;br /&gt;
            'render_value' =&amp;gt; 'custom_render_creators_with_orcid',&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notes from Pittsburgh:==&lt;br /&gt;
(Information courtesy of Brian Gregg - bdgregg@pitt.edu)&lt;br /&gt;
&lt;br /&gt;
We have added some ORCID functionality in our IR System here at the University of Pittsburgh.  We however have not “linked” our IR with orcid.org in anyway such as we do not have a lookup user in ORCID or the ability to add publications from ORCID to our IR.  The only link is the entering of the ORCID into the system so that it can be displayed.&lt;br /&gt;
&lt;br /&gt;
An example record is available here: [http://d-scholarship.pitt.edu/28114/ http://d-scholarship.pitt.edu/28114/]&lt;br /&gt;
&lt;br /&gt;
# Users have an ORCID field in their profile – user_fields.pl&lt;br /&gt;
# Any “Creator” types have an ORCID field added to the workflow – eprint_fields.pl&lt;br /&gt;
# We have added ORCID validation adhering to this document: [http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier] - eprint_validate.pl&lt;br /&gt;
# We have added the ORCID to the “lookup” function to populate the ORCID field from any user entries in the database. – cgi/users/lookup/name&lt;br /&gt;
# We display the ORCID as such on the input form, where the green icon links out to our own orcid.pitt.edu site, but could be to orcid.org by default.&lt;br /&gt;
# We display the ORCID as such on the public display of the record where the ORCID is linked out to orcid.org (see [http://d-scholarship.pitt.edu/28114/ example record])&lt;br /&gt;
&lt;br /&gt;
ORCID Validator - snippet for eprints_validate.pl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
        # ORCID ID Validator for individuals&lt;br /&gt;
        # Reference: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier&lt;br /&gt;
        # REGEX: ^\d{4}-\d{4}-\d{4}-(\d{3}X|\d{4})$&lt;br /&gt;
        #&lt;br /&gt;
        my @name_fields = qw( creators contributors exhibitors producers conductors lyricists );  #which ever name fields you added 'orcid' to.&lt;br /&gt;
        foreach my $name_field ( @name_fields )&lt;br /&gt;
        {&lt;br /&gt;
           if( $eprint-&amp;gt;is_set( $name_field ) )&lt;br /&gt;
           {&lt;br /&gt;
              foreach my $creator ( @{ $eprint-&amp;gt;value( $name_field ) } )&lt;br /&gt;
              {&lt;br /&gt;
                 my $orcid = $creator-&amp;gt;{orcid};&lt;br /&gt;
                 next unless defined $orcid;&lt;br /&gt;
                 if ($repository-&amp;gt;get_repository-&amp;gt;can_call ( &amp;quot;validators&amp;quot;, &amp;quot;isValidORCID&amp;quot; ) )&lt;br /&gt;
                 {&lt;br /&gt;
                    if (!$repository-&amp;gt;get_repository-&amp;gt;call( [ &amp;quot;validators&amp;quot;, &amp;quot;isValidORCID&amp;quot; ], $orcid ))&lt;br /&gt;
                    {&lt;br /&gt;
                       my $field_text = $repository-&amp;gt;html_phrase( &amp;quot;eprint_fieldname_$name_field&amp;quot; );&lt;br /&gt;
                       my $field_frag = $repository-&amp;gt;make_element( &amp;quot;span&amp;quot;, class=&amp;gt;&amp;quot;ep_problem_field:$name_field&amp;quot; );&lt;br /&gt;
                       $field_frag-&amp;gt;appendChild($field_text);&lt;br /&gt;
                       push @problems, $repository-&amp;gt;html_phrase( &amp;quot;warnings:orcid_invalid&amp;quot;,&lt;br /&gt;
                            orcid =&amp;gt; $repository-&amp;gt;get_repository-&amp;gt;make_text($orcid),&lt;br /&gt;
                            field =&amp;gt; $field_frag,&lt;br /&gt;
                        );&lt;br /&gt;
                    }&lt;br /&gt;
                 } else {&lt;br /&gt;
                    $repository-&amp;gt;get_repository-&amp;gt;log( &amp;quot;Can not call isValidORCID.&amp;quot; );&lt;br /&gt;
                 }&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Phrase for &amp;quot;warnings:orcid_invalid&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;epp:phrase id=&amp;quot;warnings:orcid_invalid&amp;quot;&amp;gt;The ORCID ID: &amp;lt;b&amp;gt;&amp;lt;epc:pin name=&amp;quot;orcid&amp;quot;/&amp;gt;&amp;lt;/b&amp;gt; is not a valid ORCID ID as it does not conform to the ORCID ID specification.  Please edit the &amp;lt;epc:pin name=&amp;quot;field&amp;quot;/&amp;gt; with the associated ORCID or remove it from the name completely.&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additional Function that can be placed either at the end of eprints_validate.pl (after the final };) or elsewhere:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
############################################&lt;br /&gt;
# Function:     isValidORCID&lt;br /&gt;
# Description:  Used to validate ORCID IDs&lt;br /&gt;
# &lt;br /&gt;
# From: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier (Checksum)&lt;br /&gt;
#&lt;br /&gt;
$c-&amp;gt;{validators}-&amp;gt;{isValidORCID} = sub {&lt;br /&gt;
   my $ORCID = $_[0];&lt;br /&gt;
   #Check for valid length of 19 characters.&lt;br /&gt;
   my $size = length($ORCID);&lt;br /&gt;
   if ($size &amp;gt; 19 )&lt;br /&gt;
   {&lt;br /&gt;
        return 0;&lt;br /&gt;
   } else {&lt;br /&gt;
      #Check actual validity of the ID mathematically.&lt;br /&gt;
      $ORCID =~ s/\-//g;&lt;br /&gt;
      my @chars = split(//, $ORCID);&lt;br /&gt;
      my $total = 0;&lt;br /&gt;
      for ( my $i=0; $i&amp;lt;15; $i++) {&lt;br /&gt;
         $total = ($total + $chars[$i]) *2;&lt;br /&gt;
      }&lt;br /&gt;
      my $remainder = $total % 11;&lt;br /&gt;
      my $result = (12 - $remainder) % 11;&lt;br /&gt;
      return ($chars[15] == ($result==10 ? 'X' : $result))&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additionally you will have to define a custom render to add the fields to be displayed in the abstract/summary page.&lt;br /&gt;
&lt;br /&gt;
= Rendering with Bootstrap =&lt;br /&gt;
&lt;br /&gt;
[[File:orcid_bootstrap.png|thumb|left|alt=ORCIDs displaying in the Bootstrap theme|ORCID and Bootstrap]]&lt;br /&gt;
&lt;br /&gt;
In a recent redesign of [http://eprints.whiterose.ac.uk White Rose Research Online] the [https://github.com/eprintsug/bootstrap Bootstrap theme] was used.&lt;br /&gt;
The ORCID links are now enhanced with a tooltip and the green icon. There may be examples on the [http://eprints.whiterose.ac.uk/cgi/latest_tool latest 20 additions] page.&lt;br /&gt;
&lt;br /&gt;
== Bootstrap tooltop ==&lt;br /&gt;
This block of code finds anything with a class of 'orcid', and adds the green logo to it, and a tooltip that reads 'ORCID: ''orcid-value''', as shown in the image.&lt;br /&gt;
&lt;br /&gt;
The example code below is based on the following rendering of a person who may have an ORCID:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- NB line-breaks added here for readability are not normally output by EPrints! --&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;person&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;person_name&amp;quot;&amp;gt;Castillo Ortiz, P.J.&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;a href=&amp;quot;http://orcid.org/0000-0003-4540-1855&amp;quot; target=&amp;quot;_blank&amp;quot; class=&amp;quot;orcid&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;span&amp;gt;orcid.org/0000-0003-4540-1855&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== jQuery ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// selector used here depends on your rendering. You may want to use something like a[href*='orcid.org/0000-']&lt;br /&gt;
jQuery('.orcid').tooltip({&lt;br /&gt;
	'placement': 'auto',&lt;br /&gt;
	'title': function(){ return &amp;quot;ORCID: &amp;quot;+ jQuery(this).text()},&lt;br /&gt;
}).append('&amp;lt;img src=&amp;quot;/images/orcid_16x16.png&amp;quot; alt=&amp;quot;&amp;quot; /&amp;gt;').find('span').hide();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSS ==&lt;br /&gt;
The green colouring is added using the following css, which also makes the background of the tooltip opaque, not semi-transparent as it is by default.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.person + .tooltip &amp;gt; .tooltip-inner,&lt;br /&gt;
.orcid + .tooltip &amp;gt; .tooltip-inner {&lt;br /&gt;
  background-color: #A6CE39;&lt;br /&gt;
  border: 1px solid #000000;&lt;br /&gt;
  white-space: pre;&lt;br /&gt;
  max-width: none;&lt;br /&gt;
}&lt;br /&gt;
.person + .tooltip.in,&lt;br /&gt;
.orcid + .tooltip.in {&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  filter: alpha(opacity=100);&lt;br /&gt;
}&lt;br /&gt;
/* This adds a green dashed line under an author's name when hovered. This helps in big author lists to tie initials and surname together */&lt;br /&gt;
.person:hover {border-bottom: 1px dashed #a6ce39;}&lt;br /&gt;
.orcid a:hover {&lt;br /&gt;
        color: #a6ce39;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OAI-PMH (Experimental) =&lt;br /&gt;
'''[[User:Libjlrs]] 2016-09-29 Warning: this is experimental. I hope others will read, understand, question and improve on this before it becomes some form of best practice!'''&lt;br /&gt;
&lt;br /&gt;
Some metadata profiles support attributes that are useful to propagate ORCIDs e.g. RIOXX (see the [[#Exposing_the_ORCID_in_RIOXX]] section above, and the 'rioxxterms:author' section on http://www.rioxx.net/profiles/v2-0-final/ ).&lt;br /&gt;
&lt;br /&gt;
A lot of harvesters use the oai_dc metadata profile when harvesting records. The DC schema doesn't allow attributes on the dc:creator element, so ORCIDs cannot be added in a sensible way to this profile.&lt;br /&gt;
&lt;br /&gt;
The details below create an additional metadata prefix that adds an attribute to the dc:creator field. The original &amp;lt;code&amp;gt;metadataPrefix=oai_dc&amp;lt;/code&amp;gt; output remains unchanged. Using &amp;lt;code&amp;gt;metadataPrefix=oai_dc_orcid&amp;lt;/code&amp;gt; will add the orcid attribute where available.&lt;br /&gt;
&lt;br /&gt;
Currently there is not an XSD that describes this change, so a harvester that validates the feed may stop when it encounters an ORCID.&lt;br /&gt;
&lt;br /&gt;
This example is based on the &amp;lt;code&amp;gt;EPrints::Plugin::Export::OAI_DC&amp;lt;/code&amp;gt; module from EPrints 3.3.10. You may need to tweak it to make it work for you!&lt;br /&gt;
&lt;br /&gt;
File: &amp;lt;code&amp;gt;~/archives/ARCHIVEID/cfg/plugins/EPrints/Plugin/Export/OAI_DC_ORCID.pm&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
package EPrints::Plugin::Export::OAI_DC_ORCID;&lt;br /&gt;
&lt;br /&gt;
use EPrints::Plugin::Export::OAI_DC;&lt;br /&gt;
&lt;br /&gt;
@ISA = ( &amp;quot;EPrints::Plugin::Export::OAI_DC&amp;quot;, &amp;quot;EPrints::Plugin::Export::DC&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
sub new&lt;br /&gt;
{&lt;br /&gt;
        my( $class, %opts ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $self = $class-&amp;gt;SUPER::new( %opts );&lt;br /&gt;
&lt;br /&gt;
        $self-&amp;gt;{name} = &amp;quot;Dublin Core - OAI + ORCID Schema&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{accept} = [ 'dataobj/eprint' ];&lt;br /&gt;
        $self-&amp;gt;{visible} = &amp;quot;&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{suffix} = &amp;quot;.xml&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{mimetype} = &amp;quot;text/xml&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        $self-&amp;gt;{metadataPrefix} = &amp;quot;oai_dc_orcid&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{xmlns} = &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc/&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{schemaLocation} = &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc.xsd&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub xml_dataobj&lt;br /&gt;
{&lt;br /&gt;
        my( $plugin, $dataobj ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $data = $plugin-&amp;gt;convert_dataobj( $dataobj );&lt;br /&gt;
&lt;br /&gt;
        my $dc = $plugin-&amp;gt;{session}-&amp;gt;make_element(&lt;br /&gt;
                &amp;quot;oai_dc:dc&amp;quot;,&lt;br /&gt;
                &amp;quot;xmlns:oai_dc&amp;quot; =&amp;gt; &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc/&amp;quot;,&lt;br /&gt;
                &amp;quot;xmlns:dc&amp;quot; =&amp;gt; &amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;,&lt;br /&gt;
                &amp;quot;xmlns:xsi&amp;quot; =&amp;gt; &amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;,&lt;br /&gt;
                &amp;quot;xsi:schemaLocation&amp;quot; =&amp;gt;&lt;br /&gt;
        &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        # turn the list of pairs into XML blocks (indented by 8) and add them&lt;br /&gt;
        # them to the DC element.&lt;br /&gt;
        foreach( @{$data} )&lt;br /&gt;
        {&lt;br /&gt;
                $dc-&amp;gt;appendChild(  $plugin-&amp;gt;{session}-&amp;gt;render_data_element( 8, &amp;quot;dc:&amp;quot;.$_-&amp;gt;[0], $_-&amp;gt;[1], %{$_-&amp;gt;[2]} ) );&lt;br /&gt;
                # produces &amp;lt;key&amp;gt;value&amp;lt;/key&amp;gt;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $dc;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub convert_dataobj&lt;br /&gt;
{&lt;br /&gt;
        my( $plugin, $eprint ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $dataset = $eprint-&amp;gt;{dataset};&lt;br /&gt;
&lt;br /&gt;
        my @dcdata = ();&lt;br /&gt;
&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, title =&amp;gt; &amp;quot;title&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;creators&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $creators = $eprint-&amp;gt;get_value( &amp;quot;creators&amp;quot; );&lt;br /&gt;
                foreach my $creator ( @$creators )&lt;br /&gt;
                {&lt;br /&gt;
                        next if !defined $creator;&lt;br /&gt;
&lt;br /&gt;
                        # NOTE THIS IS VERY CRUDE, and should be replaced with more elegant methods (possibly from examples elsewhere on this page).&lt;br /&gt;
                        if( defined $creator-&amp;gt;{id} &amp;amp;&amp;amp; $creator-&amp;gt;{id} =~ /0000/ ){&lt;br /&gt;
                                push @dcdata, [ &amp;quot;creator&amp;quot;, EPrints::Utils::make_name_string( $creator-&amp;gt;{name} ), { 'orcid' =&amp;gt; $creator-&amp;gt;{id} } ];&lt;br /&gt;
                        } else {&lt;br /&gt;
                                push @dcdata, [ &amp;quot;creator&amp;quot;, EPrints::Utils::make_name_string( $creator-&amp;gt;{name} ) ];&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;subjects&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $subjectid;&lt;br /&gt;
                foreach $subjectid ( @{$eprint-&amp;gt;get_value( &amp;quot;subjects&amp;quot; )} )&lt;br /&gt;
                {&lt;br /&gt;
                        my $subject = EPrints::DataObj::Subject-&amp;gt;new( $plugin-&amp;gt;{session}, $subjectid );&lt;br /&gt;
                        # avoid problems with bad subjects&lt;br /&gt;
                                next unless( defined $subject );&lt;br /&gt;
                        push @dcdata, [ &amp;quot;subject&amp;quot;, EPrints::Utils::tree_to_utf8( $subject-&amp;gt;render_description() ) ];&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, abstract =&amp;gt; &amp;quot;description&amp;quot; );&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, publisher =&amp;gt; &amp;quot;publisher&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;editors_name&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $editors = $eprint-&amp;gt;get_value( &amp;quot;editors_name&amp;quot; );&lt;br /&gt;
                if( defined $editors )&lt;br /&gt;
                {&lt;br /&gt;
                        foreach my $editor ( @{$editors} )&lt;br /&gt;
                        {&lt;br /&gt;
                                push @dcdata, [ &amp;quot;contributor&amp;quot;, EPrints::Utils::make_name_string( $editor ) ];&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        ## Date for discovery. For a month/day we don't have, assume 01.&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;date&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $date = $eprint-&amp;gt;get_value( &amp;quot;date&amp;quot; );&lt;br /&gt;
                if( defined $date )&lt;br /&gt;
                {&lt;br /&gt;
                        $date =~ s/(-0+)+$//;&lt;br /&gt;
                        push @dcdata, [ &amp;quot;date&amp;quot;, $date ];&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;type&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                push @dcdata, [ &amp;quot;type&amp;quot;, EPrints::Utils::tree_to_utf8( $eprint-&amp;gt;render_value( &amp;quot;type&amp;quot; ) ) ];&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        my $ref = &amp;quot;NonPeerReviewed&amp;quot;;&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;refereed&amp;quot; ) &amp;amp;&amp;amp; $eprint-&amp;gt;get_value( &amp;quot;refereed&amp;quot; ) eq &amp;quot;TRUE&amp;quot; )&lt;br /&gt;
        {&lt;br /&gt;
                $ref = &amp;quot;PeerReviewed&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        push @dcdata, [ &amp;quot;type&amp;quot;, $ref ];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        my @documents = $eprint-&amp;gt;get_all_documents();&lt;br /&gt;
        my $mimetypes = $plugin-&amp;gt;{session}-&amp;gt;get_repository-&amp;gt;get_conf( &amp;quot;oai&amp;quot;, &amp;quot;mime_types&amp;quot; );&lt;br /&gt;
        foreach( @documents )&lt;br /&gt;
        {&lt;br /&gt;
                my $format = $mimetypes-&amp;gt;{$_-&amp;gt;get_value(&amp;quot;format&amp;quot;)};&lt;br /&gt;
                $format = $_-&amp;gt;get_value(&amp;quot;format&amp;quot;) unless defined $format;&lt;br /&gt;
                #$format = &amp;quot;application/octet-stream&amp;quot; unless defined $format;&lt;br /&gt;
                push @dcdata, [ &amp;quot;format&amp;quot;, $format ];&lt;br /&gt;
                push @dcdata, [ &amp;quot;identifier&amp;quot;, $_-&amp;gt;get_url() ];&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        # Most commonly a DOI or journal link&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, official_url =&amp;gt; &amp;quot;relation&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        # The citation for this eprint&lt;br /&gt;
        push @dcdata, [ &amp;quot;identifier&amp;quot;,&lt;br /&gt;
                EPrints::Utils::tree_to_utf8( $eprint-&amp;gt;render_citation() ) ];&lt;br /&gt;
&lt;br /&gt;
        # The URL of the abstract page&lt;br /&gt;
        if( $eprint-&amp;gt;is_set( &amp;quot;eprintid&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                push @dcdata, [ &amp;quot;relation&amp;quot;, $eprint-&amp;gt;get_url() ];&lt;br /&gt;
        }&lt;br /&gt;
        # dc.language not handled yet.&lt;br /&gt;
        # dc.source not handled yet.&lt;br /&gt;
        # dc.coverage not handled yet.&lt;br /&gt;
        # dc.rights not handled yet.&lt;br /&gt;
&lt;br /&gt;
        return \@dcdata;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=ORCID&amp;diff=12225</id>
		<title>ORCID</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=ORCID&amp;diff=12225"/>
		<updated>2016-10-18T13:26:56Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* Field Recommendations */   added suggestions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has been created to gather information about how different EPrints repositories have integrated ORCID.&lt;br /&gt;
At this time (April 2016) there doesn't seem to be a 'best practice' approach that has been adopted widely - this will hopefully change over time.&lt;br /&gt;
&lt;br /&gt;
==Field Recommendations==&lt;br /&gt;
As at 2016-10-18 these are the recommended field names and types as discussed at the Jisc ORCID hack day in London - Alan Stiles, John Salter, Adam Vials Moore, Peter West, Andrew Beeken&lt;br /&gt;
&lt;br /&gt;
===New MetaField Type===&lt;br /&gt;
* Type 'orcid' is a subtype of 'id', provides validation and render methods  &lt;br /&gt;
N.B. Store the 16 digit, hyphen separated value, without the authority (host) details e.g. 'nnnn-nnnn-nnnn-nnnn'  (as per the value returned by the ORCID API)&lt;br /&gt;
&lt;br /&gt;
===User Object===&lt;br /&gt;
*new field named 'orcid', type 'orcid' to store the value of the ORCID id for that user&lt;br /&gt;
&lt;br /&gt;
====Suggested fields====&lt;br /&gt;
*'orcid_auth_code', type text - to hold the long authorisation token returned by the ORCID API at the end of a successful OAuth2 process&lt;br /&gt;
*'orcid_granted_permissions', type text - to hold the permissions granted via the ORCID API during the authorisation process&lt;br /&gt;
*'orcid_token_expires', type time - to hold the expiry timestamp for the authorisation code above (time now plus expires duration returned by the ORCID API)&lt;br /&gt;
&lt;br /&gt;
===Eprints Contributors (e.g. creators, editors)===&lt;br /&gt;
*new sub-field of contributor_orcid  (e.g. creator_orcid, editor_orcid) type 'orcid' to store the value of the ORCID id for that contributor&lt;br /&gt;
&lt;br /&gt;
==Previous Discussions==&lt;br /&gt;
If you are looking to retrieve publications from the ORCID service, the [http://bazaar.eprints.org/354/ Import from ORCID (Tier 1 API)] Bazaar package, or the [https://github.com/eprintsug/orcidt2 ORCID Tier 2 api framework] are good places to start.&lt;br /&gt;
&lt;br /&gt;
2016-05-20 [[User:Alan.stiles@open.ac.uk|Alan Stiles]] at The Open University is working on a plugin to connect EPrints with ORCID via the Tier 2 Members API to retrieve ORCID ids and synchronise publications and affiliation details.&lt;br /&gt;
&lt;br /&gt;
Some aspects that need to be considered when adopting ORCIDs, and making them available to other systems are:&lt;br /&gt;
&lt;br /&gt;
* storing the ORCID (see: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier)&lt;br /&gt;
* rendering the ORCID in abstract pages (see [http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier link above])&lt;br /&gt;
* exposing ORCIDs over OAI-PMH metadata profiles e.g. RIOXX&lt;br /&gt;
&lt;br /&gt;
NB The examples below may refer to the 'creators' field - but the same approach could be used to extend other 'person' fields - e.g. contributors.&lt;br /&gt;
&lt;br /&gt;
= Re-using creators.id subfield =&lt;br /&gt;
&lt;br /&gt;
The creators.id field is labelled 'email' by default, but as it's an 'id' type field, it can be used to store ORCIDs.&lt;br /&gt;
To re-label the field, a simple addition to a phrase file in &amp;lt;code&amp;gt;archives/ARCHIVEID/cfg/lang/en/phrases/&amp;lt;/code&amp;gt; needs to be made:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;epp:phrase id=&amp;quot;eprint_fieldname_creators_id&amp;quot;&amp;gt;ORCID / Creators email (if known)&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rendering the ORCID in a citation ==&lt;br /&gt;
The rendering of this field then needs to be changed to accommodate an author with an ORCID. The following script adds methods that can be called via the EPScript language:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# add to e.g. ~/archives/ARCHIVEID/cfg/cfg.d/z_add_to_EPrints_Script_Compiled.pl&lt;br /&gt;
# Write into EPrints::Script::Compiled package to allow use of function in epscript&lt;br /&gt;
{&lt;br /&gt;
package EPrints::Script::Compiled;&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
sub run_wrro_people_with_orcids&lt;br /&gt;
{&lt;br /&gt;
  my( $self, $state, $value ) = @_;&lt;br /&gt;
&lt;br /&gt;
  my $session = $state-&amp;gt;{session};&lt;br /&gt;
  my $r = $state-&amp;gt;{session}-&amp;gt;make_doc_fragment;&lt;br /&gt;
&lt;br /&gt;
  my $creators = $value-&amp;gt;[0];&lt;br /&gt;
&lt;br /&gt;
  foreach my $i (0..$#$creators){&lt;br /&gt;
&lt;br /&gt;
    my $creator = @$creators[$i];&lt;br /&gt;
&lt;br /&gt;
    if( $i &amp;gt; 0 ){&lt;br /&gt;
      #not first item (or only one item)&lt;br /&gt;
      if( $i == $#$creators ){&lt;br /&gt;
        #last item&lt;br /&gt;
        $r-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot; and &amp;quot; ) );&lt;br /&gt;
      } else {&lt;br /&gt;
        $r-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;, &amp;quot; ) );&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    my $person_span = $session-&amp;gt;make_element( &amp;quot;span&amp;quot;, &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;person&amp;quot; );&lt;br /&gt;
    $person_span-&amp;gt;appendChild( $session-&amp;gt;render_name( $creator-&amp;gt;{name} ) );&lt;br /&gt;
&lt;br /&gt;
    my $id = $creator-&amp;gt;{id};&lt;br /&gt;
    if( defined $id &amp;amp;&amp;amp; $id =~ m/^(?:orcid.org\/)?(\d{4}\-\d{4}\-\d{4}\-\d{3}(?:\d|X))$/ )&lt;br /&gt;
    {&lt;br /&gt;
      my $orcid_span = $session-&amp;gt;make_element( &amp;quot;span&amp;quot;, &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;orcid&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
#   According to https://orcid.org/trademark-and-id-display-guidelines&lt;br /&gt;
#     &amp;quot;recommended display is a hyperlinked URI preceded by the iD icon&amp;quot;&lt;br /&gt;
#   This looks terrible in a citation. Removed for the time being.&lt;br /&gt;
#&lt;br /&gt;
#   my $orcid_link = $session-&amp;gt;make_element(&lt;br /&gt;
#     &amp;quot;a&amp;quot;,&lt;br /&gt;
#     &amp;quot;href&amp;quot; =&amp;gt; &amp;quot;http://orcid.org/&amp;quot;,&lt;br /&gt;
#     &amp;quot;target&amp;quot; =&amp;gt; &amp;quot;_blank&amp;quot;,&lt;br /&gt;
#     &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;orcid-icon&amp;quot;&lt;br /&gt;
#   );&lt;br /&gt;
#   $orcid_link-&amp;gt;appendChild( $session-&amp;gt;make_element(&lt;br /&gt;
#     &amp;quot;img&amp;quot;,&lt;br /&gt;
#     &amp;quot;src&amp;quot; =&amp;gt; &amp;quot;/images/orcid_16x16.png&amp;quot;,&lt;br /&gt;
#     &amp;quot;title&amp;quot; =&amp;gt; &amp;quot;ORCID&amp;quot;&lt;br /&gt;
#   ) );&lt;br /&gt;
#   $orcid_span-&amp;gt;appendChild( $orcid_link );&lt;br /&gt;
&lt;br /&gt;
      my $link = $session-&amp;gt;make_element(&lt;br /&gt;
        &amp;quot;a&amp;quot;,&lt;br /&gt;
        &amp;quot;href&amp;quot; =&amp;gt; &amp;quot;http://orcid.org/$1&amp;quot;,&lt;br /&gt;
        &amp;quot;target&amp;quot; =&amp;gt; &amp;quot;_blank&amp;quot;,&lt;br /&gt;
      );&lt;br /&gt;
      $link-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;orcid.org/$1&amp;quot; ) );&lt;br /&gt;
&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;(&amp;quot; ) );&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $link );&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;)&amp;quot; ) );&lt;br /&gt;
&lt;br /&gt;
      $person_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot; &amp;quot; ) );&lt;br /&gt;
      $person_span-&amp;gt;appendChild( $orcid_span );&lt;br /&gt;
    }&lt;br /&gt;
    $r-&amp;gt;appendChild( $person_span );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return [ $r, &amp;quot;XHTML&amp;quot; ];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
# END EPrints::Script::Compiled additions&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also want a bit of CSS to style ORCID links&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Add to e.g. ~/archives/ARCHIVEID/cfg/static/style/auto/zzz_orcid.css */&lt;br /&gt;
.person:hover {border-bottom: 1px dashed #a6ce39;}&lt;br /&gt;
.orcid {}&lt;br /&gt;
.orcid a:hover {&lt;br /&gt;
        color: #a6ce39;&lt;br /&gt;
}&lt;br /&gt;
.orcid-icon {}&lt;br /&gt;
.orcid-icon img { vertical-align: text-bottom; margin: 0 4px 0 2px; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And finally, you have to call the new EPScript function from a citation file e.g. &amp;lt;code&amp;gt;archives/ARCHIVEID/cfg/citations/eprint/default.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- replace reference to e.g. &amp;lt;print expr=&amp;quot;creators_name&amp;quot;/&amp;gt; with this: --&amp;gt;&lt;br /&gt;
    &amp;lt;print expr=&amp;quot;wrro_people_with_orcids(creators)&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exposing the ORCID in RIOXX ==&lt;br /&gt;
Based on re-using the creators.id field, this block of code over-writes the default &amp;lt;code&amp;gt;rioxx2_value_author&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# Add to e.g. ~/archives/ARCHIVEID/cfg/cfg.d/zzz_rioxx2_overwrites.pl&lt;br /&gt;
$c-&amp;gt;{rioxx2_value_author} = sub {&lt;br /&gt;
  my( $eprint ) = @_;&lt;br /&gt;
&lt;br /&gt;
  my @authors;&lt;br /&gt;
  for( @{ $eprint-&amp;gt;value( &amp;quot;creators&amp;quot; ) } )&lt;br /&gt;
  {&lt;br /&gt;
    my $id = $_-&amp;gt;{id};&lt;br /&gt;
    if( defined $id &amp;amp;&amp;amp; $id =~ m/^(?:orcid.org\/)?(\d{4}\-\d{4}\-\d{4}\-\d{3}(?:\d|X))$/ )&lt;br /&gt;
    {&lt;br /&gt;
      push @authors, {&lt;br /&gt;
        author =&amp;gt; EPrints::Utils::make_name_string( $_-&amp;gt;{name} ),&lt;br /&gt;
        id =&amp;gt; &amp;quot;http://orcid.org/$1&amp;quot;&lt;br /&gt;
      };&lt;br /&gt;
    } else {&lt;br /&gt;
      push @authors, {&lt;br /&gt;
        author =&amp;gt; EPrints::Utils::make_name_string( $_-&amp;gt;{name} ),&lt;br /&gt;
      };&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #NB If your corp_creators has DOIs or ISNIs for the entries, a similar method could be used to include these here.&lt;br /&gt;
  foreach my $corp ( @{ $eprint-&amp;gt;value( &amp;quot;corp_creators&amp;quot; ) } )&lt;br /&gt;
  {&lt;br /&gt;
    my $entry = {};&lt;br /&gt;
    $entry-&amp;gt;{name} = $corp;&lt;br /&gt;
    push @authors, { author =&amp;gt; $corp };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return \@authors;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Add additional identifiers to creators =&lt;br /&gt;
Another approach to storing ORCIDs is to add an additional sub-field to the creator field.&lt;br /&gt;
This has been discussed on the Eprints tech list. If you know how to do this, please document it here!&lt;br /&gt;
&lt;br /&gt;
This is how University of Bath has done it.  We're getting the ORCID data from another system, so have used a text field to capture it for display.  At present there is no special rendering on it, it's just displaying as a number.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	name =&amp;gt; 'creators',&lt;br /&gt;
	type =&amp;gt; 'compound',&lt;br /&gt;
	multiple =&amp;gt; 1,&lt;br /&gt;
	fields =&amp;gt; [&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'name',&lt;br /&gt;
			type =&amp;gt; 'name',&lt;br /&gt;
			hide_honourific =&amp;gt; 1,&lt;br /&gt;
			hide_lineage =&amp;gt; 1,&lt;br /&gt;
			family_first =&amp;gt; 1,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'id',&lt;br /&gt;
			type =&amp;gt; 'text',&lt;br /&gt;
			input_cols =&amp;gt; 20,&lt;br /&gt;
			allow_null =&amp;gt; 1,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'orcid',&lt;br /&gt;
			type =&amp;gt; 'text',&lt;br /&gt;
			input_cols =&amp;gt; 20,&lt;br /&gt;
			allow_null =&amp;gt; 1,&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	],&lt;br /&gt;
	input_boxes =&amp;gt; 4,&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This is how University of Pittsburgh has done it:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
          {&lt;br /&gt;
            'name' =&amp;gt; 'creators',&lt;br /&gt;
            'type' =&amp;gt; 'compound',&lt;br /&gt;
            'multiple' =&amp;gt; 1,&lt;br /&gt;
            'fields' =&amp;gt; [&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'name',&lt;br /&gt;
                            'type' =&amp;gt; 'name',&lt;br /&gt;
                            'hide_honourific' =&amp;gt; 1,&lt;br /&gt;
                            'hide_lineage' =&amp;gt; 1,&lt;br /&gt;
                            'family_first' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'email',&lt;br /&gt;
                            'type' =&amp;gt; 'text',&lt;br /&gt;
                            'input_cols' =&amp;gt; 20,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'id',&lt;br /&gt;
                            'type' =&amp;gt; 'text',&lt;br /&gt;
                            'input_cols' =&amp;gt; 20,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'orcid',&lt;br /&gt;
                            'type' =&amp;gt; 'id',&lt;br /&gt;
                            'input_cols' =&amp;gt; 19,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                        ],&lt;br /&gt;
            'input_boxes' =&amp;gt; 4,&lt;br /&gt;
            'render_value' =&amp;gt; 'custom_render_creators_with_orcid',&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notes from Pittsburgh:==&lt;br /&gt;
(Information courtesy of Brian Gregg - bdgregg@pitt.edu)&lt;br /&gt;
&lt;br /&gt;
We have added some ORCID functionality in our IR System here at the University of Pittsburgh.  We however have not “linked” our IR with orcid.org in anyway such as we do not have a lookup user in ORCID or the ability to add publications from ORCID to our IR.  The only link is the entering of the ORCID into the system so that it can be displayed.&lt;br /&gt;
&lt;br /&gt;
An example record is available here: [http://d-scholarship.pitt.edu/28114/ http://d-scholarship.pitt.edu/28114/]&lt;br /&gt;
&lt;br /&gt;
# Users have an ORCID field in their profile – user_fields.pl&lt;br /&gt;
# Any “Creator” types have an ORCID field added to the workflow – eprint_fields.pl&lt;br /&gt;
# We have added ORCID validation adhering to this document: [http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier] - eprint_validate.pl&lt;br /&gt;
# We have added the ORCID to the “lookup” function to populate the ORCID field from any user entries in the database. – cgi/users/lookup/name&lt;br /&gt;
# We display the ORCID as such on the input form, where the green icon links out to our own orcid.pitt.edu site, but could be to orcid.org by default.&lt;br /&gt;
# We display the ORCID as such on the public display of the record where the ORCID is linked out to orcid.org (see [http://d-scholarship.pitt.edu/28114/ example record])&lt;br /&gt;
&lt;br /&gt;
ORCID Validator - snippet for eprints_validate.pl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
        # ORCID ID Validator for individuals&lt;br /&gt;
        # Reference: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier&lt;br /&gt;
        # REGEX: ^\d{4}-\d{4}-\d{4}-(\d{3}X|\d{4})$&lt;br /&gt;
        #&lt;br /&gt;
        my @name_fields = qw( creators contributors exhibitors producers conductors lyricists );  #which ever name fields you added 'orcid' to.&lt;br /&gt;
        foreach my $name_field ( @name_fields )&lt;br /&gt;
        {&lt;br /&gt;
           if( $eprint-&amp;gt;is_set( $name_field ) )&lt;br /&gt;
           {&lt;br /&gt;
              foreach my $creator ( @{ $eprint-&amp;gt;value( $name_field ) } )&lt;br /&gt;
              {&lt;br /&gt;
                 my $orcid = $creator-&amp;gt;{orcid};&lt;br /&gt;
                 next unless defined $orcid;&lt;br /&gt;
                 if ($repository-&amp;gt;get_repository-&amp;gt;can_call ( &amp;quot;validators&amp;quot;, &amp;quot;isValidORCID&amp;quot; ) )&lt;br /&gt;
                 {&lt;br /&gt;
                    if (!$repository-&amp;gt;get_repository-&amp;gt;call( [ &amp;quot;validators&amp;quot;, &amp;quot;isValidORCID&amp;quot; ], $orcid ))&lt;br /&gt;
                    {&lt;br /&gt;
                       my $field_text = $repository-&amp;gt;html_phrase( &amp;quot;eprint_fieldname_$name_field&amp;quot; );&lt;br /&gt;
                       my $field_frag = $repository-&amp;gt;make_element( &amp;quot;span&amp;quot;, class=&amp;gt;&amp;quot;ep_problem_field:$name_field&amp;quot; );&lt;br /&gt;
                       $field_frag-&amp;gt;appendChild($field_text);&lt;br /&gt;
                       push @problems, $repository-&amp;gt;html_phrase( &amp;quot;warnings:orcid_invalid&amp;quot;,&lt;br /&gt;
                            orcid =&amp;gt; $repository-&amp;gt;get_repository-&amp;gt;make_text($orcid),&lt;br /&gt;
                            field =&amp;gt; $field_frag,&lt;br /&gt;
                        );&lt;br /&gt;
                    }&lt;br /&gt;
                 } else {&lt;br /&gt;
                    $repository-&amp;gt;get_repository-&amp;gt;log( &amp;quot;Can not call isValidORCID.&amp;quot; );&lt;br /&gt;
                 }&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Phrase for &amp;quot;warnings:orcid_invalid&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;epp:phrase id=&amp;quot;warnings:orcid_invalid&amp;quot;&amp;gt;The ORCID ID: &amp;lt;b&amp;gt;&amp;lt;epc:pin name=&amp;quot;orcid&amp;quot;/&amp;gt;&amp;lt;/b&amp;gt; is not a valid ORCID ID as it does not conform to the ORCID ID specification.  Please edit the &amp;lt;epc:pin name=&amp;quot;field&amp;quot;/&amp;gt; with the associated ORCID or remove it from the name completely.&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additional Function that can be placed either at the end of eprints_validate.pl (after the final };) or elsewhere:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
############################################&lt;br /&gt;
# Function:     isValidORCID&lt;br /&gt;
# Description:  Used to validate ORCID IDs&lt;br /&gt;
# &lt;br /&gt;
# From: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier (Checksum)&lt;br /&gt;
#&lt;br /&gt;
$c-&amp;gt;{validators}-&amp;gt;{isValidORCID} = sub {&lt;br /&gt;
   my $ORCID = $_[0];&lt;br /&gt;
   #Check for valid length of 19 characters.&lt;br /&gt;
   my $size = length($ORCID);&lt;br /&gt;
   if ($size &amp;gt; 19 )&lt;br /&gt;
   {&lt;br /&gt;
        return 0;&lt;br /&gt;
   } else {&lt;br /&gt;
      #Check actual validity of the ID mathematically.&lt;br /&gt;
      $ORCID =~ s/\-//g;&lt;br /&gt;
      my @chars = split(//, $ORCID);&lt;br /&gt;
      my $total = 0;&lt;br /&gt;
      for ( my $i=0; $i&amp;lt;15; $i++) {&lt;br /&gt;
         $total = ($total + $chars[$i]) *2;&lt;br /&gt;
      }&lt;br /&gt;
      my $remainder = $total % 11;&lt;br /&gt;
      my $result = (12 - $remainder) % 11;&lt;br /&gt;
      return ($chars[15] == ($result==10 ? 'X' : $result))&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additionally you will have to define a custom render to add the fields to be displayed in the abstract/summary page.&lt;br /&gt;
&lt;br /&gt;
= Rendering with Bootstrap =&lt;br /&gt;
&lt;br /&gt;
[[File:orcid_bootstrap.png|thumb|left|alt=ORCIDs displaying in the Bootstrap theme|ORCID and Bootstrap]]&lt;br /&gt;
&lt;br /&gt;
In a recent redesign of [http://eprints.whiterose.ac.uk White Rose Research Online] the [https://github.com/eprintsug/bootstrap Bootstrap theme] was used.&lt;br /&gt;
The ORCID links are now enhanced with a tooltip and the green icon. There may be examples on the [http://eprints.whiterose.ac.uk/cgi/latest_tool latest 20 additions] page.&lt;br /&gt;
&lt;br /&gt;
== Bootstrap tooltop ==&lt;br /&gt;
This block of code finds anything with a class of 'orcid', and adds the green logo to it, and a tooltip that reads 'ORCID: ''orcid-value''', as shown in the image.&lt;br /&gt;
&lt;br /&gt;
The example code below is based on the following rendering of a person who may have an ORCID:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- NB line-breaks added here for readability are not normally output by EPrints! --&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;person&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;person_name&amp;quot;&amp;gt;Castillo Ortiz, P.J.&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;a href=&amp;quot;http://orcid.org/0000-0003-4540-1855&amp;quot; target=&amp;quot;_blank&amp;quot; class=&amp;quot;orcid&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;span&amp;gt;orcid.org/0000-0003-4540-1855&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== jQuery ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// selector used here depends on your rendering. You may want to use something like a[href*='orcid.org/0000-']&lt;br /&gt;
jQuery('.orcid').tooltip({&lt;br /&gt;
	'placement': 'auto',&lt;br /&gt;
	'title': function(){ return &amp;quot;ORCID: &amp;quot;+ jQuery(this).text()},&lt;br /&gt;
}).append('&amp;lt;img src=&amp;quot;/images/orcid_16x16.png&amp;quot; alt=&amp;quot;&amp;quot; /&amp;gt;').find('span').hide();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSS ==&lt;br /&gt;
The green colouring is added using the following css, which also makes the background of the tooltip opaque, not semi-transparent as it is by default.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.person + .tooltip &amp;gt; .tooltip-inner,&lt;br /&gt;
.orcid + .tooltip &amp;gt; .tooltip-inner {&lt;br /&gt;
  background-color: #A6CE39;&lt;br /&gt;
  border: 1px solid #000000;&lt;br /&gt;
  white-space: pre;&lt;br /&gt;
  max-width: none;&lt;br /&gt;
}&lt;br /&gt;
.person + .tooltip.in,&lt;br /&gt;
.orcid + .tooltip.in {&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  filter: alpha(opacity=100);&lt;br /&gt;
}&lt;br /&gt;
/* This adds a green dashed line under an author's name when hovered. This helps in big author lists to tie initials and surname together */&lt;br /&gt;
.person:hover {border-bottom: 1px dashed #a6ce39;}&lt;br /&gt;
.orcid a:hover {&lt;br /&gt;
        color: #a6ce39;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OAI-PMH (Experimental) =&lt;br /&gt;
'''[[User:Libjlrs]] 2016-09-29 Warning: this is experimental. I hope others will read, understand, question and improve on this before it becomes some form of best practice!'''&lt;br /&gt;
&lt;br /&gt;
Some metadata profiles support attributes that are useful to propagate ORCIDs e.g. RIOXX (see the [[#Exposing_the_ORCID_in_RIOXX]] section above, and the 'rioxxterms:author' section on http://www.rioxx.net/profiles/v2-0-final/ ).&lt;br /&gt;
&lt;br /&gt;
A lot of harvesters use the oai_dc metadata profile when harvesting records. The DC schema doesn't allow attributes on the dc:creator element, so ORCIDs cannot be added in a sensible way to this profile.&lt;br /&gt;
&lt;br /&gt;
The details below create an additional metadata prefix that adds an attribute to the dc:creator field. The original &amp;lt;code&amp;gt;metadataPrefix=oai_dc&amp;lt;/code&amp;gt; output remains unchanged. Using &amp;lt;code&amp;gt;metadataPrefix=oai_dc_orcid&amp;lt;/code&amp;gt; will add the orcid attribute where available.&lt;br /&gt;
&lt;br /&gt;
Currently there is not an XSD that describes this change, so a harvester that validates the feed may stop when it encounters an ORCID.&lt;br /&gt;
&lt;br /&gt;
This example is based on the &amp;lt;code&amp;gt;EPrints::Plugin::Export::OAI_DC&amp;lt;/code&amp;gt; module from EPrints 3.3.10. You may need to tweak it to make it work for you!&lt;br /&gt;
&lt;br /&gt;
File: &amp;lt;code&amp;gt;~/archives/ARCHIVEID/cfg/plugins/EPrints/Plugin/Export/OAI_DC_ORCID.pm&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
package EPrints::Plugin::Export::OAI_DC_ORCID;&lt;br /&gt;
&lt;br /&gt;
use EPrints::Plugin::Export::OAI_DC;&lt;br /&gt;
&lt;br /&gt;
@ISA = ( &amp;quot;EPrints::Plugin::Export::OAI_DC&amp;quot;, &amp;quot;EPrints::Plugin::Export::DC&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
sub new&lt;br /&gt;
{&lt;br /&gt;
        my( $class, %opts ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $self = $class-&amp;gt;SUPER::new( %opts );&lt;br /&gt;
&lt;br /&gt;
        $self-&amp;gt;{name} = &amp;quot;Dublin Core - OAI + ORCID Schema&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{accept} = [ 'dataobj/eprint' ];&lt;br /&gt;
        $self-&amp;gt;{visible} = &amp;quot;&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{suffix} = &amp;quot;.xml&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{mimetype} = &amp;quot;text/xml&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        $self-&amp;gt;{metadataPrefix} = &amp;quot;oai_dc_orcid&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{xmlns} = &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc/&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{schemaLocation} = &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc.xsd&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub xml_dataobj&lt;br /&gt;
{&lt;br /&gt;
        my( $plugin, $dataobj ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $data = $plugin-&amp;gt;convert_dataobj( $dataobj );&lt;br /&gt;
&lt;br /&gt;
        my $dc = $plugin-&amp;gt;{session}-&amp;gt;make_element(&lt;br /&gt;
                &amp;quot;oai_dc:dc&amp;quot;,&lt;br /&gt;
                &amp;quot;xmlns:oai_dc&amp;quot; =&amp;gt; &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc/&amp;quot;,&lt;br /&gt;
                &amp;quot;xmlns:dc&amp;quot; =&amp;gt; &amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;,&lt;br /&gt;
                &amp;quot;xmlns:xsi&amp;quot; =&amp;gt; &amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;,&lt;br /&gt;
                &amp;quot;xsi:schemaLocation&amp;quot; =&amp;gt;&lt;br /&gt;
        &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        # turn the list of pairs into XML blocks (indented by 8) and add them&lt;br /&gt;
        # them to the DC element.&lt;br /&gt;
        foreach( @{$data} )&lt;br /&gt;
        {&lt;br /&gt;
                $dc-&amp;gt;appendChild(  $plugin-&amp;gt;{session}-&amp;gt;render_data_element( 8, &amp;quot;dc:&amp;quot;.$_-&amp;gt;[0], $_-&amp;gt;[1], %{$_-&amp;gt;[2]} ) );&lt;br /&gt;
                # produces &amp;lt;key&amp;gt;value&amp;lt;/key&amp;gt;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $dc;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub convert_dataobj&lt;br /&gt;
{&lt;br /&gt;
        my( $plugin, $eprint ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $dataset = $eprint-&amp;gt;{dataset};&lt;br /&gt;
&lt;br /&gt;
        my @dcdata = ();&lt;br /&gt;
&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, title =&amp;gt; &amp;quot;title&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;creators&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $creators = $eprint-&amp;gt;get_value( &amp;quot;creators&amp;quot; );&lt;br /&gt;
                foreach my $creator ( @$creators )&lt;br /&gt;
                {&lt;br /&gt;
                        next if !defined $creator;&lt;br /&gt;
&lt;br /&gt;
                        # NOTE THIS IS VERY CRUDE, and should be replaced with more elegant methods (possibly from examples elsewhere on this page).&lt;br /&gt;
                        if( defined $creator-&amp;gt;{id} &amp;amp;&amp;amp; $creator-&amp;gt;{id} =~ /0000/ ){&lt;br /&gt;
                                push @dcdata, [ &amp;quot;creator&amp;quot;, EPrints::Utils::make_name_string( $creator-&amp;gt;{name} ), { 'orcid' =&amp;gt; $creator-&amp;gt;{id} } ];&lt;br /&gt;
                        } else {&lt;br /&gt;
                                push @dcdata, [ &amp;quot;creator&amp;quot;, EPrints::Utils::make_name_string( $creator-&amp;gt;{name} ) ];&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;subjects&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $subjectid;&lt;br /&gt;
                foreach $subjectid ( @{$eprint-&amp;gt;get_value( &amp;quot;subjects&amp;quot; )} )&lt;br /&gt;
                {&lt;br /&gt;
                        my $subject = EPrints::DataObj::Subject-&amp;gt;new( $plugin-&amp;gt;{session}, $subjectid );&lt;br /&gt;
                        # avoid problems with bad subjects&lt;br /&gt;
                                next unless( defined $subject );&lt;br /&gt;
                        push @dcdata, [ &amp;quot;subject&amp;quot;, EPrints::Utils::tree_to_utf8( $subject-&amp;gt;render_description() ) ];&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, abstract =&amp;gt; &amp;quot;description&amp;quot; );&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, publisher =&amp;gt; &amp;quot;publisher&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;editors_name&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $editors = $eprint-&amp;gt;get_value( &amp;quot;editors_name&amp;quot; );&lt;br /&gt;
                if( defined $editors )&lt;br /&gt;
                {&lt;br /&gt;
                        foreach my $editor ( @{$editors} )&lt;br /&gt;
                        {&lt;br /&gt;
                                push @dcdata, [ &amp;quot;contributor&amp;quot;, EPrints::Utils::make_name_string( $editor ) ];&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        ## Date for discovery. For a month/day we don't have, assume 01.&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;date&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $date = $eprint-&amp;gt;get_value( &amp;quot;date&amp;quot; );&lt;br /&gt;
                if( defined $date )&lt;br /&gt;
                {&lt;br /&gt;
                        $date =~ s/(-0+)+$//;&lt;br /&gt;
                        push @dcdata, [ &amp;quot;date&amp;quot;, $date ];&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;type&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                push @dcdata, [ &amp;quot;type&amp;quot;, EPrints::Utils::tree_to_utf8( $eprint-&amp;gt;render_value( &amp;quot;type&amp;quot; ) ) ];&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        my $ref = &amp;quot;NonPeerReviewed&amp;quot;;&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;refereed&amp;quot; ) &amp;amp;&amp;amp; $eprint-&amp;gt;get_value( &amp;quot;refereed&amp;quot; ) eq &amp;quot;TRUE&amp;quot; )&lt;br /&gt;
        {&lt;br /&gt;
                $ref = &amp;quot;PeerReviewed&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        push @dcdata, [ &amp;quot;type&amp;quot;, $ref ];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        my @documents = $eprint-&amp;gt;get_all_documents();&lt;br /&gt;
        my $mimetypes = $plugin-&amp;gt;{session}-&amp;gt;get_repository-&amp;gt;get_conf( &amp;quot;oai&amp;quot;, &amp;quot;mime_types&amp;quot; );&lt;br /&gt;
        foreach( @documents )&lt;br /&gt;
        {&lt;br /&gt;
                my $format = $mimetypes-&amp;gt;{$_-&amp;gt;get_value(&amp;quot;format&amp;quot;)};&lt;br /&gt;
                $format = $_-&amp;gt;get_value(&amp;quot;format&amp;quot;) unless defined $format;&lt;br /&gt;
                #$format = &amp;quot;application/octet-stream&amp;quot; unless defined $format;&lt;br /&gt;
                push @dcdata, [ &amp;quot;format&amp;quot;, $format ];&lt;br /&gt;
                push @dcdata, [ &amp;quot;identifier&amp;quot;, $_-&amp;gt;get_url() ];&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        # Most commonly a DOI or journal link&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, official_url =&amp;gt; &amp;quot;relation&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        # The citation for this eprint&lt;br /&gt;
        push @dcdata, [ &amp;quot;identifier&amp;quot;,&lt;br /&gt;
                EPrints::Utils::tree_to_utf8( $eprint-&amp;gt;render_citation() ) ];&lt;br /&gt;
&lt;br /&gt;
        # The URL of the abstract page&lt;br /&gt;
        if( $eprint-&amp;gt;is_set( &amp;quot;eprintid&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                push @dcdata, [ &amp;quot;relation&amp;quot;, $eprint-&amp;gt;get_url() ];&lt;br /&gt;
        }&lt;br /&gt;
        # dc.language not handled yet.&lt;br /&gt;
        # dc.source not handled yet.&lt;br /&gt;
        # dc.coverage not handled yet.&lt;br /&gt;
        # dc.rights not handled yet.&lt;br /&gt;
&lt;br /&gt;
        return \@dcdata;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=ORCID&amp;diff=12224</id>
		<title>ORCID</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=ORCID&amp;diff=12224"/>
		<updated>2016-10-18T13:14:14Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* User Object */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has been created to gather information about how different EPrints repositories have integrated ORCID.&lt;br /&gt;
At this time (April 2016) there doesn't seem to be a 'best practice' approach that has been adopted widely - this will hopefully change over time.&lt;br /&gt;
&lt;br /&gt;
==Field Recommendations==&lt;br /&gt;
As at 2016-10-18 these are the recommended field names and types as discussed at the Jisc ORCID hack day in London - Alan Stiles, John Salter, Adam Vials Moore, Peter West, Andrew Beeken&lt;br /&gt;
&lt;br /&gt;
===User Object===&lt;br /&gt;
new field named 'orcid', type 'orcid' which is a subtype of 'id', incorporating render as url methods etc.&lt;br /&gt;
&lt;br /&gt;
===Eprints Contributors (e.g. creators, editors)===&lt;br /&gt;
&lt;br /&gt;
new sub-field of contributor_orcid  (e.g. creator_orcid, editor_orcid)&lt;br /&gt;
&lt;br /&gt;
Store the 16 digit, hyphen separated value, without the authority (host) details e.g. 'nnnn-nnnn-nnnn-nnnn'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Previous Discussions==&lt;br /&gt;
If you are looking to retrieve publications from the ORCID service, the [http://bazaar.eprints.org/354/ Import from ORCID (Tier 1 API)] Bazaar package, or the [https://github.com/eprintsug/orcidt2 ORCID Tier 2 api framework] are good places to start.&lt;br /&gt;
&lt;br /&gt;
2016-05-20 [[User:Alan.stiles@open.ac.uk|Alan Stiles]] at The Open University is working on a plugin to connect EPrints with ORCID via the Tier 2 Members API to retrieve ORCID ids and synchronise publications and affiliation details.&lt;br /&gt;
&lt;br /&gt;
Some aspects that need to be considered when adopting ORCIDs, and making them available to other systems are:&lt;br /&gt;
&lt;br /&gt;
* storing the ORCID (see: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier)&lt;br /&gt;
* rendering the ORCID in abstract pages (see [http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier link above])&lt;br /&gt;
* exposing ORCIDs over OAI-PMH metadata profiles e.g. RIOXX&lt;br /&gt;
&lt;br /&gt;
NB The examples below may refer to the 'creators' field - but the same approach could be used to extend other 'person' fields - e.g. contributors.&lt;br /&gt;
&lt;br /&gt;
= Re-using creators.id subfield =&lt;br /&gt;
&lt;br /&gt;
The creators.id field is labelled 'email' by default, but as it's an 'id' type field, it can be used to store ORCIDs.&lt;br /&gt;
To re-label the field, a simple addition to a phrase file in &amp;lt;code&amp;gt;archives/ARCHIVEID/cfg/lang/en/phrases/&amp;lt;/code&amp;gt; needs to be made:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;epp:phrase id=&amp;quot;eprint_fieldname_creators_id&amp;quot;&amp;gt;ORCID / Creators email (if known)&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rendering the ORCID in a citation ==&lt;br /&gt;
The rendering of this field then needs to be changed to accommodate an author with an ORCID. The following script adds methods that can be called via the EPScript language:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# add to e.g. ~/archives/ARCHIVEID/cfg/cfg.d/z_add_to_EPrints_Script_Compiled.pl&lt;br /&gt;
# Write into EPrints::Script::Compiled package to allow use of function in epscript&lt;br /&gt;
{&lt;br /&gt;
package EPrints::Script::Compiled;&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
sub run_wrro_people_with_orcids&lt;br /&gt;
{&lt;br /&gt;
  my( $self, $state, $value ) = @_;&lt;br /&gt;
&lt;br /&gt;
  my $session = $state-&amp;gt;{session};&lt;br /&gt;
  my $r = $state-&amp;gt;{session}-&amp;gt;make_doc_fragment;&lt;br /&gt;
&lt;br /&gt;
  my $creators = $value-&amp;gt;[0];&lt;br /&gt;
&lt;br /&gt;
  foreach my $i (0..$#$creators){&lt;br /&gt;
&lt;br /&gt;
    my $creator = @$creators[$i];&lt;br /&gt;
&lt;br /&gt;
    if( $i &amp;gt; 0 ){&lt;br /&gt;
      #not first item (or only one item)&lt;br /&gt;
      if( $i == $#$creators ){&lt;br /&gt;
        #last item&lt;br /&gt;
        $r-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot; and &amp;quot; ) );&lt;br /&gt;
      } else {&lt;br /&gt;
        $r-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;, &amp;quot; ) );&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    my $person_span = $session-&amp;gt;make_element( &amp;quot;span&amp;quot;, &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;person&amp;quot; );&lt;br /&gt;
    $person_span-&amp;gt;appendChild( $session-&amp;gt;render_name( $creator-&amp;gt;{name} ) );&lt;br /&gt;
&lt;br /&gt;
    my $id = $creator-&amp;gt;{id};&lt;br /&gt;
    if( defined $id &amp;amp;&amp;amp; $id =~ m/^(?:orcid.org\/)?(\d{4}\-\d{4}\-\d{4}\-\d{3}(?:\d|X))$/ )&lt;br /&gt;
    {&lt;br /&gt;
      my $orcid_span = $session-&amp;gt;make_element( &amp;quot;span&amp;quot;, &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;orcid&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
#   According to https://orcid.org/trademark-and-id-display-guidelines&lt;br /&gt;
#     &amp;quot;recommended display is a hyperlinked URI preceded by the iD icon&amp;quot;&lt;br /&gt;
#   This looks terrible in a citation. Removed for the time being.&lt;br /&gt;
#&lt;br /&gt;
#   my $orcid_link = $session-&amp;gt;make_element(&lt;br /&gt;
#     &amp;quot;a&amp;quot;,&lt;br /&gt;
#     &amp;quot;href&amp;quot; =&amp;gt; &amp;quot;http://orcid.org/&amp;quot;,&lt;br /&gt;
#     &amp;quot;target&amp;quot; =&amp;gt; &amp;quot;_blank&amp;quot;,&lt;br /&gt;
#     &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;orcid-icon&amp;quot;&lt;br /&gt;
#   );&lt;br /&gt;
#   $orcid_link-&amp;gt;appendChild( $session-&amp;gt;make_element(&lt;br /&gt;
#     &amp;quot;img&amp;quot;,&lt;br /&gt;
#     &amp;quot;src&amp;quot; =&amp;gt; &amp;quot;/images/orcid_16x16.png&amp;quot;,&lt;br /&gt;
#     &amp;quot;title&amp;quot; =&amp;gt; &amp;quot;ORCID&amp;quot;&lt;br /&gt;
#   ) );&lt;br /&gt;
#   $orcid_span-&amp;gt;appendChild( $orcid_link );&lt;br /&gt;
&lt;br /&gt;
      my $link = $session-&amp;gt;make_element(&lt;br /&gt;
        &amp;quot;a&amp;quot;,&lt;br /&gt;
        &amp;quot;href&amp;quot; =&amp;gt; &amp;quot;http://orcid.org/$1&amp;quot;,&lt;br /&gt;
        &amp;quot;target&amp;quot; =&amp;gt; &amp;quot;_blank&amp;quot;,&lt;br /&gt;
      );&lt;br /&gt;
      $link-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;orcid.org/$1&amp;quot; ) );&lt;br /&gt;
&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;(&amp;quot; ) );&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $link );&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;)&amp;quot; ) );&lt;br /&gt;
&lt;br /&gt;
      $person_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot; &amp;quot; ) );&lt;br /&gt;
      $person_span-&amp;gt;appendChild( $orcid_span );&lt;br /&gt;
    }&lt;br /&gt;
    $r-&amp;gt;appendChild( $person_span );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return [ $r, &amp;quot;XHTML&amp;quot; ];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
# END EPrints::Script::Compiled additions&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also want a bit of CSS to style ORCID links&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Add to e.g. ~/archives/ARCHIVEID/cfg/static/style/auto/zzz_orcid.css */&lt;br /&gt;
.person:hover {border-bottom: 1px dashed #a6ce39;}&lt;br /&gt;
.orcid {}&lt;br /&gt;
.orcid a:hover {&lt;br /&gt;
        color: #a6ce39;&lt;br /&gt;
}&lt;br /&gt;
.orcid-icon {}&lt;br /&gt;
.orcid-icon img { vertical-align: text-bottom; margin: 0 4px 0 2px; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And finally, you have to call the new EPScript function from a citation file e.g. &amp;lt;code&amp;gt;archives/ARCHIVEID/cfg/citations/eprint/default.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- replace reference to e.g. &amp;lt;print expr=&amp;quot;creators_name&amp;quot;/&amp;gt; with this: --&amp;gt;&lt;br /&gt;
    &amp;lt;print expr=&amp;quot;wrro_people_with_orcids(creators)&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exposing the ORCID in RIOXX ==&lt;br /&gt;
Based on re-using the creators.id field, this block of code over-writes the default &amp;lt;code&amp;gt;rioxx2_value_author&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# Add to e.g. ~/archives/ARCHIVEID/cfg/cfg.d/zzz_rioxx2_overwrites.pl&lt;br /&gt;
$c-&amp;gt;{rioxx2_value_author} = sub {&lt;br /&gt;
  my( $eprint ) = @_;&lt;br /&gt;
&lt;br /&gt;
  my @authors;&lt;br /&gt;
  for( @{ $eprint-&amp;gt;value( &amp;quot;creators&amp;quot; ) } )&lt;br /&gt;
  {&lt;br /&gt;
    my $id = $_-&amp;gt;{id};&lt;br /&gt;
    if( defined $id &amp;amp;&amp;amp; $id =~ m/^(?:orcid.org\/)?(\d{4}\-\d{4}\-\d{4}\-\d{3}(?:\d|X))$/ )&lt;br /&gt;
    {&lt;br /&gt;
      push @authors, {&lt;br /&gt;
        author =&amp;gt; EPrints::Utils::make_name_string( $_-&amp;gt;{name} ),&lt;br /&gt;
        id =&amp;gt; &amp;quot;http://orcid.org/$1&amp;quot;&lt;br /&gt;
      };&lt;br /&gt;
    } else {&lt;br /&gt;
      push @authors, {&lt;br /&gt;
        author =&amp;gt; EPrints::Utils::make_name_string( $_-&amp;gt;{name} ),&lt;br /&gt;
      };&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #NB If your corp_creators has DOIs or ISNIs for the entries, a similar method could be used to include these here.&lt;br /&gt;
  foreach my $corp ( @{ $eprint-&amp;gt;value( &amp;quot;corp_creators&amp;quot; ) } )&lt;br /&gt;
  {&lt;br /&gt;
    my $entry = {};&lt;br /&gt;
    $entry-&amp;gt;{name} = $corp;&lt;br /&gt;
    push @authors, { author =&amp;gt; $corp };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return \@authors;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Add additional identifiers to creators =&lt;br /&gt;
Another approach to storing ORCIDs is to add an additional sub-field to the creator field.&lt;br /&gt;
This has been discussed on the Eprints tech list. If you know how to do this, please document it here!&lt;br /&gt;
&lt;br /&gt;
This is how University of Bath has done it.  We're getting the ORCID data from another system, so have used a text field to capture it for display.  At present there is no special rendering on it, it's just displaying as a number.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	name =&amp;gt; 'creators',&lt;br /&gt;
	type =&amp;gt; 'compound',&lt;br /&gt;
	multiple =&amp;gt; 1,&lt;br /&gt;
	fields =&amp;gt; [&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'name',&lt;br /&gt;
			type =&amp;gt; 'name',&lt;br /&gt;
			hide_honourific =&amp;gt; 1,&lt;br /&gt;
			hide_lineage =&amp;gt; 1,&lt;br /&gt;
			family_first =&amp;gt; 1,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'id',&lt;br /&gt;
			type =&amp;gt; 'text',&lt;br /&gt;
			input_cols =&amp;gt; 20,&lt;br /&gt;
			allow_null =&amp;gt; 1,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'orcid',&lt;br /&gt;
			type =&amp;gt; 'text',&lt;br /&gt;
			input_cols =&amp;gt; 20,&lt;br /&gt;
			allow_null =&amp;gt; 1,&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	],&lt;br /&gt;
	input_boxes =&amp;gt; 4,&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This is how University of Pittsburgh has done it:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
          {&lt;br /&gt;
            'name' =&amp;gt; 'creators',&lt;br /&gt;
            'type' =&amp;gt; 'compound',&lt;br /&gt;
            'multiple' =&amp;gt; 1,&lt;br /&gt;
            'fields' =&amp;gt; [&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'name',&lt;br /&gt;
                            'type' =&amp;gt; 'name',&lt;br /&gt;
                            'hide_honourific' =&amp;gt; 1,&lt;br /&gt;
                            'hide_lineage' =&amp;gt; 1,&lt;br /&gt;
                            'family_first' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'email',&lt;br /&gt;
                            'type' =&amp;gt; 'text',&lt;br /&gt;
                            'input_cols' =&amp;gt; 20,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'id',&lt;br /&gt;
                            'type' =&amp;gt; 'text',&lt;br /&gt;
                            'input_cols' =&amp;gt; 20,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'orcid',&lt;br /&gt;
                            'type' =&amp;gt; 'id',&lt;br /&gt;
                            'input_cols' =&amp;gt; 19,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                        ],&lt;br /&gt;
            'input_boxes' =&amp;gt; 4,&lt;br /&gt;
            'render_value' =&amp;gt; 'custom_render_creators_with_orcid',&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notes from Pittsburgh:==&lt;br /&gt;
(Information courtesy of Brian Gregg - bdgregg@pitt.edu)&lt;br /&gt;
&lt;br /&gt;
We have added some ORCID functionality in our IR System here at the University of Pittsburgh.  We however have not “linked” our IR with orcid.org in anyway such as we do not have a lookup user in ORCID or the ability to add publications from ORCID to our IR.  The only link is the entering of the ORCID into the system so that it can be displayed.&lt;br /&gt;
&lt;br /&gt;
An example record is available here: [http://d-scholarship.pitt.edu/28114/ http://d-scholarship.pitt.edu/28114/]&lt;br /&gt;
&lt;br /&gt;
# Users have an ORCID field in their profile – user_fields.pl&lt;br /&gt;
# Any “Creator” types have an ORCID field added to the workflow – eprint_fields.pl&lt;br /&gt;
# We have added ORCID validation adhering to this document: [http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier] - eprint_validate.pl&lt;br /&gt;
# We have added the ORCID to the “lookup” function to populate the ORCID field from any user entries in the database. – cgi/users/lookup/name&lt;br /&gt;
# We display the ORCID as such on the input form, where the green icon links out to our own orcid.pitt.edu site, but could be to orcid.org by default.&lt;br /&gt;
# We display the ORCID as such on the public display of the record where the ORCID is linked out to orcid.org (see [http://d-scholarship.pitt.edu/28114/ example record])&lt;br /&gt;
&lt;br /&gt;
ORCID Validator - snippet for eprints_validate.pl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
        # ORCID ID Validator for individuals&lt;br /&gt;
        # Reference: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier&lt;br /&gt;
        # REGEX: ^\d{4}-\d{4}-\d{4}-(\d{3}X|\d{4})$&lt;br /&gt;
        #&lt;br /&gt;
        my @name_fields = qw( creators contributors exhibitors producers conductors lyricists );  #which ever name fields you added 'orcid' to.&lt;br /&gt;
        foreach my $name_field ( @name_fields )&lt;br /&gt;
        {&lt;br /&gt;
           if( $eprint-&amp;gt;is_set( $name_field ) )&lt;br /&gt;
           {&lt;br /&gt;
              foreach my $creator ( @{ $eprint-&amp;gt;value( $name_field ) } )&lt;br /&gt;
              {&lt;br /&gt;
                 my $orcid = $creator-&amp;gt;{orcid};&lt;br /&gt;
                 next unless defined $orcid;&lt;br /&gt;
                 if ($repository-&amp;gt;get_repository-&amp;gt;can_call ( &amp;quot;validators&amp;quot;, &amp;quot;isValidORCID&amp;quot; ) )&lt;br /&gt;
                 {&lt;br /&gt;
                    if (!$repository-&amp;gt;get_repository-&amp;gt;call( [ &amp;quot;validators&amp;quot;, &amp;quot;isValidORCID&amp;quot; ], $orcid ))&lt;br /&gt;
                    {&lt;br /&gt;
                       my $field_text = $repository-&amp;gt;html_phrase( &amp;quot;eprint_fieldname_$name_field&amp;quot; );&lt;br /&gt;
                       my $field_frag = $repository-&amp;gt;make_element( &amp;quot;span&amp;quot;, class=&amp;gt;&amp;quot;ep_problem_field:$name_field&amp;quot; );&lt;br /&gt;
                       $field_frag-&amp;gt;appendChild($field_text);&lt;br /&gt;
                       push @problems, $repository-&amp;gt;html_phrase( &amp;quot;warnings:orcid_invalid&amp;quot;,&lt;br /&gt;
                            orcid =&amp;gt; $repository-&amp;gt;get_repository-&amp;gt;make_text($orcid),&lt;br /&gt;
                            field =&amp;gt; $field_frag,&lt;br /&gt;
                        );&lt;br /&gt;
                    }&lt;br /&gt;
                 } else {&lt;br /&gt;
                    $repository-&amp;gt;get_repository-&amp;gt;log( &amp;quot;Can not call isValidORCID.&amp;quot; );&lt;br /&gt;
                 }&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Phrase for &amp;quot;warnings:orcid_invalid&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;epp:phrase id=&amp;quot;warnings:orcid_invalid&amp;quot;&amp;gt;The ORCID ID: &amp;lt;b&amp;gt;&amp;lt;epc:pin name=&amp;quot;orcid&amp;quot;/&amp;gt;&amp;lt;/b&amp;gt; is not a valid ORCID ID as it does not conform to the ORCID ID specification.  Please edit the &amp;lt;epc:pin name=&amp;quot;field&amp;quot;/&amp;gt; with the associated ORCID or remove it from the name completely.&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additional Function that can be placed either at the end of eprints_validate.pl (after the final };) or elsewhere:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
############################################&lt;br /&gt;
# Function:     isValidORCID&lt;br /&gt;
# Description:  Used to validate ORCID IDs&lt;br /&gt;
# &lt;br /&gt;
# From: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier (Checksum)&lt;br /&gt;
#&lt;br /&gt;
$c-&amp;gt;{validators}-&amp;gt;{isValidORCID} = sub {&lt;br /&gt;
   my $ORCID = $_[0];&lt;br /&gt;
   #Check for valid length of 19 characters.&lt;br /&gt;
   my $size = length($ORCID);&lt;br /&gt;
   if ($size &amp;gt; 19 )&lt;br /&gt;
   {&lt;br /&gt;
        return 0;&lt;br /&gt;
   } else {&lt;br /&gt;
      #Check actual validity of the ID mathematically.&lt;br /&gt;
      $ORCID =~ s/\-//g;&lt;br /&gt;
      my @chars = split(//, $ORCID);&lt;br /&gt;
      my $total = 0;&lt;br /&gt;
      for ( my $i=0; $i&amp;lt;15; $i++) {&lt;br /&gt;
         $total = ($total + $chars[$i]) *2;&lt;br /&gt;
      }&lt;br /&gt;
      my $remainder = $total % 11;&lt;br /&gt;
      my $result = (12 - $remainder) % 11;&lt;br /&gt;
      return ($chars[15] == ($result==10 ? 'X' : $result))&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additionally you will have to define a custom render to add the fields to be displayed in the abstract/summary page.&lt;br /&gt;
&lt;br /&gt;
= Rendering with Bootstrap =&lt;br /&gt;
&lt;br /&gt;
[[File:orcid_bootstrap.png|thumb|left|alt=ORCIDs displaying in the Bootstrap theme|ORCID and Bootstrap]]&lt;br /&gt;
&lt;br /&gt;
In a recent redesign of [http://eprints.whiterose.ac.uk White Rose Research Online] the [https://github.com/eprintsug/bootstrap Bootstrap theme] was used.&lt;br /&gt;
The ORCID links are now enhanced with a tooltip and the green icon. There may be examples on the [http://eprints.whiterose.ac.uk/cgi/latest_tool latest 20 additions] page.&lt;br /&gt;
&lt;br /&gt;
== Bootstrap tooltop ==&lt;br /&gt;
This block of code finds anything with a class of 'orcid', and adds the green logo to it, and a tooltip that reads 'ORCID: ''orcid-value''', as shown in the image.&lt;br /&gt;
&lt;br /&gt;
The example code below is based on the following rendering of a person who may have an ORCID:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- NB line-breaks added here for readability are not normally output by EPrints! --&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;person&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;person_name&amp;quot;&amp;gt;Castillo Ortiz, P.J.&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;a href=&amp;quot;http://orcid.org/0000-0003-4540-1855&amp;quot; target=&amp;quot;_blank&amp;quot; class=&amp;quot;orcid&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;span&amp;gt;orcid.org/0000-0003-4540-1855&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== jQuery ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// selector used here depends on your rendering. You may want to use something like a[href*='orcid.org/0000-']&lt;br /&gt;
jQuery('.orcid').tooltip({&lt;br /&gt;
	'placement': 'auto',&lt;br /&gt;
	'title': function(){ return &amp;quot;ORCID: &amp;quot;+ jQuery(this).text()},&lt;br /&gt;
}).append('&amp;lt;img src=&amp;quot;/images/orcid_16x16.png&amp;quot; alt=&amp;quot;&amp;quot; /&amp;gt;').find('span').hide();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSS ==&lt;br /&gt;
The green colouring is added using the following css, which also makes the background of the tooltip opaque, not semi-transparent as it is by default.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.person + .tooltip &amp;gt; .tooltip-inner,&lt;br /&gt;
.orcid + .tooltip &amp;gt; .tooltip-inner {&lt;br /&gt;
  background-color: #A6CE39;&lt;br /&gt;
  border: 1px solid #000000;&lt;br /&gt;
  white-space: pre;&lt;br /&gt;
  max-width: none;&lt;br /&gt;
}&lt;br /&gt;
.person + .tooltip.in,&lt;br /&gt;
.orcid + .tooltip.in {&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  filter: alpha(opacity=100);&lt;br /&gt;
}&lt;br /&gt;
/* This adds a green dashed line under an author's name when hovered. This helps in big author lists to tie initials and surname together */&lt;br /&gt;
.person:hover {border-bottom: 1px dashed #a6ce39;}&lt;br /&gt;
.orcid a:hover {&lt;br /&gt;
        color: #a6ce39;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OAI-PMH (Experimental) =&lt;br /&gt;
'''[[User:Libjlrs]] 2016-09-29 Warning: this is experimental. I hope others will read, understand, question and improve on this before it becomes some form of best practice!'''&lt;br /&gt;
&lt;br /&gt;
Some metadata profiles support attributes that are useful to propagate ORCIDs e.g. RIOXX (see the [[#Exposing_the_ORCID_in_RIOXX]] section above, and the 'rioxxterms:author' section on http://www.rioxx.net/profiles/v2-0-final/ ).&lt;br /&gt;
&lt;br /&gt;
A lot of harvesters use the oai_dc metadata profile when harvesting records. The DC schema doesn't allow attributes on the dc:creator element, so ORCIDs cannot be added in a sensible way to this profile.&lt;br /&gt;
&lt;br /&gt;
The details below create an additional metadata prefix that adds an attribute to the dc:creator field. The original &amp;lt;code&amp;gt;metadataPrefix=oai_dc&amp;lt;/code&amp;gt; output remains unchanged. Using &amp;lt;code&amp;gt;metadataPrefix=oai_dc_orcid&amp;lt;/code&amp;gt; will add the orcid attribute where available.&lt;br /&gt;
&lt;br /&gt;
Currently there is not an XSD that describes this change, so a harvester that validates the feed may stop when it encounters an ORCID.&lt;br /&gt;
&lt;br /&gt;
This example is based on the &amp;lt;code&amp;gt;EPrints::Plugin::Export::OAI_DC&amp;lt;/code&amp;gt; module from EPrints 3.3.10. You may need to tweak it to make it work for you!&lt;br /&gt;
&lt;br /&gt;
File: &amp;lt;code&amp;gt;~/archives/ARCHIVEID/cfg/plugins/EPrints/Plugin/Export/OAI_DC_ORCID.pm&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
package EPrints::Plugin::Export::OAI_DC_ORCID;&lt;br /&gt;
&lt;br /&gt;
use EPrints::Plugin::Export::OAI_DC;&lt;br /&gt;
&lt;br /&gt;
@ISA = ( &amp;quot;EPrints::Plugin::Export::OAI_DC&amp;quot;, &amp;quot;EPrints::Plugin::Export::DC&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
sub new&lt;br /&gt;
{&lt;br /&gt;
        my( $class, %opts ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $self = $class-&amp;gt;SUPER::new( %opts );&lt;br /&gt;
&lt;br /&gt;
        $self-&amp;gt;{name} = &amp;quot;Dublin Core - OAI + ORCID Schema&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{accept} = [ 'dataobj/eprint' ];&lt;br /&gt;
        $self-&amp;gt;{visible} = &amp;quot;&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{suffix} = &amp;quot;.xml&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{mimetype} = &amp;quot;text/xml&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        $self-&amp;gt;{metadataPrefix} = &amp;quot;oai_dc_orcid&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{xmlns} = &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc/&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{schemaLocation} = &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc.xsd&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub xml_dataobj&lt;br /&gt;
{&lt;br /&gt;
        my( $plugin, $dataobj ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $data = $plugin-&amp;gt;convert_dataobj( $dataobj );&lt;br /&gt;
&lt;br /&gt;
        my $dc = $plugin-&amp;gt;{session}-&amp;gt;make_element(&lt;br /&gt;
                &amp;quot;oai_dc:dc&amp;quot;,&lt;br /&gt;
                &amp;quot;xmlns:oai_dc&amp;quot; =&amp;gt; &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc/&amp;quot;,&lt;br /&gt;
                &amp;quot;xmlns:dc&amp;quot; =&amp;gt; &amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;,&lt;br /&gt;
                &amp;quot;xmlns:xsi&amp;quot; =&amp;gt; &amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;,&lt;br /&gt;
                &amp;quot;xsi:schemaLocation&amp;quot; =&amp;gt;&lt;br /&gt;
        &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        # turn the list of pairs into XML blocks (indented by 8) and add them&lt;br /&gt;
        # them to the DC element.&lt;br /&gt;
        foreach( @{$data} )&lt;br /&gt;
        {&lt;br /&gt;
                $dc-&amp;gt;appendChild(  $plugin-&amp;gt;{session}-&amp;gt;render_data_element( 8, &amp;quot;dc:&amp;quot;.$_-&amp;gt;[0], $_-&amp;gt;[1], %{$_-&amp;gt;[2]} ) );&lt;br /&gt;
                # produces &amp;lt;key&amp;gt;value&amp;lt;/key&amp;gt;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $dc;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub convert_dataobj&lt;br /&gt;
{&lt;br /&gt;
        my( $plugin, $eprint ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $dataset = $eprint-&amp;gt;{dataset};&lt;br /&gt;
&lt;br /&gt;
        my @dcdata = ();&lt;br /&gt;
&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, title =&amp;gt; &amp;quot;title&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;creators&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $creators = $eprint-&amp;gt;get_value( &amp;quot;creators&amp;quot; );&lt;br /&gt;
                foreach my $creator ( @$creators )&lt;br /&gt;
                {&lt;br /&gt;
                        next if !defined $creator;&lt;br /&gt;
&lt;br /&gt;
                        # NOTE THIS IS VERY CRUDE, and should be replaced with more elegant methods (possibly from examples elsewhere on this page).&lt;br /&gt;
                        if( defined $creator-&amp;gt;{id} &amp;amp;&amp;amp; $creator-&amp;gt;{id} =~ /0000/ ){&lt;br /&gt;
                                push @dcdata, [ &amp;quot;creator&amp;quot;, EPrints::Utils::make_name_string( $creator-&amp;gt;{name} ), { 'orcid' =&amp;gt; $creator-&amp;gt;{id} } ];&lt;br /&gt;
                        } else {&lt;br /&gt;
                                push @dcdata, [ &amp;quot;creator&amp;quot;, EPrints::Utils::make_name_string( $creator-&amp;gt;{name} ) ];&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;subjects&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $subjectid;&lt;br /&gt;
                foreach $subjectid ( @{$eprint-&amp;gt;get_value( &amp;quot;subjects&amp;quot; )} )&lt;br /&gt;
                {&lt;br /&gt;
                        my $subject = EPrints::DataObj::Subject-&amp;gt;new( $plugin-&amp;gt;{session}, $subjectid );&lt;br /&gt;
                        # avoid problems with bad subjects&lt;br /&gt;
                                next unless( defined $subject );&lt;br /&gt;
                        push @dcdata, [ &amp;quot;subject&amp;quot;, EPrints::Utils::tree_to_utf8( $subject-&amp;gt;render_description() ) ];&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, abstract =&amp;gt; &amp;quot;description&amp;quot; );&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, publisher =&amp;gt; &amp;quot;publisher&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;editors_name&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $editors = $eprint-&amp;gt;get_value( &amp;quot;editors_name&amp;quot; );&lt;br /&gt;
                if( defined $editors )&lt;br /&gt;
                {&lt;br /&gt;
                        foreach my $editor ( @{$editors} )&lt;br /&gt;
                        {&lt;br /&gt;
                                push @dcdata, [ &amp;quot;contributor&amp;quot;, EPrints::Utils::make_name_string( $editor ) ];&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        ## Date for discovery. For a month/day we don't have, assume 01.&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;date&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $date = $eprint-&amp;gt;get_value( &amp;quot;date&amp;quot; );&lt;br /&gt;
                if( defined $date )&lt;br /&gt;
                {&lt;br /&gt;
                        $date =~ s/(-0+)+$//;&lt;br /&gt;
                        push @dcdata, [ &amp;quot;date&amp;quot;, $date ];&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;type&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                push @dcdata, [ &amp;quot;type&amp;quot;, EPrints::Utils::tree_to_utf8( $eprint-&amp;gt;render_value( &amp;quot;type&amp;quot; ) ) ];&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        my $ref = &amp;quot;NonPeerReviewed&amp;quot;;&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;refereed&amp;quot; ) &amp;amp;&amp;amp; $eprint-&amp;gt;get_value( &amp;quot;refereed&amp;quot; ) eq &amp;quot;TRUE&amp;quot; )&lt;br /&gt;
        {&lt;br /&gt;
                $ref = &amp;quot;PeerReviewed&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        push @dcdata, [ &amp;quot;type&amp;quot;, $ref ];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        my @documents = $eprint-&amp;gt;get_all_documents();&lt;br /&gt;
        my $mimetypes = $plugin-&amp;gt;{session}-&amp;gt;get_repository-&amp;gt;get_conf( &amp;quot;oai&amp;quot;, &amp;quot;mime_types&amp;quot; );&lt;br /&gt;
        foreach( @documents )&lt;br /&gt;
        {&lt;br /&gt;
                my $format = $mimetypes-&amp;gt;{$_-&amp;gt;get_value(&amp;quot;format&amp;quot;)};&lt;br /&gt;
                $format = $_-&amp;gt;get_value(&amp;quot;format&amp;quot;) unless defined $format;&lt;br /&gt;
                #$format = &amp;quot;application/octet-stream&amp;quot; unless defined $format;&lt;br /&gt;
                push @dcdata, [ &amp;quot;format&amp;quot;, $format ];&lt;br /&gt;
                push @dcdata, [ &amp;quot;identifier&amp;quot;, $_-&amp;gt;get_url() ];&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        # Most commonly a DOI or journal link&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, official_url =&amp;gt; &amp;quot;relation&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        # The citation for this eprint&lt;br /&gt;
        push @dcdata, [ &amp;quot;identifier&amp;quot;,&lt;br /&gt;
                EPrints::Utils::tree_to_utf8( $eprint-&amp;gt;render_citation() ) ];&lt;br /&gt;
&lt;br /&gt;
        # The URL of the abstract page&lt;br /&gt;
        if( $eprint-&amp;gt;is_set( &amp;quot;eprintid&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                push @dcdata, [ &amp;quot;relation&amp;quot;, $eprint-&amp;gt;get_url() ];&lt;br /&gt;
        }&lt;br /&gt;
        # dc.language not handled yet.&lt;br /&gt;
        # dc.source not handled yet.&lt;br /&gt;
        # dc.coverage not handled yet.&lt;br /&gt;
        # dc.rights not handled yet.&lt;br /&gt;
&lt;br /&gt;
        return \@dcdata;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=ORCID&amp;diff=12223</id>
		<title>ORCID</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=ORCID&amp;diff=12223"/>
		<updated>2016-10-18T13:12:34Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: sections&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has been created to gather information about how different EPrints repositories have integrated ORCID.&lt;br /&gt;
At this time (April 2016) there doesn't seem to be a 'best practice' approach that has been adopted widely - this will hopefully change over time.&lt;br /&gt;
&lt;br /&gt;
==Field Recommendations==&lt;br /&gt;
As at 2016-10-18 these are the recommended field names and types as discussed at the Jisc ORCID hack day in London - Alan Stiles, John Salter, Adam Vials Moore, Peter West, Andrew Beeken&lt;br /&gt;
&lt;br /&gt;
===User Table===&lt;br /&gt;
new field named 'orcid', type 'orcid' which is a subtype of 'id'&lt;br /&gt;
&lt;br /&gt;
===Eprints Contributors (e.g. creators, editors)===&lt;br /&gt;
&lt;br /&gt;
new sub-field of contributor_orcid  (e.g. creator_orcid, editor_orcid)&lt;br /&gt;
&lt;br /&gt;
Store the 16 digit, hyphen separated value, without the authority (host) details e.g. 'nnnn-nnnn-nnnn-nnnn'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Previous Discussions==&lt;br /&gt;
If you are looking to retrieve publications from the ORCID service, the [http://bazaar.eprints.org/354/ Import from ORCID (Tier 1 API)] Bazaar package, or the [https://github.com/eprintsug/orcidt2 ORCID Tier 2 api framework] are good places to start.&lt;br /&gt;
&lt;br /&gt;
2016-05-20 [[User:Alan.stiles@open.ac.uk|Alan Stiles]] at The Open University is working on a plugin to connect EPrints with ORCID via the Tier 2 Members API to retrieve ORCID ids and synchronise publications and affiliation details.&lt;br /&gt;
&lt;br /&gt;
Some aspects that need to be considered when adopting ORCIDs, and making them available to other systems are:&lt;br /&gt;
&lt;br /&gt;
* storing the ORCID (see: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier)&lt;br /&gt;
* rendering the ORCID in abstract pages (see [http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier link above])&lt;br /&gt;
* exposing ORCIDs over OAI-PMH metadata profiles e.g. RIOXX&lt;br /&gt;
&lt;br /&gt;
NB The examples below may refer to the 'creators' field - but the same approach could be used to extend other 'person' fields - e.g. contributors.&lt;br /&gt;
&lt;br /&gt;
= Re-using creators.id subfield =&lt;br /&gt;
&lt;br /&gt;
The creators.id field is labelled 'email' by default, but as it's an 'id' type field, it can be used to store ORCIDs.&lt;br /&gt;
To re-label the field, a simple addition to a phrase file in &amp;lt;code&amp;gt;archives/ARCHIVEID/cfg/lang/en/phrases/&amp;lt;/code&amp;gt; needs to be made:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;epp:phrase id=&amp;quot;eprint_fieldname_creators_id&amp;quot;&amp;gt;ORCID / Creators email (if known)&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rendering the ORCID in a citation ==&lt;br /&gt;
The rendering of this field then needs to be changed to accommodate an author with an ORCID. The following script adds methods that can be called via the EPScript language:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# add to e.g. ~/archives/ARCHIVEID/cfg/cfg.d/z_add_to_EPrints_Script_Compiled.pl&lt;br /&gt;
# Write into EPrints::Script::Compiled package to allow use of function in epscript&lt;br /&gt;
{&lt;br /&gt;
package EPrints::Script::Compiled;&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
sub run_wrro_people_with_orcids&lt;br /&gt;
{&lt;br /&gt;
  my( $self, $state, $value ) = @_;&lt;br /&gt;
&lt;br /&gt;
  my $session = $state-&amp;gt;{session};&lt;br /&gt;
  my $r = $state-&amp;gt;{session}-&amp;gt;make_doc_fragment;&lt;br /&gt;
&lt;br /&gt;
  my $creators = $value-&amp;gt;[0];&lt;br /&gt;
&lt;br /&gt;
  foreach my $i (0..$#$creators){&lt;br /&gt;
&lt;br /&gt;
    my $creator = @$creators[$i];&lt;br /&gt;
&lt;br /&gt;
    if( $i &amp;gt; 0 ){&lt;br /&gt;
      #not first item (or only one item)&lt;br /&gt;
      if( $i == $#$creators ){&lt;br /&gt;
        #last item&lt;br /&gt;
        $r-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot; and &amp;quot; ) );&lt;br /&gt;
      } else {&lt;br /&gt;
        $r-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;, &amp;quot; ) );&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    my $person_span = $session-&amp;gt;make_element( &amp;quot;span&amp;quot;, &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;person&amp;quot; );&lt;br /&gt;
    $person_span-&amp;gt;appendChild( $session-&amp;gt;render_name( $creator-&amp;gt;{name} ) );&lt;br /&gt;
&lt;br /&gt;
    my $id = $creator-&amp;gt;{id};&lt;br /&gt;
    if( defined $id &amp;amp;&amp;amp; $id =~ m/^(?:orcid.org\/)?(\d{4}\-\d{4}\-\d{4}\-\d{3}(?:\d|X))$/ )&lt;br /&gt;
    {&lt;br /&gt;
      my $orcid_span = $session-&amp;gt;make_element( &amp;quot;span&amp;quot;, &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;orcid&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
#   According to https://orcid.org/trademark-and-id-display-guidelines&lt;br /&gt;
#     &amp;quot;recommended display is a hyperlinked URI preceded by the iD icon&amp;quot;&lt;br /&gt;
#   This looks terrible in a citation. Removed for the time being.&lt;br /&gt;
#&lt;br /&gt;
#   my $orcid_link = $session-&amp;gt;make_element(&lt;br /&gt;
#     &amp;quot;a&amp;quot;,&lt;br /&gt;
#     &amp;quot;href&amp;quot; =&amp;gt; &amp;quot;http://orcid.org/&amp;quot;,&lt;br /&gt;
#     &amp;quot;target&amp;quot; =&amp;gt; &amp;quot;_blank&amp;quot;,&lt;br /&gt;
#     &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;orcid-icon&amp;quot;&lt;br /&gt;
#   );&lt;br /&gt;
#   $orcid_link-&amp;gt;appendChild( $session-&amp;gt;make_element(&lt;br /&gt;
#     &amp;quot;img&amp;quot;,&lt;br /&gt;
#     &amp;quot;src&amp;quot; =&amp;gt; &amp;quot;/images/orcid_16x16.png&amp;quot;,&lt;br /&gt;
#     &amp;quot;title&amp;quot; =&amp;gt; &amp;quot;ORCID&amp;quot;&lt;br /&gt;
#   ) );&lt;br /&gt;
#   $orcid_span-&amp;gt;appendChild( $orcid_link );&lt;br /&gt;
&lt;br /&gt;
      my $link = $session-&amp;gt;make_element(&lt;br /&gt;
        &amp;quot;a&amp;quot;,&lt;br /&gt;
        &amp;quot;href&amp;quot; =&amp;gt; &amp;quot;http://orcid.org/$1&amp;quot;,&lt;br /&gt;
        &amp;quot;target&amp;quot; =&amp;gt; &amp;quot;_blank&amp;quot;,&lt;br /&gt;
      );&lt;br /&gt;
      $link-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;orcid.org/$1&amp;quot; ) );&lt;br /&gt;
&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;(&amp;quot; ) );&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $link );&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;)&amp;quot; ) );&lt;br /&gt;
&lt;br /&gt;
      $person_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot; &amp;quot; ) );&lt;br /&gt;
      $person_span-&amp;gt;appendChild( $orcid_span );&lt;br /&gt;
    }&lt;br /&gt;
    $r-&amp;gt;appendChild( $person_span );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return [ $r, &amp;quot;XHTML&amp;quot; ];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
# END EPrints::Script::Compiled additions&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also want a bit of CSS to style ORCID links&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Add to e.g. ~/archives/ARCHIVEID/cfg/static/style/auto/zzz_orcid.css */&lt;br /&gt;
.person:hover {border-bottom: 1px dashed #a6ce39;}&lt;br /&gt;
.orcid {}&lt;br /&gt;
.orcid a:hover {&lt;br /&gt;
        color: #a6ce39;&lt;br /&gt;
}&lt;br /&gt;
.orcid-icon {}&lt;br /&gt;
.orcid-icon img { vertical-align: text-bottom; margin: 0 4px 0 2px; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And finally, you have to call the new EPScript function from a citation file e.g. &amp;lt;code&amp;gt;archives/ARCHIVEID/cfg/citations/eprint/default.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- replace reference to e.g. &amp;lt;print expr=&amp;quot;creators_name&amp;quot;/&amp;gt; with this: --&amp;gt;&lt;br /&gt;
    &amp;lt;print expr=&amp;quot;wrro_people_with_orcids(creators)&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exposing the ORCID in RIOXX ==&lt;br /&gt;
Based on re-using the creators.id field, this block of code over-writes the default &amp;lt;code&amp;gt;rioxx2_value_author&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# Add to e.g. ~/archives/ARCHIVEID/cfg/cfg.d/zzz_rioxx2_overwrites.pl&lt;br /&gt;
$c-&amp;gt;{rioxx2_value_author} = sub {&lt;br /&gt;
  my( $eprint ) = @_;&lt;br /&gt;
&lt;br /&gt;
  my @authors;&lt;br /&gt;
  for( @{ $eprint-&amp;gt;value( &amp;quot;creators&amp;quot; ) } )&lt;br /&gt;
  {&lt;br /&gt;
    my $id = $_-&amp;gt;{id};&lt;br /&gt;
    if( defined $id &amp;amp;&amp;amp; $id =~ m/^(?:orcid.org\/)?(\d{4}\-\d{4}\-\d{4}\-\d{3}(?:\d|X))$/ )&lt;br /&gt;
    {&lt;br /&gt;
      push @authors, {&lt;br /&gt;
        author =&amp;gt; EPrints::Utils::make_name_string( $_-&amp;gt;{name} ),&lt;br /&gt;
        id =&amp;gt; &amp;quot;http://orcid.org/$1&amp;quot;&lt;br /&gt;
      };&lt;br /&gt;
    } else {&lt;br /&gt;
      push @authors, {&lt;br /&gt;
        author =&amp;gt; EPrints::Utils::make_name_string( $_-&amp;gt;{name} ),&lt;br /&gt;
      };&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #NB If your corp_creators has DOIs or ISNIs for the entries, a similar method could be used to include these here.&lt;br /&gt;
  foreach my $corp ( @{ $eprint-&amp;gt;value( &amp;quot;corp_creators&amp;quot; ) } )&lt;br /&gt;
  {&lt;br /&gt;
    my $entry = {};&lt;br /&gt;
    $entry-&amp;gt;{name} = $corp;&lt;br /&gt;
    push @authors, { author =&amp;gt; $corp };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return \@authors;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Add additional identifiers to creators =&lt;br /&gt;
Another approach to storing ORCIDs is to add an additional sub-field to the creator field.&lt;br /&gt;
This has been discussed on the Eprints tech list. If you know how to do this, please document it here!&lt;br /&gt;
&lt;br /&gt;
This is how University of Bath has done it.  We're getting the ORCID data from another system, so have used a text field to capture it for display.  At present there is no special rendering on it, it's just displaying as a number.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	name =&amp;gt; 'creators',&lt;br /&gt;
	type =&amp;gt; 'compound',&lt;br /&gt;
	multiple =&amp;gt; 1,&lt;br /&gt;
	fields =&amp;gt; [&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'name',&lt;br /&gt;
			type =&amp;gt; 'name',&lt;br /&gt;
			hide_honourific =&amp;gt; 1,&lt;br /&gt;
			hide_lineage =&amp;gt; 1,&lt;br /&gt;
			family_first =&amp;gt; 1,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'id',&lt;br /&gt;
			type =&amp;gt; 'text',&lt;br /&gt;
			input_cols =&amp;gt; 20,&lt;br /&gt;
			allow_null =&amp;gt; 1,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'orcid',&lt;br /&gt;
			type =&amp;gt; 'text',&lt;br /&gt;
			input_cols =&amp;gt; 20,&lt;br /&gt;
			allow_null =&amp;gt; 1,&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	],&lt;br /&gt;
	input_boxes =&amp;gt; 4,&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This is how University of Pittsburgh has done it:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
          {&lt;br /&gt;
            'name' =&amp;gt; 'creators',&lt;br /&gt;
            'type' =&amp;gt; 'compound',&lt;br /&gt;
            'multiple' =&amp;gt; 1,&lt;br /&gt;
            'fields' =&amp;gt; [&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'name',&lt;br /&gt;
                            'type' =&amp;gt; 'name',&lt;br /&gt;
                            'hide_honourific' =&amp;gt; 1,&lt;br /&gt;
                            'hide_lineage' =&amp;gt; 1,&lt;br /&gt;
                            'family_first' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'email',&lt;br /&gt;
                            'type' =&amp;gt; 'text',&lt;br /&gt;
                            'input_cols' =&amp;gt; 20,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'id',&lt;br /&gt;
                            'type' =&amp;gt; 'text',&lt;br /&gt;
                            'input_cols' =&amp;gt; 20,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'orcid',&lt;br /&gt;
                            'type' =&amp;gt; 'id',&lt;br /&gt;
                            'input_cols' =&amp;gt; 19,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                        ],&lt;br /&gt;
            'input_boxes' =&amp;gt; 4,&lt;br /&gt;
            'render_value' =&amp;gt; 'custom_render_creators_with_orcid',&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notes from Pittsburgh:==&lt;br /&gt;
(Information courtesy of Brian Gregg - bdgregg@pitt.edu)&lt;br /&gt;
&lt;br /&gt;
We have added some ORCID functionality in our IR System here at the University of Pittsburgh.  We however have not “linked” our IR with orcid.org in anyway such as we do not have a lookup user in ORCID or the ability to add publications from ORCID to our IR.  The only link is the entering of the ORCID into the system so that it can be displayed.&lt;br /&gt;
&lt;br /&gt;
An example record is available here: [http://d-scholarship.pitt.edu/28114/ http://d-scholarship.pitt.edu/28114/]&lt;br /&gt;
&lt;br /&gt;
# Users have an ORCID field in their profile – user_fields.pl&lt;br /&gt;
# Any “Creator” types have an ORCID field added to the workflow – eprint_fields.pl&lt;br /&gt;
# We have added ORCID validation adhering to this document: [http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier] - eprint_validate.pl&lt;br /&gt;
# We have added the ORCID to the “lookup” function to populate the ORCID field from any user entries in the database. – cgi/users/lookup/name&lt;br /&gt;
# We display the ORCID as such on the input form, where the green icon links out to our own orcid.pitt.edu site, but could be to orcid.org by default.&lt;br /&gt;
# We display the ORCID as such on the public display of the record where the ORCID is linked out to orcid.org (see [http://d-scholarship.pitt.edu/28114/ example record])&lt;br /&gt;
&lt;br /&gt;
ORCID Validator - snippet for eprints_validate.pl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
        # ORCID ID Validator for individuals&lt;br /&gt;
        # Reference: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier&lt;br /&gt;
        # REGEX: ^\d{4}-\d{4}-\d{4}-(\d{3}X|\d{4})$&lt;br /&gt;
        #&lt;br /&gt;
        my @name_fields = qw( creators contributors exhibitors producers conductors lyricists );  #which ever name fields you added 'orcid' to.&lt;br /&gt;
        foreach my $name_field ( @name_fields )&lt;br /&gt;
        {&lt;br /&gt;
           if( $eprint-&amp;gt;is_set( $name_field ) )&lt;br /&gt;
           {&lt;br /&gt;
              foreach my $creator ( @{ $eprint-&amp;gt;value( $name_field ) } )&lt;br /&gt;
              {&lt;br /&gt;
                 my $orcid = $creator-&amp;gt;{orcid};&lt;br /&gt;
                 next unless defined $orcid;&lt;br /&gt;
                 if ($repository-&amp;gt;get_repository-&amp;gt;can_call ( &amp;quot;validators&amp;quot;, &amp;quot;isValidORCID&amp;quot; ) )&lt;br /&gt;
                 {&lt;br /&gt;
                    if (!$repository-&amp;gt;get_repository-&amp;gt;call( [ &amp;quot;validators&amp;quot;, &amp;quot;isValidORCID&amp;quot; ], $orcid ))&lt;br /&gt;
                    {&lt;br /&gt;
                       my $field_text = $repository-&amp;gt;html_phrase( &amp;quot;eprint_fieldname_$name_field&amp;quot; );&lt;br /&gt;
                       my $field_frag = $repository-&amp;gt;make_element( &amp;quot;span&amp;quot;, class=&amp;gt;&amp;quot;ep_problem_field:$name_field&amp;quot; );&lt;br /&gt;
                       $field_frag-&amp;gt;appendChild($field_text);&lt;br /&gt;
                       push @problems, $repository-&amp;gt;html_phrase( &amp;quot;warnings:orcid_invalid&amp;quot;,&lt;br /&gt;
                            orcid =&amp;gt; $repository-&amp;gt;get_repository-&amp;gt;make_text($orcid),&lt;br /&gt;
                            field =&amp;gt; $field_frag,&lt;br /&gt;
                        );&lt;br /&gt;
                    }&lt;br /&gt;
                 } else {&lt;br /&gt;
                    $repository-&amp;gt;get_repository-&amp;gt;log( &amp;quot;Can not call isValidORCID.&amp;quot; );&lt;br /&gt;
                 }&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Phrase for &amp;quot;warnings:orcid_invalid&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;epp:phrase id=&amp;quot;warnings:orcid_invalid&amp;quot;&amp;gt;The ORCID ID: &amp;lt;b&amp;gt;&amp;lt;epc:pin name=&amp;quot;orcid&amp;quot;/&amp;gt;&amp;lt;/b&amp;gt; is not a valid ORCID ID as it does not conform to the ORCID ID specification.  Please edit the &amp;lt;epc:pin name=&amp;quot;field&amp;quot;/&amp;gt; with the associated ORCID or remove it from the name completely.&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additional Function that can be placed either at the end of eprints_validate.pl (after the final };) or elsewhere:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
############################################&lt;br /&gt;
# Function:     isValidORCID&lt;br /&gt;
# Description:  Used to validate ORCID IDs&lt;br /&gt;
# &lt;br /&gt;
# From: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier (Checksum)&lt;br /&gt;
#&lt;br /&gt;
$c-&amp;gt;{validators}-&amp;gt;{isValidORCID} = sub {&lt;br /&gt;
   my $ORCID = $_[0];&lt;br /&gt;
   #Check for valid length of 19 characters.&lt;br /&gt;
   my $size = length($ORCID);&lt;br /&gt;
   if ($size &amp;gt; 19 )&lt;br /&gt;
   {&lt;br /&gt;
        return 0;&lt;br /&gt;
   } else {&lt;br /&gt;
      #Check actual validity of the ID mathematically.&lt;br /&gt;
      $ORCID =~ s/\-//g;&lt;br /&gt;
      my @chars = split(//, $ORCID);&lt;br /&gt;
      my $total = 0;&lt;br /&gt;
      for ( my $i=0; $i&amp;lt;15; $i++) {&lt;br /&gt;
         $total = ($total + $chars[$i]) *2;&lt;br /&gt;
      }&lt;br /&gt;
      my $remainder = $total % 11;&lt;br /&gt;
      my $result = (12 - $remainder) % 11;&lt;br /&gt;
      return ($chars[15] == ($result==10 ? 'X' : $result))&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additionally you will have to define a custom render to add the fields to be displayed in the abstract/summary page.&lt;br /&gt;
&lt;br /&gt;
= Rendering with Bootstrap =&lt;br /&gt;
&lt;br /&gt;
[[File:orcid_bootstrap.png|thumb|left|alt=ORCIDs displaying in the Bootstrap theme|ORCID and Bootstrap]]&lt;br /&gt;
&lt;br /&gt;
In a recent redesign of [http://eprints.whiterose.ac.uk White Rose Research Online] the [https://github.com/eprintsug/bootstrap Bootstrap theme] was used.&lt;br /&gt;
The ORCID links are now enhanced with a tooltip and the green icon. There may be examples on the [http://eprints.whiterose.ac.uk/cgi/latest_tool latest 20 additions] page.&lt;br /&gt;
&lt;br /&gt;
== Bootstrap tooltop ==&lt;br /&gt;
This block of code finds anything with a class of 'orcid', and adds the green logo to it, and a tooltip that reads 'ORCID: ''orcid-value''', as shown in the image.&lt;br /&gt;
&lt;br /&gt;
The example code below is based on the following rendering of a person who may have an ORCID:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- NB line-breaks added here for readability are not normally output by EPrints! --&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;person&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;person_name&amp;quot;&amp;gt;Castillo Ortiz, P.J.&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;a href=&amp;quot;http://orcid.org/0000-0003-4540-1855&amp;quot; target=&amp;quot;_blank&amp;quot; class=&amp;quot;orcid&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;span&amp;gt;orcid.org/0000-0003-4540-1855&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== jQuery ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// selector used here depends on your rendering. You may want to use something like a[href*='orcid.org/0000-']&lt;br /&gt;
jQuery('.orcid').tooltip({&lt;br /&gt;
	'placement': 'auto',&lt;br /&gt;
	'title': function(){ return &amp;quot;ORCID: &amp;quot;+ jQuery(this).text()},&lt;br /&gt;
}).append('&amp;lt;img src=&amp;quot;/images/orcid_16x16.png&amp;quot; alt=&amp;quot;&amp;quot; /&amp;gt;').find('span').hide();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSS ==&lt;br /&gt;
The green colouring is added using the following css, which also makes the background of the tooltip opaque, not semi-transparent as it is by default.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.person + .tooltip &amp;gt; .tooltip-inner,&lt;br /&gt;
.orcid + .tooltip &amp;gt; .tooltip-inner {&lt;br /&gt;
  background-color: #A6CE39;&lt;br /&gt;
  border: 1px solid #000000;&lt;br /&gt;
  white-space: pre;&lt;br /&gt;
  max-width: none;&lt;br /&gt;
}&lt;br /&gt;
.person + .tooltip.in,&lt;br /&gt;
.orcid + .tooltip.in {&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  filter: alpha(opacity=100);&lt;br /&gt;
}&lt;br /&gt;
/* This adds a green dashed line under an author's name when hovered. This helps in big author lists to tie initials and surname together */&lt;br /&gt;
.person:hover {border-bottom: 1px dashed #a6ce39;}&lt;br /&gt;
.orcid a:hover {&lt;br /&gt;
        color: #a6ce39;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OAI-PMH (Experimental) =&lt;br /&gt;
'''[[User:Libjlrs]] 2016-09-29 Warning: this is experimental. I hope others will read, understand, question and improve on this before it becomes some form of best practice!'''&lt;br /&gt;
&lt;br /&gt;
Some metadata profiles support attributes that are useful to propagate ORCIDs e.g. RIOXX (see the [[#Exposing_the_ORCID_in_RIOXX]] section above, and the 'rioxxterms:author' section on http://www.rioxx.net/profiles/v2-0-final/ ).&lt;br /&gt;
&lt;br /&gt;
A lot of harvesters use the oai_dc metadata profile when harvesting records. The DC schema doesn't allow attributes on the dc:creator element, so ORCIDs cannot be added in a sensible way to this profile.&lt;br /&gt;
&lt;br /&gt;
The details below create an additional metadata prefix that adds an attribute to the dc:creator field. The original &amp;lt;code&amp;gt;metadataPrefix=oai_dc&amp;lt;/code&amp;gt; output remains unchanged. Using &amp;lt;code&amp;gt;metadataPrefix=oai_dc_orcid&amp;lt;/code&amp;gt; will add the orcid attribute where available.&lt;br /&gt;
&lt;br /&gt;
Currently there is not an XSD that describes this change, so a harvester that validates the feed may stop when it encounters an ORCID.&lt;br /&gt;
&lt;br /&gt;
This example is based on the &amp;lt;code&amp;gt;EPrints::Plugin::Export::OAI_DC&amp;lt;/code&amp;gt; module from EPrints 3.3.10. You may need to tweak it to make it work for you!&lt;br /&gt;
&lt;br /&gt;
File: &amp;lt;code&amp;gt;~/archives/ARCHIVEID/cfg/plugins/EPrints/Plugin/Export/OAI_DC_ORCID.pm&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
package EPrints::Plugin::Export::OAI_DC_ORCID;&lt;br /&gt;
&lt;br /&gt;
use EPrints::Plugin::Export::OAI_DC;&lt;br /&gt;
&lt;br /&gt;
@ISA = ( &amp;quot;EPrints::Plugin::Export::OAI_DC&amp;quot;, &amp;quot;EPrints::Plugin::Export::DC&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
sub new&lt;br /&gt;
{&lt;br /&gt;
        my( $class, %opts ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $self = $class-&amp;gt;SUPER::new( %opts );&lt;br /&gt;
&lt;br /&gt;
        $self-&amp;gt;{name} = &amp;quot;Dublin Core - OAI + ORCID Schema&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{accept} = [ 'dataobj/eprint' ];&lt;br /&gt;
        $self-&amp;gt;{visible} = &amp;quot;&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{suffix} = &amp;quot;.xml&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{mimetype} = &amp;quot;text/xml&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        $self-&amp;gt;{metadataPrefix} = &amp;quot;oai_dc_orcid&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{xmlns} = &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc/&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{schemaLocation} = &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc.xsd&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub xml_dataobj&lt;br /&gt;
{&lt;br /&gt;
        my( $plugin, $dataobj ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $data = $plugin-&amp;gt;convert_dataobj( $dataobj );&lt;br /&gt;
&lt;br /&gt;
        my $dc = $plugin-&amp;gt;{session}-&amp;gt;make_element(&lt;br /&gt;
                &amp;quot;oai_dc:dc&amp;quot;,&lt;br /&gt;
                &amp;quot;xmlns:oai_dc&amp;quot; =&amp;gt; &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc/&amp;quot;,&lt;br /&gt;
                &amp;quot;xmlns:dc&amp;quot; =&amp;gt; &amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;,&lt;br /&gt;
                &amp;quot;xmlns:xsi&amp;quot; =&amp;gt; &amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;,&lt;br /&gt;
                &amp;quot;xsi:schemaLocation&amp;quot; =&amp;gt;&lt;br /&gt;
        &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        # turn the list of pairs into XML blocks (indented by 8) and add them&lt;br /&gt;
        # them to the DC element.&lt;br /&gt;
        foreach( @{$data} )&lt;br /&gt;
        {&lt;br /&gt;
                $dc-&amp;gt;appendChild(  $plugin-&amp;gt;{session}-&amp;gt;render_data_element( 8, &amp;quot;dc:&amp;quot;.$_-&amp;gt;[0], $_-&amp;gt;[1], %{$_-&amp;gt;[2]} ) );&lt;br /&gt;
                # produces &amp;lt;key&amp;gt;value&amp;lt;/key&amp;gt;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $dc;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub convert_dataobj&lt;br /&gt;
{&lt;br /&gt;
        my( $plugin, $eprint ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $dataset = $eprint-&amp;gt;{dataset};&lt;br /&gt;
&lt;br /&gt;
        my @dcdata = ();&lt;br /&gt;
&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, title =&amp;gt; &amp;quot;title&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;creators&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $creators = $eprint-&amp;gt;get_value( &amp;quot;creators&amp;quot; );&lt;br /&gt;
                foreach my $creator ( @$creators )&lt;br /&gt;
                {&lt;br /&gt;
                        next if !defined $creator;&lt;br /&gt;
&lt;br /&gt;
                        # NOTE THIS IS VERY CRUDE, and should be replaced with more elegant methods (possibly from examples elsewhere on this page).&lt;br /&gt;
                        if( defined $creator-&amp;gt;{id} &amp;amp;&amp;amp; $creator-&amp;gt;{id} =~ /0000/ ){&lt;br /&gt;
                                push @dcdata, [ &amp;quot;creator&amp;quot;, EPrints::Utils::make_name_string( $creator-&amp;gt;{name} ), { 'orcid' =&amp;gt; $creator-&amp;gt;{id} } ];&lt;br /&gt;
                        } else {&lt;br /&gt;
                                push @dcdata, [ &amp;quot;creator&amp;quot;, EPrints::Utils::make_name_string( $creator-&amp;gt;{name} ) ];&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;subjects&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $subjectid;&lt;br /&gt;
                foreach $subjectid ( @{$eprint-&amp;gt;get_value( &amp;quot;subjects&amp;quot; )} )&lt;br /&gt;
                {&lt;br /&gt;
                        my $subject = EPrints::DataObj::Subject-&amp;gt;new( $plugin-&amp;gt;{session}, $subjectid );&lt;br /&gt;
                        # avoid problems with bad subjects&lt;br /&gt;
                                next unless( defined $subject );&lt;br /&gt;
                        push @dcdata, [ &amp;quot;subject&amp;quot;, EPrints::Utils::tree_to_utf8( $subject-&amp;gt;render_description() ) ];&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, abstract =&amp;gt; &amp;quot;description&amp;quot; );&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, publisher =&amp;gt; &amp;quot;publisher&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;editors_name&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $editors = $eprint-&amp;gt;get_value( &amp;quot;editors_name&amp;quot; );&lt;br /&gt;
                if( defined $editors )&lt;br /&gt;
                {&lt;br /&gt;
                        foreach my $editor ( @{$editors} )&lt;br /&gt;
                        {&lt;br /&gt;
                                push @dcdata, [ &amp;quot;contributor&amp;quot;, EPrints::Utils::make_name_string( $editor ) ];&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        ## Date for discovery. For a month/day we don't have, assume 01.&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;date&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $date = $eprint-&amp;gt;get_value( &amp;quot;date&amp;quot; );&lt;br /&gt;
                if( defined $date )&lt;br /&gt;
                {&lt;br /&gt;
                        $date =~ s/(-0+)+$//;&lt;br /&gt;
                        push @dcdata, [ &amp;quot;date&amp;quot;, $date ];&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;type&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                push @dcdata, [ &amp;quot;type&amp;quot;, EPrints::Utils::tree_to_utf8( $eprint-&amp;gt;render_value( &amp;quot;type&amp;quot; ) ) ];&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        my $ref = &amp;quot;NonPeerReviewed&amp;quot;;&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;refereed&amp;quot; ) &amp;amp;&amp;amp; $eprint-&amp;gt;get_value( &amp;quot;refereed&amp;quot; ) eq &amp;quot;TRUE&amp;quot; )&lt;br /&gt;
        {&lt;br /&gt;
                $ref = &amp;quot;PeerReviewed&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        push @dcdata, [ &amp;quot;type&amp;quot;, $ref ];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        my @documents = $eprint-&amp;gt;get_all_documents();&lt;br /&gt;
        my $mimetypes = $plugin-&amp;gt;{session}-&amp;gt;get_repository-&amp;gt;get_conf( &amp;quot;oai&amp;quot;, &amp;quot;mime_types&amp;quot; );&lt;br /&gt;
        foreach( @documents )&lt;br /&gt;
        {&lt;br /&gt;
                my $format = $mimetypes-&amp;gt;{$_-&amp;gt;get_value(&amp;quot;format&amp;quot;)};&lt;br /&gt;
                $format = $_-&amp;gt;get_value(&amp;quot;format&amp;quot;) unless defined $format;&lt;br /&gt;
                #$format = &amp;quot;application/octet-stream&amp;quot; unless defined $format;&lt;br /&gt;
                push @dcdata, [ &amp;quot;format&amp;quot;, $format ];&lt;br /&gt;
                push @dcdata, [ &amp;quot;identifier&amp;quot;, $_-&amp;gt;get_url() ];&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        # Most commonly a DOI or journal link&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, official_url =&amp;gt; &amp;quot;relation&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        # The citation for this eprint&lt;br /&gt;
        push @dcdata, [ &amp;quot;identifier&amp;quot;,&lt;br /&gt;
                EPrints::Utils::tree_to_utf8( $eprint-&amp;gt;render_citation() ) ];&lt;br /&gt;
&lt;br /&gt;
        # The URL of the abstract page&lt;br /&gt;
        if( $eprint-&amp;gt;is_set( &amp;quot;eprintid&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                push @dcdata, [ &amp;quot;relation&amp;quot;, $eprint-&amp;gt;get_url() ];&lt;br /&gt;
        }&lt;br /&gt;
        # dc.language not handled yet.&lt;br /&gt;
        # dc.source not handled yet.&lt;br /&gt;
        # dc.coverage not handled yet.&lt;br /&gt;
        # dc.rights not handled yet.&lt;br /&gt;
&lt;br /&gt;
        return \@dcdata;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=ORCID&amp;diff=12222</id>
		<title>ORCID</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=ORCID&amp;diff=12222"/>
		<updated>2016-10-18T12:14:38Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: added recommendations for storing ORCID ids&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has been created to gather information about how different EPrints repositories have integrated ORCID.&lt;br /&gt;
At this time (April 2016) there doesn't seem to be a 'best practice' approach that has been adopted widely - this will hopefully change over time.&lt;br /&gt;
&lt;br /&gt;
As at 2016-10-18 these are the recommended field names and types as discussed at the Jisc ORCID hack day in London - Alan Stiles, John Salter, Adam Vials Moore, Peter West, Andrew Beeken&lt;br /&gt;
&lt;br /&gt;
User Table:&lt;br /&gt;
new field named 'orcid', type 'orcid' which is a subtype of 'id'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eprints Contributors (e.g. creators, editors)&lt;br /&gt;
&lt;br /&gt;
new sub-field of contributor_orcid  (e.g. creator_orcid, editor_orcid)&lt;br /&gt;
&lt;br /&gt;
Store the 16 digit, hyphen separated value, without the authority (host) details e.g. 'nnnn-nnnn-nnnn-nnnn'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you are looking to retrieve publications from the ORCID service, the [http://bazaar.eprints.org/354/ Import from ORCID (Tier 1 API)] Bazaar package, or the [https://github.com/eprintsug/orcidt2 ORCID Tier 2 api framework] are good places to start.&lt;br /&gt;
&lt;br /&gt;
2016-05-20 [[User:Alan.stiles@open.ac.uk|Alan Stiles]] at The Open University is working on a plugin to connect EPrints with ORCID via the Tier 2 Members API to retrieve ORCID ids and synchronise publications and affiliation details.&lt;br /&gt;
&lt;br /&gt;
Some aspects that need to be considered when adopting ORCIDs, and making them available to other systems are:&lt;br /&gt;
&lt;br /&gt;
* storing the ORCID (see: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier)&lt;br /&gt;
* rendering the ORCID in abstract pages (see [http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier link above])&lt;br /&gt;
* exposing ORCIDs over OAI-PMH metadata profiles e.g. RIOXX&lt;br /&gt;
&lt;br /&gt;
NB The examples below may refer to the 'creators' field - but the same approach could be used to extend other 'person' fields - e.g. contributors.&lt;br /&gt;
&lt;br /&gt;
= Re-using creators.id subfield =&lt;br /&gt;
&lt;br /&gt;
The creators.id field is labelled 'email' by default, but as it's an 'id' type field, it can be used to store ORCIDs.&lt;br /&gt;
To re-label the field, a simple addition to a phrase file in &amp;lt;code&amp;gt;archives/ARCHIVEID/cfg/lang/en/phrases/&amp;lt;/code&amp;gt; needs to be made:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;epp:phrase id=&amp;quot;eprint_fieldname_creators_id&amp;quot;&amp;gt;ORCID / Creators email (if known)&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rendering the ORCID in a citation ==&lt;br /&gt;
The rendering of this field then needs to be changed to accommodate an author with an ORCID. The following script adds methods that can be called via the EPScript language:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# add to e.g. ~/archives/ARCHIVEID/cfg/cfg.d/z_add_to_EPrints_Script_Compiled.pl&lt;br /&gt;
# Write into EPrints::Script::Compiled package to allow use of function in epscript&lt;br /&gt;
{&lt;br /&gt;
package EPrints::Script::Compiled;&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
sub run_wrro_people_with_orcids&lt;br /&gt;
{&lt;br /&gt;
  my( $self, $state, $value ) = @_;&lt;br /&gt;
&lt;br /&gt;
  my $session = $state-&amp;gt;{session};&lt;br /&gt;
  my $r = $state-&amp;gt;{session}-&amp;gt;make_doc_fragment;&lt;br /&gt;
&lt;br /&gt;
  my $creators = $value-&amp;gt;[0];&lt;br /&gt;
&lt;br /&gt;
  foreach my $i (0..$#$creators){&lt;br /&gt;
&lt;br /&gt;
    my $creator = @$creators[$i];&lt;br /&gt;
&lt;br /&gt;
    if( $i &amp;gt; 0 ){&lt;br /&gt;
      #not first item (or only one item)&lt;br /&gt;
      if( $i == $#$creators ){&lt;br /&gt;
        #last item&lt;br /&gt;
        $r-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot; and &amp;quot; ) );&lt;br /&gt;
      } else {&lt;br /&gt;
        $r-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;, &amp;quot; ) );&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    my $person_span = $session-&amp;gt;make_element( &amp;quot;span&amp;quot;, &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;person&amp;quot; );&lt;br /&gt;
    $person_span-&amp;gt;appendChild( $session-&amp;gt;render_name( $creator-&amp;gt;{name} ) );&lt;br /&gt;
&lt;br /&gt;
    my $id = $creator-&amp;gt;{id};&lt;br /&gt;
    if( defined $id &amp;amp;&amp;amp; $id =~ m/^(?:orcid.org\/)?(\d{4}\-\d{4}\-\d{4}\-\d{3}(?:\d|X))$/ )&lt;br /&gt;
    {&lt;br /&gt;
      my $orcid_span = $session-&amp;gt;make_element( &amp;quot;span&amp;quot;, &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;orcid&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
#   According to https://orcid.org/trademark-and-id-display-guidelines&lt;br /&gt;
#     &amp;quot;recommended display is a hyperlinked URI preceded by the iD icon&amp;quot;&lt;br /&gt;
#   This looks terrible in a citation. Removed for the time being.&lt;br /&gt;
#&lt;br /&gt;
#   my $orcid_link = $session-&amp;gt;make_element(&lt;br /&gt;
#     &amp;quot;a&amp;quot;,&lt;br /&gt;
#     &amp;quot;href&amp;quot; =&amp;gt; &amp;quot;http://orcid.org/&amp;quot;,&lt;br /&gt;
#     &amp;quot;target&amp;quot; =&amp;gt; &amp;quot;_blank&amp;quot;,&lt;br /&gt;
#     &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;orcid-icon&amp;quot;&lt;br /&gt;
#   );&lt;br /&gt;
#   $orcid_link-&amp;gt;appendChild( $session-&amp;gt;make_element(&lt;br /&gt;
#     &amp;quot;img&amp;quot;,&lt;br /&gt;
#     &amp;quot;src&amp;quot; =&amp;gt; &amp;quot;/images/orcid_16x16.png&amp;quot;,&lt;br /&gt;
#     &amp;quot;title&amp;quot; =&amp;gt; &amp;quot;ORCID&amp;quot;&lt;br /&gt;
#   ) );&lt;br /&gt;
#   $orcid_span-&amp;gt;appendChild( $orcid_link );&lt;br /&gt;
&lt;br /&gt;
      my $link = $session-&amp;gt;make_element(&lt;br /&gt;
        &amp;quot;a&amp;quot;,&lt;br /&gt;
        &amp;quot;href&amp;quot; =&amp;gt; &amp;quot;http://orcid.org/$1&amp;quot;,&lt;br /&gt;
        &amp;quot;target&amp;quot; =&amp;gt; &amp;quot;_blank&amp;quot;,&lt;br /&gt;
      );&lt;br /&gt;
      $link-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;orcid.org/$1&amp;quot; ) );&lt;br /&gt;
&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;(&amp;quot; ) );&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $link );&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;)&amp;quot; ) );&lt;br /&gt;
&lt;br /&gt;
      $person_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot; &amp;quot; ) );&lt;br /&gt;
      $person_span-&amp;gt;appendChild( $orcid_span );&lt;br /&gt;
    }&lt;br /&gt;
    $r-&amp;gt;appendChild( $person_span );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return [ $r, &amp;quot;XHTML&amp;quot; ];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
# END EPrints::Script::Compiled additions&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also want a bit of CSS to style ORCID links&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Add to e.g. ~/archives/ARCHIVEID/cfg/static/style/auto/zzz_orcid.css */&lt;br /&gt;
.person:hover {border-bottom: 1px dashed #a6ce39;}&lt;br /&gt;
.orcid {}&lt;br /&gt;
.orcid a:hover {&lt;br /&gt;
        color: #a6ce39;&lt;br /&gt;
}&lt;br /&gt;
.orcid-icon {}&lt;br /&gt;
.orcid-icon img { vertical-align: text-bottom; margin: 0 4px 0 2px; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And finally, you have to call the new EPScript function from a citation file e.g. &amp;lt;code&amp;gt;archives/ARCHIVEID/cfg/citations/eprint/default.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- replace reference to e.g. &amp;lt;print expr=&amp;quot;creators_name&amp;quot;/&amp;gt; with this: --&amp;gt;&lt;br /&gt;
    &amp;lt;print expr=&amp;quot;wrro_people_with_orcids(creators)&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exposing the ORCID in RIOXX ==&lt;br /&gt;
Based on re-using the creators.id field, this block of code over-writes the default &amp;lt;code&amp;gt;rioxx2_value_author&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# Add to e.g. ~/archives/ARCHIVEID/cfg/cfg.d/zzz_rioxx2_overwrites.pl&lt;br /&gt;
$c-&amp;gt;{rioxx2_value_author} = sub {&lt;br /&gt;
  my( $eprint ) = @_;&lt;br /&gt;
&lt;br /&gt;
  my @authors;&lt;br /&gt;
  for( @{ $eprint-&amp;gt;value( &amp;quot;creators&amp;quot; ) } )&lt;br /&gt;
  {&lt;br /&gt;
    my $id = $_-&amp;gt;{id};&lt;br /&gt;
    if( defined $id &amp;amp;&amp;amp; $id =~ m/^(?:orcid.org\/)?(\d{4}\-\d{4}\-\d{4}\-\d{3}(?:\d|X))$/ )&lt;br /&gt;
    {&lt;br /&gt;
      push @authors, {&lt;br /&gt;
        author =&amp;gt; EPrints::Utils::make_name_string( $_-&amp;gt;{name} ),&lt;br /&gt;
        id =&amp;gt; &amp;quot;http://orcid.org/$1&amp;quot;&lt;br /&gt;
      };&lt;br /&gt;
    } else {&lt;br /&gt;
      push @authors, {&lt;br /&gt;
        author =&amp;gt; EPrints::Utils::make_name_string( $_-&amp;gt;{name} ),&lt;br /&gt;
      };&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #NB If your corp_creators has DOIs or ISNIs for the entries, a similar method could be used to include these here.&lt;br /&gt;
  foreach my $corp ( @{ $eprint-&amp;gt;value( &amp;quot;corp_creators&amp;quot; ) } )&lt;br /&gt;
  {&lt;br /&gt;
    my $entry = {};&lt;br /&gt;
    $entry-&amp;gt;{name} = $corp;&lt;br /&gt;
    push @authors, { author =&amp;gt; $corp };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return \@authors;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Add additional identifiers to creators =&lt;br /&gt;
Another approach to storing ORCIDs is to add an additional sub-field to the creator field.&lt;br /&gt;
This has been discussed on the Eprints tech list. If you know how to do this, please document it here!&lt;br /&gt;
&lt;br /&gt;
This is how University of Bath has done it.  We're getting the ORCID data from another system, so have used a text field to capture it for display.  At present there is no special rendering on it, it's just displaying as a number.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	name =&amp;gt; 'creators',&lt;br /&gt;
	type =&amp;gt; 'compound',&lt;br /&gt;
	multiple =&amp;gt; 1,&lt;br /&gt;
	fields =&amp;gt; [&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'name',&lt;br /&gt;
			type =&amp;gt; 'name',&lt;br /&gt;
			hide_honourific =&amp;gt; 1,&lt;br /&gt;
			hide_lineage =&amp;gt; 1,&lt;br /&gt;
			family_first =&amp;gt; 1,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'id',&lt;br /&gt;
			type =&amp;gt; 'text',&lt;br /&gt;
			input_cols =&amp;gt; 20,&lt;br /&gt;
			allow_null =&amp;gt; 1,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'orcid',&lt;br /&gt;
			type =&amp;gt; 'text',&lt;br /&gt;
			input_cols =&amp;gt; 20,&lt;br /&gt;
			allow_null =&amp;gt; 1,&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	],&lt;br /&gt;
	input_boxes =&amp;gt; 4,&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This is how University of Pittsburgh has done it:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
          {&lt;br /&gt;
            'name' =&amp;gt; 'creators',&lt;br /&gt;
            'type' =&amp;gt; 'compound',&lt;br /&gt;
            'multiple' =&amp;gt; 1,&lt;br /&gt;
            'fields' =&amp;gt; [&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'name',&lt;br /&gt;
                            'type' =&amp;gt; 'name',&lt;br /&gt;
                            'hide_honourific' =&amp;gt; 1,&lt;br /&gt;
                            'hide_lineage' =&amp;gt; 1,&lt;br /&gt;
                            'family_first' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'email',&lt;br /&gt;
                            'type' =&amp;gt; 'text',&lt;br /&gt;
                            'input_cols' =&amp;gt; 20,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'id',&lt;br /&gt;
                            'type' =&amp;gt; 'text',&lt;br /&gt;
                            'input_cols' =&amp;gt; 20,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'orcid',&lt;br /&gt;
                            'type' =&amp;gt; 'id',&lt;br /&gt;
                            'input_cols' =&amp;gt; 19,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                        ],&lt;br /&gt;
            'input_boxes' =&amp;gt; 4,&lt;br /&gt;
            'render_value' =&amp;gt; 'custom_render_creators_with_orcid',&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notes from Pittsburgh:==&lt;br /&gt;
(Information courtesy of Brian Gregg - bdgregg@pitt.edu)&lt;br /&gt;
&lt;br /&gt;
We have added some ORCID functionality in our IR System here at the University of Pittsburgh.  We however have not “linked” our IR with orcid.org in anyway such as we do not have a lookup user in ORCID or the ability to add publications from ORCID to our IR.  The only link is the entering of the ORCID into the system so that it can be displayed.&lt;br /&gt;
&lt;br /&gt;
An example record is available here: [http://d-scholarship.pitt.edu/28114/ http://d-scholarship.pitt.edu/28114/]&lt;br /&gt;
&lt;br /&gt;
# Users have an ORCID field in their profile – user_fields.pl&lt;br /&gt;
# Any “Creator” types have an ORCID field added to the workflow – eprint_fields.pl&lt;br /&gt;
# We have added ORCID validation adhering to this document: [http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier] - eprint_validate.pl&lt;br /&gt;
# We have added the ORCID to the “lookup” function to populate the ORCID field from any user entries in the database. – cgi/users/lookup/name&lt;br /&gt;
# We display the ORCID as such on the input form, where the green icon links out to our own orcid.pitt.edu site, but could be to orcid.org by default.&lt;br /&gt;
# We display the ORCID as such on the public display of the record where the ORCID is linked out to orcid.org (see [http://d-scholarship.pitt.edu/28114/ example record])&lt;br /&gt;
&lt;br /&gt;
ORCID Validator - snippet for eprints_validate.pl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
        # ORCID ID Validator for individuals&lt;br /&gt;
        # Reference: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier&lt;br /&gt;
        # REGEX: ^\d{4}-\d{4}-\d{4}-(\d{3}X|\d{4})$&lt;br /&gt;
        #&lt;br /&gt;
        my @name_fields = qw( creators contributors exhibitors producers conductors lyricists );  #which ever name fields you added 'orcid' to.&lt;br /&gt;
        foreach my $name_field ( @name_fields )&lt;br /&gt;
        {&lt;br /&gt;
           if( $eprint-&amp;gt;is_set( $name_field ) )&lt;br /&gt;
           {&lt;br /&gt;
              foreach my $creator ( @{ $eprint-&amp;gt;value( $name_field ) } )&lt;br /&gt;
              {&lt;br /&gt;
                 my $orcid = $creator-&amp;gt;{orcid};&lt;br /&gt;
                 next unless defined $orcid;&lt;br /&gt;
                 if ($repository-&amp;gt;get_repository-&amp;gt;can_call ( &amp;quot;validators&amp;quot;, &amp;quot;isValidORCID&amp;quot; ) )&lt;br /&gt;
                 {&lt;br /&gt;
                    if (!$repository-&amp;gt;get_repository-&amp;gt;call( [ &amp;quot;validators&amp;quot;, &amp;quot;isValidORCID&amp;quot; ], $orcid ))&lt;br /&gt;
                    {&lt;br /&gt;
                       my $field_text = $repository-&amp;gt;html_phrase( &amp;quot;eprint_fieldname_$name_field&amp;quot; );&lt;br /&gt;
                       my $field_frag = $repository-&amp;gt;make_element( &amp;quot;span&amp;quot;, class=&amp;gt;&amp;quot;ep_problem_field:$name_field&amp;quot; );&lt;br /&gt;
                       $field_frag-&amp;gt;appendChild($field_text);&lt;br /&gt;
                       push @problems, $repository-&amp;gt;html_phrase( &amp;quot;warnings:orcid_invalid&amp;quot;,&lt;br /&gt;
                            orcid =&amp;gt; $repository-&amp;gt;get_repository-&amp;gt;make_text($orcid),&lt;br /&gt;
                            field =&amp;gt; $field_frag,&lt;br /&gt;
                        );&lt;br /&gt;
                    }&lt;br /&gt;
                 } else {&lt;br /&gt;
                    $repository-&amp;gt;get_repository-&amp;gt;log( &amp;quot;Can not call isValidORCID.&amp;quot; );&lt;br /&gt;
                 }&lt;br /&gt;
              }&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Phrase for &amp;quot;warnings:orcid_invalid&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;epp:phrase id=&amp;quot;warnings:orcid_invalid&amp;quot;&amp;gt;The ORCID ID: &amp;lt;b&amp;gt;&amp;lt;epc:pin name=&amp;quot;orcid&amp;quot;/&amp;gt;&amp;lt;/b&amp;gt; is not a valid ORCID ID as it does not conform to the ORCID ID specification.  Please edit the &amp;lt;epc:pin name=&amp;quot;field&amp;quot;/&amp;gt; with the associated ORCID or remove it from the name completely.&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additional Function that can be placed either at the end of eprints_validate.pl (after the final };) or elsewhere:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
############################################&lt;br /&gt;
# Function:     isValidORCID&lt;br /&gt;
# Description:  Used to validate ORCID IDs&lt;br /&gt;
# &lt;br /&gt;
# From: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier (Checksum)&lt;br /&gt;
#&lt;br /&gt;
$c-&amp;gt;{validators}-&amp;gt;{isValidORCID} = sub {&lt;br /&gt;
   my $ORCID = $_[0];&lt;br /&gt;
   #Check for valid length of 19 characters.&lt;br /&gt;
   my $size = length($ORCID);&lt;br /&gt;
   if ($size &amp;gt; 19 )&lt;br /&gt;
   {&lt;br /&gt;
        return 0;&lt;br /&gt;
   } else {&lt;br /&gt;
      #Check actual validity of the ID mathematically.&lt;br /&gt;
      $ORCID =~ s/\-//g;&lt;br /&gt;
      my @chars = split(//, $ORCID);&lt;br /&gt;
      my $total = 0;&lt;br /&gt;
      for ( my $i=0; $i&amp;lt;15; $i++) {&lt;br /&gt;
         $total = ($total + $chars[$i]) *2;&lt;br /&gt;
      }&lt;br /&gt;
      my $remainder = $total % 11;&lt;br /&gt;
      my $result = (12 - $remainder) % 11;&lt;br /&gt;
      return ($chars[15] == ($result==10 ? 'X' : $result))&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additionally you will have to define a custom render to add the fields to be displayed in the abstract/summary page.&lt;br /&gt;
&lt;br /&gt;
= Rendering with Bootstrap =&lt;br /&gt;
&lt;br /&gt;
[[File:orcid_bootstrap.png|thumb|left|alt=ORCIDs displaying in the Bootstrap theme|ORCID and Bootstrap]]&lt;br /&gt;
&lt;br /&gt;
In a recent redesign of [http://eprints.whiterose.ac.uk White Rose Research Online] the [https://github.com/eprintsug/bootstrap Bootstrap theme] was used.&lt;br /&gt;
The ORCID links are now enhanced with a tooltip and the green icon. There may be examples on the [http://eprints.whiterose.ac.uk/cgi/latest_tool latest 20 additions] page.&lt;br /&gt;
&lt;br /&gt;
== Bootstrap tooltop ==&lt;br /&gt;
This block of code finds anything with a class of 'orcid', and adds the green logo to it, and a tooltip that reads 'ORCID: ''orcid-value''', as shown in the image.&lt;br /&gt;
&lt;br /&gt;
The example code below is based on the following rendering of a person who may have an ORCID:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- NB line-breaks added here for readability are not normally output by EPrints! --&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;person&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;person_name&amp;quot;&amp;gt;Castillo Ortiz, P.J.&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;a href=&amp;quot;http://orcid.org/0000-0003-4540-1855&amp;quot; target=&amp;quot;_blank&amp;quot; class=&amp;quot;orcid&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;span&amp;gt;orcid.org/0000-0003-4540-1855&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== jQuery ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// selector used here depends on your rendering. You may want to use something like a[href*='orcid.org/0000-']&lt;br /&gt;
jQuery('.orcid').tooltip({&lt;br /&gt;
	'placement': 'auto',&lt;br /&gt;
	'title': function(){ return &amp;quot;ORCID: &amp;quot;+ jQuery(this).text()},&lt;br /&gt;
}).append('&amp;lt;img src=&amp;quot;/images/orcid_16x16.png&amp;quot; alt=&amp;quot;&amp;quot; /&amp;gt;').find('span').hide();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CSS ==&lt;br /&gt;
The green colouring is added using the following css, which also makes the background of the tooltip opaque, not semi-transparent as it is by default.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.person + .tooltip &amp;gt; .tooltip-inner,&lt;br /&gt;
.orcid + .tooltip &amp;gt; .tooltip-inner {&lt;br /&gt;
  background-color: #A6CE39;&lt;br /&gt;
  border: 1px solid #000000;&lt;br /&gt;
  white-space: pre;&lt;br /&gt;
  max-width: none;&lt;br /&gt;
}&lt;br /&gt;
.person + .tooltip.in,&lt;br /&gt;
.orcid + .tooltip.in {&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  filter: alpha(opacity=100);&lt;br /&gt;
}&lt;br /&gt;
/* This adds a green dashed line under an author's name when hovered. This helps in big author lists to tie initials and surname together */&lt;br /&gt;
.person:hover {border-bottom: 1px dashed #a6ce39;}&lt;br /&gt;
.orcid a:hover {&lt;br /&gt;
        color: #a6ce39;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OAI-PMH (Experimental) =&lt;br /&gt;
'''[[User:Libjlrs]] 2016-09-29 Warning: this is experimental. I hope others will read, understand, question and improve on this before it becomes some form of best practice!'''&lt;br /&gt;
&lt;br /&gt;
Some metadata profiles support attributes that are useful to propagate ORCIDs e.g. RIOXX (see the [[#Exposing_the_ORCID_in_RIOXX]] section above, and the 'rioxxterms:author' section on http://www.rioxx.net/profiles/v2-0-final/ ).&lt;br /&gt;
&lt;br /&gt;
A lot of harvesters use the oai_dc metadata profile when harvesting records. The DC schema doesn't allow attributes on the dc:creator element, so ORCIDs cannot be added in a sensible way to this profile.&lt;br /&gt;
&lt;br /&gt;
The details below create an additional metadata prefix that adds an attribute to the dc:creator field. The original &amp;lt;code&amp;gt;metadataPrefix=oai_dc&amp;lt;/code&amp;gt; output remains unchanged. Using &amp;lt;code&amp;gt;metadataPrefix=oai_dc_orcid&amp;lt;/code&amp;gt; will add the orcid attribute where available.&lt;br /&gt;
&lt;br /&gt;
Currently there is not an XSD that describes this change, so a harvester that validates the feed may stop when it encounters an ORCID.&lt;br /&gt;
&lt;br /&gt;
This example is based on the &amp;lt;code&amp;gt;EPrints::Plugin::Export::OAI_DC&amp;lt;/code&amp;gt; module from EPrints 3.3.10. You may need to tweak it to make it work for you!&lt;br /&gt;
&lt;br /&gt;
File: &amp;lt;code&amp;gt;~/archives/ARCHIVEID/cfg/plugins/EPrints/Plugin/Export/OAI_DC_ORCID.pm&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
package EPrints::Plugin::Export::OAI_DC_ORCID;&lt;br /&gt;
&lt;br /&gt;
use EPrints::Plugin::Export::OAI_DC;&lt;br /&gt;
&lt;br /&gt;
@ISA = ( &amp;quot;EPrints::Plugin::Export::OAI_DC&amp;quot;, &amp;quot;EPrints::Plugin::Export::DC&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
sub new&lt;br /&gt;
{&lt;br /&gt;
        my( $class, %opts ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $self = $class-&amp;gt;SUPER::new( %opts );&lt;br /&gt;
&lt;br /&gt;
        $self-&amp;gt;{name} = &amp;quot;Dublin Core - OAI + ORCID Schema&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{accept} = [ 'dataobj/eprint' ];&lt;br /&gt;
        $self-&amp;gt;{visible} = &amp;quot;&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{suffix} = &amp;quot;.xml&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{mimetype} = &amp;quot;text/xml&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        $self-&amp;gt;{metadataPrefix} = &amp;quot;oai_dc_orcid&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{xmlns} = &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc/&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{schemaLocation} = &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc.xsd&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub xml_dataobj&lt;br /&gt;
{&lt;br /&gt;
        my( $plugin, $dataobj ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $data = $plugin-&amp;gt;convert_dataobj( $dataobj );&lt;br /&gt;
&lt;br /&gt;
        my $dc = $plugin-&amp;gt;{session}-&amp;gt;make_element(&lt;br /&gt;
                &amp;quot;oai_dc:dc&amp;quot;,&lt;br /&gt;
                &amp;quot;xmlns:oai_dc&amp;quot; =&amp;gt; &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc/&amp;quot;,&lt;br /&gt;
                &amp;quot;xmlns:dc&amp;quot; =&amp;gt; &amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;,&lt;br /&gt;
                &amp;quot;xmlns:xsi&amp;quot; =&amp;gt; &amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;,&lt;br /&gt;
                &amp;quot;xsi:schemaLocation&amp;quot; =&amp;gt;&lt;br /&gt;
        &amp;quot;http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        # turn the list of pairs into XML blocks (indented by 8) and add them&lt;br /&gt;
        # them to the DC element.&lt;br /&gt;
        foreach( @{$data} )&lt;br /&gt;
        {&lt;br /&gt;
                $dc-&amp;gt;appendChild(  $plugin-&amp;gt;{session}-&amp;gt;render_data_element( 8, &amp;quot;dc:&amp;quot;.$_-&amp;gt;[0], $_-&amp;gt;[1], %{$_-&amp;gt;[2]} ) );&lt;br /&gt;
                # produces &amp;lt;key&amp;gt;value&amp;lt;/key&amp;gt;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $dc;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub convert_dataobj&lt;br /&gt;
{&lt;br /&gt;
        my( $plugin, $eprint ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $dataset = $eprint-&amp;gt;{dataset};&lt;br /&gt;
&lt;br /&gt;
        my @dcdata = ();&lt;br /&gt;
&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, title =&amp;gt; &amp;quot;title&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;creators&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $creators = $eprint-&amp;gt;get_value( &amp;quot;creators&amp;quot; );&lt;br /&gt;
                foreach my $creator ( @$creators )&lt;br /&gt;
                {&lt;br /&gt;
                        next if !defined $creator;&lt;br /&gt;
&lt;br /&gt;
                        # NOTE THIS IS VERY CRUDE, and should be replaced with more elegant methods (possibly from examples elsewhere on this page).&lt;br /&gt;
                        if( defined $creator-&amp;gt;{id} &amp;amp;&amp;amp; $creator-&amp;gt;{id} =~ /0000/ ){&lt;br /&gt;
                                push @dcdata, [ &amp;quot;creator&amp;quot;, EPrints::Utils::make_name_string( $creator-&amp;gt;{name} ), { 'orcid' =&amp;gt; $creator-&amp;gt;{id} } ];&lt;br /&gt;
                        } else {&lt;br /&gt;
                                push @dcdata, [ &amp;quot;creator&amp;quot;, EPrints::Utils::make_name_string( $creator-&amp;gt;{name} ) ];&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;subjects&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $subjectid;&lt;br /&gt;
                foreach $subjectid ( @{$eprint-&amp;gt;get_value( &amp;quot;subjects&amp;quot; )} )&lt;br /&gt;
                {&lt;br /&gt;
                        my $subject = EPrints::DataObj::Subject-&amp;gt;new( $plugin-&amp;gt;{session}, $subjectid );&lt;br /&gt;
                        # avoid problems with bad subjects&lt;br /&gt;
                                next unless( defined $subject );&lt;br /&gt;
                        push @dcdata, [ &amp;quot;subject&amp;quot;, EPrints::Utils::tree_to_utf8( $subject-&amp;gt;render_description() ) ];&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, abstract =&amp;gt; &amp;quot;description&amp;quot; );&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, publisher =&amp;gt; &amp;quot;publisher&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;editors_name&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $editors = $eprint-&amp;gt;get_value( &amp;quot;editors_name&amp;quot; );&lt;br /&gt;
                if( defined $editors )&lt;br /&gt;
                {&lt;br /&gt;
                        foreach my $editor ( @{$editors} )&lt;br /&gt;
                        {&lt;br /&gt;
                                push @dcdata, [ &amp;quot;contributor&amp;quot;, EPrints::Utils::make_name_string( $editor ) ];&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        ## Date for discovery. For a month/day we don't have, assume 01.&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;date&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                my $date = $eprint-&amp;gt;get_value( &amp;quot;date&amp;quot; );&lt;br /&gt;
                if( defined $date )&lt;br /&gt;
                {&lt;br /&gt;
                        $date =~ s/(-0+)+$//;&lt;br /&gt;
                        push @dcdata, [ &amp;quot;date&amp;quot;, $date ];&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;type&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                push @dcdata, [ &amp;quot;type&amp;quot;, EPrints::Utils::tree_to_utf8( $eprint-&amp;gt;render_value( &amp;quot;type&amp;quot; ) ) ];&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        my $ref = &amp;quot;NonPeerReviewed&amp;quot;;&lt;br /&gt;
        if( $eprint-&amp;gt;exists_and_set( &amp;quot;refereed&amp;quot; ) &amp;amp;&amp;amp; $eprint-&amp;gt;get_value( &amp;quot;refereed&amp;quot; ) eq &amp;quot;TRUE&amp;quot; )&lt;br /&gt;
        {&lt;br /&gt;
                $ref = &amp;quot;PeerReviewed&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        push @dcdata, [ &amp;quot;type&amp;quot;, $ref ];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        my @documents = $eprint-&amp;gt;get_all_documents();&lt;br /&gt;
        my $mimetypes = $plugin-&amp;gt;{session}-&amp;gt;get_repository-&amp;gt;get_conf( &amp;quot;oai&amp;quot;, &amp;quot;mime_types&amp;quot; );&lt;br /&gt;
        foreach( @documents )&lt;br /&gt;
        {&lt;br /&gt;
                my $format = $mimetypes-&amp;gt;{$_-&amp;gt;get_value(&amp;quot;format&amp;quot;)};&lt;br /&gt;
                $format = $_-&amp;gt;get_value(&amp;quot;format&amp;quot;) unless defined $format;&lt;br /&gt;
                #$format = &amp;quot;application/octet-stream&amp;quot; unless defined $format;&lt;br /&gt;
                push @dcdata, [ &amp;quot;format&amp;quot;, $format ];&lt;br /&gt;
                push @dcdata, [ &amp;quot;identifier&amp;quot;, $_-&amp;gt;get_url() ];&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        # Most commonly a DOI or journal link&lt;br /&gt;
        push @dcdata, $plugin-&amp;gt;simple_value( $eprint, official_url =&amp;gt; &amp;quot;relation&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        # The citation for this eprint&lt;br /&gt;
        push @dcdata, [ &amp;quot;identifier&amp;quot;,&lt;br /&gt;
                EPrints::Utils::tree_to_utf8( $eprint-&amp;gt;render_citation() ) ];&lt;br /&gt;
&lt;br /&gt;
        # The URL of the abstract page&lt;br /&gt;
        if( $eprint-&amp;gt;is_set( &amp;quot;eprintid&amp;quot; ) )&lt;br /&gt;
        {&lt;br /&gt;
                push @dcdata, [ &amp;quot;relation&amp;quot;, $eprint-&amp;gt;get_url() ];&lt;br /&gt;
        }&lt;br /&gt;
        # dc.language not handled yet.&lt;br /&gt;
        # dc.source not handled yet.&lt;br /&gt;
        # dc.coverage not handled yet.&lt;br /&gt;
        # dc.rights not handled yet.&lt;br /&gt;
&lt;br /&gt;
        return \@dcdata;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Installing_EPrints_on_RHEL/Fedora/CentOS&amp;diff=12214</id>
		<title>Installing EPrints on RHEL/Fedora/CentOS</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Installing_EPrints_on_RHEL/Fedora/CentOS&amp;diff=12214"/>
		<updated>2016-10-14T13:46:07Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* SELinux */   added SELinux network permission&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Installation]]&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
&lt;br /&gt;
* RedHat Enterprise/CentOS 7 (earlier versions may work)&lt;br /&gt;
&lt;br /&gt;
==Installing==&lt;br /&gt;
&lt;br /&gt;
Add the rpm.eprints.org repository key:&lt;br /&gt;
&lt;br /&gt;
 rpm -ivh http://rpm.eprints.org/rpm-eprints-org-key-1-1.noarch.rpm&lt;br /&gt;
&lt;br /&gt;
... the rpm.eprints.org EPrints repository:&lt;br /&gt;
&lt;br /&gt;
 rpm -ivh http://rpm.eprints.org/eprints/noarch/rpm-eprints-org-1-1.noarch.rpm&lt;br /&gt;
&lt;br /&gt;
... on '''RHEL 5.x only''' the rpm.eprints.org RHEL updates repository:&lt;br /&gt;
&lt;br /&gt;
 rpm -ivh http://rpm.eprints.org/RHEL/5Server/noarch/rpm-eprints-org-RHEL-5-1.noarch.rpm&lt;br /&gt;
&lt;br /&gt;
... on '''RHEL 6.x only''' install antiword if installing EPrints 3.2.x or earlier (from 3.3 onwards only used to as a Word -&amp;gt; PDF converter so not strictly necessary):&lt;br /&gt;
&lt;br /&gt;
 rpm -ivh http://rpm.eprints.org/RHEL/5/i386/antiword-0.37-1.i386.rpm&lt;br /&gt;
 # or for 64 bit:&lt;br /&gt;
 rpm -ivh http://rpm.eprints.org/RHEL/5/x86_64/antiword-0.37-1.x86_64.rpm&lt;br /&gt;
&lt;br /&gt;
Upgrade your XML libraries:&lt;br /&gt;
&lt;br /&gt;
 yum upgrade libxml2 libxslt perl-XML-LibXML perl-XML-LibXSLT&lt;br /&gt;
&lt;br /&gt;
Install EPrints 3:&lt;br /&gt;
&lt;br /&gt;
 yum install eprints # 3.3.x and later&lt;br /&gt;
 yum install eprints3 # 3.2.x&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
===Other sources for dependencies===&lt;br /&gt;
&lt;br /&gt;
The following RPM repositories may be useful for finding other dependencies required by EPrints that aren't part of the core RHEL system.&lt;br /&gt;
&lt;br /&gt;
http://fedoraproject.org/wiki/EPEL - Fedora Extras for RHEL.&lt;br /&gt;
&lt;br /&gt;
http://pkgs.repoforge.org/rpmforge-release/ - RPMforge, which covers a very large range of Perl modules plus others.&lt;br /&gt;
&lt;br /&gt;
[http://www.imagemagick.org/script/binary-releases.php ImageMagick] provide an RPM for RHEL/CentOS 5. At time of writing the RPM requires fftw3, fltk, jasper and openexr which are available from ''RPMForge''. libwebp is available from [http://rpm.eprints.org/RHEL/5/ rpm.eprints.org].&lt;br /&gt;
&lt;br /&gt;
==SELinux==&lt;br /&gt;
&lt;br /&gt;
If you're using SELinux on your server you will need to give Apache read/write access to the documents directory for all repositories you create and the eprints var folder (indexer log, ticker files):&lt;br /&gt;
&lt;br /&gt;
 chcon -R -h -t httpd_sys_script_rw_t /usr/share/eprints/archives/[repoid]/documents/&lt;br /&gt;
 chcon -R -h -t httpd_sys_script_rw_t /usr/share/eprints/var/&lt;br /&gt;
&lt;br /&gt;
you may also need to tell SELinux to allow apache to talk on the network (maybe only if your database is on a separate server&lt;br /&gt;
&lt;br /&gt;
 setsebool -P httpd_can_network_connect=1&lt;br /&gt;
&lt;br /&gt;
==Getting Started==&lt;br /&gt;
&lt;br /&gt;
[[Getting Started with EPrints 3]]&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== Failed to parse XML file ===&lt;br /&gt;
&lt;br /&gt;
When installing EPrints on RHEL6 (may apply to other versions), If you get the error:&lt;br /&gt;
 Failed to parse XML file:&lt;br /&gt;
 /usr/share/eprints/lib/lang/en/phrases/system.xml: Entity: line 396: parser error : Entity 'nbsp' not defined age or title page. If there are more...&lt;br /&gt;
&lt;br /&gt;
Run&lt;br /&gt;
 sed -i 's/'''&amp;amp;'''nbsp;/ /g' /usr/share/eprints/lib/lang/en/phrases/system.xml&lt;br /&gt;
&lt;br /&gt;
then navigate to the root of your EPrints install (/opt/eprints or /usr/share/eprints) and run&lt;br /&gt;
 bin/generate_views *repository_id*&lt;br /&gt;
 bin/epadmin reload *repository_id*&lt;br /&gt;
&lt;br /&gt;
=== Upgrade from previous 3.3 ===&lt;br /&gt;
After a upgrading from previous 3.3, your existing repository's database may need updating. &lt;br /&gt;
 bin/epadmin update [arcid]&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Training_Video:Staff_Search&amp;diff=12102</id>
		<title>Training Video:Staff Search</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Training_Video:Staff_Search&amp;diff=12102"/>
		<updated>2016-06-15T16:01:08Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* Index */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Howto]]&lt;br /&gt;
[[Category:Training_Video|Staff Search]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
An overview of the staff search, which allows an editor or an administrator to search for items by item ID, username of depositor and all advanced search fields, regardless of its location in the repository.&lt;br /&gt;
&lt;br /&gt;
==What You Will Learn==&lt;br /&gt;
&lt;br /&gt;
* How to search for items as a staff member&lt;br /&gt;
&lt;br /&gt;
==What You Should Already Know==&lt;br /&gt;
&lt;br /&gt;
* How to log into EPrints&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
=== Video===&lt;br /&gt;
The Video can be found at [http://youtu.be/nc6sZDkc5jI http://youtu.be/nc6sZDkc5jI].&lt;br /&gt;
====Index====&lt;br /&gt;
* [http://youtu.be/nc6sZDkc5jI?t=0m0s 0:00 introduction]&lt;br /&gt;
* [http://youtu.be/nc6sZDkc5jI?t=0m13s 0:13 log in as admin]&lt;br /&gt;
* [http://youtu.be/nc6sZDkc5jI?t=0m200s 0:20 open staff search]&lt;br /&gt;
* [http://youtu.be/nc6sZDkc5jI?t=0m50s 0:50 search for articles]&lt;br /&gt;
* [http://youtu.be/nc6sZDkc5jI?t=1m15s 1:15 search by item id]&lt;br /&gt;
* [http://youtu.be/nc6sZDkc5jI?t=1m25s 1:25 explaining other search options]&lt;br /&gt;
&lt;br /&gt;
==== The Video====&lt;br /&gt;
&amp;lt;youtube&amp;gt;nc6sZDkc5jI&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Notes, Errata and Additional Information====&lt;br /&gt;
&lt;br /&gt;
See [[Search.pl#Adding_fields_to_the_staff_search]] for info about pushing more fields into the staff search.&lt;br /&gt;
&lt;br /&gt;
* EPrints 3.3.15&lt;br /&gt;
&lt;br /&gt;
==Test Yourself==&lt;br /&gt;
&lt;br /&gt;
* Search for an item in a user work area.&lt;br /&gt;
* Search for a retired item.&lt;br /&gt;
* Search for an item with a particular eprint ID.&lt;br /&gt;
* Search for an item belonging to a particular user.&lt;br /&gt;
&lt;br /&gt;
==More Reading==&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Training_Video:Staff_Search&amp;diff=12099</id>
		<title>Training Video:Staff Search</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Training_Video:Staff_Search&amp;diff=12099"/>
		<updated>2016-06-15T15:30:15Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* Index */  made index into links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Howto]]&lt;br /&gt;
[[Category:Training_Video|Staff Search]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
An overview of the staff search, which allows an editor or an administrator to search for items by item ID, username of depositor and all advanced search fields, regardless of its location in the repository.&lt;br /&gt;
&lt;br /&gt;
==What You Will Learn==&lt;br /&gt;
&lt;br /&gt;
* How to search for items as a staff member&lt;br /&gt;
&lt;br /&gt;
==What You Should Already Know==&lt;br /&gt;
&lt;br /&gt;
* How to log into EPrints&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
=== Video===&lt;br /&gt;
The Video can be found at [http://youtu.be/KzrS_u-4eoM http://youtu.be/KzrS_u-4eoM].&lt;br /&gt;
====Index====&lt;br /&gt;
* [http://youtu.be/KzrS_u-4eoM?t=0m0s 0:00 introduction]&lt;br /&gt;
* [http://youtu.be/KzrS_u-4eoM?t=0m13s 0:13 log in as admin]&lt;br /&gt;
* [http://youtu.be/KzrS_u-4eoM?t=0m200s 0:20 open staff search]&lt;br /&gt;
* [http://youtu.be/KzrS_u-4eoM?t=0m50s 0:50 search for articles]&lt;br /&gt;
* [http://youtu.be/KzrS_u-4eoM?t=1m15s 1:15 search by item id]&lt;br /&gt;
* [http://youtu.be/KzrS_u-4eoM?t=1m25s 1:25 explaining other search options]&lt;br /&gt;
&lt;br /&gt;
==== The Video====&lt;br /&gt;
&amp;lt;youtube&amp;gt;&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Notes, Errata and Additional Information====&lt;br /&gt;
&lt;br /&gt;
Any notes, version information, errata, etc concerned with this video&lt;br /&gt;
&lt;br /&gt;
* EPrints 3.3.15&lt;br /&gt;
&lt;br /&gt;
==Test Yourself==&lt;br /&gt;
&lt;br /&gt;
* Search for an item in a user work area.&lt;br /&gt;
* Search for a retired item.&lt;br /&gt;
* Search for an item with a particular eprint ID.&lt;br /&gt;
* Search for an item belonging to a particular user.&lt;br /&gt;
&lt;br /&gt;
==More Reading==&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Training_Video:Staff_Search&amp;diff=12098</id>
		<title>Training Video:Staff Search</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Training_Video:Staff_Search&amp;diff=12098"/>
		<updated>2016-06-15T15:19:29Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* Index */ bullet listed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Howto]]&lt;br /&gt;
[[Category:Training_Video|Staff Search]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
An overview of the staff search, which allows an editor or an administrator to search for items by item ID, username of depositor and all advanced search fields, regardless of its location in the repository.&lt;br /&gt;
&lt;br /&gt;
==What You Will Learn==&lt;br /&gt;
&lt;br /&gt;
* How to search for items as a staff member&lt;br /&gt;
&lt;br /&gt;
==What You Should Already Know==&lt;br /&gt;
&lt;br /&gt;
* How to log into EPrints&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
=== Video===&lt;br /&gt;
The Video can be found at [http://youtu.be/KzrS_u-4eoM http://youtu.be/KzrS_u-4eoM].&lt;br /&gt;
====Index====&lt;br /&gt;
* 0:00 introduction&lt;br /&gt;
* 0:13 log in as admin&lt;br /&gt;
* 0:20 open staff search&lt;br /&gt;
* 0:50 search for articles&lt;br /&gt;
* 1:15 search by item id&lt;br /&gt;
* 1:25 explaining other search options&lt;br /&gt;
&lt;br /&gt;
==== The Video====&lt;br /&gt;
&amp;lt;youtube&amp;gt;&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Notes, Errata and Additional Information====&lt;br /&gt;
&lt;br /&gt;
Any notes, version information, errata, etc concerned with this video&lt;br /&gt;
&lt;br /&gt;
* EPrints 3.3.15&lt;br /&gt;
&lt;br /&gt;
==Test Yourself==&lt;br /&gt;
&lt;br /&gt;
* Search for an item in a user work area.&lt;br /&gt;
* Search for a retired item.&lt;br /&gt;
* Search for an item with a particular eprint ID.&lt;br /&gt;
* Search for an item belonging to a particular user.&lt;br /&gt;
&lt;br /&gt;
==More Reading==&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Training_Video:Staff_Search&amp;diff=12097</id>
		<title>Training Video:Staff Search</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Training_Video:Staff_Search&amp;diff=12097"/>
		<updated>2016-06-15T15:17:56Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* Index */  added index details&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Howto]]&lt;br /&gt;
[[Category:Training_Video|Staff Search]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
An overview of the staff search, which allows an editor or an administrator to search for items by item ID, username of depositor and all advanced search fields, regardless of its location in the repository.&lt;br /&gt;
&lt;br /&gt;
==What You Will Learn==&lt;br /&gt;
&lt;br /&gt;
* How to search for items as a staff member&lt;br /&gt;
&lt;br /&gt;
==What You Should Already Know==&lt;br /&gt;
&lt;br /&gt;
* How to log into EPrints&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
=== Video===&lt;br /&gt;
The Video can be found at [http://youtu.be/KzrS_u-4eoM http://youtu.be/KzrS_u-4eoM].&lt;br /&gt;
====Index====&lt;br /&gt;
0:00 introduction&lt;br /&gt;
0:13 log in as admin&lt;br /&gt;
0:20 open staff search&lt;br /&gt;
0:50 search for articles&lt;br /&gt;
1:15 search by item id&lt;br /&gt;
1:25 explain other search options&lt;br /&gt;
&lt;br /&gt;
==== The Video====&lt;br /&gt;
&amp;lt;youtube&amp;gt;&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Notes, Errata and Additional Information====&lt;br /&gt;
&lt;br /&gt;
Any notes, version information, errata, etc concerned with this video&lt;br /&gt;
&lt;br /&gt;
* EPrints 3.3.15&lt;br /&gt;
&lt;br /&gt;
==Test Yourself==&lt;br /&gt;
&lt;br /&gt;
* Search for an item in a user work area.&lt;br /&gt;
* Search for a retired item.&lt;br /&gt;
* Search for an item with a particular eprint ID.&lt;br /&gt;
* Search for an item belonging to a particular user.&lt;br /&gt;
&lt;br /&gt;
==More Reading==&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Accessing_Metdata_Fields&amp;diff=11997</id>
		<title>Accessing Metdata Fields</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Accessing_Metdata_Fields&amp;diff=11997"/>
		<updated>2016-06-03T13:37:41Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: redirect to corrected typo page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Accessing Metadata Fields]]&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Accessing_Metadata_Fields&amp;diff=11996</id>
		<title>Accessing Metadata Fields</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Accessing_Metadata_Fields&amp;diff=11996"/>
		<updated>2016-06-03T13:36:46Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: Corrected page title typo from Accessing_Metdata_Fields&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{API}}&lt;br /&gt;
[[Category:API]]&lt;br /&gt;
&lt;br /&gt;
This page proves an overview of the API calls you can use to access the data in a DataObj.  The example framing this is that of an export plugin.&lt;br /&gt;
&lt;br /&gt;
== The Plugin ==&lt;br /&gt;
&lt;br /&gt;
Below is a very simple export plugin, which outputs a single eprint or list of eprints as Text citations.  This can be found in the perl_lib/EPrints/Plugin/Export directory.  A good starting place to understand the structure of these plugins is to have a browse through the existing code base.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package EPrints::Plugin::Export::Text;&lt;br /&gt;
&lt;br /&gt;
use EPrints::Plugin::Export::TextFile;&lt;br /&gt;
&lt;br /&gt;
@ISA = ( &amp;quot;EPrints::Plugin::Export::TextFile&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
sub new&lt;br /&gt;
{&lt;br /&gt;
        my( $class, %opts ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $self = $class-&amp;gt;SUPER::new( %opts );&lt;br /&gt;
&lt;br /&gt;
        $self-&amp;gt;{name} = &amp;quot;ASCII Citation&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;{accept} = [ 'dataobj/eprint', 'list/eprint' ];&lt;br /&gt;
        $self-&amp;gt;{visible} = &amp;quot;all&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sub output_dataobj&lt;br /&gt;
{&lt;br /&gt;
        my( $plugin, $dataobj ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $cite = $dataobj-&amp;gt;render_citation;&lt;br /&gt;
&lt;br /&gt;
        return EPrints::Utils::tree_to_utf8( $cite ).&amp;quot;\n\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the output_dataobj function.  In an export plugin, this will be called on every item in the list that is being exported, and the results for all items concatenated and outputted.&lt;br /&gt;
&lt;br /&gt;
There are two function calls of particular interest that aid in retrieving and managing data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
my $cite = $dataobj-&amp;gt;render_citation;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This returns an HTML DOM object containing the citation of the dataobj as specified in the configuration files (see cfg/citations/eprint/default.xml).  Given an HTML DOM object, the following call will convert it into a string:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
my $text = EPrints::Utils::tree_to_utf8( $html_dom )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Accessing the DataObjs ==&lt;br /&gt;
&lt;br /&gt;
Every export plugin needs one of two functions.  In the case above, where data is extracted from every item and concatenated, output_dataobj needs to be defined.  This function will be run on ever dataobj in the list being exported.  See the example above.&lt;br /&gt;
&lt;br /&gt;
However, it may be the case that you need to do one of the following:&lt;br /&gt;
&lt;br /&gt;
*output a header&lt;br /&gt;
*count the number of records you're exporting&lt;br /&gt;
*aggregate data across records&lt;br /&gt;
&lt;br /&gt;
In this case, a output_list function needs to be created.  The example below is from the MultilineCSV export plugin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub output_list&lt;br /&gt;
{&lt;br /&gt;
        my( $plugin, %opts ) = @_;&lt;br /&gt;
&lt;br /&gt;
        my $part = csv( $plugin-&amp;gt;header_row( %opts ) );&lt;br /&gt;
&lt;br /&gt;
        my $r = [];&lt;br /&gt;
&lt;br /&gt;
        binmode( $opts{fh}, &amp;quot;:utf8&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
        if( defined $opts{fh} )&lt;br /&gt;
        {&lt;br /&gt;
                print {$opts{fh}} $part;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
                push @{$r}, $part;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        # list of things&lt;br /&gt;
&lt;br /&gt;
        $opts{list}-&amp;gt;map( sub {&lt;br /&gt;
                my( $session, $dataset, $item ) = @_;&lt;br /&gt;
&lt;br /&gt;
                my $part = $plugin-&amp;gt;output_dataobj( $item, %opts );&lt;br /&gt;
                if( defined $opts{fh} )&lt;br /&gt;
                {&lt;br /&gt;
                        print {$opts{fh}} $part;&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                        push @{$r}, $part;&lt;br /&gt;
                }&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        return if( defined $opts{fh} );&lt;br /&gt;
&lt;br /&gt;
        return join( '', @{$r} );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This function outputs a header row for the CSV file and then maps a function on to the list which simply calls the output_dataobj function on each item in the list.&lt;br /&gt;
&lt;br /&gt;
Mapping a function onto a list of objects is the correct way to process the dataobjs.&lt;br /&gt;
&lt;br /&gt;
== Accessing DataObj Metadata ==&lt;br /&gt;
&lt;br /&gt;
A number of functions exist to aid in accessing and rendering values in a dataobj.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
my $title = $dataobj-&amp;gt;value('title');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$title will now be a scalar containing the value stored in the title field of the dataobj.  A function is provided to enable testing first:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ($dataobj-&amp;gt;is_set('title'))&lt;br /&gt;
{&lt;br /&gt;
     $title = $dataobj-&amp;gt;value('title');&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is also possible to find out the fields that an item does have by querying the item's dataset:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
my $ds = $dataobj-&amp;gt;dataset;&lt;br /&gt;
my @fields = $ds-&amp;gt;fields;&lt;br /&gt;
my $fieldvalues;&lt;br /&gt;
foreach my $field (@fields)&lt;br /&gt;
{&lt;br /&gt;
     my $fieldname = $field-&amp;gt;name;&lt;br /&gt;
     if ($dataobj-&amp;gt;is_set($fieldname))&lt;br /&gt;
     {&lt;br /&gt;
          $fieldvalues{$fieldname} = $dataobj-&amp;gt;value($fieldname);&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The Structure of Values ==&lt;br /&gt;
&lt;br /&gt;
On an eprint, the title is generally a simple metadata field.  When $dataobj-&amp;gt;value is called, it returns a scalar value.&lt;br /&gt;
&lt;br /&gt;
EPrints has two types of metadata field:&lt;br /&gt;
&lt;br /&gt;
* Simple&lt;br /&gt;
* Compound&lt;br /&gt;
&lt;br /&gt;
Both types can either be a single or multiple values.  An example of a compound multiple field is the creators field:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
my $creators = $dataobj-&amp;gt;value('creators');&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
print Dumper $creators;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Data::Dumper is a very useful library that will output the Perl data structure.  In the above case, the output may look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$VAR1 = [&lt;br /&gt;
          {&lt;br /&gt;
            'name' =&amp;gt; {&lt;br /&gt;
                        'lineage' =&amp;gt; '',&lt;br /&gt;
                        'given' =&amp;gt; 'Noura',&lt;br /&gt;
                        'honourific' =&amp;gt; '',&lt;br /&gt;
                        'family' =&amp;gt; 'Abbas'&lt;br /&gt;
                      },&lt;br /&gt;
            'id' =&amp;gt; '10363'&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            'name' =&amp;gt; {&lt;br /&gt;
                        'lineage' =&amp;gt; '',&lt;br /&gt;
                        'given' =&amp;gt; 'Andrew',&lt;br /&gt;
                        'honourific' =&amp;gt; '',&lt;br /&gt;
                        'family' =&amp;gt; 'Gravell'&lt;br /&gt;
                      },&lt;br /&gt;
            'id' =&amp;gt; '22'&lt;br /&gt;
          },&lt;br /&gt;
          {&lt;br /&gt;
            'name' =&amp;gt; {&lt;br /&gt;
                        'lineage' =&amp;gt; '',&lt;br /&gt;
                        'given' =&amp;gt; 'Gary',&lt;br /&gt;
                        'honourific' =&amp;gt; '',&lt;br /&gt;
                        'family' =&amp;gt; 'Wills'&lt;br /&gt;
                      },&lt;br /&gt;
            'id' =&amp;gt; '395'&lt;br /&gt;
          }&lt;br /&gt;
        ];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above output shows an array of hashes.  The structure can be compared to the configuration of the creators field (see cfg/cfg.d/eprint_fields.pl):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
          {&lt;br /&gt;
            'name' =&amp;gt; 'creators',&lt;br /&gt;
            'type' =&amp;gt; 'compound',&lt;br /&gt;
            'multiple' =&amp;gt; 1,&lt;br /&gt;
            'fields' =&amp;gt; [&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'name',&lt;br /&gt;
                            'type' =&amp;gt; 'name',&lt;br /&gt;
                            'hide_honourific' =&amp;gt; 1,&lt;br /&gt;
                            'hide_lineage' =&amp;gt; 1,&lt;br /&gt;
                            'family_first' =&amp;gt; 1,&lt;br /&gt;
                          },&lt;br /&gt;
                          {&lt;br /&gt;
                            'sub_name' =&amp;gt; 'id',&lt;br /&gt;
                            'type' =&amp;gt; 'text',&lt;br /&gt;
                            'input_cols' =&amp;gt; 20,&lt;br /&gt;
                            'allow_null' =&amp;gt; 1,&lt;br /&gt;
                          }&lt;br /&gt;
                        ],&lt;br /&gt;
            'input_boxes' =&amp;gt; 4,&lt;br /&gt;
          },&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each element in the array consists of a hash that has a key for each sub field of the creator field.  Note the structure of the name part of the data dump.  The name datatype is also a hash.&lt;br /&gt;
&lt;br /&gt;
To summarise:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;Simple&lt;br /&gt;
&amp;lt;dd&amp;gt;Usually a scalar value (though some datatypes return a hashref&lt;br /&gt;
&amp;lt;dt&amp;gt;Compound&lt;br /&gt;
&amp;lt;dd&amp;gt;A hashref containing a simple value for each subfield&lt;br /&gt;
&amp;lt;dt&amp;gt;Multiple&lt;br /&gt;
&amp;lt;dd&amp;gt;An arrayref containing simple or compound metadata fields&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The perl 'ref' function can help you to identify the shape of your data.&lt;br /&gt;
&lt;br /&gt;
== Rendering a Field ==&lt;br /&gt;
&lt;br /&gt;
If you just want a sensible text value from a metadata field, the following will usually be enough:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
my $text = EPrints::Utils::tree_to_utf8( $dataobj-&amp;gt;render_value('creators') );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will call the default render method for the field, and convert the HTML DOM object to text.&lt;br /&gt;
&lt;br /&gt;
You can also render a subfield:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
my $text = EPrints::Utils::tree_to_utf8( $dataobj-&amp;gt;render_value('creators_name') );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Documents ==&lt;br /&gt;
&lt;br /&gt;
To get an array of all of the documents attached to an eprint:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
my @docs = $dataobj-&amp;gt;get_all_documents;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that documents are also first class objects, so document metadata fields can be accessed in the same way as eprint metadata fields.  In addition to the above, the following are useful for documents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  my $size = 'medium'; #could also be 'small' or 'preview'&lt;br /&gt;
  my $icon_url = $doc-&amp;gt;icon_url(size =&amp;gt; $size);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  my $download_url = $doc-&amp;gt;get_url;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And if you want to access the document on the local storage (though it's important not to modify it):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
my $path = $doc-&amp;gt;local_path&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
... though note that there may be more than one file in that directory (and documents contain files, which are also first class objects).&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=API:DataObj_101&amp;diff=11995</id>
		<title>API:DataObj 101</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=API:DataObj_101&amp;diff=11995"/>
		<updated>2016-06-03T13:35:24Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: correct Typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Accessing Metadata Fields]]&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=User:Alan.stiles@open.ac.uk&amp;diff=11992</id>
		<title>User:Alan.stiles@open.ac.uk</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=User:Alan.stiles@open.ac.uk&amp;diff=11992"/>
		<updated>2016-05-25T15:16:45Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Developer at The Open University focussing on EPrints development of [[http://oro.open.ac.uk &amp;quot;Open Research Online&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
25/05/2016: Current focus is on developing a plugin to enable communication between EPrints software and ORCID API to retrieve ORCID ids and synchronise publications and affiliation metadata.&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=User:Alan.stiles@open.ac.uk&amp;diff=11991</id>
		<title>User:Alan.stiles@open.ac.uk</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=User:Alan.stiles@open.ac.uk&amp;diff=11991"/>
		<updated>2016-05-25T15:16:33Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Developer at The Open University focussing on EPrints development of [[http://oro.open.ac.uk &amp;quot;Open Research Online&amp;quot;]]&lt;br /&gt;
25/05/2016: Current focus is on developing a plugin to enable communication between EPrints software and ORCID API to retrieve ORCID ids and synchronise publications and affiliation metadata.&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=ORCID&amp;diff=11990</id>
		<title>ORCID</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=ORCID&amp;diff=11990"/>
		<updated>2016-05-25T15:14:35Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: added information about current ORCID plugin development&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has been created to gather information about how different EPrints repositories have integrated ORCID.&lt;br /&gt;
At this time (April 2016) there doesn't seem to be a 'best practice' approach that has been adopted widely - this will hopefully change over time.&lt;br /&gt;
&lt;br /&gt;
If you are looking to retrieve publications from the ORCID service, the [http://bazaar.eprints.org/354/ Import from ORCID (Tier 1 API)] Bazaar package, or the [https://github.com/eprintsug/orcidt2 ORCID Tier 2 api framework] are good places to start.&lt;br /&gt;
&lt;br /&gt;
2016-05-20 [[User:Alan.stiles@open.ac.uk|Alan Stiles]] at The Open University is working on a plugin to connect EPrints with ORCID via the Tier 2 Members API to retrieve ORCID ids and synchronise publications and affiliation details.&lt;br /&gt;
&lt;br /&gt;
Some aspects that need to be considered when adopting ORCIDs, and making them available to other systems are:&lt;br /&gt;
&lt;br /&gt;
* storing the ORCID (see: http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier)&lt;br /&gt;
* rendering the ORCID in abstract pages (see [http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier link above])&lt;br /&gt;
* exposing ORCIDs over OAI-PMH metadata profiles e.g. RIOXX&lt;br /&gt;
&lt;br /&gt;
NB The examples below may refer to the 'creators' field - but the same approach could be used to extend other 'person' fields - e.g. contributors.&lt;br /&gt;
&lt;br /&gt;
= Re-using creators.id subfield =&lt;br /&gt;
&lt;br /&gt;
The creators.id field is labelled 'email' by default, but as it's an 'id' type field, it can be used to store ORCIDs.&lt;br /&gt;
To re-label the field, a simple addition to a phrase file in &amp;lt;code&amp;gt;archives/ARCHIVEID/cfg/lang/en/phrases/&amp;lt;/code&amp;gt; needs to be made:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;epp:phrase id=&amp;quot;eprint_fieldname_creators_id&amp;quot;&amp;gt;ORCID / Creators email (if known)&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rendering the ORCID in a citation ==&lt;br /&gt;
The rendering of this field then needs to be changed to accommodate an author with an ORCID. The following script adds methods that can be called via the EPScript language:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# add to e.g. ~/archives/ARCHIVEID/cfg/cfg.d/z_add_to_EPrints_Script_Compiled.pl&lt;br /&gt;
# Write into EPrints::Script::Compiled package to allow use of function in epscript&lt;br /&gt;
{&lt;br /&gt;
package EPrints::Script::Compiled;&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
sub run_wrro_people_with_orcids&lt;br /&gt;
{&lt;br /&gt;
  my( $self, $state, $value ) = @_;&lt;br /&gt;
&lt;br /&gt;
  my $session = $state-&amp;gt;{session};&lt;br /&gt;
  my $r = $state-&amp;gt;{session}-&amp;gt;make_doc_fragment;&lt;br /&gt;
&lt;br /&gt;
  my $creators = $value-&amp;gt;[0];&lt;br /&gt;
&lt;br /&gt;
  foreach my $i (0..$#$creators){&lt;br /&gt;
&lt;br /&gt;
    my $creator = @$creators[$i];&lt;br /&gt;
&lt;br /&gt;
    if( $i &amp;gt; 0 ){&lt;br /&gt;
      #not first item (or only one item)&lt;br /&gt;
      if( $i == $#$creators ){&lt;br /&gt;
        #last item&lt;br /&gt;
        $r-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot; and &amp;quot; ) );&lt;br /&gt;
      } else {&lt;br /&gt;
        $r-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;, &amp;quot; ) );&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    my $person_span = $session-&amp;gt;make_element( &amp;quot;span&amp;quot;, &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;person&amp;quot; );&lt;br /&gt;
    $person_span-&amp;gt;appendChild( $session-&amp;gt;render_name( $creator-&amp;gt;{name} ) );&lt;br /&gt;
&lt;br /&gt;
    my $id = $creator-&amp;gt;{id};&lt;br /&gt;
    if( defined $id &amp;amp;&amp;amp; $id =~ m/^(?:orcid.org\/)?(\d{4}\-\d{4}\-\d{4}\-\d{3}(?:\d|X))$/ )&lt;br /&gt;
    {&lt;br /&gt;
      my $orcid_span = $session-&amp;gt;make_element( &amp;quot;span&amp;quot;, &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;orcid&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
#   According to https://orcid.org/trademark-and-id-display-guidelines&lt;br /&gt;
#     &amp;quot;recommended display is a hyperlinked URI preceded by the iD icon&amp;quot;&lt;br /&gt;
#   This looks terrible in a citation. Removed for the time being.&lt;br /&gt;
#&lt;br /&gt;
#   my $orcid_link = $session-&amp;gt;make_element(&lt;br /&gt;
#     &amp;quot;a&amp;quot;,&lt;br /&gt;
#     &amp;quot;href&amp;quot; =&amp;gt; &amp;quot;http://orcid.org/&amp;quot;,&lt;br /&gt;
#     &amp;quot;target&amp;quot; =&amp;gt; &amp;quot;_blank&amp;quot;,&lt;br /&gt;
#     &amp;quot;class&amp;quot; =&amp;gt; &amp;quot;orcid-icon&amp;quot;&lt;br /&gt;
#   );&lt;br /&gt;
#   $orcid_link-&amp;gt;appendChild( $session-&amp;gt;make_element(&lt;br /&gt;
#     &amp;quot;img&amp;quot;,&lt;br /&gt;
#     &amp;quot;src&amp;quot; =&amp;gt; &amp;quot;/images/orcid_16x16.png&amp;quot;,&lt;br /&gt;
#     &amp;quot;title&amp;quot; =&amp;gt; &amp;quot;ORCID&amp;quot;&lt;br /&gt;
#   ) );&lt;br /&gt;
#   $orcid_span-&amp;gt;appendChild( $orcid_link );&lt;br /&gt;
&lt;br /&gt;
      my $link = $session-&amp;gt;make_element(&lt;br /&gt;
        &amp;quot;a&amp;quot;,&lt;br /&gt;
        &amp;quot;href&amp;quot; =&amp;gt; &amp;quot;http://orcid.org/$1&amp;quot;,&lt;br /&gt;
        &amp;quot;target&amp;quot; =&amp;gt; &amp;quot;_blank&amp;quot;,&lt;br /&gt;
      );&lt;br /&gt;
      $link-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;orcid.org/$1&amp;quot; ) );&lt;br /&gt;
&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;(&amp;quot; ) );&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $link );&lt;br /&gt;
      $orcid_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot;)&amp;quot; ) );&lt;br /&gt;
&lt;br /&gt;
      $person_span-&amp;gt;appendChild( $session-&amp;gt;make_text( &amp;quot; &amp;quot; ) );&lt;br /&gt;
      $person_span-&amp;gt;appendChild( $orcid_span );&lt;br /&gt;
    }&lt;br /&gt;
    $r-&amp;gt;appendChild( $person_span );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return [ $r, &amp;quot;XHTML&amp;quot; ];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
# END EPrints::Script::Compiled additions&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also want a bit of CSS to style ORCID links&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Add to e.g. ~/archives/ARCHIVEID/cfg/static/style/auto/zzz_orcid.css */&lt;br /&gt;
.person:hover {border-bottom: 1px dashed #a6ce39;}&lt;br /&gt;
.orcid {}&lt;br /&gt;
.orcid a:hover {&lt;br /&gt;
        color: #a6ce39;&lt;br /&gt;
}&lt;br /&gt;
.orcid-icon {}&lt;br /&gt;
.orcid-icon img { vertical-align: text-bottom; margin: 0 4px 0 2px; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And finally, you have to call the new EPScript function from a citation file e.g. &amp;lt;code&amp;gt;archives/ARCHIVEID/cfg/citations/eprint/default.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- replace reference to e.g. &amp;lt;print expr=&amp;quot;creators_name&amp;quot;/&amp;gt; with this: --&amp;gt;&lt;br /&gt;
    &amp;lt;print expr=&amp;quot;wrro_people_with_orcids(creators)&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exposing the ORCID in RIOXX ==&lt;br /&gt;
Based on re-using the creators.id field, this block of code over-writes the default &amp;lt;code&amp;gt;rioxx2_value_author&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# Add to e.g. ~/archives/ARCHIVEID/cfg/cfg.d/zzz_rioxx2_overwrites.pl&lt;br /&gt;
$c-&amp;gt;{rioxx2_value_author} = sub {&lt;br /&gt;
  my( $eprint ) = @_;&lt;br /&gt;
&lt;br /&gt;
  my @authors;&lt;br /&gt;
  for( @{ $eprint-&amp;gt;value( &amp;quot;creators&amp;quot; ) } )&lt;br /&gt;
  {&lt;br /&gt;
    my $id = $_-&amp;gt;{id};&lt;br /&gt;
    if( defined $id &amp;amp;&amp;amp; $id =~ m/^(?:orcid.org\/)?(\d{4}\-\d{4}\-\d{4}\-\d{3}(?:\d|X))$/ )&lt;br /&gt;
    {&lt;br /&gt;
      push @authors, {&lt;br /&gt;
        author =&amp;gt; EPrints::Utils::make_name_string( $_-&amp;gt;{name} ),&lt;br /&gt;
        id =&amp;gt; &amp;quot;http://orcid.org/$1&amp;quot;&lt;br /&gt;
      };&lt;br /&gt;
    } else {&lt;br /&gt;
      push @authors, {&lt;br /&gt;
        author =&amp;gt; EPrints::Utils::make_name_string( $_-&amp;gt;{name} ),&lt;br /&gt;
      };&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #NB If your corp_creators has DOIs or ISNIs for the entries, a similar method could be used to include these here.&lt;br /&gt;
  foreach my $corp ( @{ $eprint-&amp;gt;value( &amp;quot;corp_creators&amp;quot; ) } )&lt;br /&gt;
  {&lt;br /&gt;
    my $entry = {};&lt;br /&gt;
    $entry-&amp;gt;{name} = $corp;&lt;br /&gt;
    push @authors, { author =&amp;gt; $corp };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return \@authors;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Add additional identifiers to creators =&lt;br /&gt;
Another approach to storing ORCIDs is to add an additional sub-field to the creator field.&lt;br /&gt;
This has been discussed on the Eprints tech list. If you know how to do this, please document it here!&lt;br /&gt;
&lt;br /&gt;
This is how University of Bath has done it.  We're getting the ORCID data from another system, so have used a text field to capture it for display.  At present there is no special rendering on it, it's just displaying as a number.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	name =&amp;gt; 'creators',&lt;br /&gt;
	type =&amp;gt; 'compound',&lt;br /&gt;
	multiple =&amp;gt; 1,&lt;br /&gt;
	fields =&amp;gt; [&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'name',&lt;br /&gt;
			type =&amp;gt; 'name',&lt;br /&gt;
			hide_honourific =&amp;gt; 1,&lt;br /&gt;
			hide_lineage =&amp;gt; 1,&lt;br /&gt;
			family_first =&amp;gt; 1,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'id',&lt;br /&gt;
			type =&amp;gt; 'text',&lt;br /&gt;
			input_cols =&amp;gt; 20,&lt;br /&gt;
			allow_null =&amp;gt; 1,&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			sub_name =&amp;gt; 'orcid',&lt;br /&gt;
			type =&amp;gt; 'text',&lt;br /&gt;
			input_cols =&amp;gt; 20,&lt;br /&gt;
			allow_null =&amp;gt; 1,&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	],&lt;br /&gt;
	input_boxes =&amp;gt; 4,&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=User:Alan.stiles@open.ac.uk&amp;diff=11989</id>
		<title>User:Alan.stiles@open.ac.uk</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=User:Alan.stiles@open.ac.uk&amp;diff=11989"/>
		<updated>2016-05-25T15:08:37Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: Created page with &amp;quot;Developer at The Open University focussing on EPrints development of http://oro.open.ac.uk &amp;quot;Open Research Online&amp;quot;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Developer at The Open University focussing on EPrints development of [[http://oro.open.ac.uk &amp;quot;Open Research Online&amp;quot;]]&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Sending_user_messages&amp;diff=11986</id>
		<title>Sending user messages</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Sending_user_messages&amp;diff=11986"/>
		<updated>2016-05-17T15:18:30Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: added an eprints version section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Tested in EPrints versions ==&lt;br /&gt;
3.3.10 - 2016-05-17&lt;br /&gt;
&lt;br /&gt;
==Why==&lt;br /&gt;
When you execute a job asynchronously (e.g. as a timed event) you may wish to inform the user of the job's completion.  You may also wish to warn the user should something not be configured correctly or if the job failed.&lt;br /&gt;
This could either be achieved by sending the user an email (Assuming you have an email address) or by sending them a message within EPrints.&lt;br /&gt;
&lt;br /&gt;
There are 2 places I have encountered user messages thus far - within Plugin Screen actions and from a CGI script.  The method for each is similar but not the same.  Both require:&lt;br /&gt;
a type of message &lt;br /&gt;
  *message - informational/positive (default coloured green)&lt;br /&gt;
  *warning - alert to some non-critical issue (default coloured orange)&lt;br /&gt;
  *error - alert to something critical, like a communications error&lt;br /&gt;
&lt;br /&gt;
a message body, as a DOM object.  This could be via $self-&amp;gt;{repository}-&amp;gt;make_text(&amp;quot;Some Text&amp;quot;) or a call to a defined phrase within the repository.&lt;br /&gt;
&lt;br /&gt;
==Screen plugin action==&lt;br /&gt;
within a screen plugin action, you can send a message to the current user with via the screen processor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub action_screen_action&lt;br /&gt;
{&lt;br /&gt;
  my ( $self ) = @_;&lt;br /&gt;
  $self-&amp;gt;{processor}-&amp;gt;add_message(&lt;br /&gt;
            &amp;quot;error&amp;quot;,   #message type - one of 'message', 'warning' or 'error'&lt;br /&gt;
            $self-&amp;gt;{repository}-&amp;gt;make_text(&amp;quot;No EPrint found with ID: $eprint_id&amp;quot;),   # the body of the message as a DOM object&lt;br /&gt;
  );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CGI Script (and other non-screen functions)==&lt;br /&gt;
From a CGI script, you can send a message to a user via the repository object, as such you need to specify the user, which need not be the current user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
  my $repository = new EPrints::Session;&lt;br /&gt;
  my $db = $repository-&amp;gt;database;&lt;br /&gt;
  my $current_user = $repository-&amp;gt;current_user();&lt;br /&gt;
  $db-&amp;gt;save_user_message(&lt;br /&gt;
            $current_user-&amp;gt;get_value( &amp;quot;userid&amp;quot; ),   #Userid to receive the message&lt;br /&gt;
            &amp;quot;message&amp;quot;,                              #Message type&lt;br /&gt;
            $repo-&amp;gt;html_phrase(&amp;quot;some_phrase_identifier&amp;quot;, (              #the message body, in this instance a phrase identifier&lt;br /&gt;
                        &amp;quot;name&amp;quot; =&amp;gt; $current_user-&amp;gt;render_value( &amp;quot;name&amp;quot; ) # pin name/value pairs as required for the phrase;&lt;br /&gt;
                        )&lt;br /&gt;
            )&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Snippets]]&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Sending_user_messages&amp;diff=11985</id>
		<title>Sending user messages</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Sending_user_messages&amp;diff=11985"/>
		<updated>2016-05-17T15:14:36Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: Created page with &amp;quot;==Why== When you execute a job asynchronously (e.g. as a timed event) you may wish to inform the user of the job's completion.  You may also wish to warn the user should somet...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Why==&lt;br /&gt;
When you execute a job asynchronously (e.g. as a timed event) you may wish to inform the user of the job's completion.  You may also wish to warn the user should something not be configured correctly or if the job failed.&lt;br /&gt;
This could either be achieved by sending the user an email (Assuming you have an email address) or by sending them a message within EPrints.&lt;br /&gt;
&lt;br /&gt;
There are 2 places I have encountered user messages thus far - within Plugin Screen actions and from a CGI script.  The method for each is similar but not the same.  Both require:&lt;br /&gt;
a type of message &lt;br /&gt;
  *message - informational/positive (default coloured green)&lt;br /&gt;
  *warning - alert to some non-critical issue (default coloured orange)&lt;br /&gt;
  *error - alert to something critical, like a communications error&lt;br /&gt;
&lt;br /&gt;
a message body, as a DOM object.  This could be via $self-&amp;gt;{repository}-&amp;gt;make_text(&amp;quot;Some Text&amp;quot;) or a call to a defined phrase within the repository.&lt;br /&gt;
&lt;br /&gt;
==Screen plugin action==&lt;br /&gt;
within a screen plugin action, you can send a message to the current user with via the screen processor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub action_screen_action&lt;br /&gt;
{&lt;br /&gt;
  my ( $self ) = @_;&lt;br /&gt;
  $self-&amp;gt;{processor}-&amp;gt;add_message(&lt;br /&gt;
            &amp;quot;error&amp;quot;,   #message type - one of 'message', 'warning' or 'error'&lt;br /&gt;
            $self-&amp;gt;{repository}-&amp;gt;make_text(&amp;quot;No EPrint found with ID: $eprint_id&amp;quot;),   # the body of the message as a DOM object&lt;br /&gt;
  );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CGI Script (and other non-screen functions)==&lt;br /&gt;
From a CGI script, you can send a message to a user via the repository object, as such you need to specify the user, which need not be the current user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
  my $repository = new EPrints::Session;&lt;br /&gt;
  my $db = $repository-&amp;gt;database;&lt;br /&gt;
  my $current_user = $repository-&amp;gt;current_user();&lt;br /&gt;
  $db-&amp;gt;save_user_message(&lt;br /&gt;
            $current_user-&amp;gt;get_value( &amp;quot;userid&amp;quot; ),   #Userid to receive the message&lt;br /&gt;
            &amp;quot;message&amp;quot;,                              #Message type&lt;br /&gt;
            $repo-&amp;gt;html_phrase(&amp;quot;some_phrase_identifier&amp;quot;, (              #the message body, in this instance a phrase identifier&lt;br /&gt;
                        &amp;quot;name&amp;quot; =&amp;gt; $current_user-&amp;gt;render_value( &amp;quot;name&amp;quot; ) # pin name/value pairs as required for the phrase;&lt;br /&gt;
                        )&lt;br /&gt;
            )&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Snippets]]&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Community_Developments&amp;diff=11984</id>
		<title>Community Developments</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Community_Developments&amp;diff=11984"/>
		<updated>2016-05-13T13:45:41Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''-=XXX This page needs tidying and templating XXX=-'''&lt;br /&gt;
&lt;br /&gt;
List here the details of any developments you are currently working on, and whether they might be more widely shared by the community (e.g. a plugin) to try and reduce duplication of effort.&lt;br /&gt;
&lt;br /&gt;
If you have ideas for things to be developed, add them to the [[wishlist]]&lt;br /&gt;
&lt;br /&gt;
*[[ORCID connector]] - obtain ORCIDs and authorisation codes to allow update of publications lists on ORCID system. Should ultimately be a bazaar plugin - Alan Stiles, Open University&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Wishlist&amp;diff=11983</id>
		<title>Wishlist</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Wishlist&amp;diff=11983"/>
		<updated>2016-05-13T13:43:03Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: Created page with &amp;quot;(just an e.g. for the page)  * It would be great if we could have a common standard for funders details - EPrints User Group discussion 13 May 2016&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;(just an e.g. for the page)&lt;br /&gt;
&lt;br /&gt;
* It would be great if we could have a common standard for funders details - EPrints User Group discussion 13 May 2016&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Community_Developments&amp;diff=11982</id>
		<title>Community Developments</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Community_Developments&amp;diff=11982"/>
		<updated>2016-05-13T13:40:31Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List here the details of any developments you are currently working on, and whether they might be more widely shared by the community (e.g. a plugin) to try and reduce duplication of effort.&lt;br /&gt;
&lt;br /&gt;
If you have ideas for things to be developed, add them to the [[wishlist]]&lt;br /&gt;
&lt;br /&gt;
*ORCID connector - obtain ORCIDs and authorisation codes to allow update of publications lists on ORCID system. Should ultimately be a bazaar plugin - Alan Stiles, Open University&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Community_Developments&amp;diff=11981</id>
		<title>Community Developments</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Community_Developments&amp;diff=11981"/>
		<updated>2016-05-13T13:38:34Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: Created page with &amp;quot;List here the details of any developments you are currently working on, and whether they might be more widely shared by the community (e.g. a plugin) to try and reduce duplica...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List here the details of any developments you are currently working on, and whether they might be more widely shared by the community (e.g. a plugin) to try and reduce duplication of effort.&lt;br /&gt;
&lt;br /&gt;
If you have ideas for things to be developed, add them to the wishlist (create a link and page)&lt;br /&gt;
&lt;br /&gt;
*ORCID connector - obtain ORCIDs and authorisation codes to allow update of publications lists on ORCID system. Should ultimately be a bazaar plugin - Alan Stiles, Open University&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=How_to_make_a_Screen_perform_Actions&amp;diff=11980</id>
		<title>How to make a Screen perform Actions</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=How_to_make_a_Screen_perform_Actions&amp;diff=11980"/>
		<updated>2016-05-11T09:06:06Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* Where to go after the action completes */   Added details about redirecting to an absolute url and changed pre tags to source tags on this section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Howto]][[Category:Plugins]]&lt;br /&gt;
&lt;br /&gt;
 Works in EPrints 3.2+&lt;br /&gt;
&lt;br /&gt;
Please read the page on [[How_to_make_a_Screen_for_the_Admin_Section]] as this extends that information.&lt;br /&gt;
&lt;br /&gt;
 NOTE: in this page, $s is the ''session'' or ''repository'' object, and $f is the (x)html DOM fragment&lt;br /&gt;
&lt;br /&gt;
The action buttons are the functionality that make the work... well, flow.&lt;br /&gt;
&lt;br /&gt;
You need to define the &amp;quot;screen&amp;quot; (perl package) that contains the actions, and what the actions are.&lt;br /&gt;
&lt;br /&gt;
===What's happening===&lt;br /&gt;
&lt;br /&gt;
The process has four parts:&lt;br /&gt;
# Register the ''actions'' with the EPrints system&lt;br /&gt;
# Some ''action'' buttons&lt;br /&gt;
# Some ''action'' routines&lt;br /&gt;
## A ''allow'' routine&lt;br /&gt;
## An ''action'' routine&lt;br /&gt;
### These routines could all be contained in the one package&lt;br /&gt;
### These routines could be spread out over several packages&lt;br /&gt;
# Where to go after the ''action'' completes&lt;br /&gt;
&lt;br /&gt;
===Getting actions recognised===&lt;br /&gt;
Before a Screen will even consider processing an action, it need to register those actions with the system. This is defined in &amp;lt;code&amp;gt;$self-&amp;gt;{actions}&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;new&amp;lt;/code&amp;gt; method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub new {&lt;br /&gt;
  my ( $class, %params ) = @_;&lt;br /&gt;
&lt;br /&gt;
  my $self = $class-&amp;gt;SUPER::new(%params);&lt;br /&gt;
&lt;br /&gt;
  $self-&amp;gt;{actions}&lt;br /&gt;
      = [qw/new edit cancel view netunlink netlink repounlink repolink/];&lt;br /&gt;
&lt;br /&gt;
  $self-&amp;gt;{appears} = .....&lt;br /&gt;
&lt;br /&gt;
  ## any other code.....&lt;br /&gt;
 &lt;br /&gt;
  return $self;&lt;br /&gt;
} ## end sub new&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that the terms listed in the &amp;lt;code&amp;gt;$self-&amp;gt;{actions}&amp;lt;/code&amp;gt; array are the same terms as keys in the action buttons.&lt;br /&gt;
&lt;br /&gt;
===Making the buttons===&lt;br /&gt;
The Buttons are the form submit buttons, the things that make the work flow to the next stage.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;$s-&amp;gt;render_action_buttons&amp;lt;/code&amp;gt; function takes a hash, which describes the set of buttons to display:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    my %buttons = (&lt;br /&gt;
		    cancel   =&amp;gt; $self-&amp;gt;phrase( &amp;quot;action:cancel:title&amp;quot; ), # Is defined as &amp;quot;Cancel&amp;quot;&lt;br /&gt;
                    update   =&amp;gt; $self-&amp;gt;phrase( &amp;quot;action:update:title&amp;quot; ), # Is defined as &amp;quot;Update&amp;quot;&lt;br /&gt;
                    _order   =&amp;gt; [ &amp;quot;update&amp;quot;, &amp;quot;cancel&amp;quot; ],&lt;br /&gt;
                    _class   =&amp;gt; &amp;quot;ep_form_button_bar&amp;quot;&lt;br /&gt;
	          );&lt;br /&gt;
    $f-&amp;gt;appendChild( $s-&amp;gt;render_action_buttons( %buttons ) );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;cancel   =&amp;gt; $self-&amp;gt;phrase( &amp;quot;action:cancel:title&amp;quot; )&amp;lt;/code&amp;gt; describe one action button: the internal name for the action and the text to be used for that button. You may have any number of buttons.&lt;br /&gt;
*&amp;lt;code&amp;gt;_order&amp;lt;/code&amp;gt; is a reference to a list defining the order for the buttons. With nothing defined, the order will be random.&lt;br /&gt;
*&amp;lt;code&amp;gt;_class&amp;lt;/code&amp;gt; defines the css class to give to the div that contains the buttons.&lt;br /&gt;
&lt;br /&gt;
The above code would produce the following (x)html:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;ep_form_button_bar&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;input type=&amp;quot;submit&amp;quot; class=&amp;quot;ep_form_action_button&amp;quot;&lt;br /&gt;
        onclick=&amp;quot;return EPJS_button_pushed( '_action_update' )&amp;quot;&lt;br /&gt;
        name=&amp;quot;_action_update&amp;quot; value=&amp;quot;Update&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;input type=&amp;quot;submit&amp;quot; class=&amp;quot;ep_form_action_button&amp;quot;&lt;br /&gt;
        onclick=&amp;quot;return EPJS_button_pushed( '_action_cancel' )&amp;quot;&lt;br /&gt;
        name=&amp;quot;_action_cancel&amp;quot; value=&amp;quot;Cancel&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Where the actions are processed===&lt;br /&gt;
The actions are processed in a &amp;quot;Screen&amp;quot;, a perl package.&lt;br /&gt;
The form being submitted therefor needs to contain a reference to that package:&lt;br /&gt;
&lt;br /&gt;
    $f-&amp;gt;appendChild( $s-&amp;gt;render_hidden_field( &amp;quot;screen&amp;quot;, &amp;quot;Orgs&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
This would call the package &amp;lt;code&amp;gt;EPrints::Plugin::Screen::Orgs&amp;lt;/code&amp;gt;, and try to process the selected action in there&lt;br /&gt;
&lt;br /&gt;
(Yes, this means that one can have the same action in multiple Screens, as well as multiple action in the same Screen)&lt;br /&gt;
&lt;br /&gt;
===Processing the actions===&lt;br /&gt;
The EPrints processor system calls a specified action in a named package (as detailed above)&lt;br /&gt;
&lt;br /&gt;
For each possible action, two functions needed: &amp;lt;code&amp;gt;allow_''action''&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;action_''action''&amp;lt;/code&amp;gt;... where ''action'' is the key given in the buttons hash above.&lt;br /&gt;
&lt;br /&gt;
====The ''allow'' test====&lt;br /&gt;
The EPrints processor will always test to see if the user is permitted to perform an action.&lt;br /&gt;
A &amp;quot;True&amp;quot; return will permit the action. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub allow_cancel &lt;br /&gt;
{&lt;br /&gt;
   return 1; # everyone can do this &amp;quot;cancel&amp;quot; action&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub allow_update&lt;br /&gt;
{&lt;br /&gt;
    my( $self ) = @_;&lt;br /&gt;
    return $self-&amp;gt;can_edit; # Only users who have &amp;quot;can_edit&amp;quot; permissions can do this &amp;quot;update&amp;quot; action&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====The actual ''action'' routines====&lt;br /&gt;
Assuming that the user is permitted to do the action, then EPrints processor will call the appropriate action routine:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sub action_cancel&lt;br /&gt;
{&lt;br /&gt;
    my( $self ) = @_;&lt;br /&gt;
&lt;br /&gt;
    # Do stuff&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Getting the parameters====&lt;br /&gt;
The parameters are collected from the session:&lt;br /&gt;
&lt;br /&gt;
  my $oname = $self-&amp;gt;{session}-&amp;gt;param( 'oarj_oname' );&lt;br /&gt;
&lt;br /&gt;
One could be a bit more conservative:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  my %params;&lt;br /&gt;
&lt;br /&gt;
  # Have we got any parameters (should be a yes, actions are set in parameters)&lt;br /&gt;
  if ($self-&amp;gt;{session}-&amp;gt;have_parameters)&lt;br /&gt;
  {&lt;br /&gt;
&lt;br /&gt;
     # Get a list of all the parameters passed in&lt;br /&gt;
     my @param_list = $self-&amp;gt;{session}-&amp;gt;param;&lt;br /&gt;
&lt;br /&gt;
     # build up a hash of all the parameters&lt;br /&gt;
     foreach my $p (@param_list) {&lt;br /&gt;
        $params{$p} = $self-&amp;gt;{session}-&amp;gt;param( $p );&lt;br /&gt;
     }&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.... of course one would assume that, having written the action handler, you know what parameters to expect, and can just ask for them directly!&lt;br /&gt;
&lt;br /&gt;
===Where to go after the action completes===&lt;br /&gt;
By default, the EPrints processor will then render whatever's in the render routine for the package that the action routines are in.&lt;br /&gt;
If you want the EPrints processor to use a different package to render something to the page, then:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub action_cancel&lt;br /&gt;
{&lt;br /&gt;
    my( $self ) = @_;&lt;br /&gt;
&lt;br /&gt;
    # Do stuff&lt;br /&gt;
    $self-&amp;gt;{processor}-&amp;gt;{screenid} = &amp;quot;My::Package&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
will call the &amp;lt;code&amp;gt;render&amp;lt;/code&amp;gt; routine in the package &amp;lt;code&amp;gt;EPrints::Plugin::Screen::My::Package&amp;lt;/code&amp;gt; whilst:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub action_cancel&lt;br /&gt;
{&lt;br /&gt;
    my( $self ) = @_;&lt;br /&gt;
&lt;br /&gt;
    # Do stuff&lt;br /&gt;
    $self-&amp;gt;{processor}-&amp;gt;{redirect} = &amp;quot;http://wiki.eprints.org&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
will redirect the page to the url specified (in this case to the wiki homepage)&lt;br /&gt;
&lt;br /&gt;
Return to the main [[Screen_Plugins]] page.&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=API:EPrints/DataObj/Subject&amp;diff=11938</id>
		<title>API:EPrints/DataObj/Subject</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=API:EPrints/DataObj/Subject&amp;diff=11938"/>
		<updated>2016-01-06T14:59:08Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* DESCRIPTION */  typo correction&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Pod2Wiki=_preamble_ &lt;br /&gt;
This page has been automatically generated from the EPrints 3.2 source. Any wiki changes made between the 'Pod2Wiki=*' and 'Edit below this comment' comments will be lost.&lt;br /&gt;
 --&amp;gt;{{API}}{{Pod2Wiki}}{{API:Source|file=perl_lib/EPrints/DataObj/Subject.pm|package_name=EPrints::DataObj::Subject}}[[Category:API|SUBJECT]][[Category:API:EPrints/DataObj|SUBJECT]][[Category:API:EPrints/DataObj/Subject|SUBJECT]]&amp;lt;div&amp;gt;&amp;lt;!-- Edit below this comment --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Pod2Wiki=_private_ --&amp;gt;&amp;lt;!-- Pod2Wiki=head_name --&amp;gt;&lt;br /&gt;
==NAME==&lt;br /&gt;
'''EPrints::DataObj::Subject''' - Class and methods relating to the subejcts tree.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Edit below this comment --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Pod2Wiki= --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Pod2Wiki=head_description --&amp;gt;&lt;br /&gt;
==DESCRIPTION==&lt;br /&gt;
This class represents a single node in the subejcts tree. It also contains a number of methods for handling the entire tree.&lt;br /&gt;
&lt;br /&gt;
EPrints::DataObj::Subject is a subclass of EPrints::DataObj&lt;br /&gt;
&lt;br /&gt;
* $thing = EPrints::DataObj::Subject-&amp;amp;gt;get_system_field_info&lt;br /&gt;
: Return an array describing the system metadata of the Subject dataset.&lt;br /&gt;
&lt;br /&gt;
* $subject = EPrints::DataObj::Subject-&amp;amp;gt;new( $session, $subjectid )&lt;br /&gt;
: Create a new subject object given the id of the subject. The values for the subject are loaded from the database.&lt;br /&gt;
&lt;br /&gt;
* $subject = EPrints::DataObj::Subject-&amp;amp;gt;new_from_data( $session, $data )&lt;br /&gt;
: Construct a new subject object from a hash reference containing the relevant fields. Generally this method is only used to construct new Subjects coming out of the database.&lt;br /&gt;
&lt;br /&gt;
* $success = $subject-&amp;amp;gt;commit( [$force] )&lt;br /&gt;
: Commit this subject to the database, but only if any fields have  changed since we loaded it.&lt;br /&gt;
&lt;br /&gt;
: If $force is set then always commit, even if there appear to be no changes.&lt;br /&gt;
&lt;br /&gt;
* $success = $subject-&amp;amp;gt;remove&lt;br /&gt;
: Remove this subject from the database.&lt;br /&gt;
&lt;br /&gt;
* $dataset = EPrints::DataObj::Subject-&amp;amp;gt;get_dataset_id&lt;br /&gt;
: Returns the id of the [[API:EPrints/DataSet|EPrints::DataSet]] object to which this record belongs.&lt;br /&gt;
&lt;br /&gt;
* EPrints::DataObj::Subject::remove_all( $session )&lt;br /&gt;
: Static function.&lt;br /&gt;
&lt;br /&gt;
: Remove all subjects from the database. Use with care!&lt;br /&gt;
&lt;br /&gt;
* $subject = $subject-&amp;amp;gt;top()&lt;br /&gt;
: Returns the subject that is at the top of this subject's tree (which may be this subject).&lt;br /&gt;
&lt;br /&gt;
: Returns undef if the subject is not part of a tree.&lt;br /&gt;
&lt;br /&gt;
* $child_subject = $subject-&amp;amp;gt;create_child( $id, $name, $depositable )&lt;br /&gt;
: Similar to EPrints::DataObj::Subject::create, but this creates the new subject as a child of the current subject.&lt;br /&gt;
&lt;br /&gt;
* @children = $subject-&amp;amp;gt;get_children&lt;br /&gt;
: Return a list of EPrints::DataObj::Subject objects which are direct children of the current subject.&lt;br /&gt;
&lt;br /&gt;
* @parents = $subject-&amp;amp;gt;get_parents&lt;br /&gt;
: Return a list of EPrints::DataObj::Subject objects which are direct parents of the current subject.&lt;br /&gt;
&lt;br /&gt;
* $boolean = $subject-&amp;amp;gt;can_post( [$user] )&lt;br /&gt;
: Determines whether the given user can post in this subject.&lt;br /&gt;
&lt;br /&gt;
: Currently there is no way to configure subjects for certain users, so this just returns the true or false depending on the &amp;quot;depositable&amp;quot; flag.&lt;br /&gt;
&lt;br /&gt;
* $xhtml = $subject-&amp;amp;gt;render_with_path( $session, $topsubjid )&lt;br /&gt;
: Return the name of this subject including it's path from $topsubjid.&lt;br /&gt;
&lt;br /&gt;
: $topsubjid must be an ancestor of this subject.&lt;br /&gt;
&lt;br /&gt;
: eg. &lt;br /&gt;
&lt;br /&gt;
: Library of Congress &amp;amp;gt; B Somthing &amp;amp;gt; BC Somthing more Detailed&lt;br /&gt;
&lt;br /&gt;
* @paths = $subject-&amp;amp;gt;get_paths( $session, $topsubjid )&lt;br /&gt;
: This function returns all the paths from this subject back up to the specified top subject.&lt;br /&gt;
&lt;br /&gt;
: @paths is an array of array references. Each of the inner arrays is a list of subject id's describing a path down the tree from $topsubjid to $session.&lt;br /&gt;
&lt;br /&gt;
* $subject_pairs = $subject-&amp;amp;gt;get_subjects ( [$postable_only], [$show_top_level], [$nes_tids], [$no_nest_label] )&lt;br /&gt;
: Return a reference to an array. Each item in the array is a two  element list. &lt;br /&gt;
&lt;br /&gt;
: The first element in the list is an identifier string. &lt;br /&gt;
&lt;br /&gt;
: The second element is a utf-8 string describing the subject (in the  current language), including all the items above it in the tree, but only as high as this subject.&lt;br /&gt;
&lt;br /&gt;
: The subjects which are returned are this item and all its children,  and childrens children etc. The order is it returns  this subject, then the first child of this subject, then children of  that (recursively), then the second child of this subject etc.&lt;br /&gt;
&lt;br /&gt;
: If $postable_only is true then filter the results to only contain  subjects which have the &amp;quot;depositable&amp;quot; flag set to true.&lt;br /&gt;
&lt;br /&gt;
: If $show_top_level is not true then the pair representing the current subject is not included at the start of the list.&lt;br /&gt;
&lt;br /&gt;
: If $nest_ids is true then each then the ids retured are nested so that the ids of the children of this subject are prefixed with this  subjects id and a colon, and their children are prefixed by their  nested id and a colon. eg. L:LC:LC003 rather than just &amp;quot;LC003&amp;quot;&lt;br /&gt;
&lt;br /&gt;
: if $no_nest_label is true then the subject label only contains the name of the subject, not the higher level ones.&lt;br /&gt;
&lt;br /&gt;
: A default result from this method would look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;  [&lt;br /&gt;
    [ &amp;quot;D&amp;quot;, &amp;quot;History&amp;quot; ],&lt;br /&gt;
    [ &amp;quot;D1&amp;quot;, &amp;quot;History: History (General)&amp;quot; ],&lt;br /&gt;
    [ &amp;quot;D111&amp;quot;, &amp;quot;History: History (General): Medieval History&amp;quot; ]&lt;br /&gt;
 ]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ( $subject_map, $reverse_map ) = EPrints::DataObj::Subject::get_all( $session )&lt;br /&gt;
: Get all the subjects for the current archvive of $session.&lt;br /&gt;
&lt;br /&gt;
: $subject_map is a reference to a hash. The keys of the hash are the id's of the subjects. The values of the hash are the  EPrint::Subject object relating to that id.&lt;br /&gt;
&lt;br /&gt;
: $reverse_map is a reference to a hash. Each key is the id of a subject. Each value is a reference to an array. The array contains a EPrints::DataObj::Subject objects, one for each child of the subject  with the id. The array is sorted by the labels for the subjects, in the current language.&lt;br /&gt;
&lt;br /&gt;
* $count = $subject-&amp;amp;gt;count_eprints( $dataset )&lt;br /&gt;
: Return the number of eprints in the dataset which are in this subject or one of its decendants. Search all fields of type subject.&lt;br /&gt;
&lt;br /&gt;
* $boolean = EPrints::DataObj::Subject::valid_id( $id )&lt;br /&gt;
: Return true if the string is an acceptable identifier for a subject.&lt;br /&gt;
&lt;br /&gt;
: This does not check all possible illegal values, yet.&lt;br /&gt;
&lt;br /&gt;
* $subj-&amp;amp;gt;render()&lt;br /&gt;
: undocumented&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Edit below this comment --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Pod2Wiki= --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Pod2Wiki=head_copyright --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==COPYRIGHT==&lt;br /&gt;
Copyright 2000-2011 University of Southampton.&lt;br /&gt;
&lt;br /&gt;
This file is part of EPrints http://www.eprints.org/.&lt;br /&gt;
&lt;br /&gt;
EPrints is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.&lt;br /&gt;
&lt;br /&gt;
EPrints is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.&lt;br /&gt;
&lt;br /&gt;
You should have received a copy of the GNU Lesser General Public License along with EPrints.  If not, see http://www.gnu.org/licenses/.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Edit below this comment --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Pod2Wiki= --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Pod2Wiki=_postamble_ --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Edit below this comment --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Training_Video:Browse_View_configuration&amp;diff=11898</id>
		<title>Training Video:Browse View configuration</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Training_Video:Browse_View_configuration&amp;diff=11898"/>
		<updated>2015-11-27T11:32:05Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: Added text to intro and what you need to know / will learn.  Added test Yourself and More Reading options&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Howto]]&lt;br /&gt;
[[Category:Training_Video|Browse View Configuration]]&lt;br /&gt;
[[Category:Documentation_Needed]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This video explains what the browse views are, how they are defined and how to define new views. It shows best practice ways to modify the default configuration and how to use the command line administration tools to optimise the performance of your server in creating and updating views.&lt;br /&gt;
&lt;br /&gt;
==What You Will Learn==&lt;br /&gt;
&lt;br /&gt;
* What a browse view is&lt;br /&gt;
* What are 'menu' and 'list' views&lt;br /&gt;
* How to create a new view&lt;br /&gt;
* How to change the way menu and lists views are rendered&lt;br /&gt;
* How to amend the default configuration without changing the existing config files&lt;br /&gt;
* How to regenerate the views via the admin interface, the command line and via scheduled tasks&lt;br /&gt;
&lt;br /&gt;
==What You Should Already Know==&lt;br /&gt;
&lt;br /&gt;
* Familiarity with the EPrints admin interface&lt;br /&gt;
* A basic understanding of PERL and how EPrints uses it&lt;br /&gt;
* Basic idea of how eprints uses configuration files&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
Each resource on this page (video, document, block of wiki text) should have a similar format to the Video section below.&lt;br /&gt;
&lt;br /&gt;
=== Video===&lt;br /&gt;
The Video can be found at [http://youtu.be/Ap_u7_MCnhI http://youtu.be/Ap_u7_MCnhI].&lt;br /&gt;
====Index====&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=0m00s 0:00 - What is a browse view]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=0m50s 0:50 - .include files (unbranded lists)]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=1m20s 1:20 - columns and pages on browse menus]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=1m50s 1:50 - configuration file overview (from front end)]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=2m50s 2:50 - multiple-menu views]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=3m30s 3:30 - value ranges on menus]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=4m24s 4:24 - variations on lists]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=4m47s 4:47 - hideempty]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=5m43s 5:43 - regenerating browse views]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=8m08s 8:08 - reloading the configuration]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=9m11s 9:11 - create new browse view (on the command line)]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=13m27s 13:27 - controlling columns on menus]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=13m48s 13:48 - reloading the configuration and refreshing the views (on the command line)]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=15m59s 15:59 - change rendering of browse list]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=16m20s 16:20 - creating render function]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=18m30s 18:30 - creating a DOM object]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=19m42s 19:42 - rendering an eprint with a custom citation style]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=20m30s 20:30 - generating just one view]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=21m35s 21:35 - running epadmin test]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=22m55s 22:55 - example of custom rendered browse view]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=24m13s 24:13 - set citation style on a view list]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=24m44s 24:44 - creating a citation style]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=26m50s 26:50 - optimising browse view generation]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=27m37s 27:37 - increasing the browse view timeout]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=28m08s 28:08 - max items parameter]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=28m40s 28:40 - finding documentation on the EPrints wiki]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=30m05s 30:05 - setting max_list_age and max_menu_age (witout modifying default configuration files)]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=32m10s 32:10 - modifying existing configuration with a loop]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=35m38s 35:38 - confirming properties are set]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=37m35s 37:35 - nightly generation of single browse views]&lt;br /&gt;
&lt;br /&gt;
==== The Video====&lt;br /&gt;
&amp;lt;youtube&amp;gt;Ap_u7_MCnhI&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Notes, Errata and Additional Information====&lt;br /&gt;
&lt;br /&gt;
Any notes, version information, errata, etc concerned with this video&lt;br /&gt;
&lt;br /&gt;
* EPrints 3.3.14&lt;br /&gt;
&lt;br /&gt;
==Test Yourself==&lt;br /&gt;
&lt;br /&gt;
* Create a new view to show items by publication in 2 columns&lt;br /&gt;
* Modify this view to show 3 columns&lt;br /&gt;
* Create a render function to add some simple text to the list items&lt;br /&gt;
* Modify the function to add the eprintid field to the list items &lt;br /&gt;
&lt;br /&gt;
==More Reading==&lt;br /&gt;
&lt;br /&gt;
* [[Adding_new_views | Adding New Views]]&lt;br /&gt;
* [[Views.pl | The default views configuration ]]&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Training_Video:Browse_View_configuration&amp;diff=11897</id>
		<title>Training Video:Browse View configuration</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Training_Video:Browse_View_configuration&amp;diff=11897"/>
		<updated>2015-11-27T10:56:38Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Howto]]&lt;br /&gt;
[[Category:Training_Video|Browse View Configuration]]&lt;br /&gt;
[[Category:Documentation_Needed]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
In this video you will learn what browse views are, how to create a new browse view, how to regenerate the views and how to change the way views are displayed.&lt;br /&gt;
&lt;br /&gt;
==What You Will Learn==&lt;br /&gt;
&lt;br /&gt;
* Learning Objective 1&lt;br /&gt;
* Learning Objective 2&lt;br /&gt;
* Learning Objective 3&lt;br /&gt;
&lt;br /&gt;
==What You Should Already Know==&lt;br /&gt;
&lt;br /&gt;
* Prerequisite 1 with links if appropriate&lt;br /&gt;
* Prerequisite 2 with links if appropriate&lt;br /&gt;
* Prerequisite 3 with links if appropriate&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
Each resource on this page (video, document, block of wiki text) should have a similar format to the Video section below.&lt;br /&gt;
&lt;br /&gt;
=== Video===&lt;br /&gt;
The Video can be found at [http://youtu.be/Ap_u7_MCnhI http://youtu.be/Ap_u7_MCnhI].&lt;br /&gt;
====Index====&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=0m00s 0:00 - What is a browse view]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=0m50s 0:50 - .include files (unbranded lists)]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=1m20s 1:20 - columns and pages on browse menus]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=1m50s 1:50 - configuration file overview (from front end)]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=2m50s 2:50 - multiple-menu views]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=3m30s 3:30 - value ranges on menus]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=4m24s 4:24 - variations on lists]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=4m47s 4:47 - hideempty]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=5m43s 5:43 - regenerating browse views]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=8m08s 8:08 - reloading the configuration]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=9m11s 9:11 - create new browse view (on the command line)]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=13m27s 13:27 - controlling columns on menus]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=13m48s 13:48 - reloading the configuration and refreshing the views (on the command line)]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=15m59s 15:59 - change rendering of browse list]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=16m20s 16:20 - creating render function]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=18m30s 18:30 - creating a DOM object]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=19m42s 19:42 - rendering an eprint with a custom citation style]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=20m30s 20:30 - generating just one view]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=21m35s 21:35 - running epadmin test]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=22m55s 22:55 - example of custom rendered browse view]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=24m13s 24:13 - set citation style on a view list]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=24m44s 24:44 - creating a citation style]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=26m50s 26:50 - optimising browse view generation]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=27m37s 27:37 - increasing the browse view timeout]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=28m08s 28:08 - max items parameter]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=28m40s 28:40 - finding documentation on the EPrints wiki]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=30m05s 30:05 - setting max_list_age and max_menu_age (witout modifying default configuration files)]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=32m10s 32:10 - modifying existing configuration with a loop]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=35m38s 35:38 - confirming properties are set]&lt;br /&gt;
* [http://youtu.be/Ap_u7_MCnhI?t=37m35s 37:35 - nightly generation of single browse views]&lt;br /&gt;
&lt;br /&gt;
==== The Video====&lt;br /&gt;
&amp;lt;youtube&amp;gt;Ap_u7_MCnhI&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Notes, Errata and Additional Information====&lt;br /&gt;
&lt;br /&gt;
Any notes, version information, errata, etc concerned with this video&lt;br /&gt;
&lt;br /&gt;
* EPrints 3.3.14&lt;br /&gt;
&lt;br /&gt;
==Test Yourself==&lt;br /&gt;
&lt;br /&gt;
Exercises as appropriate to allow the learner to practice the subject of the page.&lt;br /&gt;
&lt;br /&gt;
==More Reading==&lt;br /&gt;
&lt;br /&gt;
* Wiki page 1&lt;br /&gt;
* Wiki page 2&lt;br /&gt;
* Wiki page 3&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Training_Video:New_Field_Bazaar_Package&amp;diff=11891</id>
		<title>Training Video:New Field Bazaar Package</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Training_Video:New_Field_Bazaar_Package&amp;diff=11891"/>
		<updated>2015-11-19T17:25:00Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: Applied the template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Howto]]&lt;br /&gt;
[[Category:Training_Video|New Field Bazaar Package]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This videa is a walkthrough of converting a new field as created in [[Training_Video:Add_A_Field]] into a bazaar package, including modifying the workflow.&lt;br /&gt;
&lt;br /&gt;
==What You Will Learn==&lt;br /&gt;
&lt;br /&gt;
* How to build a bazaar package&lt;br /&gt;
* How to modify the workflow with a bazaar package&lt;br /&gt;
* Adding missing phrases to a bazaar package&lt;br /&gt;
&lt;br /&gt;
==What You Should Already Know==&lt;br /&gt;
&lt;br /&gt;
* How to access EPrints administration areas&lt;br /&gt;
* How to add a field to EPrints [[Training_Video:Add_A_Field]]&lt;br /&gt;
* Basics of Perl&lt;br /&gt;
* Basics of XML&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
=== Video===&lt;br /&gt;
The Video can be found at [http://youtu.be/gKxmXuFAH3A http://youtu.be/gKxmXuFAH3A].&lt;br /&gt;
====Index====&lt;br /&gt;
* [http://youtu.be/gKxmXuFAH3A?t=00m00s 00:00 - introduction]&lt;br /&gt;
* [http://youtu.be/gKxmXuFAH3A?t=00m15s 00:15 - identify new field to add to package]&lt;br /&gt;
* [http://youtu.be/gKxmXuFAH3A?t=00m25s 00:25 - create new bazaar package]&lt;br /&gt;
* [http://youtu.be/gKxmXuFAH3A?t=01m32s 01:32 - move phrase file to lib]&lt;br /&gt;
* [http://youtu.be/gKxmXuFAH3A?t=02m25s 02:25 - copy field definition to lib subdirectory]&lt;br /&gt;
* [http://youtu.be/gKxmXuFAH3A?t=03m07s 03:07 - creating a plugin to modify the workflow]&lt;br /&gt;
* [http://youtu.be/gKxmXuFAH3A?t=03m50s 03:50 - key functions for a plugin]&lt;br /&gt;
* [http://youtu.be/gKxmXuFAH3A?t=04m40s 04:40 - pull sample plugin code to use as base for new plugin]&lt;br /&gt;
* [http://youtu.be/gKxmXuFAH3A?t=05m20s 05:20 - modify the sample to reflect new plugin]&lt;br /&gt;
* [http://youtu.be/gKxmXuFAH3A?t=06m12s 06:12 - describe modifications to workflow]&lt;br /&gt;
* [http://youtu.be/gKxmXuFAH3A?t=07m00s 07:00 - add plugin code to bazaar package]&lt;br /&gt;
* [http://youtu.be/gKxmXuFAH3A?t=07m20s 07:20 - add the control screen details]&lt;br /&gt;
* [http://youtu.be/gKxmXuFAH3A?t=08m00s 08:00 - remove explicit entries from the workflow]&lt;br /&gt;
* [http://youtu.be/gKxmXuFAH3A?t=08m38s 08:38 - enable new plugin]&lt;br /&gt;
* [http://youtu.be/gKxmXuFAH3A?t=09m05s 09:05 - debugging]&lt;br /&gt;
* [http://youtu.be/gKxmXuFAH3A?t=10m55s 10:55 - test new field in workflow and add field phrase]&lt;br /&gt;
* [http://youtu.be/gKxmXuFAH3A?t=11m30s 11:30 - move phrase from webcfg.xml to plugin phrase file]&lt;br /&gt;
* [http://youtu.be/gKxmXuFAH3A?t=12m10s 12:10 - update the bazaar package to account for changes]&lt;br /&gt;
* [http://youtu.be/gKxmXuFAH3A?t=12m25s 12:25 - publish new package to eprints bazaar and test installation]&lt;br /&gt;
* [http://youtu.be/gKxmXuFAH3A?t=14m30s 14:30 - install package from bazaar]&lt;br /&gt;
* [http://youtu.be/gKxmXuFAH3A?t=15m00s 15:00 - more debugging ]&lt;br /&gt;
* [http://youtu.be/gKxmXuFAH3A?t=15m23s 15:23 - add missing files to the package - phrases and cfg files]&lt;br /&gt;
* [http://youtu.be/gKxmXuFAH3A?t=16m08s 16:08 - publish new version to bazaar]&lt;br /&gt;
* [http://youtu.be/gKxmXuFAH3A?t=17m00s 17:00 - test installation on fresh repository]&lt;br /&gt;
&lt;br /&gt;
==== The Video====&lt;br /&gt;
&amp;lt;youtube&amp;gt;gKxmXuFAH3A&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Notes, Errata and Additional Information====&lt;br /&gt;
&lt;br /&gt;
* EPrints 3.3.14&lt;br /&gt;
* Ubuntu 15.04&lt;br /&gt;
&lt;br /&gt;
==Test Yourself==&lt;br /&gt;
&lt;br /&gt;
* Create a bazaar package to add a new field to the repository&lt;br /&gt;
* Modify the bazaar package to include the new field in the workflow &lt;br /&gt;
&lt;br /&gt;
==More Reading==&lt;br /&gt;
&lt;br /&gt;
* [[Training_Video:Add_A_Field | How to add a field]]&lt;br /&gt;
* [[Training_Video:Export_Plugin_Bazaar_Package | Building an exporter bazaar package]]&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Training_Video:Default_Fields&amp;diff=11890</id>
		<title>Training Video:Default Fields</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Training_Video:Default_Fields&amp;diff=11890"/>
		<updated>2015-11-19T16:21:37Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: Apply template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Howto]]&lt;br /&gt;
[[Category:Training_Video|Default Fields]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto]]&lt;br /&gt;
[[Category:Training_Video|Template]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This video covers what default values are and how to configure EPrints to apply default values to fields on items in the repository&lt;br /&gt;
&lt;br /&gt;
==What You Will Learn==&lt;br /&gt;
&lt;br /&gt;
* What a default value is&lt;br /&gt;
* How to add a default value to an existing field&lt;br /&gt;
* How to access details of the currently logged-in user&lt;br /&gt;
* How to find system field names for fields in the workflow&lt;br /&gt;
&lt;br /&gt;
==What You Should Already Know==&lt;br /&gt;
&lt;br /&gt;
* How to access the EPrints administration functions&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
=== Video===&lt;br /&gt;
The Video can be found at [http://youtu.be/79vlrBHWpOU http://youtu.be/79vlrBHWpOU].&lt;br /&gt;
====Index====&lt;br /&gt;
* [http://youtu.be/79vlrBHWpOU?t=00m00s 00:00 - introduction]&lt;br /&gt;
* [http://youtu.be/79vlrBHWpOU?t=00m05s 00:05 - selecting a field for our first, simple example]&lt;br /&gt;
* [http://youtu.be/79vlrBHWpOU?t=00m50s 00:50 - finding the example field's name through the admin menu]&lt;br /&gt;
* [http://youtu.be/79vlrBHWpOU?t=01m40s 01:40 - finding the appropriate configuration file through the admin menu]&lt;br /&gt;
* [http://youtu.be/79vlrBHWpOU?t=03m10s 03:10 - editing the correct configuration file (eprint_fields_default.pl)]&lt;br /&gt;
* [http://youtu.be/79vlrBHWpOU?t=04m05s 04:05 - saving and reloading configuration]&lt;br /&gt;
* [http://youtu.be/79vlrBHWpOU?t=04m15s 04:15 - adding a new item in My Deposits]&lt;br /&gt;
* [http://youtu.be/79vlrBHWpOU?t=04m25s 04:25 - verifying it worked]&lt;br /&gt;
* [http://youtu.be/79vlrBHWpOU?t=05m10s 05:10 - a more complex example]&lt;br /&gt;
* [http://youtu.be/79vlrBHWpOU?t=06m30s 06:30 - editing a configuration file via the command line to add a default value based on  current user information]&lt;br /&gt;
* [http://youtu.be/79vlrBHWpOU?t=07m45s 07:45 - finding the name of the field to be used as a conditional on the second example]&lt;br /&gt;
* [http://youtu.be/79vlrBHWpOU?t=08m00s 08:00 - alter the new default value based on the logged-in user]&lt;br /&gt;
* [http://youtu.be/79vlrBHWpOU?t=08m35s 08:35 - verifying the code's syntax is correct]&lt;br /&gt;
* [http://youtu.be/79vlrBHWpOU?t=08m45s 08:45 - restarting apache]&lt;br /&gt;
* [http://youtu.be/79vlrBHWpOU?t=08m50s 08:50 - adding a new item to test the changes]&lt;br /&gt;
* [http://youtu.be/79vlrBHWpOU?t=09m00s 09:00 - verify the first condition worked]&lt;br /&gt;
* [http://youtu.be/79vlrBHWpOU?t=09m05s 09:05 - removing organisation from the user's profile]&lt;br /&gt;
* [http://youtu.be/79vlrBHWpOU?t=09m25s 09:25 - verifying the second condition worked]&lt;br /&gt;
&lt;br /&gt;
==== The Video====&lt;br /&gt;
&amp;lt;youtube&amp;gt;79vlrBHWpOU&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Notes, Errata and Additional Information====&lt;br /&gt;
&lt;br /&gt;
* EPrints 3.3.14&lt;br /&gt;
* Ubuntu 15.04&lt;br /&gt;
&lt;br /&gt;
==Test Yourself==&lt;br /&gt;
&lt;br /&gt;
* modify the configuration to add a default value to a field&lt;br /&gt;
* add a default value based on current user information&lt;br /&gt;
&lt;br /&gt;
==More Reading==&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Training_Video:Automatic_Fields&amp;diff=11888</id>
		<title>Training Video:Automatic Fields</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Training_Video:Automatic_Fields&amp;diff=11888"/>
		<updated>2015-11-19T16:08:20Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: applied last part of template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Howto]]&lt;br /&gt;
[[Category:Training_Video|Automatic Fields]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This video covers details of how field values can be automatically assigned when an item is saved to the repository.  It covers how to configure automatic fields and the best ways of extending the default configuration files.  It also shows how to build a simple browse view over an automated field.&lt;br /&gt;
&lt;br /&gt;
==What You Will Learn==&lt;br /&gt;
&lt;br /&gt;
* How automatic fields are configured&lt;br /&gt;
* How to automate an existing field&lt;br /&gt;
* How to add a new field and calculate its value automatically&lt;br /&gt;
* How to apply automated fields to existing items&lt;br /&gt;
* How to add a simple browse view over an automated field&lt;br /&gt;
* Debugging issues when applying configuration changes&lt;br /&gt;
&lt;br /&gt;
==What You Should Already Know==&lt;br /&gt;
&lt;br /&gt;
* How to access the EPrints administration functions&lt;br /&gt;
* Basics of PERL and XML syntaxes [[Perl_101_for_EPrints | Basic guide to PERL in EPrints]]&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
===Video===&lt;br /&gt;
The video is accessible from here : [http://youtu.be/YC_W23YfJ1A http://youtu.be/YC_W23YfJ1A]&lt;br /&gt;
&lt;br /&gt;
====Index====&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=00m00s 00:00 - introduction]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=00m30s 00:30 - examine default config for automatic fields]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=01m30s 01:30 - demonstrate automatic fields on a thesis]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=02m00s 02:00 - demonstrate automatic fields on a patent]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=03m10s 03:10 - create new cfg file to add new automatic field function]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=04m15s 04:15 - copy original automatic fields function to new variable]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=05m45s 05:45 - configure new function with a call to the original function]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=06m15s 06:15 - create a new field to hold individual title words]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=07m30s 07:30 - define new field as volatile and explain why]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=08m00s 08:00 - add function to populate new field automatically]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=09m00s 09:00 - test new configuration]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=09m20s 09:20 - debug a missing ';']&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=09m30s 09:30 - retest configuration and update database structure]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=09m50s 09:50 - restart apache]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=10m00s 10:00 - test new function]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=10m40s 10:40 - add phrase for new field]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=11m50s 11:50 - recommit all items in database to apply new automatic field]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=12m20s 12:20 - add a browse view over new automatic field]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=13m00s 13:00 - pushing new view to browse views configuration]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=14m20s 14:20 - copy view phrases to new phrase file and edit for new view]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=17m05s 17:05 - regenerate views]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=18m00s 18:00 - correct an issue with new view names and regenerate views (verbose)]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=19m40s 19:40 - look at new view and explain possible further modifications]&lt;br /&gt;
&lt;br /&gt;
====The Video====&lt;br /&gt;
&amp;lt;youtube&amp;gt;YC_W23YfJ1A&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Notes, Errata and Additional Information====&lt;br /&gt;
&lt;br /&gt;
* EPrints version 3.3.14&lt;br /&gt;
* Ubuntu 15.04&lt;br /&gt;
&lt;br /&gt;
==Test Yourself==&lt;br /&gt;
&lt;br /&gt;
* Add automation to an existing field&lt;br /&gt;
* Add a new automatic field&lt;br /&gt;
* apply the new automatic value to all existing records&lt;br /&gt;
* Create a browse view based on the new field&lt;br /&gt;
&lt;br /&gt;
==More Reading==&lt;br /&gt;
&lt;br /&gt;
* [[Adding_new_views | Adding New Views]]&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Training_Video:Automatic_Fields&amp;diff=11887</id>
		<title>Training Video:Automatic Fields</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Training_Video:Automatic_Fields&amp;diff=11887"/>
		<updated>2015-11-19T16:02:01Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* Video */  applying new template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Howto]]&lt;br /&gt;
[[Category:Training_Video|Automatic Fields]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
Walkthrough of adding an automatic metadata field to a repository, including basing a browse view on it.&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This video covers details of how field values can be automatically assigned when an item is saved to the repository.  It covers how to configure automatic fields the best ways of extending the default configuration files.&lt;br /&gt;
&lt;br /&gt;
==What You Will Learn==&lt;br /&gt;
&lt;br /&gt;
* How automatic fields are configured&lt;br /&gt;
* How to automate an existing field&lt;br /&gt;
* How to add a new field and calculate its value automatically&lt;br /&gt;
* How to apply automated fields to existing items&lt;br /&gt;
* How to add a simple browse view over an automated field&lt;br /&gt;
* Debugging issues when applying configuration changes&lt;br /&gt;
&lt;br /&gt;
==What You Should Already Know==&lt;br /&gt;
&lt;br /&gt;
* How to access the EPrints administration functions&lt;br /&gt;
* Basics of PERL and XML syntaxes [[Perl_101_for_EPrints | Basic guide to PERL in EPrints]]&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
===Video===&lt;br /&gt;
The video is accessible from here : [http://youtu.be/YC_W23YfJ1A http://youtu.be/YC_W23YfJ1A]&lt;br /&gt;
&lt;br /&gt;
====Index====&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=00m00s 00:00 - introduction]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=00m30s 00:30 - examine default config for automatic fields]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=01m30s 01:30 - demonstrate automatic fields on a thesis]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=02m00s 02:00 - demonstrate automatic fields on a patent]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=03m10s 03:10 - create new cfg file to add new automatic field function]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=04m15s 04:15 - copy original automatic fields function to new variable]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=05m45s 05:45 - configure new function with a call to the original function]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=06m15s 06:15 - create a new field to hold individual title words]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=07m30s 07:30 - define new field as volatile and explain why]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=08m00s 08:00 - add function to populate new field automatically]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=09m00s 09:00 - test new configuration]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=09m20s 09:20 - debug a missing ';']&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=09m30s 09:30 - retest configuration and update database structure]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=09m50s 09:50 - restart apache]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=10m00s 10:00 - test new function]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=10m40s 10:40 - add phrase for new field]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=11m50s 11:50 - recommit all items in database to apply new automatic field]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=12m20s 12:20 - add a browse view over new automatic field]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=13m00s 13:00 - pushing new view to browse views configuration]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=14m20s 14:20 - copy view phrases to new phrase file and edit for new view]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=17m05s 17:05 - regenerate views]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=18m00s 18:00 - correct an issue with new view names and regenerate views (verbose)]&lt;br /&gt;
* [http://youtu.be/YC_W23YfJ1A?t=19m40s 19:40 - look at new view and explain possible further modifications]&lt;br /&gt;
&lt;br /&gt;
====The Video====&lt;br /&gt;
&amp;lt;youtube&amp;gt;YC_W23YfJ1A&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Training_Video:Export_Plugin_Bazaar_Package&amp;diff=11877</id>
		<title>Training Video:Export Plugin Bazaar Package</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Training_Video:Export_Plugin_Bazaar_Package&amp;diff=11877"/>
		<updated>2015-11-19T12:31:05Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* Video */ Added Resources level 2 header&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:EPrints_3_Plugins]]&lt;br /&gt;
[[Category:Howto]]&lt;br /&gt;
[[Category:Training_Video|Export Plugin Bazaar Package]]&lt;br /&gt;
[[Category:EPrints_Bazaar]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This video explains how to create a simple export plugin and wrap it as a bazaar package.  Export plugins allow you to present the data in EPrints in any format.  Bazaar Packages enable you to share this format with others so your work can be re-used.&lt;br /&gt;
&lt;br /&gt;
==What you will learn==&lt;br /&gt;
&lt;br /&gt;
* What an export plugin does, and how to write a simple, text-based example&lt;br /&gt;
* How to ensure your plugin is compatible with different installations of EPrints (single and multiple repository)&lt;br /&gt;
* Testing the plugin&lt;br /&gt;
* Creating associated files and compiling the plugin&lt;br /&gt;
* Sharing the plugin with the EPrints community and keeping it up to date&lt;br /&gt;
&lt;br /&gt;
==What you should already know==&lt;br /&gt;
&lt;br /&gt;
* How to log in to EPrints as an administrator&lt;br /&gt;
* How to use command line tools:&lt;br /&gt;
** changing directories&lt;br /&gt;
** listing contents of folders&lt;br /&gt;
** copying, moving and editing text files&lt;br /&gt;
** restarting the web server&lt;br /&gt;
** creating new directories&lt;br /&gt;
* Familiarity with Perl (the example modifies an existing plugin, so you need to be able to read and modify code following existing structures)&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
===Video===&lt;br /&gt;
&lt;br /&gt;
The video can be found below or on YouTube at: http://youtu.be/JdZ8YCWLOJk&lt;br /&gt;
&lt;br /&gt;
====Index====&lt;br /&gt;
&lt;br /&gt;
* [http://www.youtube.com/watch?v=JdZ8YCWLOJk 0:00 - create a new ASCII Citation based “hello” export plugin]&lt;br /&gt;
* [http://www.youtube.com/watch?v=JdZ8YCWLOJk&amp;amp;t=200 3:20 - move plugin to /lib/plugins /folder]&lt;br /&gt;
* [http://www.youtube.com/watch?v=JdZ8YCWLOJk&amp;amp;t=310 5:10 - disable “hello” plugin in /lib/ as a globally enabled plugin]&lt;br /&gt;
* [http://www.youtube.com/watch?v=JdZ8YCWLOJk&amp;amp;t=360 6:00 - enable “hello” plugin in /lib/ as a locally enabled plugin]&lt;br /&gt;
* [http://www.youtube.com/watch?v=JdZ8YCWLOJk&amp;amp;t=480 8:00 - create Bazaar package]&lt;br /&gt;
* [http://www.youtube.com/watch?v=JdZ8YCWLOJk&amp;amp;t=750 12:30 - install new Bazaar package on another repository and test it]&lt;br /&gt;
* [http://www.youtube.com/watch?v=JdZ8YCWLOJk&amp;amp;t=855 14:15 - create icon with Bazaar icon builder]&lt;br /&gt;
* [http://www.youtube.com/watch?v=JdZ8YCWLOJk&amp;amp;t=945 15:45 - move created icon to /lib/static/images/?]&lt;br /&gt;
* [http://www.youtube.com/watch?v=JdZ8YCWLOJk&amp;amp;t=1025 17:05 - install Wordle Generator Bazaar package to confirm image path]&lt;br /&gt;
* [http://www.youtube.com/watch?v=JdZ8YCWLOJk&amp;amp;t=1080 18:00 - move the icon image to /lib/static/images/epm/]&lt;br /&gt;
* [http://www.youtube.com/watch?v=JdZ8YCWLOJk&amp;amp;t=1140 19:00 - publish completed Bazaar package to Bazaar.org]&lt;br /&gt;
* [http://www.youtube.com/watch?v=JdZ8YCWLOJk&amp;amp;t=1180 19:40 - create new version of the ‘hello’ Bazaar package]&lt;br /&gt;
&lt;br /&gt;
====The Video====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;JdZ8YCWLOJk&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Notes, Errata and Additional Information====&lt;br /&gt;
&lt;br /&gt;
* EPrints 3.3.14&lt;br /&gt;
* Ubuntu&lt;br /&gt;
* Vim text editor&lt;br /&gt;
&lt;br /&gt;
==Test Yourself==&lt;br /&gt;
&lt;br /&gt;
Plugin Exercises (includes other kinds of plugins):&lt;br /&gt;
&lt;br /&gt;
[http://www.eprints.org/software/training/programming/plugin_exercises.pdf Instructions]&lt;br /&gt;
&lt;br /&gt;
[http://www.eprints.org/software/training/programming/plugin-scripts/ Starter files and examples]&lt;br /&gt;
&lt;br /&gt;
==More Reading==&lt;br /&gt;
&lt;br /&gt;
[http://www.eprints.org/software/training/programming/api_techniques.pdf More about the API to make your export plugin more useful]&lt;br /&gt;
&lt;br /&gt;
[[Create Export Plugins|Many more examples of export plugins]]&lt;br /&gt;
&lt;br /&gt;
[[How to write plugins]]&lt;br /&gt;
&lt;br /&gt;
[[Instructions for local plugins]]&lt;br /&gt;
&lt;br /&gt;
[[Tips to write plugins]]&lt;br /&gt;
&lt;br /&gt;
[[:Category:Plugins|Category page with many examples of export plugins]]&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Training_Video:Add_A_Field&amp;diff=11876</id>
		<title>Training Video:Add A Field</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Training_Video:Add_A_Field&amp;diff=11876"/>
		<updated>2015-11-19T12:30:00Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* Resources */ changed https to http&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Howto]]&lt;br /&gt;
[[Category:Training_Video|Template]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
Walkthrough of adding a metadata field to a repository.&lt;br /&gt;
&lt;br /&gt;
==What You Will Learn==&lt;br /&gt;
&lt;br /&gt;
* How to add a field to the repository without editing core configuration files&lt;br /&gt;
* How to add new phrases and to include the new field in the Workflow&lt;br /&gt;
* How to add the field to the Abstract page&lt;br /&gt;
&lt;br /&gt;
==What You Should Already Know==&lt;br /&gt;
&lt;br /&gt;
* Be familiar with the structure of EPrints and the relationships between configuration, phrase and workflow files&lt;br /&gt;
* How to login as administrator and to edit text files on the server&lt;br /&gt;
* How to restart Apache&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
=== Video===&lt;br /&gt;
The Video can be found at [http://www.youtube.com/watch?v=1B5_dHStUTQ http://www.youtube.com/watch?v=1B5_dHStUTQ].&lt;br /&gt;
====Index====&lt;br /&gt;
* [http://www.youtube.com/watch?v=1B5_dHStUTQ&amp;amp;t=0m00s 00:00 Introduction]&lt;br /&gt;
* [http://www.youtube.com/watch?v=1B5_dHStUTQ&amp;amp;t=0m18s 00:18 Command line intro and basic set-up]&lt;br /&gt;
* [http://www.youtube.com/watch?v=1B5_dHStUTQ&amp;amp;t=0m45s 00:45 Look over the file: eprint_fields.pl]&lt;br /&gt;
* [http://www.youtube.com/watch?v=1B5_dHStUTQ&amp;amp;t=1m39s 01.39 Add new field to new file: z_local_eprints_fields.pl]&lt;br /&gt;
* [http://www.youtube.com/watch?v=1B5_dHStUTQ&amp;amp;t=2m33s 02.33 Use the add_dataset_field function to add the field]&lt;br /&gt;
* [http://www.youtube.com/watch?v=1B5_dHStUTQ&amp;amp;t=3m39s 03.39 Creating field of type ‘set’]&lt;br /&gt;
* [http://www.youtube.com/watch?v=1B5_dHStUTQ&amp;amp;t=4m28s 04.28 Commit the new field by using ‘epadmin update repoid’]&lt;br /&gt;
* [http://www.youtube.com/watch?v=1B5_dHStUTQ&amp;amp;t=5m28s 05.28 Add the new field to the eprint Workflow]&lt;br /&gt;
* [http://www.youtube.com/watch?v=1B5_dHStUTQ&amp;amp;t=6m34s 06.34 Add the phrases, set names and help text for the new field using the web UI]&lt;br /&gt;
* [http://www.youtube.com/watch?v=1B5_dHStUTQ&amp;amp;t=8m35s 08.35 Add the new field to the eprint Abstract page]&lt;br /&gt;
* [http://www.youtube.com/watch?v=1B5_dHStUTQ&amp;amp;t=9m15s 09.15 Overview of ‘eprint_render.pl’ file]&lt;br /&gt;
* [http://www.youtube.com/watch?v=1B5_dHStUTQ&amp;amp;t=10m45s 10.45 Run regenerate_abstracts to request and update to the Abstract page]&lt;br /&gt;
* [http://www.youtube.com/watch?v=1B5_dHStUTQ&amp;amp;t=11m35s 11.35 Move the phrases created using the web UI from zz_phrases.xml to z_local_fields.xml]&lt;br /&gt;
&lt;br /&gt;
==== The Video====&lt;br /&gt;
&amp;lt;youtube&amp;gt;1B5_dHStUTQ&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Notes, Errata and Additional Information====&lt;br /&gt;
&lt;br /&gt;
* EPrints 3.3.14&lt;br /&gt;
* Ubuntu 15.04&lt;br /&gt;
&lt;br /&gt;
==More Reading==&lt;br /&gt;
&lt;br /&gt;
*[http://wiki.eprints.org/w/Metadata http://wiki.eprints.org/w/Metadata]&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Training_Video:Search_Configuration&amp;diff=11875</id>
		<title>Training Video:Search Configuration</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Training_Video:Search_Configuration&amp;diff=11875"/>
		<updated>2015-11-19T12:26:37Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: applied new template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Howto]]&lt;br /&gt;
[[Category:Training_Video|Search Configuration]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
Configuring (and a little troubleshooting of) EPrints searches&lt;br /&gt;
&lt;br /&gt;
==What You Will Learn==&lt;br /&gt;
&lt;br /&gt;
* How to trace the cause of errors with searching&lt;br /&gt;
* What the indexer service is and how to restart it&lt;br /&gt;
* How to add fields to the advanced search&lt;br /&gt;
* How to create a new search function&lt;br /&gt;
&lt;br /&gt;
==What You Should Already Know==&lt;br /&gt;
&lt;br /&gt;
* How to access EPrints administration pages&lt;br /&gt;
* How to update EPrints configuration files&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
=== Video===&lt;br /&gt;
The Video can be found at [http://youtu.be/9soulfKp20A http://youtu.be/9soulfKp20A].&lt;br /&gt;
&lt;br /&gt;
====Index====&lt;br /&gt;
* [http://youtu.be/9soulfKp20A?t=00m00s 00:00 - Introduction]&lt;br /&gt;
* [http://youtu.be/9soulfKp20A?t=00m32s 00:32 - Diagnosing Search Error]&lt;br /&gt;
* [http://youtu.be/9soulfKp20A?t=00m58s 00:58 - Checking the status of the Indexer]&lt;br /&gt;
* [http://youtu.be/9soulfKp20A?t=01m23s 01:23 - Description of Background Task Queue]&lt;br /&gt;
* [http://youtu.be/9soulfKp20A?t=01m47s 01:47 - Inspecting the error log]&lt;br /&gt;
* [http://youtu.be/9soulfKp20A?t=02m40s 02:40 - Starting the Indexer]&lt;br /&gt;
* [http://youtu.be/9soulfKp20A?t=02m50s 02:50 - Verifying the Indexer is working]&lt;br /&gt;
* [http://youtu.be/9soulfKp20A?t=03m10s 03:10 - Unsuccessful search (items not yet indexed)]&lt;br /&gt;
* [http://youtu.be/9soulfKp20A?t=03m35s 03:35 - Description of Search Configuration]&lt;br /&gt;
* [http://youtu.be/9soulfKp20A?t=04m22s 04:22 - Viewing Search Configuration files]&lt;br /&gt;
* [http://youtu.be/9soulfKp20A?t=06m27s 06:27 - Adding a new field to the advanced search]&lt;br /&gt;
* [http://youtu.be/9soulfKp20A?t=06m42s 06:42 - Viewing all fields on an EPrint]&lt;br /&gt;
* [http://youtu.be/9soulfKp20A?t=07m33s 07:33 - Verifying the change worked (reloading configuration)]&lt;br /&gt;
* [http://youtu.be/9soulfKp20A?t=08m20s 08:20 - All items indexed, verification of search function.]&lt;br /&gt;
* [http://youtu.be/9soulfKp20A?t=08m43s 08:43 - Creating a new search]&lt;br /&gt;
* [http://youtu.be/9soulfKp20A?t=10m28s 10:28 - Verifying new search]&lt;br /&gt;
* [http://youtu.be/9soulfKp20A?t=10m40s 10:40 - Adding new phrases]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== The Video====&lt;br /&gt;
&amp;lt;youtube&amp;gt;9soulfKp20A&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Notes, Errata and Additional Information====&lt;br /&gt;
&lt;br /&gt;
* EPrints 3.3.14&lt;br /&gt;
* Ubuntu 15.04&lt;br /&gt;
&lt;br /&gt;
==Test Yourself==&lt;br /&gt;
&lt;br /&gt;
* run a search on an eprints repository&lt;br /&gt;
* Stop and Start the indexer via the web interface&lt;br /&gt;
* Add a new field to the advanced search&lt;br /&gt;
* Create a new search class&lt;br /&gt;
&lt;br /&gt;
==More Reading==&lt;br /&gt;
&lt;br /&gt;
* [[Training_Video:Search_Troubleshooting| Search Troubleshooting training video]]&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.eprints.org/w/index.php?title=Training_Video:Subject_Trees&amp;diff=11874</id>
		<title>Training Video:Subject Trees</title>
		<link rel="alternate" type="text/html" href="https://wiki.eprints.org/w/index.php?title=Training_Video:Subject_Trees&amp;diff=11874"/>
		<updated>2015-11-19T12:14:09Z</updated>

		<summary type="html">&lt;p&gt;Alan.stiles@open.ac.uk: /* Video */ Added Resources level 2 heading&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Howto]]&lt;br /&gt;
[[Category:Training_Video|Subject Trees]]&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This video shows you how to manipulate subject trees in EPrints.  Subject trees allow you to browse by hierarchies, such as subjects and departments.&lt;br /&gt;
&lt;br /&gt;
==What You Will Learn==&lt;br /&gt;
&lt;br /&gt;
* How to change display names of subject trees&lt;br /&gt;
* How to add a new node to a tree&lt;br /&gt;
* How to make bulk changes to subject files&lt;br /&gt;
* How to import a subject file&lt;br /&gt;
* How to export a subject tree&lt;br /&gt;
&lt;br /&gt;
==What You Should Already Know==&lt;br /&gt;
&lt;br /&gt;
* How to use the EPrints Admin interface&lt;br /&gt;
* Basic use of command line interface to run EPrints commands&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
=== Video===&lt;br /&gt;
The Video can be found at http://www.youtube.com/watch?v=1rYT9krerxM.&lt;br /&gt;
====Index====&lt;br /&gt;
* [http://youtu.be/1rYT9krerxM 0:00 Introduction]&lt;br /&gt;
* [http://youtu.be/1rYT9krerxM?t=0m22s 0:22 Browsing by subject and divisions]&lt;br /&gt;
* [http://youtu.be/1rYT9krerxM?t=0m50s 0:50 Subject trees in the deposit workflow]&lt;br /&gt;
* [http://youtu.be/1rYT9krerxM?t=1m43s 1:43 Change name of subject tree]&lt;br /&gt;
* [http://youtu.be/1rYT9krerxM?t=2m45s 2:45 Properties of a subject]&lt;br /&gt;
* [http://youtu.be/1rYT9krerxM?t=3m55s 3:55 Verifying change in the workflow]&lt;br /&gt;
* [http://youtu.be/1rYT9krerxM?t=4m05s 4:05 Adding a new department to the divisions tree]&lt;br /&gt;
* [http://youtu.be/1rYT9krerxM?t=5m51s 5:51 Verifying change in the workflow]&lt;br /&gt;
* [http://youtu.be/1rYT9krerxM?t=6m40s 6:40 Description of subject tree import format]&lt;br /&gt;
* [http://youtu.be/1rYT9krerxM?t=8m14s 8:14 Creation of new tree in the subjects file]&lt;br /&gt;
* [http://youtu.be/1rYT9krerxM?t=14m02s 14:02 Importing subjects file]&lt;br /&gt;
* [http://youtu.be/1rYT9krerxM?t=14m40s 14:40 Verifying change in the workflow]&lt;br /&gt;
* [http://youtu.be/1rYT9krerxM?t=15m09s 15:09 Exporting the subject tree]&lt;br /&gt;
* [http://youtu.be/1rYT9krerxM?t=16m14s 16:14 Listing export options]&lt;br /&gt;
* [http://youtu.be/1rYT9krerxM?t=16m50s 16:50 XML export]&lt;br /&gt;
* [http://youtu.be/1rYT9krerxM?t=17m15s 17:15 Fixing bug in exporter]&lt;br /&gt;
* [http://youtu.be/1rYT9krerxM?t=17m55s 17:55 Exporting in subject format, writing to a file]&lt;br /&gt;
* [http://youtu.be/1rYT9krerxM?t=18m06s 18:06 Reordering subjects file to be more editable]&lt;br /&gt;
&lt;br /&gt;
==== The Video====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;1rYT9krerxM&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Notes, Errata and Additional Information====&lt;br /&gt;
&lt;br /&gt;
Any notes, version information, errata, etc concerned with this video&lt;br /&gt;
&lt;br /&gt;
* EPrints 3.3.14&lt;br /&gt;
* Ubuntu 15.04&lt;br /&gt;
&lt;br /&gt;
==Test Yourself==&lt;br /&gt;
&lt;br /&gt;
Use the admin interface to edit a subject&lt;br /&gt;
&lt;br /&gt;
Create a subject tree in the basic text format, e.g.:&lt;br /&gt;
&lt;br /&gt;
 subjects:Name of Subject Tree:ROOT:0&lt;br /&gt;
 subjA:First Subject Name:subjects:0&lt;br /&gt;
 childA1:First Child Subject A:subjA:1&lt;br /&gt;
 subjB:Second Subject Name:subjects:0&lt;br /&gt;
 childB1:First Child Subject B:subjB:1&lt;br /&gt;
 childB2:Second Child Subject B:subjB:1&lt;br /&gt;
 subjC:Third Subject Name:subjects:0&lt;br /&gt;
 childC1:First Child Subject C:subjC:1&lt;br /&gt;
&lt;br /&gt;
Import this into the archive using the command line tool bin/import_subjects&lt;br /&gt;
&lt;br /&gt;
Now add a new tree to show the organisation structure.  Remember the system names must be unique across all subject trees, e.g.:&lt;br /&gt;
&lt;br /&gt;
 divisions:Name of Department Tree:ROOT:0&lt;br /&gt;
 facA:Faculty A:divisions:0&lt;br /&gt;
 deptA1:Department A1:facA:1&lt;br /&gt;
 facB:Faculty B:divisions:0&lt;br /&gt;
 deptB1:Department B1:facB:1&lt;br /&gt;
 facC:Faculty C:divisions:0&lt;br /&gt;
 deptC1:Department C1:facC:1&lt;br /&gt;
 deptC2:Department C2:facC:1&lt;br /&gt;
&lt;br /&gt;
Import this into the archive using the command line tool&lt;br /&gt;
&lt;br /&gt;
Change the name of one of your new subjects using the admin interface&lt;br /&gt;
&lt;br /&gt;
Now export that tree using the commandline tool bin/export [archivename] subject Subject&lt;br /&gt;
&lt;br /&gt;
==More Reading==&lt;br /&gt;
&lt;br /&gt;
* [[bin/import_subjects|Importing Subjects on the command line]]&lt;/div&gt;</summary>
		<author><name>Alan.stiles@open.ac.uk</name></author>
		
	</entry>
</feed>