164 lines
4.2 KiB
JavaScript

/*+*******************************************************************************
* 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 vtigerwebservicesproto(){
var $ = jQuery;
function md5(str){
return hex_md5(str);
}
function mergeObjects(obj1, obj2){
var res = {};
for(var k in obj1){
res[k] = obj1[k];
}
for(var k in obj2){
res[k] = obj2[k];
}
return res;
}
function doGet(params, callback){
$.get(this.serviceUrl, params, function(result){
var parsed = JSON.parse(result);
callback(parsed);
});
}
function doPost(params, callback){
$.post(this.serviceUrl, params, function(result){
var parsed = JSON.parse(result);
callback(parsed);
});
}
function get(operation, parameters, callback){
response = this.doGet(mergeObjects(parameters,
{'operation':operation, 'sessionName':this.sessionId}), function(response){
if(response['success']==true){
callback(true,response['result']);
}else{
callback(false,response['error']);
}
});
}
function post(operation, parameters, callback){
response = this.doPost(mergeObjects(parameters,
{'operation':operation, 'sessionName':this.sessionId}), function(response){
if(response['success']==true){
callback(true,response['result']);
}else{
callback(false,response['error']);
}
});
}
function login(callback){
var self = this;
response = this.doGet({operation:'getchallenge', username:this.username}, function(response){
if(response['success']==true){
var token = response['result']['token'];
var encodedKey = md5(token+self.accessKey);
self.doPost({operation:'login', username: self.username, accessKey: encodedKey}, function (response){
if(response['success']==true){
self.sessionId = response['result']['sessionId'];
self.userId = response['result']['userId'];
callback(true);
}else{
callback(false,response['error']);
}
});
}else{
callback(false,response['error']);
}
});
}
function logout(callback){
this.post('logout', {}, callback);
}
function listTypes(callback){
this.get('listtypes', {}, function (status, result){
if(status){
callback(true, result['types']);
}else{
callback(false, result);
}
});
}
function describeObject(name, callback){
this.get('describe', {'elementType':name}, callback);
}
function create(object, objectType, callback){
if(object['assigned_user_id']==null){
object['assigned_user_id'] = this.userId;
}
objectJson = JSON.encode(object);
this.post('create', {'elementType':objectType,
'element':objectJson}, callback);
}
function retrieve(id, callback){
this.get('retrieve', {'id':id}, callback);
}
function update(object, callback){
objectJson = JSON.encode(object);
this.post('update', {'element':objectJson}, callback);
}
function deleteObject(id, callback){
this.post('delete', {'id':id}, callback);
}
function query(query, callback){
this.get('query', {'query':query}, callback);
}
function extendSession(callback){
var self = this;
this.doPost({operation: 'extendsession'}, function(response){
var status = response['success'];
var result = response['result'];
if(status==true){
self.sessionId = result['sessionId'];
self.userId = result['userId'];
callback(true, result);
}else{
callback(false, result);
}
});
}
return {
doPost:doPost, doGet:doGet,
get:get, post:post,
login:login, logout:logout,
listTypes:listTypes, describeObject:describeObject,
create:create, retrieve:retrieve, update:update, deleteObject:deleteObject,
query:query, extendSession: extendSession
};
}
function VtigerWebservices(serviceUrl, username, accessKey){
this.serviceUrl = serviceUrl;
this.username = username;
this.accessKey = accessKey;
}
VtigerWebservices.prototype = vtigerwebservicesproto();