You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1377 lines
48 KiB
PHTML
1377 lines
48 KiB
PHTML
7 months ago
|
<?php
|
||
|
// Exit if accessed directly
|
||
|
if( !defined( 'ABSPATH' ) ) exit;
|
||
|
|
||
|
if(!class_exists('vxcf_hubspot_api')){
|
||
|
|
||
|
class vxcf_hubspot_api extends vxcf_hubspot{
|
||
|
|
||
|
public $info=array(); // info
|
||
|
public $error= "";
|
||
|
public $timeout=30;
|
||
|
public $url='https://api.hubapi.com/';
|
||
|
|
||
|
function __construct($info) {
|
||
|
if(isset($info['data']) && is_array($info['data'])){
|
||
|
$this->info= $info['data'];
|
||
|
if(!isset($this->info['portal_id'])){
|
||
|
$this->info['portal_id']='';
|
||
|
}
|
||
|
if(!empty($info['meta']['portal_id'])){
|
||
|
// $this->info['portal_id']=$info['meta']['portal_id'];
|
||
|
}
|
||
|
}
|
||
|
if(!empty(self::$api_timeout)){
|
||
|
$this->timeout=self::$api_timeout;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
public function get_token(){
|
||
|
$info=$this->info;
|
||
|
//$users=$this->get_users();
|
||
|
$ac=$this->get_account();
|
||
|
if(!empty($ac['portalId'])){
|
||
|
$info['portal_id']=$ac['portalId'];
|
||
|
$info['time_zone']=$ac['timeZone'];
|
||
|
$info['currency']=$ac['currency'];
|
||
|
$info['valid_token'] ='true';
|
||
|
}else{
|
||
|
unset($info['access_token']);
|
||
|
if(is_string($ac)){
|
||
|
$info['error']=$ac;
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$info['_time']=time();
|
||
|
return $info;
|
||
|
}
|
||
|
|
||
|
public function refresh_token($info=""){
|
||
|
if(!is_array($info)){
|
||
|
$info=$this->info;
|
||
|
}
|
||
|
if(!isset($info['refresh_token']) || empty($info['refresh_token'])){
|
||
|
return $info;
|
||
|
}
|
||
|
$client=$this->client_info();
|
||
|
////////it is oauth
|
||
|
$body=array("client_id"=>$client['client_id'],"client_secret"=>$client['client_secret'],"redirect_uri"=>$client['call_back'],"grant_type"=>"refresh_token","refresh_token"=>$info['refresh_token']);
|
||
|
$res=$this->post_hubspot('api','',$this->url.'oauth/v1/token',"post",$body);
|
||
|
|
||
|
$re=json_decode($res,true);
|
||
|
if(isset($re['access_token']) && $re['access_token'] !=""){
|
||
|
$info["access_token"]=$re['access_token'];
|
||
|
// $info["org_id"]=$re['id'];
|
||
|
$info["class"]='updated';
|
||
|
$token=$info;
|
||
|
}else{
|
||
|
$info['error']=$re['error_description'];
|
||
|
$info['access_token']="";
|
||
|
$info["class"]='error';
|
||
|
$token=array(array('errorCode'=>'406','message'=>$re['error_description']));
|
||
|
|
||
|
unset($info['valid_token']);
|
||
|
}
|
||
|
$info["token_time"]=time(); //api validity check
|
||
|
//update hubspot info
|
||
|
//got new token , so update it in db
|
||
|
$this->update_info( array("data"=> $info),$info['id']);
|
||
|
return $info;
|
||
|
}
|
||
|
public function handle_code(){
|
||
|
$info=$this->info;
|
||
|
$id=$info['id'];
|
||
|
|
||
|
$client=$this->client_info();
|
||
|
$log_str=$res=""; $token=array();
|
||
|
if(isset($_REQUEST['code'])){
|
||
|
$code=$this->post('code');
|
||
|
|
||
|
if(!empty($code)){
|
||
|
$body=array("client_id"=>$client['client_id'],"client_secret"=>$client['client_secret'],"redirect_uri"=>$client['call_back'],"grant_type"=>"authorization_code","code"=>$code);
|
||
|
$res=$this->post_hubspot('api','',$this->url.'oauth/v1/token',"post",$body);
|
||
|
|
||
|
$log_str="Getting access token from code";
|
||
|
$token=json_decode($res,true);
|
||
|
if(!isset($token['access_token'])){
|
||
|
$log_str.=" =".$res;
|
||
|
}
|
||
|
}
|
||
|
if(isset($_REQUEST['error'])){
|
||
|
$token['error_description']=$this->post('error_description');
|
||
|
}
|
||
|
}else{
|
||
|
//revoke token on user request
|
||
|
if(isset($info['instance_url']) && $info['instance_url']!="")
|
||
|
$res=$this->post_hubspot('api','',$this->url.'/oauth/v1/refresh-tokens/'.$info['refresh_token'],'delete');
|
||
|
$log_str="Access token Revoked on Request";
|
||
|
}
|
||
|
|
||
|
$info['portal_id']='';
|
||
|
//var_dump($token); die();
|
||
|
$info['instance_url']=$this->post('instance_url',$token);
|
||
|
$info['access_token']=$this->post('access_token',$token);
|
||
|
$info['client_id']=$client['client_id'];
|
||
|
$info['_id']=$this->post('id',$token);
|
||
|
$info['refresh_token']=$this->post('refresh_token',$token);
|
||
|
// $info['issued_at']=round($this->post('issued_at',$token)/1000);
|
||
|
$info['signature']=$this->post('signature',$token);
|
||
|
$info['token_time']=time();
|
||
|
$info['_time']=time();
|
||
|
$info['error']=$this->post('message',$token);
|
||
|
$info['api']="api";
|
||
|
$info["class"]='error';
|
||
|
$info['valid_token'] ='';
|
||
|
if(!empty($info['access_token'])){
|
||
|
$info["class"]='updated';
|
||
|
$info['valid_token'] ='true';
|
||
|
$this->info=$info;
|
||
|
$ac=$this->get_account();
|
||
|
if(!empty($ac['portalId'])){
|
||
|
$info['portal_id']=$ac['portalId'];
|
||
|
$info['time_zone']=$ac['timeZone'];
|
||
|
$info['currency']=$ac['currency'];
|
||
|
}
|
||
|
$this->info=$info;
|
||
|
}
|
||
|
|
||
|
// $info=$this->validate_api($info);
|
||
|
$this->update_info( array('data'=> $info) , $id);
|
||
|
return $info;
|
||
|
}
|
||
|
public function get_account(){
|
||
|
$url='integrations/v1/me';
|
||
|
return $this->post_hubspot_arr($url);
|
||
|
}
|
||
|
/**
|
||
|
* Posts data to hubspot, Get New access token on expiration message from hubspot
|
||
|
* @param string $path hubspot path
|
||
|
* @param string $method CURL method
|
||
|
* @param array $body (optional) if you want to post data
|
||
|
* @return array HubSpot Response array
|
||
|
*/
|
||
|
public function post_hubspot_arr($path,$method='get',$body=""){
|
||
|
$info=$this->info;
|
||
|
$get_token=false;
|
||
|
$api=$this->post('api',$info);
|
||
|
$dev_key='';
|
||
|
|
||
|
if($api == 'web'){
|
||
|
$dev_key=$this->post('api_key',$info);
|
||
|
}else{
|
||
|
|
||
|
$token_time=(int)$this->post('token_time',$info);
|
||
|
$time=time();
|
||
|
$expiry=$token_time+1797; //21600
|
||
|
if($expiry<$time){
|
||
|
$info=$this->refresh_token();
|
||
|
|
||
|
}
|
||
|
if(!empty($info['access_token'])){
|
||
|
$dev_key=$info['access_token'];
|
||
|
}
|
||
|
}
|
||
|
if(strpos($path,'https://') === false){
|
||
|
$path=$this->url.$path;
|
||
|
}
|
||
|
|
||
|
$hubspot_res=$this->post_hubspot($api,$dev_key,$path,$method,$body); //var_dump($info); die();
|
||
|
//var_dump($hubspot_res,$path); die();
|
||
|
$hubspot_response=json_decode($hubspot_res,true);
|
||
|
if($api != 'web' && isset($hubspot_response['status']) && $hubspot_response['status'] == 'error' && isset($hubspot_response['category']) && $hubspot_response['category'] == 'EXPIRED_AUTHENTICATION'){
|
||
|
$info=$this->refresh_token();
|
||
|
if(!empty($info['access_token'])){
|
||
|
$dev_key=$info['access_token'];
|
||
|
}
|
||
|
$hubspot_res=$this->post_hubspot($api,$dev_key,$path,$method,$body);
|
||
|
$hubspot_response=json_decode($hubspot_res,true);
|
||
|
}///var_dump($hubspot_response); die();
|
||
|
if(!is_array($hubspot_response)){
|
||
|
$hubspot_response=wp_strip_all_tags($hubspot_response);
|
||
|
}
|
||
|
if(isset($hubspot_response['status']) && $hubspot_response['status'] == 'error' && !empty($hubspot_response['message']) && strpos($hubspot_response['message'],'expired') !== false){
|
||
|
$get_token=true;
|
||
|
}
|
||
|
|
||
|
|
||
|
return $hubspot_response;
|
||
|
}
|
||
|
/**
|
||
|
* Posts data to hubspot
|
||
|
* @param string $dev_key Slesforce Access Token
|
||
|
* @param string $path HubSpot Path
|
||
|
* @param string $method CURL method
|
||
|
* @param string $body (optional) if you want to post data
|
||
|
* @return string HubSpot Response JSON
|
||
|
*/
|
||
|
public function post_hubspot($type,$dev_key,$path,$method,$body=""){
|
||
|
|
||
|
$header=array(); $pars=array();
|
||
|
if(is_array($body) && isset($body['grant_type'])){ //getting access token
|
||
|
$header=array('content-type'=>'application/x-www-form-urlencoded');
|
||
|
$body=http_build_query($body);
|
||
|
}else{
|
||
|
if($type == 'web'){
|
||
|
$pars['hapikey']=$dev_key;
|
||
|
}else{
|
||
|
$header['Authorization']=' Bearer ' . $dev_key;
|
||
|
}
|
||
|
|
||
|
if($method != "get"){
|
||
|
if(is_array($body)){
|
||
|
$body=json_encode($body); }
|
||
|
$header['content-length']= strlen($body);
|
||
|
$header['content-type']='application/json';
|
||
|
}else{
|
||
|
|
||
|
if(is_array($body) && count($body)>0){
|
||
|
$pars=array_merge($pars,$body);
|
||
|
}
|
||
|
}
|
||
|
if(count($pars)>0){
|
||
|
$mark=strpos($path,'?') === false ? '?' : '&';
|
||
|
$path.=$mark.http_build_query($pars);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$args=array(
|
||
|
'method' => strtoupper($method),
|
||
|
'timeout' => $this->timeout,
|
||
|
'headers' => $header,
|
||
|
// 'body' => $body
|
||
|
);
|
||
|
if(!empty($body)){
|
||
|
$args['body']= $body;
|
||
|
}
|
||
|
$response = wp_remote_post( $path, $args); //var_dump($response,$path);
|
||
|
|
||
|
if(is_wp_error($response)){
|
||
|
$error=$response->get_error_message();
|
||
|
$body=json_encode(array('error'=>$error));
|
||
|
}else if(isset($response['body'])){
|
||
|
$body=$response['body'];
|
||
|
}
|
||
|
$code=wp_remote_retrieve_response_code($response);
|
||
|
if($code == 204){ $body='{"code":"204","msg":"No Content"}'; }
|
||
|
if($code == 404){ $body='{"code":"404","msg":"Not Found"}'; }
|
||
|
if(empty($body) && isset($response['response']) && is_array($response['response'])){
|
||
|
$body=json_encode($response['response']);
|
||
|
}
|
||
|
|
||
|
|
||
|
return $body;
|
||
|
}
|
||
|
/**
|
||
|
* Get HubSpot Client Information
|
||
|
* @param array $info (optional) HubSpot Client Information Saved in Database
|
||
|
* @return array HubSpot Client Information
|
||
|
*/
|
||
|
public function client_info(){
|
||
|
$info=$this->info;
|
||
|
$client_id='66c8b02a-06d8-47f1-b7c9-a0e0b1b28384';
|
||
|
$client_secret='3f9b1144-21e4-47a1-bb57-4f25be001727';
|
||
|
$call_back="https://www.crmperks.com/sf_auth/";
|
||
|
//custom app
|
||
|
if(is_array($info)){
|
||
|
if($this->post('custom_app',$info) == "yes" && $this->post('app_id',$info) !="" && $this->post('app_secret',$info) !="" && $this->post('app_url',$info) !=""){
|
||
|
$client_id=$this->post('app_id',$info);
|
||
|
$client_secret=$this->post('app_secret',$info);
|
||
|
$call_back=$this->post('app_url',$info);
|
||
|
}
|
||
|
}
|
||
|
return array("client_id"=>$client_id,"client_secret"=>$client_secret,"call_back"=>$call_back);
|
||
|
}
|
||
|
public function get_forms(){
|
||
|
$url='forms/v2/forms';
|
||
|
|
||
|
return $this->post_hubspot_arr($url,'get');
|
||
|
|
||
|
}
|
||
|
public function get_form_fields($object){
|
||
|
|
||
|
}
|
||
|
/**
|
||
|
* Get fields from hubspot
|
||
|
* @param string $form_id Form Id
|
||
|
* @param array $form (optional) Form Settings
|
||
|
* @param array $request (optional) custom array or $_REQUEST
|
||
|
* @return array HubSpot fields
|
||
|
*/
|
||
|
public function get_crm_fields($object){
|
||
|
|
||
|
$h_fields='["company_size","date_of_birth","degree","field_of_study","gender","graduation_date","hs_content_membership_notes","hs_content_membership_status","hs_facebook_ad_clicked","hs_facebookid","hs_google_click_id","hs_googleplusid","hs_lead_status","hs_legal_basis","hs_linkedinid","hs_twitterid","job_function","marital_status","military_status","relationship_status","school","seniority","start_date","work_email","firstname","twitterhandle","followercount","lastname","salutation","twitterprofilephoto","email","hs_persona","fax","address","hubspot_owner_id","city","linkedinbio","twitterbio","state","hs_analytics_source","zip","country","linkedinconnections","hs_language","kloutscoregeneral","jobtitle","photo","message","closedate","lifecyclestage","company","website","numemployees","annualrevenue","industry","associatedcompanyid"]';
|
||
|
//,"mobilephone","phone","fax"
|
||
|
$free_fields=json_decode($h_fields,true);
|
||
|
if(strpos($object,'vxf_') !== false){
|
||
|
$form_id=substr($object,4);
|
||
|
$fields=array();
|
||
|
$url='forms/v2/forms/'.$form_id;
|
||
|
$res=$this->post_hubspot_arr($url,'get');
|
||
|
|
||
|
if(!empty($res['formFieldGroups'])){
|
||
|
$form_fields=array();
|
||
|
foreach($res['formFieldGroups'] as $group){
|
||
|
if(!empty($group['fields'])){
|
||
|
foreach($group['fields'] as $v){
|
||
|
$form_fields[]=$v;
|
||
|
if(!empty($v['dependentFieldFilters'])){
|
||
|
foreach($v['dependentFieldFilters'] as $vv){
|
||
|
if(!empty($vv['dependentFormField'])){
|
||
|
$form_fields[]=$vv['dependentFormField'];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}}
|
||
|
}
|
||
|
foreach($form_fields as $v){
|
||
|
$field_arr=array('name'=>$v['name'],'label'=>$v['label'],'type'=>$v['fieldType']);
|
||
|
$field_arr['req']= $v['required'] === true ? 'true' : '';
|
||
|
if(!empty($v['options'])){
|
||
|
$ops=$eg=array();
|
||
|
foreach($v['options'] as $op){
|
||
|
$ops[]=array('label'=>$op['label'],'value'=>$op['value']);
|
||
|
$eg[]=$op['value'].'='.$op['label'];
|
||
|
}
|
||
|
if(!empty($ops)){
|
||
|
$field_arr['options']=$ops;
|
||
|
$field_arr['eg']=implode(', ', array_slice($eg,0,20));
|
||
|
}
|
||
|
}
|
||
|
$field_arr['object']=$v['propertyObjectType'];
|
||
|
if(!in_array($v['name'],$free_fields)){
|
||
|
$field_arr['is_custom']='true';
|
||
|
}
|
||
|
|
||
|
$fields[$v['name']]=$field_arr;
|
||
|
|
||
|
}
|
||
|
$fields['vx_consent']=array('name'=>'vx_consent','label'=>'GDPR Consent','type'=>'boolean');
|
||
|
|
||
|
$res_def=$this->post_hubspot_arr('email/public/v1/subscriptions','get');
|
||
|
if(!empty($res_def['subscriptionDefinitions'])){
|
||
|
foreach($res_def['subscriptionDefinitions'] as $v){
|
||
|
$fields['vxoptin_'.$v['id']]=array('name'=>'vxoptin_'.$v['id'],'label'=>$v['name'],'type'=>'text');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$fields['vx_url']=array('name'=>'vx_url','label'=>'Page URL','type'=>'URL');
|
||
|
$fields['vx_title']=array('name'=>'vx_title','label'=>'Page Title','type'=>'text');
|
||
|
$fields['vx_camp_id']=array('name'=>'vx_camp_id','label'=>'SFDC Campaign ID','type'=>'text');
|
||
|
$fields['vx_webinar_key']=array('name'=>'vx_webinar_key','label'=>'GoToWebinar key','type'=>'text');
|
||
|
$fields['vx_ip']=array('name'=>'vx_ip','label'=>'IP Address','type'=>'text');
|
||
|
$fields['skipValidation']=array('name'=>'skipValidation','label'=>'Skip Validation','type'=>'boolean','eg'=>'0 or 1','options'=>array(array('label'=>'True','value'=>'1'),array('label'=>'False','value'=>'0')));
|
||
|
}else{
|
||
|
$fields=json_encode($res);
|
||
|
}
|
||
|
|
||
|
//var_dump($fields,$free_fields);
|
||
|
return $fields;
|
||
|
}
|
||
|
|
||
|
if($object == 'Task'){
|
||
|
return array('name'=>array('name'=>'name','label'=>'Title','type'=>'Text'),'description'=>array('name'=>'description','label'=>'Note','type'=>'Text','req'=>'true'),'timestamp'=>array('name'=>'timestamp', 'label'=>'Due Date','type'=>'Datetime'));
|
||
|
}
|
||
|
$module='contacts'; $v='v1';
|
||
|
if($object == 'Company'){
|
||
|
$module='companies';
|
||
|
}else if($object == 'Ticket'){
|
||
|
$module='tickets'; $v='v2';
|
||
|
}else if($object == 'Deal'){
|
||
|
$module='deals';
|
||
|
}
|
||
|
$path='properties/'.$v.'/'.$module.'/properties';
|
||
|
// $module='tickets';
|
||
|
$hubspot_response=$this->post_hubspot_arr($path);
|
||
|
//var_dump($hubspot_response);
|
||
|
$field_info='No Fields Found';
|
||
|
if( !empty($hubspot_response['message'])){
|
||
|
$field_info=$hubspot_response['message'];
|
||
|
}else if(isset($hubspot_response[0]) && is_array($hubspot_response[0])){
|
||
|
$field_info=array();
|
||
|
foreach($hubspot_response as $k=>$field){
|
||
|
|
||
|
if(isset($field['readOnlyValue']) && $field['readOnlyValue'] === false ){
|
||
|
$required="";
|
||
|
if(in_array($field['name'],array('email','name','dealname'))){
|
||
|
$required="true";
|
||
|
}
|
||
|
if($object == 'Ticket' && in_array($field['name'],array('subject','content'))){
|
||
|
$required="true";
|
||
|
}
|
||
|
$type=$field['fieldType'];
|
||
|
if(isset($field['type']) && in_array($field['fieldType'],array('datetime')) ){ //
|
||
|
$type=$field['type'];
|
||
|
}
|
||
|
$field_arr=array('name'=>$field['name'],"type"=>$type);
|
||
|
$field_arr['label']=$field['label'];
|
||
|
$field_arr['req']=$required;
|
||
|
if(!empty($field['options'])){
|
||
|
$ops=$eg=array();
|
||
|
foreach($field['options'] as $op){
|
||
|
$ops[]=array('label'=>$op['label'],'value'=>$op['value']);
|
||
|
$eg[]=$op['value'].'='.$op['label'];
|
||
|
}
|
||
|
if(!empty($ops)){
|
||
|
$field_arr['options']=$ops;
|
||
|
$field_arr['eg']=implode(', ', array_slice($eg,0,20));
|
||
|
}
|
||
|
}
|
||
|
if(! (isset($field['hubspotDefined']) && $field['hubspotDefined'] == true) ){
|
||
|
$field_arr['is_custom']='true';
|
||
|
}
|
||
|
$field_info[$field['name']]=$field_arr;
|
||
|
}
|
||
|
}
|
||
|
if(in_array($module,array('contacts','companies'))){
|
||
|
$field_info['id']=array('name'=>'id','type'=>'number','label'=>'ID (Do not map this field)','is_custom'=>'true','req'=>'');
|
||
|
}
|
||
|
return $field_info;
|
||
|
}else{
|
||
|
return json_encode($hubspot_response);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get campaigns from hubspot
|
||
|
* @return array HubSpot campaigns
|
||
|
*/
|
||
|
public function get_lists(){
|
||
|
$hubspot_response=$this->post_hubspot_arr('contacts/v1/lists/static?count=500');
|
||
|
// var_dump($hubspot_response);
|
||
|
///seprating fields
|
||
|
$field_info=__('No List Found','gravity-forms-hubspot-crm');
|
||
|
if(isset($hubspot_response['lists']) && is_array($hubspot_response['lists'])){
|
||
|
$field_info=array();
|
||
|
foreach($hubspot_response['lists'] as $k=>$field){
|
||
|
if($field['dynamic'] === false){
|
||
|
$field_info[$field['listId']]=$field['name'];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if(isset($hubspot_response['message'])){
|
||
|
$field_info=$hubspot_response['message'];
|
||
|
}
|
||
|
return $field_info;
|
||
|
}
|
||
|
public function get_pipes($object='tickets'){
|
||
|
$hubspot_response=$this->post_hubspot_arr('crm-pipelines/v1/pipelines/'.$object);
|
||
|
|
||
|
///seprating fields
|
||
|
$field_info=__('No List Found','gravity-forms-hubspot-crm');
|
||
|
if(isset($hubspot_response['results']) && is_array($hubspot_response['results'])){
|
||
|
$field_info=array();
|
||
|
foreach($hubspot_response['results'] as $k=>$field){
|
||
|
if(!empty($field['stages']) && $field['active'] === true){
|
||
|
if(!empty($field['stages'])){
|
||
|
foreach($field['stages'] as $stage){
|
||
|
if(isset($stage['stageId'])){
|
||
|
$field_info[$field['pipelineId'].'-v_xx-'.$stage['stageId']]=$field['label'].' - '.$stage['label'];
|
||
|
}
|
||
|
}
|
||
|
} }
|
||
|
}
|
||
|
}
|
||
|
if(isset($hubspot_response['message'])){
|
||
|
$field_info=$hubspot_response['message'];
|
||
|
}
|
||
|
return $field_info;
|
||
|
}
|
||
|
|
||
|
|
||
|
public function get_flows(){
|
||
|
$hubspot_response=$this->post_hubspot_arr('automation/v3/workflows');
|
||
|
// var_dump($hubspot_response); die();
|
||
|
///seprating fields
|
||
|
$field_info=__('No Work Flow Found','gravity-forms-hubspot-crm');
|
||
|
if(isset($hubspot_response['workflows']) && is_array($hubspot_response['workflows'])){
|
||
|
$field_info=array();
|
||
|
foreach($hubspot_response['workflows'] as $k=>$field){
|
||
|
if($field['enabled'] === true){
|
||
|
$field_info[$field['id']]=$field['name'];}
|
||
|
}
|
||
|
}
|
||
|
if(isset($hubspot_response['message'])){
|
||
|
$field_info=$hubspot_response['message'];
|
||
|
}
|
||
|
return $field_info;
|
||
|
}
|
||
|
/**
|
||
|
* Get users from hubspot
|
||
|
* @return array HubSpot users
|
||
|
*/
|
||
|
public function get_users(){
|
||
|
|
||
|
$hubspot_response=$this->post_hubspot_arr('owners/v2/owners');
|
||
|
|
||
|
///seprating fields
|
||
|
$field_info=__('No Users Found');
|
||
|
if(isset($hubspot_response['status']) && $hubspot_response['status'] == 'error' && !empty($hubspot_response['message'])){
|
||
|
$field_info=$hubspot_response['message'];
|
||
|
} else if( isset($hubspot_response) && is_array($hubspot_response)){
|
||
|
$field_info=array();
|
||
|
foreach($hubspot_response as $k=>$field){
|
||
|
$field_info[$field['ownerId']]=$field['firstName'].' '.$field['lastName'].' ( '.$field['email'].' )';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $field_info;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Posts object to hubspot, Creates/Updates Object or add to object feed
|
||
|
* @param array $entry_id Needed to update hubspot response
|
||
|
* @return array HubSpot Response and Object URL
|
||
|
*/
|
||
|
public function push_object($object,$fields,$meta){
|
||
|
|
||
|
$ass=array("fromObjectId"=>'551',"toObjectId"=>'3528102',"category"=> "HUBSPOT_DEFINED","definitionId"=>15);
|
||
|
$assoc=array("fromObjectId"=>'150264022',"toObjectId"=>'801665692',"category"=> "HUBSPOT_DEFINED","definitionId"=>20);
|
||
|
|
||
|
$ass=array(array('name'=>'dealname','value'=>'First Deal from API'),array('name'=>'amount','value'=>600)); //150264019
|
||
|
$post=array('properties'=>$ass);
|
||
|
$product_post=array(array('name'=>'name','value'=>'Firstxx Product from API'),array('name'=>'price','value'=>270),array('name'=>'description','value'=>'<b>product description is here</b>'));
|
||
|
|
||
|
$item_post=array(array('name'=>'name','value'=>'First Product from API'),array('name'=>'price','value'=>200),array('name'=>'quantity','value'=>20),array('name'=>'hs_product_id','value'=>'28874673'));
|
||
|
|
||
|
$deal=array(array('externalPropertyName'=>'name','hubspotPropertyName'=>'dealname','dataType'=>'STRING'),array('externalPropertyName'=>'price','hubspotPropertyName'=>'amount','dataType'=>'STRING'),array('externalPropertyName'=>'dealstage','hubspotPropertyName'=>'dealstage','dataType'=>'STRING'));
|
||
|
|
||
|
$product=array(array('externalPropertyName'=>'name','hubspotPropertyName'=>'name','dataType'=>'STRING'),array('externalPropertyName'=>'price','hubspotPropertyName'=>'price','dataType'=>'STRING'),array('externalPropertyName'=>'description','hubspotPropertyName'=>'description','dataType'=>'STRING'));
|
||
|
$json='[
|
||
|
{
|
||
|
"externalPropertyName": "tax",
|
||
|
"hubspotPropertyName": "tax",
|
||
|
"dataType": "NUMBER"
|
||
|
},
|
||
|
{
|
||
|
"externalPropertyName": "qty",
|
||
|
"hubspotPropertyName": "quantity",
|
||
|
"dataType": "NUMBER"
|
||
|
},
|
||
|
{
|
||
|
"externalPropertyName": "price",
|
||
|
"hubspotPropertyName": "price",
|
||
|
"dataType": "NUMBER"
|
||
|
},
|
||
|
{
|
||
|
"externalPropertyName": "discount",
|
||
|
"hubspotPropertyName": "discount",
|
||
|
"dataType": "NUMBER"
|
||
|
}
|
||
|
]';
|
||
|
$item=json_decode($json,1);
|
||
|
$json='[
|
||
|
{
|
||
|
"externalPropertyName": "firstname",
|
||
|
"hubspotPropertyName": "firstname",
|
||
|
"dataType": "STRING"
|
||
|
},
|
||
|
{
|
||
|
"externalPropertyName": "familyname",
|
||
|
"hubspotPropertyName": "lastname",
|
||
|
"dataType": "STRING"
|
||
|
},
|
||
|
{
|
||
|
"externalPropertyName": "customer_email",
|
||
|
"hubspotPropertyName": "email",
|
||
|
"dataType": "STRING"
|
||
|
},
|
||
|
{
|
||
|
"externalPropertyName": "phone_number",
|
||
|
"hubspotPropertyName": "mobilephone",
|
||
|
"dataType": "STRING"
|
||
|
}
|
||
|
]';
|
||
|
$con=json_decode($json,1);
|
||
|
$post=array('enabled'=>true,'mappings'=>array('DEAL'=>array('properties'=>$deal),'CONTACT'=>array('properties'=>$con),'PRODUCT'=>array('properties'=>$product),'LINE_ITEM'=>array('properties'=>$item)));
|
||
|
|
||
|
$ass='{
|
||
|
"id": "vx-store",
|
||
|
"label": "VX Store",
|
||
|
"adminUri": "http://localhost/wp12"
|
||
|
}';
|
||
|
|
||
|
|
||
|
$ass='{
|
||
|
"storeId": "vx-store",
|
||
|
"objectType": "PRODUCT",
|
||
|
"messages": [
|
||
|
{
|
||
|
"action": "UPSERT",
|
||
|
"changedAt": "1553486400000",
|
||
|
"externalObjectId": "123",
|
||
|
"properties": {
|
||
|
"name": "Jeff aaaxx",
|
||
|
"price": "562",
|
||
|
"description": "Jeff aaaxx description is here"
|
||
|
},
|
||
|
"associations": {
|
||
|
"DEAL": [
|
||
|
"123"
|
||
|
]
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
}';
|
||
|
|
||
|
$ass='{
|
||
|
"storeId": "vx-store",
|
||
|
"objectType": "DEAL",
|
||
|
"messages": [
|
||
|
{
|
||
|
"action": "UPSERT",
|
||
|
"changedAt": "1553486400000",
|
||
|
"externalObjectId": "1234",
|
||
|
"properties": {
|
||
|
"name": "Jeff aaaxx",
|
||
|
"price": "562"
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
}';
|
||
|
|
||
|
|
||
|
$ass=json_encode(array($assoc));
|
||
|
$ass=json_encode($product_post);
|
||
|
$path='deals/v1/deal';
|
||
|
|
||
|
$path='crm-objects/v1/objects/products/paged?properties=name&name=xxxx';
|
||
|
$path='crm-objects/v1/objects/line_items';
|
||
|
$path='extensions/ecomm/v2/settings?appId=39761&hapikey=5837d3ab-02a3-45c3-b533-15dca0039428';
|
||
|
// $path='extensions/ecomm/v2/stores';
|
||
|
$path='extensions/ecomm/v2/sync/messages';
|
||
|
$path='crm-objects/v1/objects/line_items';
|
||
|
// $path='crm-associations/v1/associations';
|
||
|
$path='crm-associations/v1/associations/create-batch';
|
||
|
$path='crm-objects/v1/objects/products';
|
||
|
//?appId=5961456&hapikey=fc99920a-94d4-4de6-aad3-8d580e60c3ba //&hapikey=fc99920a-94d4-4de6-aad3-8d580e60c3ba , 5837d3ab-02a3-45c3-b533-15dca0039428
|
||
|
// info37 appId=39761&hapikey=5837d3ab-02a3-45c3-b533-15dca0039428
|
||
|
//$res=$this->post_hubspot_arr($path,'get');
|
||
|
// $res=$this->post_hubspot_arr($path,'post',$ass);
|
||
|
// var_dump($res); die();
|
||
|
$extra=$contact=array();
|
||
|
$portal_id=$id=""; $error=""; $action=""; $link=""; $search=$search_response=$status="";
|
||
|
// entry note
|
||
|
$entry_exists=false;
|
||
|
$debug = isset($_REQUEST['vx_debug']) && current_user_can('manage_options');
|
||
|
$event=$this->post('event',$meta);
|
||
|
|
||
|
if(isset($fields['id'])){
|
||
|
$id=$fields['id']['value']; unset($meta['primary_key']); unset($fields['id']);
|
||
|
}
|
||
|
if($debug){ ob_start();}
|
||
|
//check primary key
|
||
|
if(isset($meta['primary_key']) && $meta['primary_key']!="" && isset($fields[$meta['primary_key']]['value']) && $fields[$meta['primary_key']]['value']!=""){
|
||
|
$search=$fields[$meta['primary_key']]['value'];
|
||
|
$field=$meta['primary_key'];
|
||
|
if($object == 'Contact' && $field == 'email'){
|
||
|
$spath='contacts/v1/contact/email/'.$search.'/profile';
|
||
|
$search_response=$this->post_hubspot_arr($spath);
|
||
|
if(!empty($search_response['vid'])){
|
||
|
$id=$search_response['vid'];
|
||
|
$contact =$search_response['properties'];
|
||
|
}
|
||
|
|
||
|
}else if(in_array($object, array('Ticket','Deal','Company'))){
|
||
|
$sobject='';
|
||
|
if($object == 'Deal'){ $sobject='deals'; }else if($object == 'Ticket'){ $sobject='tickets'; }else if($object == 'Company'){ $sobject='companies'; }
|
||
|
$spath='crm/v3/objects/'.$sobject.'/search';
|
||
|
$sbody=array('filterGroups'=>array(array('filters'=>array(array('propertyName'=>$field,"operator"=> "EQ",'value'=>$search)))));
|
||
|
$search_response=$hubspot_response=$this->post_hubspot_arr($spath,'post',$sbody);
|
||
|
if(!empty($search_response['results'][0]['id'])){
|
||
|
$search_response=$search_response['results'][0];
|
||
|
$id=$search_response['id'];
|
||
|
}
|
||
|
//var_dump($search_response); die();
|
||
|
}else{
|
||
|
|
||
|
$sbody=array();
|
||
|
$spath='contacts/v1/search/query';
|
||
|
if($object == 'Company'){
|
||
|
$spath='companies/v2/companies/'.$field.'/'.str_replace(array('http://','https://'),'',$search);
|
||
|
}else{
|
||
|
$sbody['q']=$search;
|
||
|
}
|
||
|
//search object
|
||
|
//if primary key option is not empty and primary key field value is not empty , then check search object
|
||
|
$search_response=$hubspot_response=$this->post_hubspot_arr($spath,'get',$sbody);
|
||
|
// var_dump($search_response,$spath,$sbody); die();
|
||
|
|
||
|
if($search !=""){
|
||
|
if(is_array($search_response) && count($search_response)>10){
|
||
|
$search_response=array_slice($search_response,count($search_response)-10,10);
|
||
|
}
|
||
|
}
|
||
|
if(isset($hubspot_response[0]['Id'])&& $hubspot_response[0]['Id']!=""){
|
||
|
//object found, update old object or add to feed
|
||
|
$id=$hubspot_response[count($hubspot_response)-1]['Id'];
|
||
|
$entry_exists=true;
|
||
|
}
|
||
|
if(!empty($hubspot_response['message'])){
|
||
|
$error=$hubspot_response['message'];
|
||
|
}else{
|
||
|
if($object == 'Company' && isset($hubspot_response[0]['companyId']) ){
|
||
|
$id=$hubspot_response[0]['companyId'];
|
||
|
$portal_id=$hubspot_response[0]['portalId'];
|
||
|
}else if($object == 'Contact' && isset($hubspot_response['contacts'][0]['vid'])){
|
||
|
$id=$hubspot_response['contacts'][0]['vid'];
|
||
|
$portal_id=$hubspot_response['contacts'][0]['portal-id'];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
$extra["body"]=$search;
|
||
|
$extra["response"]=$search_response;
|
||
|
if($debug){
|
||
|
?>
|
||
|
<pre>
|
||
|
<h3>Search field</h3>
|
||
|
<p><?php print_r($field) ?></p>
|
||
|
<h3>Search term</h3>
|
||
|
<p><?php print_r($search) ?></p>
|
||
|
<h3>Search response</h3>
|
||
|
<p><?php print_r($hubspot_response) ?></p>
|
||
|
</pre>
|
||
|
<?php
|
||
|
}
|
||
|
|
||
|
$hubspot_response='';
|
||
|
}
|
||
|
|
||
|
if(!empty($meta['crm_id'])){
|
||
|
$id=$meta['crm_id'];
|
||
|
}
|
||
|
|
||
|
$note_object='';
|
||
|
if(in_array($event,array('delete_note','add_note'))){
|
||
|
if(isset($meta['related_object'])){
|
||
|
$note_object=$meta['related_object'];
|
||
|
$extra['Note Object']= $meta['related_object'];
|
||
|
}
|
||
|
if(isset($meta['note_object_link'])){
|
||
|
$extra['note_object_link']=$meta['note_object_link'];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(!empty($meta['add_pipe']) && !empty($meta['pipe']) ){
|
||
|
$sep=strpos($meta['pipe'],'-v_xx-') !== false ? '-v_xx-' : '-';
|
||
|
$exp=explode($sep,$meta['pipe']);
|
||
|
$fields['hs_pipeline']=array('value'=>$exp[0],'label'=>'Pipeline');
|
||
|
if(!isset($fields['hs_pipeline_stage'])){
|
||
|
$fields['hs_pipeline_stage']=array('value'=>$exp[1],'label'=>'Pipeline Stage');
|
||
|
}
|
||
|
}
|
||
|
if(!empty($meta['add_sales_pipe']) && !empty($meta['sales_pipe']) ){
|
||
|
$sep=strpos($meta['sales_pipe'],'-v_xx-') !== false ? '-v_xx-' : '-';
|
||
|
$exp=explode($sep,$meta['sales_pipe']);
|
||
|
$fields['pipeline']=array('value'=>$exp[0],'label'=>'Pipeline');
|
||
|
if(!isset($fields['dealstage'])){
|
||
|
$fields['dealstage']=array('value'=>$exp[1],'label'=>'Deal Stage');
|
||
|
}
|
||
|
}
|
||
|
if(!empty($meta['OwnerId']['value'])){
|
||
|
$fields['hubspot_owner_id']=array('value'=>$meta['OwnerId']['value'],'label'=>'Owner');
|
||
|
}
|
||
|
//var_dump($fields);
|
||
|
$path=''; $send_body=false; $post=array(); //$meta['_vx_contact_id']=array('value' =>301);
|
||
|
//if($error ==""){
|
||
|
if($id == ""){
|
||
|
$action="Added";
|
||
|
$send_body=true;
|
||
|
if($object == 'Contact'){
|
||
|
$path='contacts/v1/contact';
|
||
|
}else if($object == 'Ticket'){
|
||
|
$path='crm-objects/v1/objects/tickets';
|
||
|
}else if($object == 'Deal'){
|
||
|
$path='deals/v1/deal';
|
||
|
|
||
|
}else if($object == 'Company'){
|
||
|
$path='companies/v2/companies';
|
||
|
}else if($object == 'Task'){
|
||
|
$send_body=false;
|
||
|
$path='engagements/v1/engagements';
|
||
|
if(!empty($fields['description']['value'])){
|
||
|
// && (!empty($meta['_vx_contact_id']) || !empty($meta['_vx_company_id']))
|
||
|
$post['engagement']=array('type'=>'TASK');
|
||
|
|
||
|
if(!empty($fields['timestamp']['value'])){
|
||
|
$t=strtotime($fields['timestamp']['value']);
|
||
|
if(!empty($t)){
|
||
|
$offset=get_option('gmt_offset') * 3600;
|
||
|
$t-=$offset;
|
||
|
$t=$t.'000';
|
||
|
}
|
||
|
$post['engagement']['timestamp']=$t;
|
||
|
}
|
||
|
|
||
|
$post['metadata']=array('body'=>$fields['description']['value']);
|
||
|
|
||
|
if(!empty($fields['name']['value'])){
|
||
|
$post['metadata']['subject']=$fields['name']['value'];
|
||
|
}
|
||
|
if(!empty($meta['_vx_contact_id']['value'])){
|
||
|
$post['associations']['contactIds']=array($meta['_vx_contact_id']['value']);
|
||
|
}
|
||
|
if(!empty($meta['_vx_company_id']['value'])){
|
||
|
$post['associations']['companyIds']=array($meta['_vx_company_id']['value']);
|
||
|
}
|
||
|
if(!empty($meta['OwnerId']['value'])){
|
||
|
$post['associations']['ownerIds']=array($meta['OwnerId']['value']);
|
||
|
$post['engagement']['ownerId']=$meta['OwnerId']['value'];
|
||
|
}
|
||
|
}
|
||
|
//var_dump($post,$fields); die();
|
||
|
}
|
||
|
$method='post';
|
||
|
$status="1";
|
||
|
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
if($event == 'add_note'){
|
||
|
|
||
|
$path='engagements/v1/engagements';
|
||
|
$post['engagement']=array('type'=>'NOTE');
|
||
|
$post['associations']=array();
|
||
|
if($note_object == 'Company'){
|
||
|
$post['associations']['companyIds']=array((int)$id);
|
||
|
}else if($note_object == 'Contact'){
|
||
|
$post['associations']['contactIds']=array((int)$id);
|
||
|
}else if($note_object == 'Ticket'){
|
||
|
$post['associations']['ticketIds']=array((int)$id);
|
||
|
}
|
||
|
$post['metadata']=array('body'=>$fields['Body']['value']);
|
||
|
$status="1";
|
||
|
$method='post';
|
||
|
}
|
||
|
else if(in_array($event,array('delete','delete_note'))){
|
||
|
$method='delete';
|
||
|
if($event == 'delete'){
|
||
|
if($object == 'Contact'){
|
||
|
$path='/contacts/v1/contact/vid/'.$id;
|
||
|
}else if($object == 'Company'){
|
||
|
$path='companies/v2/companies/'.$id;
|
||
|
}else if($object == 'Ticket'){
|
||
|
$path='/crm-objects/v1/objects/tickets/'.$id;
|
||
|
}
|
||
|
}else{
|
||
|
$path='engagements/v1/engagements/'.$id;
|
||
|
}
|
||
|
$action="Deleted";
|
||
|
|
||
|
$status="5";
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
$action="Updated";
|
||
|
if($object == 'Contact'){
|
||
|
$path='contacts/v1/contact/vid/'.$id.'/profile';
|
||
|
$method='post';
|
||
|
}else if($object == 'Company'){
|
||
|
$path='companies/v2/companies/'.$id;
|
||
|
$method='put';
|
||
|
}else if($object == 'Deal'){
|
||
|
$path='deals/v1/deal/'.$id;
|
||
|
$method='put';
|
||
|
}
|
||
|
$status="2"; $send_body=true;
|
||
|
if(!empty($meta['update'])){ $path=''; }
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
$is_form=false;
|
||
|
if($send_body){
|
||
|
if(strpos($object,'vxf_') !== false){
|
||
|
$is_form=true;
|
||
|
//,'sfdcCampaignId'=>'','goToWebinarWebinarKey'=>''
|
||
|
/*$post=array(
|
||
|
'context'=>array('pageUri'=>'https://local','pageName'=>'Local Test','hutk'=>'25886241a10e48ad86842f0125b578f7','ipAddress'=>'120.23.56.58'),
|
||
|
'legalConsentOptions'=>array('consent'=>array(
|
||
|
'consentToProcess'=>true,"text"=>'I agree to allow Example Company to store and process my personal data.',
|
||
|
//'communications'=>array(array('value'=>true,'text'=>'Text','subscriptionTypeId'=>'5388809'))
|
||
|
))
|
||
|
);*/
|
||
|
|
||
|
$form_id=substr($object,4);
|
||
|
|
||
|
if(!empty($this->info['portal_id']) && !empty($form_id) && !empty($fields) ){
|
||
|
$path='https://api.hsforms.com/submissions/v3/integration/submit/'.$this->info['portal_id'].'/'.$form_id;
|
||
|
if(!isset($fields['vx_url']) && !empty($meta['_vx_entry']['_vx_url'])){
|
||
|
$fields['vx_url']=array('value'=>$meta['_vx_entry']['_vx_url'] , 'label'=>'Page URL');
|
||
|
}
|
||
|
if(!isset($fields['vx_title'])){
|
||
|
$title='';
|
||
|
if( !empty($meta['_vx_entry']['_vx_title'])){ $title=$meta['_vx_entry']['_vx_title']; }
|
||
|
else if( !empty($meta['_vx_entry']['_vx_form_name'])){ $title=$meta['_vx_entry']['_vx_form_name']; }
|
||
|
if(!empty($title)){
|
||
|
$fields['vx_title']=array('value'=>$title , 'label'=>'Form Name');
|
||
|
}
|
||
|
}
|
||
|
if(!isset($fields['vx_ip']) && !empty($meta['_vx_entry']['_vx_ip']) && filter_var($meta['_vx_entry']['_vx_ip'], FILTER_VALIDATE_IP)){
|
||
|
$fields['vx_ip']=array('value'=>$meta['_vx_entry']['_vx_ip'] , 'label'=>'IP Address');
|
||
|
}
|
||
|
|
||
|
|
||
|
$context=array('vx_url'=>'pageUri','vx_title'=>'pageName','vx_ip'=>'ipAddress','vx_camp_id'=>'sfdcCampaignId','vx_webinar_key'=>'goToWebinarWebinarKey');
|
||
|
$com_consent=array();
|
||
|
foreach($fields as $k=>$v){
|
||
|
if(isset($context[$k])){
|
||
|
if($k == 'vx_url' && !empty($v['value'])){
|
||
|
$v['value'] = strtok($v['value'], '?');
|
||
|
}
|
||
|
$post['context'][$context[$k]]=$v['value'];
|
||
|
}else if($k == 'skipValidation'){
|
||
|
$post['skipValidation']=empty($v['value']) ? false : true;
|
||
|
}else if($k == 'vx_consent'){
|
||
|
$post['legalConsentOptions']=array('consent'=>array(
|
||
|
'consentToProcess'=>!empty($v['value']),
|
||
|
"text"=>'Yes, you can store and process my personal data.',
|
||
|
//"communications"=>array(array('value'=>true,'subscriptionTypeId'=>10577111,'text'=>'Yes, subscribe me'))
|
||
|
));
|
||
|
|
||
|
}else if(strpos($k,'vxoptin_') === 0){
|
||
|
$val=!empty($v['value']) ? true : false;
|
||
|
$com_consent[]=array('value'=>$val,'text'=>$v['value'],'subscriptionTypeId'=>substr($k,8));
|
||
|
}else{
|
||
|
$type = !empty($meta['fields'][$k]['type']) ? $meta['fields'][$k]['type'] : '';
|
||
|
$obj_type = !empty($meta['fields'][$k]['object']) ? $meta['fields'][$k]['object'].'.' : '';
|
||
|
if( !in_array($obj_type,array('TICKET.')) ){ $obj_type=''; }
|
||
|
$v['value']=$this->verify_val($v['value'],$type);
|
||
|
$post['fields'][]=array('name'=>$obj_type.$k,'value'=>$v['value']);
|
||
|
} }
|
||
|
|
||
|
if(!empty($meta['_vx_entry']['_vx_htuk'])){
|
||
|
$post['context']['hutk']=$meta['_vx_entry']['_vx_htuk'];
|
||
|
$fields['hutk']=array('value'=>$meta['_vx_entry']['_vx_htuk'] , 'label'=>'Cookie');
|
||
|
}
|
||
|
|
||
|
if(!empty($com_consent) && isset($post['legalConsentOptions'])){
|
||
|
$post['legalConsentOptions']['consent']['communications']= $com_consent;
|
||
|
}
|
||
|
//var_dump($post,$fields,$meta['_vx_entry']); die();
|
||
|
}
|
||
|
|
||
|
}
|
||
|
else{
|
||
|
$key='property';
|
||
|
if( in_array($object,array('Company','Ticket','Deal') ) ){
|
||
|
$key='name';
|
||
|
}
|
||
|
|
||
|
if(is_array($fields)){
|
||
|
foreach($fields as $k=>$v){
|
||
|
$type = !empty($meta['fields'][$k]['type']) ? $meta['fields'][$k]['type'] : '';
|
||
|
|
||
|
$v['value']=$this->verify_val($v['value'],$type);
|
||
|
if($type == 'checkbox' && !empty($meta['fields'][$k]['is_custom']) && !empty($contact[$k]['value'])){
|
||
|
$v['value']=$contact[$k]['value'].';'.$v['value'];
|
||
|
$v['value']=array_unique(explode(';',$v['value']));
|
||
|
$v['value']=implode(';',$v['value']);
|
||
|
}
|
||
|
$post[]=array($key=>$k,'value'=>$v['value']);
|
||
|
} //var_dump($post); die();
|
||
|
}
|
||
|
if($object != 'Ticket'){
|
||
|
$post=array('properties'=>$post);
|
||
|
}
|
||
|
} }
|
||
|
$hubspot_response=array();
|
||
|
if(!empty($path)){
|
||
|
if($object == 'Deal'){
|
||
|
if(!empty($meta['_vx_contact_id']['value'])){
|
||
|
$post['associations']['associatedVids']=array($meta['_vx_contact_id']['value']);
|
||
|
$fields['vid']= array('value'=>$meta['_vx_contact_id']['value'],'label'=>'Contact ID');
|
||
|
}
|
||
|
if(!empty($meta['_vx_company_id']['value'])){
|
||
|
$post['associations']['associatedCompanyIds']=array($meta['_vx_company_id']['value']);
|
||
|
$fields['vid-company']= array('value'=>$meta['_vx_company_id']['value'],'label'=>'Company ID');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$post_data=json_encode($post);
|
||
|
//var_dump($path,$post,$object,$id); die('--------');
|
||
|
$hubspot_response=$this->post_hubspot_arr($path,$method,$post_data);
|
||
|
//var_dump($hubspot_response,$post,$fields); die();
|
||
|
if($object == 'Deal'){
|
||
|
//var_dump($post,$hubspot_response); die();
|
||
|
}
|
||
|
}
|
||
|
if(!$is_form){
|
||
|
$id_key='id';
|
||
|
if($object == 'Deal'){
|
||
|
$id_key='dealId';
|
||
|
}
|
||
|
|
||
|
if(isset($hubspot_response[$id_key])){
|
||
|
$id=$hubspot_response[$id_key];
|
||
|
|
||
|
if(!empty($meta['order_items']) && $status == '1'){
|
||
|
$items=$this->get_wc_items($meta);
|
||
|
$assoc_items=array();
|
||
|
foreach($items as $item){
|
||
|
if(!empty($item['p_id'])){
|
||
|
$hub_id=get_post_meta($item['p_id'],'vxc_hubspot_id',true);
|
||
|
if(empty($hub_id)){
|
||
|
$product_post=array(array('name'=>'name','value'=>$item['title']),array('name'=>'price','value'=>$item['unit_price']),array('name'=>'description','value'=>esc_html($item['desc'])));
|
||
|
$path='crm-objects/v1/objects/products';
|
||
|
$product_res=$this->post_hubspot_arr($path,'post',json_encode($product_post));
|
||
|
$extra['create product']=$product_res;
|
||
|
if(!empty($product_res['objectId'])){
|
||
|
$hub_id=$product_res['objectId'];
|
||
|
}
|
||
|
}
|
||
|
//create line item
|
||
|
$item_post=array(array('name'=>'name','value'=>$item['title']),array('name'=>'price','value'=>$item['unit_price']),array('name'=>'quantity','value'=>$item['qty']),array('name'=>'hs_product_id','value'=>$hub_id));
|
||
|
$path='crm-objects/v1/objects/line_items';
|
||
|
$product_res=$this->post_hubspot_arr($path,'post',json_encode($item_post));
|
||
|
$extra['item post']=$item_post;
|
||
|
$extra['create item']=$product_res;
|
||
|
if(!empty($product_res['objectId'])){
|
||
|
$item_id=$product_res['objectId'];
|
||
|
$assoc_items[]=array("fromObjectId"=>$item_id,"toObjectId"=>$id,"category"=> "HUBSPOT_DEFINED","definitionId"=>20);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if(!empty($assoc_items)){
|
||
|
$path='crm-associations/v1/associations/create-batch';
|
||
|
$product_res=$this->post_hubspot_arr($path,'put',json_encode($assoc_items));
|
||
|
$extra['assign items to deal']=$product_res;
|
||
|
}
|
||
|
}
|
||
|
// $status="1";
|
||
|
}else if(isset($hubspot_response['objectId'])){
|
||
|
$id=$hubspot_response['objectId'];
|
||
|
$portal_id=$hubspot_response['portalId'];
|
||
|
$link='https://app.hubspot.com/contacts/'.$portal_id.'/ticket/'.$id.'/';
|
||
|
$status="1";
|
||
|
}
|
||
|
|
||
|
}else{
|
||
|
$status="1";
|
||
|
}
|
||
|
//
|
||
|
if(isset($hubspot_response['message'])){
|
||
|
$error=$hubspot_response['message'];
|
||
|
if(!empty($hubspot_response['errors'][0]['message'])){
|
||
|
$error=$hubspot_response['errors'][0]['message'];
|
||
|
}
|
||
|
$id=''; $status='';
|
||
|
}else{
|
||
|
$portal_id=$this->info['portal_id'];
|
||
|
if(isset($hubspot_response['vid']) && isset($hubspot_response['portal-id'])){
|
||
|
$id=$hubspot_response['vid'];
|
||
|
$portal_id=$hubspot_response['portal-id'];
|
||
|
|
||
|
}else if(isset($hubspot_response['companyId']) && isset($hubspot_response['portalId'])){
|
||
|
$id=$hubspot_response['companyId'];
|
||
|
$portal_id=$hubspot_response['portalId'];
|
||
|
}
|
||
|
if(isset($hubspot_response['engagement']['id'])){
|
||
|
$id=$hubspot_response['engagement']['id'];
|
||
|
}
|
||
|
if(!empty($id) && !empty($portal_id)){
|
||
|
if($object == 'Company'){
|
||
|
$link='https://app.hubspot.com/sales/'.$portal_id.'/company/'.$id.'/';
|
||
|
}else if($object == 'Deal'){
|
||
|
$link='https://app.hubspot.com/sales/'.$portal_id.'/deal/'.$id.'/';
|
||
|
}else if($object == 'Contact'){
|
||
|
$link='https://app.hubspot.com/contacts/'.$portal_id.'/contact/'.$id.'/';
|
||
|
|
||
|
//add to list and work flow
|
||
|
if(!empty($fields['email']['value']) && !empty($meta['add_flow']) && !empty($meta['flow'])){
|
||
|
$email=$fields['email']['value'];
|
||
|
$path='automation/v2/workflows/'.$meta['flow'].'/enrollments/contacts/'.$email ;
|
||
|
$work_res=$this->post_hubspot_arr($path,'post');
|
||
|
$extra['Enrol to Work Flow']=$meta['flow'];
|
||
|
$extra['Work Flow Response']=$work_res;
|
||
|
}
|
||
|
//add to static list
|
||
|
if( !empty($meta['add_list']) && !empty($meta['list'])){
|
||
|
$path='contacts/v1/lists/'.$meta['list'].'/add' ;
|
||
|
$list_res=$this->post_hubspot_arr($path,'post',array('vids'=>array($id)));
|
||
|
$extra['Add to List']=$meta['list'];
|
||
|
$extra['List Rsponse']=$list_res;
|
||
|
|
||
|
}
|
||
|
|
||
|
//assign company
|
||
|
if(!empty($meta['_vx_company_id']['value'])){
|
||
|
$path='companies/v2/companies/'.$meta['_vx_company_id']['value'].'/contacts/'.$id;
|
||
|
$comp_res=$this->post_hubspot_arr($path,'put');
|
||
|
$extra['Assign Company']=$meta['_vx_company_id']['value'];
|
||
|
$extra['Company Rsponse']=$comp_res;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
else if($object == 'Ticket'){
|
||
|
if(!empty($meta['_vx_contact_id']['value'])){
|
||
|
$path='crm-associations/v1/associations';
|
||
|
$ass=array("fromObjectId"=>$meta['_vx_contact_id']['value'],"toObjectId"=>$id,"category"=> "HUBSPOT_DEFINED","definitionId"=>15);
|
||
|
$comp_res=$this->post_hubspot_arr($path,'put',$ass);
|
||
|
$extra['Assign Contact']=$meta['_vx_contact_id']['value'];
|
||
|
}
|
||
|
if(!empty($meta['_vx_company_id']['value'])){
|
||
|
$ass=array("fromObjectId"=>$meta['_vx_company_id']['value'],"toObjectId"=>$id,"category"=> "HUBSPOT_DEFINED","definitionId"=>25);
|
||
|
$path='crm-associations/v1/associations';
|
||
|
$comp_res=$this->post_hubspot_arr($path,'put',$ass);
|
||
|
$extra['Assign Company']=$meta['_vx_company_id']['value'];
|
||
|
}
|
||
|
|
||
|
}
|
||
|
//
|
||
|
}
|
||
|
//
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
if($debug){
|
||
|
?>
|
||
|
<pre>
|
||
|
<h3>HubSpot Information</h3>
|
||
|
<p><?php print_r($this->info) ?></p>
|
||
|
<h3>Data Sent</h3>
|
||
|
<p><?php echo json_encode($fields) ?></p>
|
||
|
<h3>HubSpot response</h3>
|
||
|
<p><?php print_r($hubspot_response) ?></p>
|
||
|
<h3>Object</h3>
|
||
|
<p><?php print_r($object."--------".$action) ?></p>
|
||
|
</pre>
|
||
|
<?php
|
||
|
$contents=trim(ob_get_clean());
|
||
|
if($contents!=""){
|
||
|
update_option($this->id."_debug",$contents);
|
||
|
}
|
||
|
}
|
||
|
//add entry note
|
||
|
if(!empty($meta['__vx_entry_note']) && !empty($id)){
|
||
|
$disable_note=$this->post('disable_entry_note',$meta);
|
||
|
if(!($entry_exists && !empty($disable_note))){
|
||
|
$entry_note=$meta['__vx_entry_note'];
|
||
|
|
||
|
$path='engagements/v1/engagements';
|
||
|
$note_post['engagement']=array('type'=>'NOTE');
|
||
|
$note_post['associations']=array();
|
||
|
if($object == 'Company'){
|
||
|
$note_post['associations']['companyIds']=array((int)$id);
|
||
|
}else if($object == 'Contact'){
|
||
|
$note_post['associations']['contactIds']=array((int)$id);
|
||
|
}else if($object == 'Ticket'){
|
||
|
$note_post['associations']['ticketIds']=array((int)$id);
|
||
|
}else if($object == 'Deal'){
|
||
|
$note_post['associations']['dealIds']=array((int)$id);
|
||
|
}
|
||
|
$note_post['metadata']=array('body'=>$entry_note['Body'],'subject'=>$entry_note['Title']);
|
||
|
|
||
|
$note_res=$this->post_hubspot_arr($path,"POST",$note_post);
|
||
|
$extra['Note Response']=$note_res;
|
||
|
$extra['Note Title']=$entry_note['Title'];
|
||
|
$extra['Note Body']=$entry_note['Body'];
|
||
|
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return array("error"=>$error,"id"=>$id,"link"=>$link,"action"=>$action,"status"=>$status,"data"=>$fields,"response"=>$hubspot_response,"extra"=>$extra);
|
||
|
}
|
||
|
public function verify_val($val,$type){
|
||
|
// $type=isset($field['type']) ? $field['type'] : '';
|
||
|
if( $type == 'file' && is_string($val)){
|
||
|
$files_temp=json_decode($val,true);
|
||
|
if(!empty($files_temp)){
|
||
|
$val=$files_temp;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
if(is_array($val)){
|
||
|
$val=implode(';',$val);
|
||
|
}
|
||
|
if($type == 'number'){
|
||
|
$val=filter_var( $val, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION );
|
||
|
}
|
||
|
if($type == 'booleancheckbox'){
|
||
|
$val=!empty($val) ? 'true' : 'false';
|
||
|
}
|
||
|
if($type == 'date'){
|
||
|
try{
|
||
|
$date = new DateTime( $val );
|
||
|
$date->modify( 'midnight' );
|
||
|
$val=$date->getTimestamp() * 1000;
|
||
|
}catch(Exception $e){
|
||
|
|
||
|
}
|
||
|
}
|
||
|
if(in_array($type,array('datetime'))){
|
||
|
$val=strtotime($val).'000';
|
||
|
}
|
||
|
return html_entity_decode($val);
|
||
|
}
|
||
|
public function get_wc_items($meta){
|
||
|
$_order=self::$_order;
|
||
|
// $fees=$_order->get_shipping_total();
|
||
|
// $fees=$_order-> get_total_discount();
|
||
|
// $fees=$_order-> get_total_tax();
|
||
|
|
||
|
$items=$_order->get_items();
|
||
|
$products=array(); $order_items=array();
|
||
|
if(is_array($items) && count($items)>0 ){
|
||
|
foreach($items as $item_id=>$item){
|
||
|
|
||
|
$sku=$desc=''; $qty=$unit_price=$tax=$total=$p_id=0;
|
||
|
if(method_exists($item,'get_product')){
|
||
|
// $p_id=$v->get_product_id();
|
||
|
$product=$item->get_product();
|
||
|
if(!$product){ continue; } //product deleted but exists in line items of old order
|
||
|
|
||
|
$total=(int)$item->get_total();
|
||
|
$qty = $item->get_quantity();
|
||
|
$tax = $item->get_total_tax();
|
||
|
|
||
|
$desc=$product->get_short_description();
|
||
|
$title=$product->get_title();
|
||
|
$sku=$product->get_sku();
|
||
|
$unit_price=$product->get_price();
|
||
|
$p_id=$product->get_parent_id();
|
||
|
if(empty($p_id)){
|
||
|
$p_id=$product->get_id();
|
||
|
}
|
||
|
if(empty($total)){ $unit_price=0; }
|
||
|
|
||
|
if(method_exists($_order,'get_item_total')){
|
||
|
// $cost=(float)$_order->get_item_total($item,false,true); //including woo coupon discuont
|
||
|
$unit_price=(float)$_order->get_item_subtotal($item, false, true); // does not include coupon discounts
|
||
|
|
||
|
if(!empty($meta['item_price_custom'])){
|
||
|
// $cost=(float)wc_get_order_item_meta($item->get_id(),$meta['item_price_custom'],true);
|
||
|
}
|
||
|
// $cost=round($cost,2);
|
||
|
$unit_price=round($unit_price,2);
|
||
|
}
|
||
|
|
||
|
}else{ //version_compare( WC_VERSION, '3.0.0', '<' ) , is_array($item) both work
|
||
|
$line_item=$this->wc_get_data_from_item($item);
|
||
|
$p_id= !empty($line_item['variation_id']) ? $line_item['variation_id'] : $line_item['product_id'];
|
||
|
$line_desc=array();
|
||
|
if(!isset($products[$p_id])){
|
||
|
$product=new WC_Product($p_id);
|
||
|
}else{
|
||
|
$product=$products[$p_id];
|
||
|
}
|
||
|
if(!$product){ continue; }
|
||
|
$qty=$line_item['qty'];
|
||
|
$products[$p_id]=$product;
|
||
|
$sku=$product->get_sku();
|
||
|
if(empty($sku) && !empty($line_item['product_id'])){
|
||
|
//if variable product is empty , get simple product sku
|
||
|
$product_simple=new WC_Product($line_item['product_id']);
|
||
|
$sku=$product_simple->get_sku();
|
||
|
}
|
||
|
$unit_price=$product->get_price();
|
||
|
$title=$product->get_title();
|
||
|
$desc=$product->get_short_description();
|
||
|
$p_id=$line_item['product_id'];
|
||
|
}
|
||
|
$temp=array('sku'=>$sku,'unit_price'=>$unit_price,'title'=>$title,'qty'=>$qty,'tax'=>$tax,'total'=>$total,'desc'=>$desc,'p_id'=>$p_id);
|
||
|
if(method_exists($product,'get_stock_quantity')){
|
||
|
$temp['stock']=$product->get_stock_quantity();
|
||
|
}
|
||
|
$order_items[]=$temp;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $order_items;
|
||
|
}
|
||
|
|
||
|
public function get_entry($object,$id){
|
||
|
$path='contacts/v1/contact/vid/'.$id.'/profile';
|
||
|
if($object == 'Company'){
|
||
|
$path='/companies/v2/companies/'.$id;
|
||
|
}else if($object == 'Task'){
|
||
|
$path='/engagements/v1/engagements/'.$id;
|
||
|
}
|
||
|
$arr=$this->post_hubspot_arr($path);
|
||
|
$entry=array(); // var_dump(isset($arr['metadata']));
|
||
|
if(isset($arr['metadata'])){
|
||
|
$arr['properties']=$arr['metadata'];
|
||
|
}
|
||
|
if(isset($arr['properties']) && is_array($arr['properties']) && count($arr['properties'])>0){
|
||
|
foreach($arr['properties'] as $k=>$v){
|
||
|
|
||
|
if(isset($v['value']) && !is_array($v['value'])){
|
||
|
$entry[$k]=$v['value'];
|
||
|
}else if(!is_array($v)){
|
||
|
$entry[$k]=$v;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
// var_dump($arr,$path,$entry); die();
|
||
|
return $entry;
|
||
|
}
|
||
|
public function create_fields_section($fields){
|
||
|
$arr=array();
|
||
|
if(!isset($fields['object'])){
|
||
|
$objects=array(''=>'Select Object','Contact'=>'Contact','Company'=>'Company');
|
||
|
if(is_array($objects_sf)){
|
||
|
$objects=array_merge($objects,$objects_sf);
|
||
|
}
|
||
|
$arr['gen_sel']['object']=array('label'=>__('Select Object','gravity-forms-hubspot-crm'),'options'=>$objects,'is_ajax'=>true,'req'=>true);
|
||
|
}else if(isset($fields['fields']) && !empty($fields['object'])){
|
||
|
// filter fields
|
||
|
$crm_fields=$this->get_crm_fields($fields['object']);
|
||
|
if(!is_array($crm_fields)){
|
||
|
$crm_fields=array();
|
||
|
}
|
||
|
$add_fields=array();
|
||
|
if(is_array($fields['fields']) && count($fields['fields'])>0){
|
||
|
foreach($fields['fields'] as $k=>$v){
|
||
|
$found=false;
|
||
|
foreach($crm_fields as $crm_key=>$val){
|
||
|
if(strpos($crm_key,$k)!== false){
|
||
|
$found=true; break;
|
||
|
}
|
||
|
}
|
||
|
// echo $found.'---------'.$k.'============'.$crm_key.'<hr>';
|
||
|
if(!$found){
|
||
|
$add_fields[$k]=$v;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
$arr['fields']=$add_fields;
|
||
|
}
|
||
|
|
||
|
return $arr;
|
||
|
}
|
||
|
public function create_field($field){
|
||
|
// return 'ok';
|
||
|
|
||
|
$name=isset($field['name']) ? $field['name'] : '';
|
||
|
$label=isset($field['label']) ? $field['label'] : '';
|
||
|
$type=isset($field['type']) ? $field['type'] : '';
|
||
|
$object=isset($field['object']) ? $field['object'] : '';
|
||
|
|
||
|
$error='Unknow error';
|
||
|
if(!empty($label) && !empty($type) && !empty($object)){
|
||
|
|
||
|
$body=array('name'=>$name,'label'=>$label,'groupName'=> strtolower($object).'information','type'=>'string');
|
||
|
$path='properties/v1/contacts/properties';
|
||
|
if($object == 'Company'){
|
||
|
$path='properties/v1/companies/properties';
|
||
|
}
|
||
|
$arr=$this->post_hubspot_arr($path,'POST',$body);
|
||
|
|
||
|
$error='ok';
|
||
|
if(!isset($arr['name']) ){
|
||
|
$error=$arr;
|
||
|
if(isset($arr['message'])){
|
||
|
$error=$arr['message'];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return $error;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
?>
|