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(); ?>