Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix #9778 - Dynamic dropdown fields dont work in inline edit #10609

Open
wants to merge 1 commit into
base: hotfix
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions include/InlineEditing/inlineEditing.js
Original file line number Diff line number Diff line change
@@ -473,6 +473,15 @@ function handleSave(field, id, module, type) {
parent_type = $("#parent_type").val();
}
var output_value = saveFieldHTML(field, module, id, value, parent_type);

// Add hidden input field in detail view for dynamicenum filters
if(view == 'DetailView')
{
if(type == 'enum' || type == 'multienum' || type == 'dynamicenum'){
output_value ='<input type="hidden" class="sugar_field" id="'+field+'" value="'+value+'">' + output_value;
}
}

// If the field type is email, we don't want to handle linebreaks in the output.
if (field === "email1") {
setValueClose(output_value, false);
38 changes: 36 additions & 2 deletions include/SugarFields/Fields/Dynamicenum/SugarFieldDynamicenum.js
Original file line number Diff line number Diff line change
@@ -55,7 +55,21 @@ function addLoadEvent(func) {
function loadDynamicEnum(field, subfield) {

if (field != '') {
var el = document.getElementById(field);

// Add specific method for retrieving parent list value in view list
if(action_sugar_grp1 == 'index'){
var moduleName = module_sugar_grp1;
var recordId = $('input.listview-checkbox',$('form#EditView').closest('tr')).val();
var dynamicFieldName = $('form#EditView select').attr('id');
var el = $('<input></input>',{
id:recordId+dynamicFieldName,
type: 'hidden',
value: getParentValueFromDynamicEnum(moduleName, recordId, dynamicFieldName)
}).appendTo($('#'+subfield).parent());
updateDynamicEnum(recordId+dynamicFieldName, subfield)
} else {
var el = document.getElementById(field);
}

if (el) {
if (el.addEventListener) {
@@ -118,4 +132,24 @@ function updateDynamicEnum(field, subfield) {
else
selector.fireEvent("onchange");

}
}

/**
* Gets parent value from dynamic enum field
* @param {string} moduleName - Name of the module
* @param {string} recordId - ID of the record
* @param {string} dynamicFieldName - Name of dynamic enum field
* @returns {string} Parent value from dynamic enum field
*/
function getParentValueFromDynamicEnum(moduleName, recordId, dynamicFieldName){
$.ajaxSetup({ async: false });
var result = $.getJSON("index.php", {
module: "Home",
action: "getParentValueFromDynamicEnum",
dynamicFieldName: dynamicFieldName,
moduleName: moduleName,
recordId: recordId
});
$.ajaxSetup({ async: true });
return result.responseText;
}
26 changes: 26 additions & 0 deletions modules/Home/controller.php
Original file line number Diff line number Diff line change
@@ -140,4 +140,30 @@ public function action_getRelateFieldJS()

echo $quicksearch_js;
}

/**
* Return the field value from the parent list of current field, attending to the values of Request moduleName, recordId and dynamicFieldname
* It's used for retrieving value of the parent dropdown from dynamicenum fields, in view list context.
*
* @return void
*/
public function action_getParentValueFromDynamicEnum(){
$moduleName = $_REQUEST['moduleName'];
$recordId = $_REQUEST['recordId'];
$dynamicFieldName = $_REQUEST['dynamicFieldName'];

$focusBean = BeanFactory::getBean($_REQUEST['moduleName']);

// ensure current user has access
if (!$focusBean->ACLAccess('view')) {
return false;
}

// recovery parent name field
$parentFieldName = $focusBean->field_name_map[$dynamicFieldName]['parentenum'];

echo getFieldValueFromModule($parentFieldName, $moduleName, $recordId);

die();
}
}