Si, de momento no existe actualización del plugin pero les comparto la ruta donde deben modificar y el archivo completo ya con el ajuste o (FIX) si recomiendo aplicar para que no se guarden registros en la DB con ‘Undefined’ en sus metadatos en sus nuevos envíos de OJS, para evitar tener que modificar nuevamente cada metadato o aplicar un script para aplicar masivamente en caso de que de la fecha del fallo al día de hoy se hayan colado varios de estos errores:
Ruta:
OJS/plugins/generic/ror/templates/affiliation.tpl
pueden hacer un BK antes de modificar.
Reemplazar todo el contenido por este con los ajustes citados en la solución:
<script>
$(document).ready(function () {ldelim}
var primaryLocale = "{$primaryLocale}";
var results = null;
const tagitInput = '.tagit-new > input';
const rorPlaceHolder = "Search ror.org";
var mainAffiliation = 'input[id^="affiliation-' + primaryLocale + '"]';
if (!$(mainAffiliation).length) {
mainAffiliation = 'input[id^="affiliation-"]';
}
$(mainAffiliation).tagit({ldelim}
fieldName: 'affiliation-ROR[]',
allowSpaces: true,
tagLimit: 1,
tagSource: function (search, r) {ldelim}
$.ajax({ldelim}
url: 'https://api.ror.org/organizations',
dataType: 'json',
cache: true,
data: {ldelim}
affiliation: search.term + '*'
{rdelim},
success: function (data) {ldelim}
// parche: extraer correctamente de data.items y organization.names
results = data.items || [];
r($.map(results, function (item) {ldelim}
const org = item.organization || item;
const entry = (org.names || []).find(e => e.types.includes('ror_display'))
|| (org.names || [])[0]
|| {};
const name = entry.value || 'Sin nombre';
return {ldelim}
label: name + ' [' + org.id + ']',
value: name + ' [' + org.id + ']'
{rdelim}
{rdelim}));
{rdelim}
{rdelim});
{rdelim},
beforeTagAdded: function (event, ui) {ldelim}{rdelim},
afterTagAdded: function (event, ui) {ldelim}
if (ui.duringInitialization === true) {
$(mainAffiliation).after(
'<div id="rorIdField" style="float:right; background:#eaedee;">' +
'<a href="{$rorId}" target="_blank">{$rorId}</a>' +
'</div>'
);
} else {
const regex = /https:\/\/ror\.org\/(\d|\w)+/g;
const found = ui.tagLabel.match(regex);
if (found !== null) {
const rorId = found[0];
$.each(results, function (key, value) {ldelim}
if (value.organization.id === rorId) {
var supportedLocales = {$supportedLocales|json_encode};
$.each(supportedLocales, function (k, val) {ldelim}
var locale = k.slice(0,2);
if (locale.length === 2) {
value.organization.labels.forEach(function (v) {ldelim}
if (locale === v["iso639"]) {
if (locale !== primaryLocale.slice(0,2)) {
$('input[id^="affiliation-' + locale + '"]')
.val(v.label)
.parent().css({ display: "block", width: "576px" });
}
}
{rdelim});
}
{rdelim});
}
{rdelim});
}
}
console.log("afterTagAdded");
{rdelim},
afterTagRemoved: function (event, ui) {ldelim}
$('#rorIdField').remove();
$('input[id^="affiliation-"]').val("");
$('.localization_popover').hide();
$(tagitInput).attr("placeholder", rorPlaceHolder);
{rdelim},
onTagClicked: function (event, ui) {ldelim}
$(tagitInput).attr("placeholder", rorPlaceHolder);
{rdelim},
onTagRemoved: function (event, ui) {ldelim}
$('#rorIdField').remove();
$('input[id^="affiliation-"]').val("");
$('.localization_popover').hide();
$(tagitInput).attr("placeholder", rorPlaceHolder);
{rdelim}
{rdelim});
if (!$('.tagit-label').val() || $('.tagit-label').length === 0) {
$(tagitInput).attr("placeholder", rorPlaceHolder);
}
{rdelim});
</script>
¿Qué se modificó?
Antes: el AJAX hacía:
response($.map(data.items, item => ({
label: item.organization.name + ' [' + item.organization.id + ']',
value: item.organization.name + ' [' + item.organization.id + ']'
})));
Ahora: extrae correctamente de:
const org = item.organization;
const entry = (org.names || [])
.find(e => e.types.includes('ror_display'))
|| org.names[0]
|| {};
const name = entry.value || 'Sin nombre';
response($.map(data.items, item => ({
label: name + ' [' + org.id + ']',
value: name + ' [' + org.id + ']'
})));
Causa raíz: migración de la API de ROR a un formato donde el nombre está anidado en organization.names, no en organization.name