RecordManager is a metadata record management system intended to be used in conjunction with VuFind.

Related tags

API RecordManager
Overview

RecordManager

RecordManager is a metadata record management system intended to be used in conjunction with VuFind. It can also be used as an OAI-PMH repository and a generic metadata management utility.

See the RecordManager wiki for more information and OAI-PMH provider setup.

For a stable version, see the stable branch.

General Installation

  • Minimum supported PHP version is 7.3.
  • Composer is required for dependencies. Run composer install (or php /path/to/composer.phar install) in the directory where RecordManager is installed.
  • The following PHP modules are required: xml, xslt, mbstring, intl
  • The following PECL module is required for MongoDB support: mongodb
  • With MongoDB, the minimum supported version is 3.6. Older versions may still work, but session = false needs to be specified in recordmanager.ini.

Upgrading

Generally upgrading should be straightforward by replacing the old version with the new one and running composer install (or php /path/to/composer.phar install). With MongoDB you need to manually check that all indexes are present (see dbscripts/mongo.js). With MySQL/MariaDB make sure all tables are present (see dbscripts/mysql.sql).

Note that since 8 Jul 2021 there is a new method for tracking updates of deduplicated records. Since RecordManager no longer uses the old method, there may be old tracking collections left dangling. With Mongo shell with the correct database active, you can use the following script to remove them:

var count = 0;
db.getCollectionNames().forEach(function(c) {
    if (c.match("^tmp_mr_record") || c.match("^mr_record")) {
        db.getCollection(c).drop();
        count++;
    }
});
print(count + " collections dropped");

With MySQL/MariaDB you can identify the tables with the following SQL query:

show tables like '%mr_record_%';

You can then use the drop table command to remove them.

Installation Notes on CentOS 7

These are quick instructions on how to set up RecordManager. Please refer to the wiki pages for more information on the configuration and setup of RecordManager.

  • Required PHP packages: php php-pear php-xml php-xsl php-devel php-mbstring php-intl

    yum install php php-pear php-xml php-devel php-mbstring php-intl
    
  • Required PHP packages for polygon simplification in NominatimGeocoder (optional):

    yum install geos geos-php
    

    Note that as of September 2017 CentOS comes with geo 3.4.2 which has memory leaks and problems with polygon simplification, so building at least version 3.6.2 from source is recommended (see https://trac.osgeo.org/geos). With PHP 7 a recent version of GEOS PHP bindings from https://git.osgeo.org/gogs/geos/php-geos is required anyway. yum install geos-devel will be needed to compile the bindings unless GEOS is installed from source.

  • MongoDB support

    RecordManager supports both MongoDB (recommended) and any MySQL compatible database. You may opt to skip the MongoDB requirements if you only use MySQL.

    • Required pecl modules for MongoDB support: mongodb

      E.g. remi repos include a package for mongodb:

      yum install php74-php-pecl-mongodb

      Webtatic too:

      yum install php74w-pecl-mongodb

      If there's no package available, use pecl to install mongodb:

      yum install gcc make pecl install mongodb

      Either way, make sure it's at least v1.2.0. Earlier versions have problems with pcntl.

    • Add the extension=mongodb.so line to /etc/php.d/mongodb.ini

    • Install MongoDB from 10gen repositories (see http://www.mongodb.org/display/DOCS/CentOS+and+Fedora+Packages)

    • Adjust MongoDB settings as needed

  • Copy RecordManager to /usr/local/RecordManager/

  • Run composer install to install PHP dependencies. If you did not install the mongodb module above, you can also use composer install --ignore-platform-reqs to force package installation even if the underlying dependencies are missing.

  • MongoDB: Create indexes with dbscripts/mongo.js

    mongo recman dbscripts/mongo.js
    
  • MySQL: Create tables and indexes with dbscripts/mysql.sql and add a user

    mysql
    create database recman;
    use recman
    source dbscripts/mysql.sql;
    create user 'recman'@'localhost' identified by '
         
          ';
    grant all on recman.* to 'recman'@'localhost';
    
         
  • Copy conf/recordmanager.ini.sample to conf/recordmanager.ini and modify the settings to suit your needs.

  • Copy conf/datasources.ini.sample to conf/datasources.ini and modify the settings to suit your needs.

  • Start using the system by executing e.g.

    ./console records:harvest --source=datasource_id
    

    or

    ./console records:import datasource_id filename
    
  • Deduplicate the records:

    ./console records:deduplicate
    
  • Update Solr index:

    ./console solr:update-index
    

Creating Additional Modules

RecordManager supports modules that can modify and add new functionality. Active modules are specified in conf/modules.config.php. You can copy the provided conf/modules.config.php.sample to conf/modules.config.php and modify it accordingly.

A minimal module ("Sample" in this example) consists of the following file:

src/RecordManager/Sample/Module.php

The file needs to contain a Module class that provides the module configuration:

This, alone, doesn't really do anything. Please see the Customizing RecordManager wiki page for further information. See also the Finna module for an example of a module that does a number of different things.

Comments
  • Multiple institutions from one data source

    Multiple institutions from one data source

    I have content coming from several different institutions, but they all use just a single OAI-PMH repository. Using OAI-PMH sets is unfortunately not possible. The institution data is available in the metadata, but I cannot override it in the record driver because RecordManager forces the institution name it finds in datasources.ini (even if it's empty).

    I could use a separate field for institutions extracted from the metadata, but 'institution' is the default field used by the discovery interface I'm using (VuFind) and I don't feel like breaking the convention is good practice. How could I extract the institutions into the correct field in this case?

    opened by EeroHeikkinen 4
  • Turning on other harvesters

    Turning on other harvesters

    Hi, We use a different harvester for Overdrive that overrides the AbstractBase. In order to use it, I overrode the harvest controller and then changed the harvest.php script to point to my controller. It seems like maybe there is a better way to do that for long-term maintenance. For Sierra, there is a "type" that switches on the SierraAPI Harvester. Maybe some other configuration that can switch on my Overdrive one… specifying the class maybe? I haven't figured it out, but I thought I'd mention in case you have a good idea.

    opened by bpalme 3
  • Fix line-based leader processing in line-based MARC formatter.

    Fix line-based leader processing in line-based MARC formatter.

    I discovered that the line-based MARC formatter had a hard-coded assumption about leaders which is not correct for the GeniePlus format, so I added another configuration setting to correct for this.

    opened by demiankatz 2
  • [ALLI-5944] EAD3: index origination to authors

    [ALLI-5944] EAD3: index origination to authors

    author2 palautetaan tyhjänä koska muuten origination>persname indeksoituisi myös sinne Base/Ead3:n kautta: https://github.com/NatLibFi/RecordManager/blob/dev/src/RecordManager/Base/Record/Ead3.php#L284

    opened by samuli 2
  • [ALLI-6465] LRMI driver

    [ALLI-6465] LRMI driver

    • LRMI-spesifit kentät (educational_*_str_mv) indeksoidaan dynaamisina. Näitä käytetään myös fasetoinnissa. Voidaan lisätä skeemaan tarvittaessa. https://github.com/NatLibFi/RecordManager/pull/51/files#diff-5b98428e89f3791ae68bc894f2c5f1cbR146
    opened by samuli 2
  • LidoRecord refinement + unit test

    LidoRecord refinement + unit test

    Some refinements to Lido Record driver + Unit test to make sure everything is working. If you have installed phpunit you can run tests by running "phpunit tests" in the root directory. More to come!

    opened by EeroHeikkinen 2
  • [ALLI-7731] Refactor Skosmos enrichment.

    [ALLI-7731] Refactor Skosmos enrichment.

    • Makes it possible to filter terms by language.
    • Uses JSON-LD records for locally stored entities as well as remotely fetched ones.
    • Uses a proper JSON-LD parser.
    • Simplifies the local repository import process.
    • Stores local records as PHP serialized objects for quick retrieval (it's slow to create an object from plain JSON-LD since it requires a lot of validation)
    • Unifies topic and geographic id handling across record classes and makes the SkosmosEnrichment base class work as a format-agnostic enrichment.
    • Retains backward-compatibility with OnkiLightEnrichment settings.
    opened by EreMaijala 1
  • Add AbstractRecord::getExtraFields function

    Add AbstractRecord::getExtraFields function

    Tein tämmösen pr:n liittyen tuohon linkitettyyn pr:ään, että datasourcessa oleva rajoitus tulis mukaan deduplikointiin. Ajattelin et tästä vois olla hyötyä myös jos tää on basessa.

    opened by LuomaJuha 1
  • [ALLI-6920] OnkiLightEnrichment: enrich records with available WGS 84 data

    [ALLI-6920] OnkiLightEnrichment: enrich records with available WGS 84 data

    Few notes:

    1. OnkiLightEnrichment may yield many points to location_geo field in case $localData is false but only the first one is considered the centroid one (if none exists before).
    2. OnkiLightEnrichment: as class variables solrLocationField and solrCenterField are initialized in the class file, I believe that pre-existing installations of RecordManager will readily use them without configuration changes. This may or may not introduce unwanted consequences.
    3. Enrichment\NominatimGeocoder will now check for pre-existing centroid value and add polygon(s) to Solr location field only if the centroid is included in the polygon.
    4. Additionally [related to ALLI-6920], if, for example, NominatimCoder is wanted to be applied after, let's say, MarcOnkiLightEnrichment, one must pay attention to how enrichments are added and their respective execution order: a. Globally declared enrichments added via Solr configuration enrichment array are called "first" (of course setting the enrichment stage affects this in a way), see code below: https://github.com/NatLibFi/RecordManager/blob/b7913fdcabdc6f9128e59fc0b6384af908fc0633/src/RecordManager/Base/Solr/SolrUpdater.php#L2754-L2775 b. In order to tackle some issues described in a), one could just simply add enrichments via numbers, e.g., enrichments[n] = MarcOnkiLightEnrichment; enrichments[n+1] = NominatimGeocoder; however, this method is not powerful enough to 'beat' the boundary of globally declared enrichments and datasource enrichments. Solely on the datasource configuration side, however, this would work.

    All in all, please note that any Solr field value is left unchanged and may not be updated by the code - only additions are made.

    opened by kouralex 1
  • Refactor line-based MARC formatting to helper class.

    Refactor line-based MARC formatting to helper class.

    This PR refactors line-based MARC formatting logic to a separate helper class, fixes some bugs along the way, and adds tests.

    The tests could probably be improved by moving test data to fixture files -- I did everything inline because I wasn't sure of the best locations for the files.

    I also wasn't sure how to test the CreatePreview controller, so that part of the refactoring is currently untested.

    opened by demiankatz 1
  • New Option for harvest to not pull deleted

    New Option for harvest to not pull deleted

    Hi, It would be nice to add in an option (or possibly an automatic configuration when reharvesting?) to the SierraAPI harvester that does not pull deleted records. When we do a full reharvest, we have to churn through 300K deleted records. Someday I'll try to do a PR.

    Thanks, Brent

    opened by bpalme 1
Owner
National Library of Finland
Repositories of the National Library of Finland (Reporting security issues: https://www.helsinki.fi/en/it/information-security-contact-details)
National Library of Finland
Official docker container of Fusio an open source API management system

Fusio docker container Official docker container of Fusio. More information about Fusio at: https://www.fusio-project.org Usage The most simple usage

Apioo 28 Dec 13, 2022
A list of all the Belgian stations and their properties used within the iRail project

All stations in Belgium We try to maintain a list of all the stations in Belgium using CSV so everyone can help to maintain it on github. Furthermore,

null 33 Nov 16, 2022
Open source API management platform

About Fusio is an open source API management platform which helps to build and manage REST APIs. Fusio provides all tools to quickly build an API from

Apioo 1.2k Jan 4, 2023
DreamFactory API Management Platform

Instant APIs without code Docs ∙ Try Online ∙ Contribute ∙ Community Support ∙ Get Started Guide Table of Contents Platform Overview Installation Opti

DreamFactory Software, Inc. 1.3k Dec 30, 2022
Petstore is a sample API that simulates a pet shop management server🐶

Petstore is a sample API that simulates a pet shop management server. The API allows you to access Petstore data using a set of individual calls

Wilmer Rodríguez S 1 Jan 8, 2022
Most Advance online restaurant menu, food delivery system, online restaurant menu, free online restaurant menu, free online restaurant menu app, online restaurant menu service provider

Buffet Box online menu and cloud kitchen Most Advance online restaurant menu, online restaurant menu, free online restaurant menu, free online restaur

null 20 Oct 28, 2022
System to control your app from site

ProgramManager System to control your app from site You can add more featutre and develop page you must use DataBase mysql 3 columns , 1 for id ( AI c

OmarMazin 4 Mar 17, 2022
MY WAY , it is an Online bus ticket reservation system

MY WAY , it is an Online bus ticket reservation system. It is supposed to execute the common function of bus ticket reservation in reality. It is a Web based application that works within a centralized network. This project will have the facility which is used to reserve seats, cancellation of reservation and different types of route enquiries used on securing quick reservations.

Sh Tanmoy 2 Feb 12, 2022
YCOM Impersonate. Login as selected YCOM user 🧙‍♂️in frontend.

YCOM Impersonate Login as selected YCOM user in frontend. Features: Backend users with admin rights or YCOM[] rights, can be automatically logged in v

Friends Of REDAXO 17 Sep 12, 2022
An intermediate/advanced look at how to use Angular JS in conjunction with a server-side.

end-to-end-with-angularjs This repository covers material in 2 screencasts, End to End with Angular JS Security with Angular JS This is an extension o

David Mosher 446 Apr 4, 2022
Open source medical record system on CakePHP (OMCAKE)

omcake v0.1 小さな診療所用の電子カルテ(もどき)です。 奥村晴彦先生のtwitter オープンソースの電子カルテシステムで、WebベースでクライアントOSを選ばず、 サーバは普通のLinuxで動くPHPとか、ないんだろうか。 で唐突に召喚され、それ、ウチにありますけど〜、とノコノコ出てき

古林 敬一 7 Aug 16, 2022
:panda_face: Jitamin is a free software written in PHP, intended to handle the project management over the web. QQ群: 656868

Jitamin Jitamin (pronounced /ˈdʒɪtəmɪn/) is a free software written in PHP, intended to handle the project management over the web. Jitamin is inspire

jitamin 916 Dec 14, 2022
HashOver is a PHP comment system intended as a replacement for services like Disqus.

HashOver is a PHP comment system intended as a replacement for services like Disqus. HashOver is free and open source software, under the GNU Affero General Public License. HashOver adds a "comment section" to any website, by placing a few simple lines of JavaScript or PHP to the source code of any webpage. HashOver is a self-hosted system and allows completely anonymous comments to be posted, the only required information is the comment itself.

Jacob Barkdull 410 Dec 25, 2022
A high-performance backend cache system. It is intended for use in speeding up dynamic web applications by alleviating database load.

A high-performance backend cache system. It is intended for use in speeding up dynamic web applications by alleviating database load. Well implemented, it can drops the database load to almost nothing, yielding faster page load times for users, better resource utilization. It is simple yet powerful.

PHPSocialNetwork 2.3k Dec 30, 2022
Simple handler system used to power clients and servers in PHP (this project is no longer used in Guzzle 6+)

RingPHP Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function. RingPHP be used to power HTTP clie

Guzzle 846 Dec 6, 2022
NukeViet 132 Nov 27, 2022
Laravel-Library-Management-system is nice to management library system...

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

Eng Hasan Hajjar 2 Sep 30, 2022
Record your test suite's HTTP interactions and replay them during future test runs for fast, deterministic, accurate tests.

This is a port of the VCR Ruby library to PHP. Record your test suite's HTTP interactions and replay them during future test runs for fast, determinis

php-vcr 1.1k Dec 23, 2022
Record the change log from models in Laravel

This package will help you understand changes in your Eloquent models, by providing information about possible discrepancies and anomalies that could

Owen IT Services 2.5k Dec 30, 2022