MMI Name Authority schema extension notes v1.11

Basic info:

Server: collectionspace.movingimage.us
Version: 1.11
Tenant: mmi
Tenant ID: 42
Tenant string name: PersonTenant42
XML namespace: http://collectionspace.org/services/person/local/mmi
Built using a revised mini-build tool reflecting v1.11: /tmp/tenant-customizations-v1.9/

Name authority record

file paths:
/tmp/v1.11/services/acquisition/3rdparty/nuxeo-platform-cs-person-mmi/src/main/resources/schemas/persons_mmi.xsd
/tmp/v1.11/services/acquisition/3rdparty/nuxeo-platform-cs-person-mmi/src/main/resources/META-INF/MANIFEST.MF
/tmp/v1.11/services/acquisition/3rdparty/nuxeo-platform-cs-person-mmi/src/main/resources/OSGI-INF/core-types-contrib.xml
/tmp/v1.11/services/acquisition/3rdparty/nuxeo-platform-cs-person-mmi/src/main/resources/OSGI-INF/ecm-types-contrib.xml
/tmp/v1.11/services/acquisition/3rdparty/nuxeo-platform-cs-person-mmi/src/main/resources/OSGI-INF/layouts-contrib.xml
/tmp/v1.11/services/acquisition/3rdparty/nuxeo-platform-cs-person-mmi/src/main/resources/OSGI-INF/life-cycle-contrib.xml
/tmp/v1.11/services/acquisition/3rdparty/nuxeo-platform-cs-person-mmi/build.xml
/tmp/v1.11/services/acquisition/3rdparty/nuxeo-platform-cs-person-mmi/pom.xml
/tmp/v1.11/services/acquisition/3rdparty/build.xml
/tmp/v1.11/services/acquisition/3rdparty/pom.xml
/tmp/v1.11/services/common/src/main/cspace/config/services/tenants/mmi/tenant-bindings.delta.xml
/usr/local/share/1.11/jboss-4.2.3.GA/server/cspace/cspace/config/services/tenants/mmi/tenant-bindings.delta.xml
/tmp/tenant-customizations-v1.9/ui/our-tenant/bundle/core-messages.properties
/tmp/tenant-customizations-v1.9/ui/our-tenant/html/pages/PersonTemplate.html
/tmp/tenant-customizations-v1.9/application/our-tenant/base-authority-person.xml
/tmp/tenant-customizations-v1.9/application/our-tenant/domain-authority-person.xml

Added a repeating controlled list (multi-valued field):
Name Type

1 This is a new field that will be added as a schema extension for the person authority. Since there is no current sub-module for our custom schema the first step is to add an person sub-module nuxeo-platform-cs-person-mmi that defines the custom mmi schema. The following steps have been adapted from Rick's helpful How to add an extension schema page.

  • a. add a custom person schema file persons_mmi.xsd with new field name nameType

    Note new field on line 23.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    
    <!--
        MMI Person schema (XSD)
        
        Entity  : Person
        Part    : local - Museum of the Moving Image (MMI)
        Used for: Nuxeo EP core document type
        
        $LastChangedRevision: 860 $
        $LastChangedDate: 2009-10-14 14:48:05 -0700 (Wed, 14 Oct 2009) $
    -->
    
    <xs:schema 
      xmlns:xs="http://www.w3.org/2001/XMLSchema"
      xmlns:ns="http://collectionspace.org/services/person/local/mmi"
      xmlns="http://collectionspace.org/services/person/local/mmi"
      targetNamespace="http://collectionspace.org/services/person/local/mmi"
      version="0.1"
    >
    <!-- See http://wiki.collectionspace.org/display/collectionspace/Person+Service+Home -->
    
        <xs:element name="nameTypes">
            <xs:complexType>
                    <xs:sequence>
                            <xs:element name="nameType" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
                    </xs:sequence>
            </xs:complexType>
        </xs:element>
    
    </xs:schema>
    
  • b. edit MANIFEST.MF to reference new mmi module

    Note references to lowercase mmi tenant string name on lines 3, 4, and 18.

    Manifest-Version: 1.0
    Bundle-ManifestVersion: 1
    Bundle-Name: org.collectionspspace.personTenant42
    Bundle-SymbolicName: org.collectionspace.personTenant42;singleton:=true
    Bundle-Version: 1.0.0
    Bundle-Localization: plugin
    Bundle-Vendor: Nuxeo
    Require-Bundle: org.nuxeo.runtime,
     org.nuxeo.ecm.core.api,
     org.nuxeo.ecm.core,
     org.nuxeo.ecm.core.api,
     org.nuxeo.ecm.platform.types.api,
     org.nuxeo.ecm.platform.versioning.api,
     org.nuxeo.ecm.platform.ui,
     org.nuxeo.ecm.platform.forms.layout.client,
     org.nuxeo.ecm.platform.ws,
     org.collectionspace.collectionspace_core
    Provide-Package: org.collectionspace.personTenant42
    Nuxeo-Component: OSGI-INF/core-types-contrib.xml,
     OSGI-INF/life-cycle-contrib.xml,
     OSGI-INF/ecm-types-contrib.xml,
     OSGI-INF/layouts-contrib.xml
    
  • c. add a custom schema to parent document type core-types-contrib.xml and reference new person authority schema

    Note reference to mmi schema names and tenant string names on lines 2, 8, 21 and 26.

    <?xml version="1.0"?>
    <component name="org.collectionspace.personTenant42.coreTypes">
      <!--<extension target="org.nuxeo.ecm.core.schema.TypeService" point="schema">
        <schema name="personauthorities_common" prefix="personauthorities_common" src="schemas/personauthorities_common.xsd"/>
      </extension>-->
     
      <extension target="org.nuxeo.ecm.core.schema.TypeService" point="schema">
        <schema name="persons_mmi" prefix="persons_mmi" src="schemas/persons_mmi.xsd"/>
      </extension>
          
      <!--<extension target="org.nuxeo.ecm.core.schema.TypeService" point="doctype">
        <doctype name="Personauthority" extends="Document">
          <schema name="common"/>
          <schema name="dublincore"/>
          <schema name="collectionspace_core"/>
          <schema name="personauthorities_common"/>
        </doctype>
      </extension>-->
     
      <extension target="org.nuxeo.ecm.core.schema.TypeService" point="doctype">
        <doctype name="PersonTenant42" extends="Document">
          <schema name="common"/>
          <schema name="dublincore"/>
          <schema name="collectionspace_core"/>
          <schema name="persons_common"/>
          <schema name="persons_mmi"/>
          <!--<prefetch>persons_common:displayName persons_common:refName persons_common:shortIdentifier</prefetch>-->
        </doctype>
      </extension>
     
    </component>
    
  • d. edit ecm-types-contrib.xml to reference new mmi component

    Note reference to mmi tenant string name on lines 2, 31, 39, 45 and 51.

    <?xml version="1.0"?>
    <component name="org.collectionspace.personTenant42.ecm.types">
      <!--<extension target="org.nuxeo.ecm.platform.types.TypeService" point="types">
        <type id="Personauthority" coretype="Personauthority">
          <label>org.collectionspace.personauthority</label>
          
          <default-view>view_documents</default-view>
    
          <layouts mode="any">
            <layout>heading</layout>
            <layout>collectionspace_core</layout>
            <layout>cspersonauthority</layout>
          </layouts>        
        </type>
    
        <type id="Folder" coretype="Folder">
          <subtypes>
            <type>Personauthority</type>
          </subtypes>
        </type>
        
        <type id="Workspace" coretype="Workspace">
          <subtypes>
            <type>Personauthority</type>
          </subtypes>
        </type>
    
      </extension>-->
    
      <extension target="org.nuxeo.ecm.platform.types.TypeService" point="types">
        <type id="PersonTenant42" coretype="PersonTenant42">
          <label>org.collectionspace.person</label>
          <!--icon>/icons/file.gif</icon-->
          <default-view>view_documents</default-view>
    
          <layouts mode="any">
            <layout>heading</layout>
            <layout>collectionspace_core</layout>
            <layout>personTenant42</layout>
          </layouts>        
        </type>
    
        <type id="Folder" coretype="Folder">
          <subtypes>
            <type>PersonTenant42</type>
          </subtypes>
        </type>
        
        <type id="Workspace" coretype="Workspace">
          <subtypes>
            <type>PersonTenant42</type>
          </subtypes>
        </type>
    
      </extension>
    </component>
    
  • e. edit layouts-contrib.xml to reference new mmi component

    Note reference to mmi tenant string name on line 3

    <?xml version="1.0"?>
    
    <component name="org.collectionspace.personTenant42.layouts.webapp">
    
    ...
    

    and on line 76.

      <extension target="org.nuxeo.ecm.platform.forms.layout.WebLayoutManager"
        point="layouts">
    
        <layout name="personTenant42">
          <templates>
            <template mode="any">/layouts/layout_default_template.xhtml</template>
          </templates>
    
    ...
    
  • f. edit life-cycle-contrib.xml to reference new mmi component

    Note reference to mmi tenant string name on lines 2 and 7.

    <?xml version="1.0"?>
    <component name="org.collectionspace.ecm.platform.personTenant42.LifeCycleManagerExtensions">
    
      <extension target="org.nuxeo.ecm.core.lifecycle.LifeCycleService" point="types">
        <types>
          <!--<type name="Personauthority">default</type>-->
          <type name="PersonTenant42">default</type>
        </types>
      </extension>
    
    </component>
    
  • g. edit 3rdparty/nuxeo-platform-cs-person-mmi/build.xml so to build the custom sub-module

    Note reference to mmi project name on line 1, and tenant string name on lines 13 and 15.

    <project name="nuxeo-platform-cs-personTenant42" default="package" basedir=".">
        <description>
            person nuxeo document type
        </description>
        <!-- set global properties for this build -->
        <property name="services.trunk" value="../../../.."/>
        <!-- environment should be declared before reading build.properties -->
        <property environment="env" />
        <property file="${services.trunk}/build.properties" />
        <property name="mvn.opts" value="" />
        <property name="src" location="src"/>
        <property name="nuxeo.person.jar"
            value="org.collectionspace.services.personTenant42.3rdparty.nuxeo-${cspace.release}.jar"/>
        <property name="nuxeo.person.jars.all"
            value="org.collectionspace.services.personTenant42.3rdparty.nuxeo-*.jar"/>
    
    ...
    
  • h. edit 3rdparty/nuxeo-platform-cs-person-mmi/pom.xml to reference new mmi component

    Note reference to mmi tenant string name on lines 12, 13, and description on line 15.

    <project xmlns="http://maven.apache.org/POM/4.0.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <parent>
            <groupId>org.collectionspace.services</groupId>
            <artifactId>org.collectionspace.services.person.3rdparty</artifactId>
            <version>1.11-SNAPSHOT</version>
        </parent>
    
        <modelVersion>4.0.0</modelVersion>
        <groupId>org.collectionspace.services</groupId>
        <artifactId>org.collectionspace.services.personTenant42.3rdparty.nuxeo</artifactId>
        <name>services.personTenant42.3rdparty.nuxeo</name>
        <packaging>jar</packaging>
        <description>
            MMI Person Nuxeo Document Type
        </description>
    
    ...
    
  • i. edit 3rdparty/build.xml so to build the custom sub-module

    Note reference to mmi custom module on lines 11, 116, 122, 128 and 134.

    <project name="person.3rdparty" default="package" basedir=".">
        <description>
            person service 3rdparty
        </description>
      <!-- set global properties for this build -->
        <property name="services.trunk" value="../../.."/>
        <!-- enviornment should be declared before reading build.properties -->
        <property environment="env" />
        <property file="${services.trunk}/build.properties" />
        <property name="mvn.opts" value="" />
        <property name="src" location="src"/>
        <property name="nuxeo-platform-person" value="nuxeo-platform-person"/>
        <property name="nuxeo-platform-person-mmi" value="nuxeo-platform-person-mmi"/>
    
    ...
    

    and further down the file

        <target name="deploy" depends="install"
        description="deploy person in ${jboss.server.nuxeo}">
            <ant antfile="nuxeo-platform-cs-person/build.xml" target="deploy" inheritall="false"/>
            <ant antfile="nuxeo-platform-cs-person-mmi/build.xml" target="deploy" inheritall="false"/>
        </target>
    
        <target name="undeploy"
        description="undeploy person from ${jboss.server.nuxeo}">
            <ant antfile="nuxeo-platform-cs-person/build.xml" target="undeploy" inheritall="false"/>
            <ant antfile="nuxeo-platform-cs-person-mmi/build.xml" target="undeploy" inheritall="false"/>
        </target>
    
        <target name="dist"
        description="generate distribution for person" depends="package">
            <ant antfile="nuxeo-platform-cs-person/build.xml" target="dist" inheritall="false"/>
            <ant antfile="nuxeo-platform-cs-person-mmi/build.xml" target="dist" inheritall="false"/>
        </target>
        
        <target name="dist_installer"
        description="generate distribution for collectionobject" depends="package">
            <ant antfile="nuxeo-platform-cs-person/build.xml" target="dist_installer" inheritall="false"/>
            <ant antfile="nuxeo-platform-cs-person-mmi/build.xml" target="dist_installer" inheritall="false"/>
        </target>
    
    </project>
    
  • j. edit 3rdparty/pom.xml to reference new mmi component

    Note reference to mmi custom module on line 21.

    <project xmlns="http://maven.apache.org/POM/4.0.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <parent>
            <groupId>org.collectionspace.services</groupId>
            <artifactId>org.collectionspace.services.person</artifactId>
            <version>1.9-SNAPSHOT</version>
        </parent>
    
        <modelVersion>4.0.0</modelVersion>
        <groupId>org.collectionspace.services</groupId>
        <artifactId>org.collectionspace.services.person.3rdparty</artifactId>
        <name>services.person.3rdparty</name>
        <packaging>pom</packaging>
        <description>
            3rd party build for person service
        </description>
    
        <modules>
            <module>nuxeo-platform-cs-person</module>
            <module>nuxeo-platform-cs-person-mmi</module>
        </modules>
    </project>
    
  • k. add this code chunk to tenant binding tenant-bindings-delta.xml ABOVE the tenant binding chunk for Acquisitions

    This needs to be placed before Acquisitions because of the layout of the tenant-bindings.proto.xml file and because of how XMLMerge parses the -delta file.

     <?xml version="1.0" encoding="UTF-8"?>
    <tenant:TenantBindingConfig
            xmlns:merge='http://xmlmerge.el4j.elca.ch'
            xmlns:tenant='http://collectionspace.org/services/common/tenant'>
                     
        <tenant:tenantBinding id="42" name="movingimage.us" displayName="Museum of the Moving Image Tenant" version="0.1">
            <tenant:repositoryDomain name="default-domain" storageName="mmi-domain" repositoryClient="nuxeo-java" />
            <tenant:serviceBindings merge:matcher="id" id="Persons">
                    <service:object xmlns:service="http://collectionspace.org/services/common/service" >
                            <service:part id="42" merge:matcher="skip" merge:action="insert" control_group="Managed" versionable="true" auditable="false" label="persons_mmi" updated="" order="3">
                              <service:content contentType="application/xml">
                                    <service:xmlContent namespaceURI="http://collectionspace.org/services/person/local/mmi" schemaLocation="http://collectionspace.org/services/person/local/mmi http://collectionspace.org/services/person/local/persons_mmi.xsd" />
                              </service:content>
                            </service:part>
                    </service:object>
            </tenant:serviceBindings>
            <tenant:serviceBindings merge:matcher="id" id="Acquisitions">
                    <service:object xmlns:service="http://collectionspace.org/services/common/service" >
                            <service:part id="42" merge:matcher="skip" merge:action="insert" control_group="Managed" versionable="true" auditable="false" label="acquisitions_mmi" updated="" order="3">
                              <service:content contentType="application/xml">
                                    <service:xmlContent namespaceURI="http://collectionspace.org/services/acquisition/local/mmi" schemaLocation="http://collectionspace.org/services/acquisition/local/mmi http://collectionspace.org/services/acquisition/local/acquisitions_mmi.xsd" />
                              </service:content>
                            </service:part>
                    </service:object>
            </tenant:serviceBindings>
        </tenant:tenantBinding>
                           
    </tenant:TenantBindingConfig>
    

2. add field id and selector to domain-authority-person.xml

Note the section attribute for the new field. Every new field will have this identifying attribute.

<repeat id="nameTypes" section="mmi">	
	<field id="nameType" section="mmi">
		<selector>personAuthority-nameType</selector>
		<options>
			<option id="display" default="yes">Display</option>
			<option id="index">Index</option>
			<option id="maiden">Maiden</option>
			<option id="pseudonym">Pseudonym</option>
		</options>
	</field>
</repeat>

3. edit base-authority-person.xml to point to new schema

Note the id attribute on line 11. This connects with the section attribute from the domain-authority-person.xml file.

<record id="person" type="authority,compute-displayname">
   <terms-used>false</terms-used>
   <!-- XXX servcie layer doesn't currently support person terms but it does on  organisations - go figure -->
   <web-url>person</web-url>
   <services-tenant-auth-singular>Personauthority</services-tenant-auth-singular>
   <services-tenant-auth-plural>Personauthorities</services-tenant-auth-plural>
   <services-tenant-singular>Person</services-tenant-singular>
   <services-instances-path>personauthorities_common:http://collectionspace.org/services/person,abstract-common-list/list-item</services-instances-path>
   <services-single-instance-path>personauthorities_common:http://collectionspace.org/services/person,personauthorities_common</services-single-instance-path>
   <services-list-path>http://collectionspace.org/services/person,abstract-common-list/list-item</services-list-path>
   <services-record-path id="mmi">persons_mmi:http://collectionspace.org/services/person/local/mmi,persons_mmi</services-record-path>
   <services-record-path>persons_common:http://collectionspace.org/services/person,persons_common</services-record-path>

...

4. add field label to core-messages.properties

person-nameTypesLabel: Name type

5. added to PersonTemplate.html

<div class="info-pair">
	<div class="header">
		<div class="csc-person-nameTypes-label label"></div>
	</div>
	<div class="content">
		<select type="text" class="csc-personAuthority-nameType input-select" >
                      <option value="">Options not loaded</option>
                </select>
	</div>
</div>

6. run mini-build scripts to deploy changes across all layers and then build & deploy updated services module from source

cd /tmp/tenant-customizations-v1.9/application
ant deploy
cd /tmp/tenant-customizations-v1.9/ui
ant deploy
cd /tmp/v1.9/services/person
mvn clean install -DskipTests
cd /tmp/v1.9/services/person
ant undeploy deploy
Added two fields which are a repeating group with a name authority field and a controlled list:
Affiliated organization and Affiliated organization type.

1. added to persons_mmi.xsd

<xs:element name="affiliatedPersonOrgGroupList" type="affiliatedPersonOrgGroupList"/>

<xs:complexType name="affiliatedPersonOrgGroupList">
	<xs:sequence>
		<xs:element name="affiliatedPersonOrgGroup" type="affiliatedPersonOrgGroup" minOccurs="0" maxOccurs="unbounded"/>
	</xs:sequence>
</xs:complexType>

<xs:complexType name="affiliatedPersonOrgGroup">
	<xs:sequence>
		<xs:element name="affiliatedPersonOrg" type="xs:string"/>
		<xs:element name="affiliatedPersonOrgType" type="xs:string"/>
	</xs:sequence>
</xs:complexType>

2. added to domain-authority-person.xml

   <repeat id="affiliatedPersonOrgGroupList/affiliatedPersonOrgGroup" section="mmi">
       <field id="affiliatedPersonOrg" autocomplete="person-person" section="mmi">
           <selector>personAuthority-affiliatedPersonOrg</selector>
       </field>
       <field id="affiliatedPersonOrgType" section="mmi">
           <selector>personAuthority-affiliatedPersonOrgType</selector>
           <options>
               <option id="">Please select a value</option>
               <option id="employee">Employee</option>
               <option id="founder">Founder</option>
               <option id="member">Member</option>
               <option id="partner">Partner</option>
           </options>
       </field>
   </repeat>

3. added to core-messages.properties

person-affiliatedPersonOrgGroupLabel: Affiliated person/organization
person-affiliatedPersonOrgLabel: Affiliated person/organization
person-affiliatedPersonOrgTypeLabel: Affiliated person/organization type

4. added to PersonTemplate.html

<div class="info-pair">
	<div class="header">
		<div class="label csc-person-affiliatedPersonOrgGroup-label label"></div>
	</div>
	<div class="content">
		<table>
			<thead>
				<tr>
					<td class="csc-person-affiliatedPersonOrg-label label"></td>
					<td class="csc-person-affiliatedPersonOrgType-label label"></td>
				</tr>
			</thead>
				
			<tbody>
				<tr class="csc-person-affiliatedPersonOrgGroup">
					<td>
                                            <input type="text" class="input-alpha-table csc-personAuthority-affiliatedPersonOrg" />
                                        </td>
					<td><select class="input-select csc-personAuthority-affiliatedPersonOrgType">
                                                   <option value="">Options not loaded</option>
                                            </select>
                                        </td>
				</tr>
			</tbody>
		</table>
	</div>
</div>
Next, changed Person's Salutation and Person's Title from a controlled list to a normal text field.

1. commented out the <options> ... </options> portion from both fields in base-authority-person.xml

<field id="salutation">
	<selector>personAuthority-salutation</selector>
	<!--<options>
		<option id="dear" default="yes">Dear</option>
		<option id="hello">Hello</option>
		<option id="to">To</option>
	</options>-->
</field>
<field id="title">
	<selector>personAuthority-title</selector>
	<!--<options>
		<option id="" default="yes">Please select a value</option>
		<option id="Mr">Mr</option>
		<option id="Mrs">Mrs</option>
		<option id="Ms">Ms</option>
		<option id="Miss">Miss</option>
		<option id="Dr">Dr</option>
		<option id="Professor">Professor</option>
		<option id="Sir">Sir</option>
		<option id="Dame">Dame</option>
		<option id="Baron">Baron</option>
		<option id="Baroness">Baroness</option>
		<option id="Lord">Lord</option>
		<option id="Lady">Lady</option>
	</options>-->
</field>

2. Changed input type for the two fields in PersonTemplate.html from <select to <input

  <tr class="csc-personAuthority-name">
      <td><input type="text" class="csc-personAuthority-salutation"/></td>
      <td><input type="text" class="csc-personAuthority-title"/></td>  

...        
Changed Term Status from normal text field into a controlled list field

1. added an <options> ... </options> section to the termStatus section in base-authority-person.xml

<field id="termStatus" seperate_ui_container="true">
	<selector>personAuthority-status</selector>
	<options>
		<option id="quickaddedneedsattention" default="yes">Quick added, needs attention</option>
		<option id="inprogress">In progress</option>
		<option id="complete">Complete</option>
	</options>
</field>
Added seven new fields:
Source; Entity type; Life span; Scope notes; Source notes; Organization's contact name; and Function

1. added to persons_mmi.xsd

<xs:element name="nameSource" type="xs:string"/>
<xs:element name="entityType" type="xs:string"/>
<xs:element name="lifeSpan" type="xs:string"/>
<xs:element name="scopeNote" type="xs:string"/>
<xs:element name="sourceNote" type="xs:string"/>
<xs:element name="orgContactNames">
	<xs:complexType>
		<xs:sequence>
			<xs:element name="orgContactName" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
</xs:element>
<xs:element name="nameFunctions">
	<xs:complexType>
		<xs:sequence>
			<xs:element name="nameFunction" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
</xs:element>

2. added to domain-authority-person.xml

<field id="nameSource" seperate_ui_container="true" section="mmi">
	<selector>personAuthority-nameSource</selector>
	<options>
		<option id="" default="yes">Please select a value</option>
		<option id="aficatalog">AFI Catalog</option>
		<option id="encyclopediaofearlycinema">Encyclopedia of Early Cinema</option>
		<option id="halliwellswhoswhointhemovies">Halliwell's Who's Who in the Cinema</option>
		<option id="libraryofcongressnameauthority">Library of Congress Name Authority</option>
		<option id="other">Other</option>
		<option id="root">Root</option>
		<option id="silentfilmnecrology2ndedition">Silent Film Necrology, 2nd Edition</option>
		<option id="thefilmencyclopedia4thedition">The Film Encyclopedia, 4th Edition</option>
	</options>
</field>
<field id="entityType" seperate_ui_container="true" section="mmi">
	<selector>personAuthority-entityType</selector>
	<options>
		<option id="" default="yes">Please select a value</option>
		<option id="corporation">Corporation</option>
		<option id="group">Group</option>                           
		<option id="individual">Individual</option>                           
	</options>
</field>
<field id="lifeSpan" section="mmi">
	<selector>personAuthority-lifeSpan</selector>
</field>
<field id="scopeNote" section="mmi">
	<selector>personAuthority-scopeNote</selector>
</field>
<field id="sourceNote" section="mmi">
	<selector>personAuthority-sourceNote</selector>
</field>
<!-- new MMI repeatable field -->
<repeat id="orgContactNames" section="mmi">
	<!--<selector>personAuthority-orgContactName</selector>-->
	<field id="orgContactName" autocomplete="person-person section="mmi">
		<selector>personAuthority-orgContactName</selector>
	</field>
</repeat>
<repeat id="nameFunctions section="mmi"">
	<!--<selector>personAuthority-nameFunction</selector>-->
	<field id="nameFunction" section="mmi">
		<selector>personAuthority-nameFunction</selector>
	</field>
</repeat>

3. added to core-messages.properties

person-nameSourceLabel: Source
person-entityTypeLabel: Entity type
person-lifeSpanLabel: Life span
person-scopeNoteLabel: Scope note
person-sourceNoteLabel: Source note
person-orgContactNamesLabel: Organization's contact name
person-nameFunctionsLabel: Function

4. added to PersonTemplate.html

<div class="info-pair">
	<div class="header">
		<div class="csc-person-nameSource-label label"></div>
	</div>
	<div class="content">
		<select class="csc-personAuthority-nameSource input-select" ><option value="">Options not loaded</option></select>
	</div>
</div>

<div class="info-pair-select">
	<div class="header">
		<div class="csc-person-entityType-label label"></div>
	</div>
	<div class="content">
		<select class="csc-personAuthority-entityType input-select" ><option value="">Options not loaded</option></select>
	</div>
</div>

<div class="info-pair-select">
	<div class="header">
		<div class="csc-person-lifeSpan-label label"></div>
	</div>
	<div class="content">
		<input type="text" class="csc-personAuthority-lifeSpan" disabled="disbaled" />
	</div>
</div>

<div class="info-pair">
	<div class="header">
		<div class="csc-person-scopeNote-label label"></div>
	</div>
	<div class="content">
		<textarea rows="4" cols="30" class="csc-personAuthority-scopeNote" />
	</div>
</div>

<div class="info-pair">
	<div class="header">
		<div class="csc-person-sourceNote-label label"></div>
	</div>
	<div class="content">
		<textarea rows="4" cols="30" class="csc-personAuthority-sourceNote" />
	</div>
</div>

<div class="info-pair">
	<div class="header">
		<div class="csc-person-orgContactNames-label label"></div>
	</div>
	<div class="content">
		<input type="text" class="csc-personAuthority-orgContactName" />
	</div>
</div>

<div class="info-pair">
	<div class="header">
		<div class="csc-person-nameFunctions-label label"></div>
	</div>
	<div class="content">
		<input type="text" class="csc-personAuthority-nameFunction" />
	</div>
</div>
Recreated Contact Information Group for Person(Name) Authority. I still need to find a way to activate this authority within the larger Person Authority record

This is in scope for v1.12. Ignoring for now.

1. added to persons_common.xsd

<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:ns="http://collectionspace.org/contact/"
    xmlns="http://collectionspace.org/contact/"
    targetNamespace="http://collectionspace.org/contact/"
    version="0.1">

    <xs:element name="csid" type="xs:string" />
    <xs:element name="inAuthority" type="xs:string" />
    <xs:element name="inItem" type="xs:string" />

    <!-- Email Group -->
	<xs:element name="emailGroupList" type="emailGroupList"/>

	<xs:complexType name="emailGroupList">
		<xs:sequence>
			<xs:element name="emailGroup" type="emailGroup" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="emailGroup">
		<xs:sequence>
			<xs:element name="email" type="xs:string"/>
			<xs:element name="emailType" type="xs:string"/>
		</xs:sequence>
	</xs:complexType>
	
	<!-- telephone Group -->
	<xs:element name="telephoneGroupList" type="telephoneGroupList"/>

	<xs:complexType name="telephoneGroupList">
		<xs:sequence>
			<xs:element name="telephoneGroup" type="telephoneGroup" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="telephoneGroup">
		<xs:sequence>
			<xs:element name="telephoneNumber" type="xs:string"/>
			<xs:element name="telephoneNumberType" type="xs:string"/>
		</xs:sequence>
	</xs:complexType>
	
	<!-- fax number Group -->
	<xs:element name="faxNumberGroupList" type="faxNumberGroupList"/>

	<xs:complexType name="faxNumberGroupList">
		<xs:sequence>
			<xs:element name="faxNumberGroup" type="faxNumberGroup" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="faxNumberGroup">
		<xs:sequence>
			<xs:element name="faxNumber" type="xs:string"/>
			<xs:element name="faxNumberType" type="xs:string"/>
		</xs:sequence>
	</xs:complexType>
	
	<!-- web Group -->
	<xs:element name="webGroupList" type="webGroupList"/>

	<xs:complexType name="webGroupList">
		<xs:sequence>
			<xs:element name="webGroup" type="webGroup" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="webGroup">
		<xs:sequence>
			 <xs:element name="web" type="xs:string"/>
			 <xs:element name="webType" type="xs:string"/>
		</xs:sequence>
	</xs:complexType>
	
	<!-- address Group -->
	<xs:element name="addressGroupList" type="addressGroupList"/>

	<xs:complexType name="addressGroupList">
		<xs:sequence>
			<xs:element name="addressGroup" type="addressGroup" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="addressGroup">
		<xs:sequence>
			<xs:element name="addressPlace" type="xs:string"/>
			<xs:element name="addressPlace2" type="xs:string"/>
			<xs:element name="addressCity" type="xs:string"/>
			<xs:element name="addressState" type="xs:string"/>
			<xs:element name="addressPostcode" type="xs:string"/>
			<xs:element name="addressCountry" type="xs:string"/>
			<xs:element name="addressType" type="xs:string"/>
		</xs:sequence>
	</xs:complexType>
    
</xs:schema>

2. added to cspace-config-core.xml

<section>				
	<!-- new MMI repeatable email group -->
	<repeat id="emailGroupList/emailGroup">
		<field id="email">
			<selector>contactAuthority-email</selector>
		</field>
		<field id="emailType">
			<selector>contactAuthority-emailType</selector>
			<options>
				<option id="">Please select a value</option>
				<option id="home">Home</option>
				<option id="work">Work</option>
				<option id="other">Other</option>
			</options>
		</field>
	</repeat>
	
	<!-- new MMI repeatable telephone number group -->
	<repeat id="telephoneNumberGroupList/telephoneNumberGroup">
		<field id="telephoneNumber">
			<selector>contactAuthority-telephoneNumber</selector>
		</field>
		<field id="telephoneNumberType">
			<selector>contactAuthority-telephoneNumberType</selector>
			<options>
				<option id="">Please select a value</option>
				<option id="home">Home</option>
				<option id="mobile">Mobile</option>
				<option id="work">Work</option>
				<option id="other">Other</option>
			</options>
		</field>
	</repeat>
	
	<!-- new MMI repeatable fax number group -->
	<repeat id="faxNumberGroupList/faxNumberGroup">
		<field id="faxNumber">
			<selector>contactAuthority-faxNumber</selector>
		</field>
		<field id="faxNumberTypeType">
			<selector>contactAuthority-faxNumberType</selector>
			<options>
				<option id="">Please select a value</option>
				<option id="home">Home</option>
				<option id="work">Work</option>
				<option id="other">Other</option>
			</options>
		</field>
	</repeat>
	
	<!-- new MMI repeatable web group -->
	<repeat id="webGroupList/webGroup">
		<field id="web">
			<selector>contactAuthority-web</selector>
		</field>
		<field id="webType">
			<selector>contactAuthority-webType</selector>
			<options>
				<option id="">Please select a value</option>
				<option id="home">Home</option>
				<option id="work">Work</option>
				<option id="other">Other</option>
			</options>
		</field>
	</repeat>
	
	<!-- new MMI repeatable address group -->
	<repeat id="addressGroupList/addressGroup">
		<field id="addressPlace">
			<selector>contactAuthority-addressPlace</selector>
		</field>
		<field id="addressPlace2">
			<selector>contactAuthority-addressPlace2</selector>
		</field>
		<field id="addressCity">
			<selector>contactAuthority-addressCity</selector>
		</field>
		<field id="addressState">
			<selector>contactAuthority-addressState</selector>
		</field>
		<field id="addressPostcode">
			<selector>contactAuthority-addressPostcode</selector>
		</field>
		<field id="addressCountry">
			<selector>contactAuthority-addressCountry</selector>
			<options>
				<option id="">Please select a value</option>
				<option id="home">Home</option>
				<option id="work">Work</option>
				<option id="other">Other</option>
			</options>
		</field>
	</repeat>
</section>

3. added to core-messages.properties

#Contact
contact: Contact
contact-emailGroupLabel: Email
contact-telephoneNumberGroupLabel: Telephone number
contact-faxNumberGroupLabel: Fax number
contact-webGroupLabel: Web address
contact-addressGroupLabel: Address line 1
contact-emailLabel: Email
contact-emailTypeLabel: Email type
contact-telephoneNumberLabel: Telephone number
contact-telephoneNumberTypeLabel: Telephone number type
contact-faxNumberLabel: Fax number
contact-faxNumberTypeLabel: Fax number type
contact-webLabel: Web address
contact-webTypeLabel: Web address type
contact-addressPlaceLabel: Address line 1
contact-addressPlace2Label: Address line 2
contact-addressCityLabel: City/Town/Municipality
contact-addressStateLabel: Province/Territory/State
contact-addressPostcodeLabel: Postcode
contact-addressCountryLabel: Country
contact-addressTypeLabel: Address type

4. added to PersonTemplate.html

<div class="info-column">
	<div class="info-column2-50 fl-force-left">
		<div class="info-pair">
			<div class="header">
				<div class="label csc-contact-emailGroup-label label"></div>
			</div>
			<div class="content">
				<table>
					<thead>
						<tr>
							<td class="csc-contact-email-label label"></td>
							<td class="csc-contact-emailType-label label"></td>
						</tr>
					</thead>
						
					<tbody>
						<tr class="csc-contact-emailGroup">
							<td><input type="text" class="input-alpha-table csc-contactAuthority-email" /></td>
							<td><select class="input-select csc-contactAuthority-emailType"><option value="">Options not loaded</option></select></td>
						</tr>
					</tbody>
				</table>
			</div>
		</div>
	
		<div class="info-pair">
			<div class="header">
				<div class="label csc-contact-telephoneNumberGroup-label label"></div>
			</div>
			<div class="content">
				<table>
					<thead>
						<tr>
							<td class="csc-contact-telephoneNumber-label label"></td>
							<td class="csc-contact-telephoneNumberType-label label"></td>
						</tr>
					</thead>
						
					<tbody>
						<tr class="csc-contact-telephoneNumberGroup">
							<td><input type="text" class="input-alpha-table csc-contactAuthority-telephoneNumber" /></td>
							<td><select class="input-select csc-contactAuthority-telephoneNumberType"><option value="">Options not loaded</option></select></td>
						</tr>
					</tbody>
				</table>
			</div>
		</div>
	</div>
	
	<div class="info-column2-50 fl-force-right">
		<div class="info-pair">
			<div class="header">
				<div class="label csc-contact-faxNumberGroup-label label"></div>
			</div>
			<div class="content">
				<table>
					<thead>
						<tr>
							<td class="csc-contact-faxNumber-label label"></td>
							<td class="csc-contact-faxNumberType-label label"></td>
						</tr>
					</thead>
						
					<tbody>
						<tr class="csc-contact-faxNumberGroup">
							<td><input type="text" class="input-alpha-table csc-contactAuthority-faxNumber" /></td>
							<td><select class="input-select csc-contactAuthority-faxNumberType"><option value="">Options not loaded</option></select></td>
						</tr>
					</tbody>
				</table>
			</div>
		</div>
		
		<div class="info-pair">
			<div class="header">
				<div class="label csc-contact-webGroup-label label"></div>
			</div>
			<div class="content">
				<table>
					<thead>
						<tr>
							<td class="csc-contact-web-label label"></td>
							<td class="csc-contact-webType-label label"></td>
						</tr>
					</thead>
						
					<tbody>
						<tr class="csc-contact-webGroup">
							<td><input type="text" class="input-alpha-table csc-contactAuthority-web" /></td>
							<td><select class="input-select csc-contactAuthority-webType"><option value="">Options not loaded</option></select></td>
						</tr>
					</tbody>
				</table>
			</div>
		</div>
	</div>
	<div class="clear"></div>
</div>

<div class="info-column">
	<div class="info-pair">
		<div class="header">
			<div class="label csc-contact-addressGroup-label label"></div>
		</div>
		<div class="content">
			<table>
				<thead>
					<tr>
						<td class="csc-contact-addressPlace-label label"></td>
						<td class="csc-contact-addressPlace2-label label"></td>
						<td class="csc-contact-addressCity-label label"></td>
						<td class="csc-contact-addressState-label label"></td>
						<td class="csc-contact-addressPostcode-label label"></td>
						<td class="csc-contact-addressCountry-label label"></td>
						<td class="csc-contact-addressType-label label"></td>
					</tr>
				</thead>
					
				<tbody>
					<tr class="csc-contact-addressGroup">
						<td><input type="text" class="input-alpha-table csc-contactAuthority-addressPlace" /></td>
						<td><input type="text" class="input-alpha-table csc-contactAuthority-addressPlace2" /></td>
						<td><input type="text" class="input-alpha-table csc-contactAuthority-addressCity" /></td>
						<td><input type="text" class="input-alpha-table csc-contactAuthority-addressState" /></td>
						<td><input type="text" class="input-alpha-table csc-contactAuthority-addressPostcode" /></td>
						<td><input type="text" class="input-alpha-table csc-contactAuthority-addressCountry" /></td>												
						<td><select class="input-select csc-contactAuthority-addressType"><option value="">Options not loaded</option></select></td>
					</tr>
				</tbody>
			</table>
		</div>
	</div>
</div>