Jonathan Druart
7a80483a13
The MARC modification template action edit buton does not correctly handle variable escaping. Assigning a JS variable containing the JSON representation of the hashref will make the processing much more easier. Test plan: Create a MARC Modification Template with several actions. In the description you should use the following characters, to try to break this patch: \ ' " \n \r (not sure what we handled \n and \r) Then edit the action, modify and save again. Signed-off-by: Mark Tompsett <mtompset@hotmail.com> Signed-off-by: Nick Clemens <nick@bywatersolutions.com> Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
359 lines
12 KiB
JavaScript
359 lines
12 KiB
JavaScript
$(document).ready(function() {
|
|
window.modaction_legend_innerhtml = $("#modaction_legend").text();
|
|
window.action_submit_value = $("#action_submit").val();
|
|
|
|
$('#select_template').find("input:submit").hide();
|
|
$('#select_template').change(function() {
|
|
$('#select_template').submit();
|
|
});
|
|
$("span.match_regex_prefix" ).hide();
|
|
$("span.match_regex_suffix" ).hide();
|
|
|
|
$("#add_action").submit(function(){
|
|
var action = $("#action").val();
|
|
if ( action == 'move_field' || action == 'copy_field' || action == 'copy_and_replace_field') {
|
|
if ( $("#from_subfield").val().length != $("#to_subfield").val().length ) {
|
|
alert( MSG_MMT_SUBFIELDS_MATCH );
|
|
return false;
|
|
}
|
|
if ( $("#to_field").val().length <= 0 ) {
|
|
alert( MSG_MMT_DESTINATION_REQUIRED );
|
|
return false;
|
|
}
|
|
if ( ( $("#to_field").val() < 10 && $("#to_subfield").val().length > 0 ) ||
|
|
( $("#from_field").val() < 10 && $("#from_subfield").val().length > 0 ) ) {
|
|
alert( MSG_MMT_CONTROL_FIELD_EMPTY );
|
|
return false;
|
|
}
|
|
if ( ( $("#from_field").val() < 10 && $("#to_subfield").val().length === 0 ) ||
|
|
( $("#to_field").val() < 10 && $("#from_subfield").val().length === 0 ) ) {
|
|
alert( MSG_MMT_CONTROL_FIELD );
|
|
return false;
|
|
}
|
|
}
|
|
if ( action == 'update_field' ) {
|
|
if ( $("#from_subfield").val().length <= 0 ) {
|
|
alert( MSG_MMT_SOURCE_SUBFIELD );
|
|
return false;
|
|
}
|
|
}
|
|
if ( $("#from_field").val().length <= 0 ) {
|
|
alert( MSG_MMT_SOURCE_FIELD );
|
|
return false;
|
|
}
|
|
if ( $("#conditional").val() == 'if' || $("#conditional").val() == 'unless' ) {
|
|
if ( $("#conditional_field").val() == '' ) {
|
|
alert( MSG_MMT_CONDITIONAL_FIELD_REQUIRED );
|
|
return false;
|
|
}
|
|
if ( $("#conditional_comparison").val() == '' ) {
|
|
alert( MSG_MMT_CONDITIONAL_COMPARISON_REQUIRED );
|
|
return false
|
|
}
|
|
if ( $("#conditional_value").val() == '' &&
|
|
( $("#conditional_comparison").val() == 'equals' || $("#conditional_comparison").val() == 'not_equals' ) ) {
|
|
if ( document.getElementById('conditional_regex').checked == true ) {
|
|
alert( MSG_MMT_CONDITIONAL_VALUE_REGEX_REQUIRED );
|
|
return false;
|
|
} else {
|
|
alert( MSG_MMT_CONDITIONAL_VALUE_REQUIRED );
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
$("#conditional_field,#from_field").change(function(){
|
|
updateAllEvery();
|
|
});
|
|
|
|
$("#new_action").on("click",function(e){
|
|
e.preventDefault();
|
|
cancelEditAction();
|
|
$("#add_action").show();
|
|
$("#action").focus();
|
|
});
|
|
|
|
$(".duplicate_template").on("click",function(e){
|
|
e.preventDefault();
|
|
var template_id = $(this).data("template_id");
|
|
$("#duplicate_a_template").val(template_id);
|
|
$("#duplicate_current_template").val(1);
|
|
});
|
|
|
|
$('#createTemplate').on('shown.bs.modal', function (e) {
|
|
e.preventDefault();
|
|
$("#template_name").focus();
|
|
});
|
|
|
|
$("#duplicate_a_template").on("change",function(e){
|
|
e.preventDefault();
|
|
if( this.value === '' ){
|
|
$("#duplicate_current_template").val("");
|
|
} else {
|
|
$("#duplicate_current_template").val(1);
|
|
}
|
|
});
|
|
|
|
$(".delete_template").on("click",function(){
|
|
return confirmDelete();
|
|
});
|
|
|
|
$(".edit_action").on("click", function(){
|
|
var mmta_id = $(this).data("mmta_id");
|
|
var mmta = $.grep(mmtas, function(elt, id) {
|
|
return elt['mmta_id'] == mmta_id;
|
|
});
|
|
editAction( mmta[0] );
|
|
updateAllEvery();
|
|
});
|
|
});
|
|
|
|
function updateAllEvery(){
|
|
if ( $("#conditional_field").is(":visible") ) {
|
|
if ( $("#conditional_field").val() == $("#from_field").val() && $("#from_field").val().length > 0 ) {
|
|
$("#field_number option[value='0']").html( MSG_MMT_EVERY );
|
|
} else {
|
|
$("#field_number option[value='0']").html( MSG_MMT_ALL );
|
|
}
|
|
}
|
|
}
|
|
|
|
function onActionChange(selectObj) {
|
|
// get the index of the selected option
|
|
var idx = selectObj.selectedIndex;
|
|
|
|
// get the value of the selected option
|
|
var action = selectObj.options[idx].value;
|
|
|
|
switch( action ) {
|
|
case 'delete_field':
|
|
show('field_number_block');
|
|
hide('with_value_block');
|
|
hide('to_field_block');
|
|
break;
|
|
|
|
case 'add_field':
|
|
hide('field_number_block');
|
|
show('with_value_block');
|
|
hide('to_field_block');
|
|
break;
|
|
|
|
case 'update_field':
|
|
hide('field_number_block');
|
|
show('with_value_block');
|
|
hide('to_field_block');
|
|
break;
|
|
|
|
case 'move_field':
|
|
show('field_number_block');
|
|
hide('with_value_block');
|
|
show('to_field_block');
|
|
break;
|
|
|
|
case 'copy_field':
|
|
show('field_number_block');
|
|
hide('with_value_block');
|
|
show('to_field_block');
|
|
break;
|
|
|
|
case 'copy_and_replace_field':
|
|
show('field_number_block');
|
|
hide('with_value_block');
|
|
show('to_field_block');
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
function onConditionalChange(selectObj) {
|
|
// get the index of the selected option
|
|
var idx = selectObj.selectedIndex;
|
|
|
|
// get the value of the selected option
|
|
var action = selectObj.options[idx].value;
|
|
|
|
switch( action ) {
|
|
case '':
|
|
hide('conditional_block');
|
|
break;
|
|
|
|
case 'if':
|
|
case 'unless':
|
|
show('conditional_block');
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onConditionalComparisonChange(selectObj) {
|
|
// get the index of the selected option
|
|
var idx = selectObj.selectedIndex;
|
|
|
|
// get the value of the selected option
|
|
var action = selectObj.options[idx].value;
|
|
|
|
switch( action ) {
|
|
case 'equals':
|
|
case 'not_equals':
|
|
show('conditional_comparison_block');
|
|
break;
|
|
|
|
default:
|
|
hide('conditional_comparison_block');
|
|
break;
|
|
}
|
|
}
|
|
|
|
function onToFieldRegexChange( checkboxObj ) {
|
|
if ( checkboxObj.checked ) {
|
|
show('to_field_regex_value_block');
|
|
} else {
|
|
hide('to_field_regex_value_block');
|
|
}
|
|
}
|
|
|
|
function onConditionalRegexChange( checkboxObj ) {
|
|
if ( checkboxObj.checked ) {
|
|
$("span.match_regex_prefix" ).show();
|
|
$("span.match_regex_suffix" ).show();
|
|
} else {
|
|
$("span.match_regex_prefix" ).hide();
|
|
$("span.match_regex_suffix" ).hide();
|
|
}
|
|
}
|
|
|
|
function show(eltId) {
|
|
elt = document.getElementById( eltId );
|
|
elt.style.display='inline';
|
|
}
|
|
|
|
function hide(eltId) {
|
|
clearFormElements( eltId );
|
|
elt = document.getElementById( eltId );
|
|
elt.style.display='none';
|
|
}
|
|
|
|
function clearFormElements(divId) {
|
|
myBlock = document.getElementById( divId );
|
|
|
|
var inputElements = myBlock.getElementsByTagName( "input" );
|
|
for (var i = 0; i < inputElements.length; i++) {
|
|
switch( inputElements[i].type ) {
|
|
case "text":
|
|
inputElements[i].value = '';
|
|
break;
|
|
case "checkbox":
|
|
inputElements[i].checked = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
var selectElements = myBlock.getElementsByTagName( "select" );
|
|
for (var i = 0; i < selectElements.length; i++) {
|
|
selectElements[i].selectedIndex = 0;
|
|
}
|
|
|
|
}
|
|
|
|
function confirmDeleteAction() {
|
|
return confirm( MSG_MMT_CONFIRM_DEL_TEMPLATE_ACTION );
|
|
}
|
|
|
|
function confirmDelete() {
|
|
return confirm( MSG_MMT_CONFIRM_DEL_TEMPLATE );
|
|
}
|
|
|
|
var modaction_legend_innerhtml;
|
|
var action_submit_value;
|
|
|
|
function editAction( mmta ) {
|
|
$("#add_action").show();
|
|
document.getElementById('mmta_id').value = mmta['mmta_id'];
|
|
|
|
setSelectByValue( 'action', mmta['action'] );
|
|
$('#action').change();
|
|
|
|
setSelectByValue( 'field_number', mmta['field_number'] );
|
|
|
|
document.getElementById('from_field').value = mmta['from_field'];
|
|
document.getElementById('from_subfield').value = mmta['from_subfield'];
|
|
document.getElementById('field_value').value = mmta['field_value'];
|
|
document.getElementById('to_field').value = mmta['to_field'];
|
|
document.getElementById('to_subfield').value = mmta['to_subfield'];
|
|
if ( mmta['regex_search'] == '' && mmta['to_regex_replace'] == '' && mmta['to_regex_modifiers'] == '' ) {
|
|
$('#to_field_regex').prop('checked', false).change();
|
|
} else {
|
|
$('#to_field_regex').prop('checked', true).change();
|
|
$("#to_regex_search").val(mmta['to_regex_search']);
|
|
$("#to_regex_replace").val(mmta['to_regex_replace']);
|
|
$("#to_regex_modifiers").val(mmta['to_regex_modifiers']);
|
|
}
|
|
|
|
setSelectByValue( 'conditional', mmta['conditional'] );
|
|
$('#conditional').change();
|
|
|
|
document.getElementById('conditional_field').value = mmta['conditional_field'];
|
|
document.getElementById('conditional_subfield').value = mmta['conditional_subfield'];
|
|
|
|
setSelectByValue( 'conditional_comparison', mmta['conditional_comparison'] );
|
|
$('#conditional_comparison').change();
|
|
|
|
document.getElementById('conditional_value').value = mmta['conditional_value'];
|
|
|
|
document.getElementById('conditional_regex').checked = parseInt( mmta['conditional_regex'] );
|
|
$('#conditional_regex').change();
|
|
|
|
document.getElementById('description').value = mmta['description'];
|
|
|
|
window.modaction_legend_innerhtml = document.getElementById('modaction_legend').innerHTML;
|
|
document.getElementById('modaction_legend').innerHTML = MSG_MMT_EDIT_ACTION.format(mmta['ordering']);
|
|
|
|
window.action_submit_value = document.getElementById('action_submit').value;
|
|
document.getElementById('action_submit').value = MSG_MMT_UPDATE_ACTION;
|
|
}
|
|
|
|
function cancelEditAction() {
|
|
document.getElementById('mmta_id').value = '';
|
|
|
|
setSelectByValue( 'action', 'delete_field' );
|
|
$('#action').change();
|
|
|
|
document.getElementById('from_field').value = '';
|
|
document.getElementById('from_subfield').value = '';
|
|
document.getElementById('field_value').value = '';
|
|
document.getElementById('to_field').value = '';
|
|
document.getElementById('to_subfield').value = '';
|
|
$("#to_regex_search").val("");
|
|
$("#to_regex_replace").val("");
|
|
$("#to_regex_modifiers").val("");
|
|
$("#description").val("");
|
|
|
|
$('#to_field_regex').prop('checked', false).change();
|
|
|
|
setSelectByValue( 'conditional', '' );
|
|
$('#conditional').change();
|
|
|
|
document.getElementById('conditional_field').value = '';
|
|
document.getElementById('conditional_subfield').value = '';
|
|
|
|
setSelectByValue( 'conditional_comparison', '' );
|
|
$('#conditional_comparison').change();
|
|
|
|
document.getElementById('conditional_value').value = '';
|
|
|
|
document.getElementById('conditional_regex').checked = false;
|
|
|
|
document.getElementById('modaction_legend').innerHTML = window.modaction_legend_innerhtml;
|
|
document.getElementById('action_submit').value = window.action_submit_value;
|
|
$("#add_action").hide();
|
|
}
|
|
|
|
function setSelectByValue( selectId, value ) {
|
|
s = document.getElementById( selectId );
|
|
|
|
for ( i = 0; i < s.options.length; i++ ) {
|
|
if ( s.options[i].value == value ) {
|
|
s.selectedIndex = i;
|
|
}
|
|
}
|
|
}
|