X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=js%2Fcrm.ajax.js;h=bfff407843dc2e02e4723c866e431ecc48d8854d;hb=fe3b8caf207e6f44bec608512740b8d1c670e746;hp=b64f33eec2c2e34beff9ac375974c9b74016de59;hpb=09f35f850129c3bdf1101dc3fa3ad6d86dafb42f;p=civicrm-core.git diff --git a/js/crm.ajax.js b/js/crm.ajax.js index b64f33eec2..bfff407843 100644 --- a/js/crm.ajax.js +++ b/js/crm.ajax.js @@ -3,7 +3,7 @@ * @see https://wiki.civicrm.org/confluence/display/CRMDOC/AJAX+Interface * @see https://wiki.civicrm.org/confluence/display/CRMDOC/Ajax+Pages+and+Forms */ -(function($, CRM, undefined) { +(function($, CRM, _, undefined) { /** * @param string path * @param string|object query @@ -45,6 +45,47 @@ }); }; + // result is an array, but in js, an array is also an object + // Assign all the metadata properties to it, mirroring the results arrayObject in php + function arrayObject(data) { + var result = data.values || []; + if (_.isArray(result)) { + delete(data.values); + _.assign(result, data); + } + return result; + } + + CRM.api4 = function(entity, action, params, index) { + return new Promise(function(resolve, reject) { + if (typeof entity === 'string') { + $.post(CRM.url('civicrm/ajax/api4/' + entity + '/' + action), { + params: JSON.stringify(params), + index: index + }) + .done(function (data) { + resolve(arrayObject(data)); + }) + .fail(function (data) { + reject(data.responseJSON); + }); + } else { + $.post(CRM.url('civicrm/ajax/api4'), { + calls: JSON.stringify(entity) + }) + .done(function(data) { + _.each(data, function(item, key) { + data[key] = arrayObject(item); + }); + resolve(data); + }) + .fail(function (data) { + reject(data.responseJSON); + }); + } + }); + }; + /** * AJAX api * @link http://wiki.civicrm.org/confluence/display/CRMDOC/AJAX+Interface#AJAXInterface-CRM.api3 @@ -588,4 +629,4 @@ }); }); -}(jQuery, CRM)); +}(jQuery, CRM, _));