configureWSDL('vtiger_contactgrabber',$NAMESPACE);
$server->wsdl->addComplexType(
'name_value',
'complexType',
'struct',
'all',
'',
array(
'name'=>array('name'=>'name', 'type'=>'xsd:string'),
'value'=>array('name'=>'value', 'type'=>'xsd:string'),
)
);
$server->wsdl->addComplexType(
'name_value_list',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(
array('ref'=>'SOAP-ENC:arrayType', 'wsdl:arrayType'=>'tns:name_value[]')
),
'tns:name_value'
);
$server->wsdl->addComplexType(
'result_list',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(
array('ref'=>'SOAP-ENC:arrayType', 'wsdl:arrayType'=>'tns:name_value_list[]')
),
'tns:name_value_list'
);
$server->wsdl->addComplexType(
'result',
'complexType',
'struct',
'all',
'',
array(
'id' => array('name'=>'id', 'type'=>'xsd:string'),
'error' => array('name' =>'error', 'type'=>'xsd:string'),
'list' => array('name' => 'list', 'type' => 'tns:result_list'),
)
);
$server->register(
'create_session',
array('user_name'=>'xsd:string','password'=>'xsd:string','version'=>'xsd:string'),
array('return'=>'tns:result'),
$NAMESPACE);
$server->register(
'logout',
array('user_name'=>'xsd:string'),
array('return'=>'xsd:string'),
$NAMESPACE);
$server->register(
'get_duplicated_list',
array('username'=>'xsd:string', 'sessionId'=>'xsd:string', 'fieldname'=>'tns:name_value_list'),
array('return' => 'tns:result'),
$NAMESPACE);
$server->register(
'create_entity',
array('username'=>'xsd:string', 'sessionId' => 'xsd:string', 'fieldname'=>'tns:name_value_list'),
array('return'=>'tns:result'),
$NAMESPACE);
/**
* function used to return the duplicated list
*
* @param array $input_array - array which contains the following values
*
* return array $output_list
*/
function get_duplicated_list($username, $session_id, $input_array)
{
$input_array = flat_array($input_array);
global $log;
$log->debug("INPUT ARRAY for the function get_duplicated_list");
$log->debug($input_array);
require_once("modules/Users/Users.php");
$seed_user=new Users();
$user_id=$seed_user->retrieve_user_id($username);
global $current_user;
$current_user=$seed_user;
$current_user->retrieve_entity_info($user_id, 'Users');
if(!validateSession($user_id, $session_id)) {
return array('error' => $GLOBALS['accessDenied']);
}
$entity = $input_array['module'];
if('Contacts' == $entity){
return _get_duplicated_contacts($input_array);
}
if('Leads' == $entity){
return _get_duplicated_leads($input_array);
}
if('Accounts' == $entity){
return _get_duplicated_accounts($input_array);
}
if('Vendors' == $entity){
return _get_duplicated_vendors($input_array);
}
return array('error' => $GLOBALS['accessDenied']);
}
function _get_duplicated_accounts($input_array) {
global $adb;
require_once('include/utils/ListViewUtils.php');
$account_name = $input_array['account_name'];
$query = getListQuery('Accounts','and vtiger_account.accountname like \'%' . $account_name . '%\'');
$ret = $adb->run_query_allrecords($query);
$output_list = Array();
// create a return array of ticket details.
foreach($ret as $c)
{
$tmp = Array(
'id' => $c['accountid'],
'name' => $c['accountname'],
'bill_city' => $c['bill_city'],
'website' => $c['website'],
'phone' => $c['phone'],
);
$output_list[] = name_value_array($tmp);
}
return array('list' => $output_list);
}
function _get_duplicated_contacts($input_array) {
global $adb;
require_once('include/utils/ListViewUtils.php');
$last_name = $input_array['last_name'];
$query = getListQuery('Contacts','and vtiger_contactdetails.lastname like \'%' . $last_name . '%\'');
$ret = $adb->run_query_allrecords($query);
$output_list = Array();
// create a return array of ticket details.
foreach($ret as $c)
{
$tmp = Array(
'id' => $c['crmid'],
'first_name' => $c['firstname'],
'last_name' => $c['lastname'],
'title' => $c['title'],
'email1'=> $c['email'],
'phone_work' => $c['phone']
);
$output_list[] = name_value_array($tmp);
}
return array('list' => $output_list);
}
function _get_duplicated_leads($input_array) {
global $adb;
require_once('include/utils/ListViewUtils.php');
$last_name = $input_array['last_name'];
$query = getListQuery('Leads','and vtiger_leaddetails.lastname like \'%' . $last_name . '%\'');
$ret = $adb->run_query_allrecords($query);
$output_list = Array();
// create a return array of ticket details.
foreach($ret as $c)
{
$tmp = Array(
'id' => $c['crmid'],
'first_name' => $c['firstname'],
'last_name' => $c['lastname'],
'account_name' => $c['company'],
'phone' => $c['phone'],
'website' => $c['website'],
'email1'=> $c['email'],
);
$output_list[] = name_value_array($tmp);
}
return array('list' => $output_list);
}
function _get_duplicated_vendors($input_array) {
global $adb;
require_once('include/utils/ListViewUtils.php');
$name = $input_array['name'];
$query = getListQuery('Vendors','');
$query .= ' and vtiger_vendor.vendorname like \'%' . $name . '%\'';
$ret = $adb->run_query_allrecords($query);
$output_list = Array();
// create a return array of ticket details.
foreach($ret as $c)
{
$tmp = Array(
'id' => $c['crmid'],
'name' => $c['vendorname'],
'city'=> $c['city'],
'phone' => $c['phone'],
'email' => $c['email'],
'category' => $c['category'],
);
$output_list[] = name_value_array($tmp);
}
return array('list' => $output_list);
}
/**
* function used to create an entity
*
* @param array $input_array - array which contains the following values
* int $username - user username
* int $session_id - session id
*
* return $id - id of created entity
*/
function create_entity($username, $session_id, $input_array)
{
$input_array = flat_array($input_array);
global $current_user,$log;
$log->debug("INPUT ARRAY for the function create_entity");
$log->debug($input_array);
require_once("modules/Users/Users.php");
$seed_user=new Users();
$user_id=$seed_user->retrieve_user_id($username);
$current_user=$seed_user;
$current_user->retrieve_entity_info($user_id, 'Users');
if(!validateSession($user_id,$session_id)) {
return array('error' => $GLOBALS['accessDenied']);
}
$module = $input_array['module'];
if("Leads" == $module) {
return _create_lead($user_id, $input_array);
}
if("Accounts" == $module){
return _create_account($user_id, $input_array);
}
if("Contacts" == $module){
return _create_contact($user_id, $input_array);
}
if("Vendors" == $module){
return _create_vendor($user_id, $input_array);
}
return array('error' => $GLOBALS['accessDenied']);
}
function _create_lead($user_id, $input_array) {
require_once("modules/Leads/Leads.php");
$lead = new Leads();
if(isPermitted("Leads","EditView") == "yes")
{
$lead->column_fields['salutation'] = $input_array['salutation'];
$lead->column_fields['lastname'] = $input_array['lastname'];
$lead->column_fields['firstname'] = $input_array['firstname'];
$lead->column_fields['phone'] = $input_array['phone'];
$lead->column_fields['mobile'] = $input_array['mobile'];
$lead->column_fields['company'] = $input_array['company'];
$lead->column_fields['fax'] = $input_array['fax'];
$lead->column_fields['designation'] = $input_array['job_title'];
$lead->column_fields['email'] = $input_array['email'];
$lead->column_fields['website'] = $input_array['website'];
$lead->column_fields['description'] = $input_array['description'];
$lead->column_fields['lane'] = $input_array['lane'];
$lead->column_fields['city'] = $input_array['city'];
$lead->column_fields['state'] = $input_array['state'];
$lead->column_fields['code'] = $input_array['code'];
$lead->column_fields['country'] = $input_array['country'];
$lead->column_fields['pobox'] = $input_array['pobox'];
$lead->column_fields['assigned_user_id'] = $user_id;
$lead->column_fields['assigned_user_name'] = $username;
$lead->column_fields['assigntype'] = "U";
$lead->save("Leads");
if($lead->id != '') {
return array('id' => $lead->id);
} else {
return array('error' => 'Cannot create Lead');
}
}
else {
return array('error' => $GLOBALS['accessDenied']);
}
}
function _create_vendor($user_id, $input_array) {
if(isPermitted("Vendors","EditView") == "yes")
{
require_once("modules/Vendors/Vendors.php");
$vendor = new Vendors();
$vendor->column_fields['vendorname'] = $input_array['name'];
$vendor->column_fields['phone'] = $input_array['phone'];
$vendor->column_fields['email'] = $input_array['email'];
$vendor->column_fields['website'] = $input_array['website'];
$vendor->column_fields['description'] = $input_array['description'];
$vendor->column_fields['street'] = $input_array['street'];
$vendor->column_fields['city'] = $input_array['city'];
$vendor->column_fields['state'] = $input_array['state'];
$vendor->column_fields['postalcode'] = $input_array['postalcode'];
$vendor->column_fields['country'] = $input_array['country'];
$vendor->column_fields['pobox'] = $input_array['pobox'];
$vendor->save("Vendors");
if($vendor->id != '') {
return array('id' => $vendor->id);
} else {
return array('error' => 'Cannot create Vendor');
}
}
else {
return array('error' => $GLOBALS['accessDenied']);
}
}
function _create_account($user_id, $input_array)
{
if(isPermitted("Accounts","EditView") == "yes")
{
require_once("modules/Accounts/Accounts.php");
$account=new Accounts();
$account->column_fields['accountname']=$input_array['accountname'];
$account->column_fields['phone']=$input_array['phone'];
$account->column_fields['website']=$input_array['website'];
$account->column_fields['fax']=$input_array['fax'];
$account->column_fields['otherphone']=$input_array['otherphone'];
$account->column_fields['email1']=$input_array['email1'];
$account->column_fields['email2']=$input_array['email2'];
$account->column_fields['description']=$input_array['description'];
$account->column_fields['bill_street']=$input_array['bill_street'];
$account->column_fields['bill_city']=$input_array['bill_city'];
$account->column_fields['bill_state']=$input_array['bill_state'];
$account->column_fields['bill_code']=$input_array['bill_code'];
$account->column_fields['bill_country']=$input_array['bill_country'];
$account->column_fields['bill_pobox']=$input_array['bill_pobox'];
$account->column_fields['ship_street']=$input_array['ship_street'];
$account->column_fields['ship_city']=$input_array['ship_city'];
$account->column_fields['ship_state']=$input_array['ship_state'];
$account->column_fields['ship_code']=$input_array['ship_code'];
$account->column_fields['ship_country']=$input_array['ship_country'];
$account->column_fields['ship_pobox']=$input_array['ship_pobox'];
$account->column_fields['assigned_user_id']=$user_id;
$account->save('Accounts');
if($account->id != '') {
return array('id' => $account->id);
} else {
return array('error' => 'Cannot create Account');
}
} else {
return array('error' => $GLOBALS['accessDenied']);
}
}
function _create_contact($user_id, $input_array){
if(isPermitted("Contacts","EditView") == "yes")
{
require_once('modules/Contacts/Contacts.php');
$contact = new Contacts();
$contact->column_fields['salutation']=$input_array['salutation'];
$contact->column_fields['firstname']= $input_array['firstname'];
$contact->column_fields['lastname']= $input_array['lastname'];
$contact->column_fields['phone']= $input_array['phone'];
$contact->column_fields['mobile']= $input_array['mobile'];
$contact->column_fields['account_id']= $input_array['account_id'];
$contact->column_fields['homephone']= $input_array['homephone'];
$contact->column_fields['title']=$input_array['title'];
$contact->column_fields['fax']= $input_array['fax'];
$contact->column_fields['email']=$input_array['email'];
$contact->column_fields['mailingstreet']=$input_array['mailingstreet'];
$contact->column_fields['mailingcity']=$input_array['mailingcity'];
$contact->column_fields['mailingcountry']=$input_array['mailingcountry'];
$contact->column_fields['mailingstate']=$input_array['mailingstate'];
$contact->column_fields['mailingzip']=$input_array['mailingzip'];
$contact->column_fields['mailingpobox']=$input_array['mailingpobox'];
$contact->column_fields['otherstreet']=$input_array['otherstreet'];
$contact->column_fields['othercity']=$input_array['othercity'];
$contact->column_fields['othercountry']=$input_array['othercountry'];
$contact->column_fields['otherstate']=$input_array['otherstate'];
$contact->column_fields['otherzip']=$input_array['otherzip'];
$contact->column_fields['otherpobox']=$input_array['otherpobox'];
$contact->column_fields['assigned_user_id']=$user_id;
$contact->column_fields['description']= $input_array['description'];
$contact->save("Contacts");
if($contact->id != '') {
return array('id' => $contact->id);
} else {
return array('error' => 'Cannot create Contact');
}
} else {
return array('error' => $GLOBALS['accessDenied']);
}
}
function create_session($user_name, $password, $version)
{
global $log,$adb;
include('vtigerversion.php');
if($version != $vtiger_current_version) {
return array('error' => "Version is not valid: $version != CurrentVTigerVersion: $vtiger_current_version");
}
require_once('modules/Users/Users.php');
$objuser = new Users();
if($password != '') {
$objuser->column_fields['user_name'] = $user_name;
$objuser->load_user($password);
if($objuser->is_authenticated()) {
$userid = $objuser->retrieve_user_id($user_name);
$session_id = makeRandomPassword();
unsetServerSessionId($userid);
$sql="insert into vtiger_soapservice values(?,?,?)";
$result = $adb->pquery($sql, array($userid,'ContactGrabber',$session_id));
return array('id' => $session_id);
} else {
return array('error' => 'Cannot authenticate User');
}
} else {
return array('error' => 'Invalid username and/or password');
}
}
function logout($user_name)
{
global $log,$adb;
require_once('modules/Users/Users.php');
$objuser = new Users();
$userid = $objuser->retrieve_user_id($user_name);
unsetServerSessionId($userid);
return $GLOBALS['success'];
}
/**
* Function used to validate the session
*
* @param int $id - contact id to which we want the session id
* @param string $session_id - session id which will be passed from customerportal
* return true/false - return true if valid session otherwise return false
**/
function validateSession($id, $session_id)
{
global $adb;
$adb->println("Inside function validateSession($id, $session_id)");
$server_sessionid = getServerSessionId($id);
$adb->println("Checking Server session id and customer input session id ==> $server_sessionid == $session_id");
if($server_sessionid == $session_id)
{
$adb->println("Session id match. Authenticated to do the current operation.");
return true;
}
else
{
$adb->println("Session id does not match. Not authenticated to do the current operation.");
return false;
}
}
/**
* Function used to get the session id which was set during login time
*
* @param int $id - contact id to which we want the session id
* return string $sessionid - return the session id for the customer which is a random alphanumeric character string
**/
function getServerSessionId($id)
{
global $adb;
$adb->println("Inside the function getServerSessionId($id)");
//To avoid SQL injection we are type casting as well as bound the id variable. In each and every function we will call this function
$id = (int) $id;
$query = "select * from vtiger_soapservice where type='ContactGrabber' and id={$id}";
$sessionid = $adb->query_result($adb->query($query),0,'sessionid');
return $sessionid;
}
/** Function used to unset the server session id for the customer
* @param int $id - contact id to which customer we want to unset the session id
**/
function unsetServerSessionId($id)
{
global $adb;
$adb->println("Inside the function unsetServerSessionId");
$id = (int) $id;
$adb->query("delete from vtiger_soapservice where type='ContactGrabber' and id=$id");
return;
}
function flat_array($input_array){
$tmp = array();
foreach ($input_array as $k => $v){
$tmp[$v['name']] = $v['value'];
}
return $tmp;
}
function name_value_array($arr) {
$ret = array();
foreach($arr as $k => $v) {
$ret[] = array('name' => $k, 'value' => $v);
}
return $ret;
}
function test_service(){
error_reporting(E_ALL);
$result = create_session('admin','admin','5.0.4');
print_r($result);
echo '
';
$sessionId = $result['id'];
$data = array('module' => 'Vendors', 'name' => 'Mary');
$result = get_duplicated_list('admin',$sessionId, name_value_array($data));
print_r($result);
echo '
';
$result = create_entity('admin',$sessionId, name_value_array($data));
print_r($result);
echo '
';
$result = get_duplicated_list('admin',$sessionId,
name_value_array(array("username"=>"admin","module"=>"Accounts","account_name"=>"vtiger")));
print_r($result);
echo '
';
$result = create_entity('admin',$sessionId,
name_value_array(array("username"=>"admin","module"=>"Accounts","accountname"=>"Mary")));
print_r($result);
echo '
';
$result = get_duplicated_list('admin',$sessionId,
name_value_array(array("username"=>"admin","module"=>"Leads","last_name"=>"Jones")));
print_r($result);
echo '
';
$result = create_entity('admin',$sessionId, name_value_array(array("username"=>"admin","module"=>"Leads","lastname"=>"Mary")));
print_r($result);
echo '
';
$result = get_duplicated_list('admin',$sessionId, name_value_array(array("username"=>"admin","module"=>"Contacts","last_name"=>"jones")));
print_r($result);
echo '
';
$result = create_entity('admin',$sessionId, name_value_array(array("username"=>"admin","module"=>"Contacts","lastname"=>"Mary")));
print_r($result);
echo '
';
}
//test_service();
/* Begin the HTTP listener service and exit. */
$server->service($GLOBALS['HTTP_RAW_POST_DATA']);
exit();
?>