bibcite-8.x-1.x-dev/modules/bibcite_ris/bibcite_ris.install
modules/bibcite_ris/bibcite_ris.install
<?php
/**
* @file
* Module installation hooks implementation.
*/
use Symfony\Component\Yaml\Yaml;
/**
* Implements hook_requirements().
*/
function bibcite_ris_requirements($phase) {
$requirements = [];
switch ($phase) {
case 'runtime':
case 'install':
if (!class_exists('\LibRIS\RISReader')) {
$requirements['bibcite_ris_dependencies'] = [
'title' => t('RIS dependencies'),
'description' => t("Bibliography & Citation - RIS requires the researchgate/libris library. See the module's README.md file for more information."),
'severity' => REQUIREMENT_ERROR,
];
}
}
return $requirements;
}
/**
* Implements hook_uninstall().
*/
function bibcite_ris_uninstall() {
Drupal::configFactory()->getEditable('bibcite_entity.mapping.ris')->delete();
}
/**
* Add new fields to RIS format.
*/
function bibcite_ris_update_8001() {
$config_factory = \Drupal::configFactory();
$config_name = 'bibcite_entity.mapping.ris';
$install_path = __DIR__ . '/config/install/';
$file_path = $install_path . $config_name . '.yml';
if (file_exists($file_path)) {
$config = $config_factory->getEditable($config_name);
$content = file_get_contents($file_path);
$yaml = Yaml::parse($content);
$fields = $yaml['fields'];
$config->set('fields', $fields);
$config->save(TRUE);
}
}
/**
* Update mapping of RIS fields and types.
*/
function bibcite_ris_update_8002() {
$config_factory = \Drupal::configFactory();
$config = $config_factory->getEditable('bibcite_entity.mapping.ris');
// Array format: 'TYPE' => ['old_value', 'new_value'].
$types_mapping = [
'ABST' => ['miscellaneous', 'journal_article'],
'AGGR' => ['', 'database'],
'ANCIENT' => ['', 'miscellaneous'],
'BLOG' => ['', 'miscellaneous'],
'CHART' => ['', 'chart'],
'CLSWK' => ['', 'classical'],
'CONF' => ['conference_paper', 'conference_proceedings'],
'CPAPER' => ['', 'conference_paper'],
'DATA' => ['database', 'software'],
'DBASE' => ['', 'database'],
'DICT' => ['', 'book'],
'EBOOK' => ['', 'book'],
'ECHAP' => ['', 'book_chapter'],
'EDBOOK' => ['', 'book'],
'EJOUR' => ['', 'journal_article'],
'ELEC' => ['miscellaneous', 'web_project_page'],
'ENCYC' => ['', 'book'],
'EQUA' => ['', 'miscellaneous'],
'FIGURE' => ['', 'miscellaneous'],
'GOVDOC' => ['', 'government_report'],
'GRANT' => ['', 'miscellaneous'],
'INPR' => ['miscellaneous', 'journal_article'],
'JFULL' => ['miscellaneous', 'journal'],
'LEGAL' => ['', 'legal_ruling'],
'MULTI' => ['', 'audiovisual'],
'SLIDE' => ['miscellaneous', 'presentation'],
'STAND' => ['', 'miscellaneous'],
'STAT' => ['database', 'statute'],
'VIDEO' => ['miscellaneous', 'film'],
];
$fields_mapping = [
'AN' => 'bibcite_accession_number',
'BT' => 'bibcite_secondary_title',
'CN' => 'bibcite_call_number',
'DA' => 'bibcite_date',
'DB' => 'bibcite_remote_db_name',
'DO' => 'bibcite_doi',
'DP' => 'bibcite_remote_db_provider',
'ET' => 'bibcite_edition',
'J2' => 'bibcite_alternate_title',
'LB' => 'bibcite_label',
'OP' => 'bibcite_original_publication',
'PP' => 'bibcite_place_published',
'RP' => 'bibcite_reprint_edition',
'Y2' => 'bibcite_access_date',
];
foreach ($types_mapping as $key => $value) {
$config_key = 'types.' . $key;
// Update values if mapping wasn't changed from default.
if ($config->get($config_key) === $value[0]) {
$config->set($config_key, $value[1]);
}
}
foreach ($fields_mapping as $key => $value) {
$config_key = 'fields.' . $key;
// Update values if mapping wasn't changed from default.
if ($config->get($config_key) === '') {
$config->set($config_key, $value);
}
}
$config->save(TRUE);
}
