= Metadata status: capturing the lifecycle of a metadata record = || '''Date''' || 2011/12/12 || || '''Contact(s)''' || Simon Pigot || || '''Last edited''' || 2011-12-12T19:10:00 || || '''Status''' || in progress || || '''Assigned to release''' || 2.7 || || '''Resources''' || Resources available || || '''Ticket #''' || #XYZ || == Overview == Metadata records have a lifecycle that typically goes through one or more states. eg when a record is created and edited by an 'Editor' user it is in the 'Draft' state. Whilst it is reviewed by a 'Content Reviewer' user it would typically be in a 'Submitted' state. If the record is found to be complete and correct by the 'Content Reviewer' it would be in the 'Approved' state and may be made available for casual search and harvest by assigning privileges to the GeoNetwork 'All' group. Eventually, the record may be superseded or replaced and the state would be 'Retired'. At present GeoNetwork doesn't have a formal process by which the state of the record can be captured during this workflow. This proposal is about: * adding state (or status) to records in GeoNetwork: 'Unknown', 'Draft', 'Submitted', 'Approved', 'Rejected', 'Retired' * providing email notifications to different users when status changes eg. when status changes from 'Draft' or 'Unknown' to 'Submitted' then all relevant 'Content Reviewers' are notified via email === Proposal Type === * '''Type''': GUI Change, Core Change * '''App''': !GeoNetwork * '''Module''': eg. Kernel, Data Manager, Metadata Import, Lucene Index, Search Interface === Voting History === * Not yet proposed for voting. ---- == Motivations == GeoNetwork already has some components of a metadata workflow in the form of: * users have a profile that gives them different levels of privilege over a metadata record eg. only a content reviewer (or admin) profile user can assign rights to a metadata record that would allow an unregistered user to see the record in search ie. only a content reviewer can assign rights to the special GeoNetwork groups 'All' or 'Internet' This proposal adds: * a status value for any metadata record describing its current state in a lifecycle that ranges from 'Draft' or 'Unknown' through 'Submitted', 'Approved', 'Rejected' and 'Retired' - the history of status changes is kept in the MetadataStatus table ie. the most recent status change is the current status. * Users with different profiles can set the status on one record through the or any number of selected records through the 'Actions on selected records' * Notification of status change to relevant users: * When an 'Editor' changes the state on a metadata record(s) from 'Draft' or 'Unknown' to 'Submitted', the Content Reviewers from the groupOwner of the record are informed of the status change via email * When a 'Content Reviewer' changes the state on a metadata record(s) from 'Submitted' to 'Accepted' or 'Rejected', the owner of the metadata record is informed of the status change via email AND the group 'All' is assigned all privileges except 'Editing' (ie. the record is publicly accessible) * Any metadata record with status 'Approved' is reset to status 'Draft' if the record is edited (without the 'Minor Edit' check box) and saved ALSO privileges for the group 'All' are removed. === Backwards Compatibility Issues === None - metadata records receive status 'Unknown' by default. === New libraries added === None. == Risks == Everything is risky.. == Participants == * Simon Pigot, CSIRO Marine and Atmospheric Research * LISASoft (James Sewell) for review