/*+********************************************************************************** * The contents of this file are subject to the vtiger CRM Public License Version 1.0 * ("License"); You may not use this file except in compliance with the License * The Original Code is: vtiger CRM Open Source * The Initial Developer of the Original Code is vtiger. * Portions created by vtiger are Copyright (C) vtiger. * All Rights Reserved. ************************************************************************************/ function SMSTask($){ var map = fn.map; var dict = fn.dict; var filter = fn.filter; var reduceR = fn.reduceR; var parallelExecuter = fn.parallelExecuter; var contains = fn.contains; var concat = fn.concat; var vtinst = new VtigerWebservices("webservice.php"); function handleError(fn){ return function(status, result){ if(status){ fn(result); }else{ errorDialog('Failure:'+result); } }; } //Convert user type into reference for consistency in describe objects //This is done inplace function referencify(desc){ var fields = desc['fields']; for(var i=0; i' + v + ''); }); } //Get an array containing the the description of a module and all modules //refered to by it. This is passed to callback. function getDescribeObjects(accessibleModules, moduleName, callback){ vtinst.describeObject(moduleName, handleError(function(result){ var parent = referencify(result); var fields = parent['fields']; var referenceFields = filter(function(e){ return e['type']['name']=='reference';}, fields); var referenceFieldModules = map( function(e){ return e['type']['refersTo']; }, referenceFields ); function union(a, b){ var newfields = filter(function(e){return !contains(a, e);}, b); return a.concat(newfields); } var relatedModules = reduceR(union, referenceFieldModules, [parent['name']]); // Remove modules that is no longer accessible relatedModules = diff(accessibleModules, relatedModules); function executer(parameters){ var failures = filter(function(e){return e[0]==false;}, parameters); if(failures.length!=0){ var firstFailure = failures[0]; callback(false, firstFailure[1]); }else{ var moduleDescriptions = map(function(e){ return referencify(e[1]);}, parameters); var modules = dict(map(function(e){ return [e['name'], e];}, moduleDescriptions)); callback(true, modules); } } var p = parallelExecuter(executer, relatedModules.length); $.each(relatedModules, function(i, v){ p(function(callback){vtinst.describeObject(v, callback);}); }); })); } $(document).ready(function(){ vtinst.extendSession(handleError(function(result){ vtinst.listTypes(handleError(function(accessibleModules) { accessibleModulesInfo = accessibleModules; getDescribeObjects(accessibleModules, moduleName, handleError(function(modules){ fillSelectBox('sms_fieldnames', modules, moduleName); $('#task-fieldnames-busyicon').hide(); $('#sms_fieldnames').show(); $('#sms_fieldnames').change(function(){ var textarea = $('#save_content').get(0); var value = '$'+$(this).attr('value'); insertAtCursor(textarea, value); }); fillSelectBox('task_phonefields', modules, moduleName, function(e){return e['type']['name']=='phone';}); $('#task-phonefields-busyicon').hide(); $('#task_phonefields').show(); $('#task_phonefields').change(function(){ var input = $($('#save_recepient').get()); var value = '$'+$(this).attr('value'); input.attr("value", input.attr("value")+','+value); }); })); })); })); validator.mandatoryFields.push('sms_recepient'); }); } SMSTask(jQuery);