Koha-clms/Koha
Marcel de Rooy 01fbe2be99 Bug 10306: Core module changes for multiple mappings
In order to allow multiple Koha to MARC mappings (for one kohafield), we
need to adjust a few key routines in C4/Biblio.pm. This results in a few
changes in dependent modules too.

Note: Multiple mappings also include 'alternating' mappings. Such as the
case of MARC21 260 and 264: only one of both fields will be used. Sub
TransformMarcToKoha will handle that just fine; the opposite transformation
is harder, since we do no longer know which field was the source. In that
case TransformKohaToMarc will fill both fields. We only use that operation
in Koha for items (in Acquisition and Cataloging).

Sub GetMarcSubfieldStructure
This sub used a selectall_hashref, which is fine as long as we have only
one mapping for each kohafield. But as DBI states it: If a row has the same
key as an earlier row then it replaces the earlier row. In other words,
we lose the first mapping if we have two.
This patch uses selectall_arrayref with Slice and rearranges the output so
that the returned hash returns an arrayref of hashrefs for each kohafield.
In order to improve consistency, we add an order clause to the SQL
statement used too.

Sub GetMarcFromKohaField
This sub just returned one tag and subfield, but in case of multiple
mappings we should return them all now.
Note: Many calls still expect just one result and will work just fine:
    my ($tag, $sub) = GetMarcFromKohaField(...)
A possible second mapping would be silently ignored. Often the sub is
called for biblionumber or itemnumber. I would not recommend the use of
multiple mappings for such fields btw.
In case the sub is called in scalar context, it will return only the first
tag (instead of the number of tags and subfields).

Sub GetMarcSubfieldStructureFromKohaField
This sub previously returned the hash for one kohafield.
In scalar context it will behave like before: it returns the first hashref
in the arrayref that comes from GetMarcSubfieldStructure.
In list context, it returns an array of all hashrefs (incl. multiple
mappings).
The sub is not used in C4::Ris. Removed the use statement.

Sub TransformKohaToMarc
This sub got a second parameter: frameworkcode.
Historically, Koha more or less assumes kohafields to be defined across all
frameworks (see Koha to MARC mappings). Therefore it falls back to Default
when it is not passed.
When going thru all mappings in building a MARC record, it also supports
multiple mappings. Note that Koha uses this routine in Acquisition and in
Cataloging for items. Normally the MARC record is leading however and the
Koha fields are derivatives for optimization and reporting.

The added third parameter allows for passing a new option no_split => 1.
We use this option in C4::Items::Item2Marc; if two item fields are mapped to
one kohafield but would have different values (which would be very unusual),
these values are glued together. When transforming to MARC again, we do not
want to duplicate the item subfields, but we keep the glued value in both
subfields. This operation only affects items, since we are not doing this
reverse operation for biblio and biblioitem fields.

Sub _get_inverted_marc_field_map
This sub is a helper routine of TransformMarcToKoha, the opposite
transformation. When saving a MARC record, all kohafields are extracted
including multiple mappings.
Suppose that you had both 260c and 264c in your record (which you won't),
than both values get saved initially into copyrightdate like A | B. The
additional code for copyrightdate will extract the first year from this
string.
A small fix in TransformMarcToKoha makes that it only saves a value in a
kohafield if it is defined and not empty. (Same for concatenation.)

Sub TransformMarcToKohaOneField
This sub now just calls TransformMarcToKoha and extracts the requested
field. Note that since we are caching the structure, this does not result
in additional database access and is therefore performance-wise
insignificant. We simplify code and maintenance.
Instead of modifying the passed hashref, it simply returns a value. A call
in C4::Breeding is adjusted accordingly. The routine getKohaField in
Koha::MetadataRecord is redirected to TransformMarcToKohaOneField.
NOTE: The fourth patch restructures/optimizes TransformMarcToKoha[OneField].

Sub get_koha_field_from_marc
This sub can be removed. A call is replaced by TransformMarcToKohaOneField
in C4::XISBN.

Note: The commented lines for sub ModZebrafiles are removed (directly under
TransformMarcToKohaOneField).

Test plan:
For unit tests and interface tests, please see follow-ups.
Run qa tools in order to verify that the modules still compile well.
Read the code changes and verify that they make sense.

Signed-off-by: Josef Moravec <josef.moravec@gmail.com>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
2017-12-07 14:44:15 -03:00
..
Account Bug 14826: (QA follow-up) POD fixes 2017-10-20 17:14:32 -03:00
Acquisition Bug 15685: (QA follow-up) Address QA issues 2017-10-11 13:08:47 -03:00
ArticleRequest Bug 14610 - Add and update modules 2016-10-26 12:15:13 +00:00
Authority Bug 18811: [QA Follow-up] Resolved POD warnings 2017-09-12 11:30:40 -03:00
Biblio Bug 17196: Move marcxml out of the biblioitems table 2017-01-13 13:49:26 +00:00
BiblioUtils Bug 17196: [QA Follow-up] Adjust some text on marcxml 2017-01-13 13:49:30 +00:00
Cache Bug 16088: Introduce Koha::Cache::Memory::Lite to cache the language 2016-06-04 07:43:22 +00:00
Club Bug 19214: prevent crash if club_template_field is called in list context 2017-09-07 14:15:59 -03:00
Config Bug 11998: Use Koha::Cache to cache sysprefs 2016-03-15 07:08:28 +00:00
Edifact Bug 15685: (follow-up) K:A:O->find and ->fetch are no longer used 2017-10-11 13:08:46 -03:00
Exceptions Bug 7317: Handle missing email addresses gracefuly 2017-11-09 11:42:15 -03:00
Exporter Bug 19040: Refactor GetMarcBiblio parameters 2017-08-25 10:23:42 -03:00
ExternalContent bug_16034 Koha::ExternalContent::OverDrive - a wrapper around WebService::ILS::Overdrive::Patron 2017-02-21 19:58:20 +00:00
Filter/MARC Bug 18579: Fix call to append_fields, fix tests 2017-05-12 08:43:18 -04:00
Illrequest Bug 7317: Remove traces of UnmediatedILL 2017-11-09 11:42:16 -03:00
Indexer Revert Bug 11081 - Port Koha::Contrib::Tamil indexer into Koha code base 2016-03-01 16:56:35 +00:00
Item Bug 16686: Add Koha::Object based class for Koha::Item::Transfer[s] 2016-09-02 13:56:03 +00:00
List Bug 19528: Fix a few typos like corrosponding 2017-10-27 14:09:04 -03:00
MetadataRecord Bug 17380: Do not use GuessAuthTypeCode in MetadataRecord::Authority 2017-09-12 12:07:47 -03:00
Middleware Bug 16520 (Follow up) Rebase fixes 2016-10-11 12:37:17 +00:00
Misc Bug 16011: $VERSION - Remove use vars qw(); 2016-03-24 17:20:39 +00:00
Notice Bug 17959 - Add the Koha::Notice::Message[s] packages (message_queue table) 2017-02-17 11:48:44 +00:00
Number Bug 18900: wrong number format in receiving order 2017-08-10 13:20:32 -03:00
OAI/Server Bug 17807: [Follow-up] Use marcxml for marc21 prefix 2017-08-30 15:06:40 -03:00
Object/Limit Bug 17755: (QA followup) Return $self when appropriate 2017-03-24 18:32:46 +00:00
Old Bug 17796: Move Koha::OldIssue[s] to Koha::Checkout[s] 2016-12-20 15:13:29 +00:00
Patron Bug 19059: Move C4::Reserves::CancelReserve to Koha::Hold->cancel 2017-09-12 12:42:58 -03:00
Plugins Bug 17989: Include full path logic in _get_template_file 2017-11-01 13:10:17 -03:00
QueryParser/Driver Bug 17664: Silence non-zebra warnings in t/db_dependent/Search.t 2017-10-06 12:09:57 -03:00
REST Bug 7317: QA followup 2017-11-09 11:42:14 -03:00
RecordProcessor Bug 16011: $VERSION - Remove the $VERSION init 2016-03-24 17:20:28 +00:00
SMS Bug 15548 [QA Followup] - More new uses of Koha::Borrower 2016-03-03 14:39:00 -07:00
Schema/Result Bug 19724: DBIC Schema changes 2017-12-07 10:26:53 -03:00
SearchEngine Bug 19559: Add '-' to list of characters we don't split search terms on 2017-11-26 12:59:46 -03:00
Serial Bug 7677: QA followup 2016-09-12 09:13:57 +00:00
Sitemapper Bug 11190: (QA followup) for tests on jenkins 2015-08-31 10:32:34 -03:00
Subscription Bug 15446: (follow-up) Rename Koha::Object[s]->type with _type 2016-02-12 12:35:57 -07:00
SuggestionEngine Bug 9857 - Follow-up - Fix for searches with su= or su: 2017-09-01 13:02:24 -03:00
Template/Plugin Bug 19655: Make To.json escape doesn't escape newlines to create valid JSON 2017-11-26 12:59:04 -03:00
Util Bug 17302: [Follow-up] Make Normalize.pm undef-resistent 2016-09-25 14:04:54 +00:00
Account.pm Bug 14826: (QA follow-up) Only use plural modules in other modules 2017-10-20 17:14:32 -03:00
AdditionalField.pm Bug 10855: Remove additional field values when subscription is removed 2015-10-02 15:10:31 -03:00
ArticleRequest.pm Bug 17762: Send lang to GetPreparedLetter 2017-05-09 20:56:41 +00:00
ArticleRequests.pm Bug 14610 - Add and update modules 2016-10-26 12:15:13 +00:00
AudioAlert.pm Bug 15446: Rename Koha::Object[s]->type with _type 2016-02-12 12:35:57 -07:00
AudioAlerts.pm Bug 15446: Rename Koha::Object[s]->type with _type 2016-02-12 12:35:57 -07:00
AuthUtils.pm Bug 18298: Add server-side checks and refactor stuffs 2017-10-16 09:44:32 -03:00
AuthorisedValue.pm Bug 17935: Adjust some POD lines, fix a few typos 2017-02-14 14:12:50 +00:00
AuthorisedValueCategories.pm Bug 17216: Add Koha::AuthorisedValueCategory|ies classes 2016-10-11 07:30:30 +00:00
AuthorisedValueCategory.pm Bug 17216: Add Koha::AuthorisedValueCategory|ies classes 2016-10-11 07:30:30 +00:00
AuthorisedValues.pm Bug 17642: Do not explode if no authorised value exist 2016-11-18 15:52:01 +00:00
Authorities.pm Bug 9988: Add get_usage_count and linked_biblionumbers to Koha::Authority 2017-04-13 08:53:46 -04:00
Authority.pm Bug 9988: Add get_usage_count and linked_biblionumbers to Koha::Authority 2017-04-13 08:53:46 -04:00
Biblio.pm Bug 19040: Refactor GetMarcBiblio parameters 2017-08-25 10:23:42 -03:00
BiblioFramework.pm Bug 15446: (follow-up) Rename Koha::Object[s]->type with _type 2016-02-12 12:35:57 -07:00
BiblioFrameworks.pm Bug 14889: Fix typo in Koha/BiblioFrameworks.pm 2016-03-03 20:32:47 +00:00
BiblioUtils.pm Bug 19040: Refactor GetMarcBiblio parameters 2017-08-25 10:23:42 -03:00
Biblioitem.pm Bug 15446: Rename Koha::Object[s]->type with _type 2016-02-12 12:35:57 -07:00
Biblioitems.pm Bug 15446: Rename Koha::Object[s]->type with _type 2016-02-12 12:35:57 -07:00
Biblios.pm Bug 14610 - Add and update modules 2016-10-26 12:15:13 +00:00
Cache.pm Bug 17935: Adjust some POD lines, fix a few typos 2017-02-14 14:12:50 +00:00
Caches.pm Bug 17935: Adjust some POD lines, fix a few typos 2017-02-14 14:12:50 +00:00
Calendar.pm Bug 9031: (QA follow-up) Final changes to Calendar::days_between 2017-10-27 14:09:04 -03:00
Checkout.pm Bug 18401: Add new method Koha::Checkout->patron 2017-04-28 08:58:46 -04:00
Checkouts.pm Bug 14757 - Allow the use of Template Toolkit syntax for slips and notices 2016-07-08 13:47:42 +00:00
Cities.pm Bug 15446: Rename Koha::Object[s]->type with _type 2016-02-12 12:35:57 -07:00
City.pm Bug 15446: Rename Koha::Object[s]->type with _type 2016-02-12 12:35:57 -07:00
Club.pm Bug 18870: Force scalar context for Koha::Club methods 2017-07-06 14:29:01 -03:00
Clubs.pm Bug 18557 [QA Followup] - Use dt_from_string 2017-05-12 08:53:21 -04:00
Config.pm Bug 11921: (followup) Don't die on non-existent koha-conf.xml 2016-09-09 13:56:13 +00:00
CsvProfile.pm Bug 15451: Add the 2 new modules Koha::CsvProfile[s] 2016-07-22 17:18:34 +00:00
CsvProfiles.pm Bug 15451: Add the 2 new modules Koha::CsvProfile[s] 2016-07-22 17:18:34 +00:00
Database.pm Bug 18285: Koha::Database schema cache accessors 2017-06-05 17:26:14 -03:00
DateUtils.pm Bug 17502: Add info when throwing the exception 2017-04-21 07:36:25 -04:00
EDI.pm Bug 15685: (QA follow-up) Address QA issues 2017-10-11 13:08:47 -03:00
Edifact.pm Bug 7736: Support Ordering via Edifact EDI messages 2016-04-01 20:03:17 +00:00
Email.pm Bug 9530: Adding a new Koha::Email module 2014-10-27 10:38:14 -03:00
Exceptions.pm Bug 17989: Centralize bad template check 2017-11-01 13:10:17 -03:00
ExternalContent.pm bug_16034 Koha::ExternalContent::OverDrive - a wrapper around WebService::ILS::Overdrive::Patron 2017-02-21 19:58:20 +00:00
FieldMapping.pm Bug 18269: Add Koha::FieldMapping[s] packages 2017-03-31 10:19:59 +00:00
FieldMappings.pm Bug 18269: Add Koha::FieldMapping[s] packages 2017-03-31 10:19:59 +00:00
FrameworkPlugin.pm Bug 9006: Remove AUTOLOAD in C4::Context 2015-07-20 10:11:41 -03:00
Hold.pm Bug 16187: Do not use DateTime directly 2017-10-20 16:51:25 -03:00
Holds.pm Bug 16187: Add a script to cancel unfilled holds after a specified number of days 2017-10-20 16:51:20 -03:00
I18N.pm Bug 11848: (follow-up) update license statment 2014-05-05 04:51:42 +00:00
Illrequest.pm Bug 7317: (QA followup) Rename 'branch' for 'library' 2017-11-09 11:42:16 -03:00
Illrequestattribute.pm Bug 7317: Handle backend absense more gracefuly 2017-11-09 11:42:14 -03:00
Illrequestattributes.pm Bug 7317: QA followup 2017-11-09 11:42:14 -03:00
Illrequests.pm Bug 7317: QA followup 2017-11-09 11:42:14 -03:00
IssuingRule.pm Bug 15446: (follow-up) Rename Koha::Object[s]->type with _type 2016-02-12 12:35:57 -07:00
IssuingRules.pm Bug 17783: Prevent crash when providing an undefined value 2016-12-23 12:01:57 +00:00
Item.pm Bug 18402: Add the Koha::Item->checkout method 2017-04-28 09:01:35 -04:00
ItemType.pm Bug 17944: QA follow-up 2017-06-05 11:59:11 -03:00
ItemTypes.pm Bug 17835: Add an additional LEFT JOIN condition using DBIx::Class 2017-04-14 10:43:52 -04:00
Items.pm Bug 15446: Rename Koha::Object[s]->type with _type 2016-02-12 12:35:57 -07:00
Libraries.pm Bug 15758: Koha::Libraries - Move onlymine to C4::Context::only_my_library 2016-09-08 14:36:04 +00:00
Library.pm Bug 10132: (QA followup) Add POD to ->get_effective_marcorgcode 2017-09-19 09:47:28 -03:00
LibraryCategories.pm Bug 15446 [QA Followup] - Update new classes 2016-02-12 12:35:57 -07:00
LibraryCategory.pm Bug 15629: Koha::Libraries - Remove GetBranchesInCategory (1) 2016-02-24 03:55:05 +00:00
Linktracker.pm Bug 8917 : [ Sign followup ] Track clicks to links external to Koha 2013-03-07 11:14:25 -05:00
Localization.pm Bug 15446: Rename Koha::Object[s]->type with _type 2016-02-12 12:35:57 -07:00
Localizations.pm Bug 15446: Rename Koha::Object[s]->type with _type 2016-02-12 12:35:57 -07:00
Logger.pm Bug 17088: [Follow-up] Adjust POD in Logger.pm 2016-10-10 12:24:00 +00:00
MarcSubfieldStructure.pm Bug 17249: Remove GetKohaAuthorisedValuesFromField - Add classes MarcSubfieldStructure[s] 2016-10-21 15:13:55 +00:00
MarcSubfieldStructures.pm Bug 17249: Remove GetKohaAuthorisedValuesFromField - Add classes MarcSubfieldStructure[s] 2016-10-21 15:13:55 +00:00
MetaSearcher.pm Bug 16769: Uniformise calls to Koha::Cache->set_in_cache 2016-10-10 17:03:54 +00:00
MetadataIterator.pm Bug 12478 - authorities can now be stored in ES 2016-04-26 20:20:03 +00:00
MetadataRecord.pm Bug 10306: Core module changes for multiple mappings 2017-12-07 14:44:15 -03:00
MoreUtils.pm Bug 19069: (follow-up) Remove perlcritic error 2017-10-27 14:58:16 -03:00
News.pm Bug 14757 - Allow the use of Template Toolkit syntax for slips and notices 2016-07-08 13:47:42 +00:00
NewsItem.pm Bug 14757 - Allow the use of Template Toolkit syntax for slips and notices 2016-07-08 13:47:42 +00:00
NorwegianPatronDB.pm Bug 16011: $VERSION - Remove comments 2016-03-24 17:20:29 +00:00
Object.pm Bug 18174: Add update to Koha::Object 2017-03-31 14:13:53 +00:00
Objects.pm Bug 19209: Add ->is_paged method to Koha::Objects 2017-09-01 13:00:06 -03:00
Patron.pm Bug 14919: (QA follow-up) Make script executable, fix typo 2017-10-27 16:05:43 -03:00
Patrons.pm Bug 18554: Adjust a few typos including responsability 2017-05-09 21:03:22 +00:00
Plugins.pm Bug 19081: Do not list plugins that have been uninstalled 2017-09-01 13:02:27 -03:00
Rating.pm Bug 17089: Mark out the boundaries of ratings 2016-09-09 09:31:30 +00:00
Ratings.pm Bug 17089: Koha::Ratings - Remove GetRating 2016-09-09 09:31:29 +00:00
RecordProcessor.pm Bug 15870: potential follow up to comment #8 2016-03-24 20:15:40 +00:00
RefundLostItemFeeRule.pm Bug 14048: (QA followup) Default to 1 if no default rule 2016-07-07 10:37:01 -06:00
RefundLostItemFeeRules.pm Bug 18182: Fix Koha::RefundLostItemFeeRules 2017-04-21 00:10:51 +00:00
Review.pm Bug 15839: Koha::Reviews - Remove approvereview & unapprovereview 2016-09-09 10:29:57 +00:00
Reviews.pm Bug 15839: Koha::Reviews - Add Koha::Review[s] classes 2016-09-09 10:29:31 +00:00
Schema.pm Bug 11891: (follow-up) remove custom storage class 2014-06-19 11:55:03 -03:00
SearchEngine.pm Bug 12478: make things using SimpleSearch use the new version 2016-04-26 20:20:07 +00:00
SearchField.pm Bug 12748: (QA followup) fix several tiny QA tools warnings 2016-04-26 20:20:13 +00:00
SearchFields.pm Bug 12748: (QA followup) fix several tiny QA tools warnings 2016-04-26 20:20:13 +00:00
SearchMarcMap.pm Bug 12748: (QA followup) fix several tiny QA tools warnings 2016-04-26 20:20:13 +00:00
SearchMarcMaps.pm Bug 12748: (QA followup) fix several tiny QA tools warnings 2016-04-26 20:20:13 +00:00
Serial.pm Bug 15446: Rename Koha::Object[s]->type with _type 2016-02-12 12:35:57 -07:00
Serials.pm Bug 15446: Rename Koha::Object[s]->type with _type 2016-02-12 12:35:57 -07:00
SimpleMARC.pm Bug 16011: $VERSION - Remove the $VERSION init 2016-03-24 17:20:28 +00:00
Sitemapper.pm Bug 11190: (QA followup) for tests on jenkins 2015-08-31 10:32:34 -03:00
Subscription.pm Bug 18785: Force scalar context in Koha::Subscription::biblio 2017-10-09 16:15:50 -03:00
Subscriptions.pm Bug 15446: (follow-up) Rename Koha::Object[s]->type with _type 2016-02-12 12:35:57 -07:00
Suggestion.pm Bug 13012 - suggestion.suggesteddate should be set to NOW if not defined 2017-08-10 16:25:34 -03:00
SuggestionEngine.pm Bug 9978: Replace license header with the correct license (GPLv3+) 2015-04-20 09:59:38 -03:00
Suggestions.pm Bug 14757 - Allow the use of Template Toolkit syntax for slips and notices 2016-07-08 13:47:42 +00:00
Token.pm Bug 18124: [Follow-up] Handle default parameters in a sub 2017-03-30 09:07:08 +00:00
UploadedFile.pm Bug 17669: [QA Follow-up] More consistency in return values of delete 2017-04-21 13:55:25 -04:00
UploadedFiles.pm Bug 18300: [QA Follow-up] Fix return value inconsistency 2017-04-21 00:11:40 +00:00
Uploader.pm Bug 19420: (QA Follow-up) Fix test, correct POD 2017-11-08 13:31:37 -03:00
Virtualshelf.pm Bug 18672: Fix overwriting creation date with modification date when editing list 2017-07-17 13:19:24 -03:00
Virtualshelfcontent.pm Bug 15446: Rename Koha::Object[s]->type with _type 2016-02-12 12:35:57 -07:00
Virtualshelfcontents.pm Bug 15446: Rename Koha::Object[s]->type with _type 2016-02-12 12:35:57 -07:00
Virtualshelfshare.pm Bug 15446: Rename Koha::Object[s]->type with _type 2016-02-12 12:35:57 -07:00
Virtualshelfshares.pm Bug 15446: Rename Koha::Object[s]->type with _type 2016-02-12 12:35:57 -07:00
Virtualshelves.pm Bug 18228: Implement the new columns in code 2017-07-05 13:35:23 -03:00
XSLT_Handler.pm Bug 17807: Add format parameter to XSLT_Handler->transform 2017-08-30 15:06:40 -03:00