%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/swedenbusiness/wp-content/plugins/cf7-mailchimp/api/
Upload File :
Create Path :
Current File : /var/www/swedenbusiness/wp-content/plugins/cf7-mailchimp/api/api.php

<?php
// Exit if accessed directly
if( !defined( 'ABSPATH' ) ) exit;

if(!class_exists('vxcf_mailchimp_api')){
    
class vxcf_mailchimp_api extends vxcf_mailchimp{
  
    public $info='' ; // info
    public $url='';
    public $api_key='';
    public $error= "";
    public $timeout= "15";

function __construct($info) {
     
    if(isset($info['data'])){ 
       $this->info= $info;
       if(!empty($info['data']['api_key'])){
        $this->api_key=$info['data']['api_key'];
      $temp_arr=explode('-',$this->api_key); 
      if(!empty($temp_arr[1])){ 
$this->url='https://'.$temp_arr[1].'.api.mailchimp.com/3.0/';
      }
       }
    }
    }
public function get_token(){
  $users=$this->get_crm_objects();

    $info=$this->info;
    $info=isset($info['data']) ? $info['data'] : array();
    if(is_array($users) ){
    $info['valid_token']='true';    
    }else {
      unset($info['valid_token']); 
      if(!empty($users)){
          if(is_string($users)){
          $info['error']=$users;
          }
      } 
    }
    return $info;

}


public function get_crm_objects(){

$objects=$this->post_crm('lists?count=200','get');
//var_dump($objects);
$res='';
if(!empty($objects['detail'])){ //title,detail
  $res=$objects['detail'];  
}else if(isset($objects['lists']) ){
    $res=array();
 foreach($objects['lists'] as $k=>$v){
  $res[$v['id']]=$v['name'];   
 }   
}else{
  $res=json_encode($objects);  
}
 return $res;
}
public function get_crm_fields($module,$fields_type=false){

$fields=$this->post_crm('lists/'.$module.'/merge-fields?count=200','get');
//$field=$this->post_crm('lists/'.$module.'/members?count=200','get');
//var_dump($fields,$module);

if($fields_type){

$field_options=array();
if(isset($fields['merge_fields']) && is_array($fields['merge_fields'])){
foreach($fields['merge_fields'] as $k=>$f){ 
$field_options[$k]=array('name'=>$f['key'],'label'=>$f['name']);
if(isset($f['type'])){ 
    
if(in_array($f['type'],array('dropdown','radio'))){
if(!empty($f['options']['choices'])){
   foreach($f['options']['choices'] as $kk=>$v){
$field_options[$k]['options'][]=array('name'=>$kk,'value'=>$v);        
    }
} }   
} }    
}
return $field_options;
}
$res=array();
$address=array('addr1'=>'Street Line 1','addr2'=>'Street Line 2','city'=>'City','state'=>'State','zip'=>'Zip','country'=>'Country');

if(!empty($fields['merge_fields'])){
    $res['email_address']=array('name'=>'email_address','label'=>'Email','type'=>'email','req'=>'true');
    $res['PHONE']=array('name'=>'PHONE','label'=>'Phone Number','type'=>'phone');
 foreach($fields['merge_fields'] as $k=>$v){
     $merge_id=intval($v['merge_id']);
     if($v['type'] == 'address'){
      foreach($address as $i=>$r){
          $field=array('label'=>$v['name'].'-'.$r,'name'=>$v['tag'].'-'.$i,'type'=>'address'); 
          if($v['required'] == true){
          $field['req']='true';    
          } 
          if($merge_id > 4){
              $field['is_custom']='1';
          }   
      $res[$v['tag'].'-'.$i]=$field; 
      }   
     }else{
     $field=array('label'=>$v['name'],'name'=>$v['tag'],'type'=>$v['type']);
     if(in_array($v['type'],array('dropdown','radio'))){
     if(!empty($v['options']['choices'])){ 
     $field['eg']=implode(',',$v['options']['choices']); 
     $field['options']=$v['options']['choices'];
     }
     }else if($v['type'] == 'date'){
      if(!empty($v['options']['date_format'])){ $field['eg']=$v['options']['date_format'];  }   
     }else if($v['type'] == 'birthday'){
      $field['eg']='MM/DD';   
     }
 if($v['required'] == true){ $field['req']='true';    } 
  if($merge_id > 4){
              $field['is_custom']='1';
          }
   
  $res[$v['tag']]=$field;   
 } }

$camps=$this->get_groups($module);  

$groups=$eg=array();
$group_field=array('name'=>'interests','label'=>'Groups','type'=>'dropdown','is_custom'=>'1');
if(!empty($camps) && is_array($camps)){
foreach($camps as $id=>$group){
    if(!empty($group['items'])){
   foreach($group['items'] as $g_id=>$g){     
$groups[$g_id]=$g;    
$eg[]=$g_id.'='.$g;
   }
    }
}
 $group_field['options']=$groups;   
 $group_field['eg']=implode(', ',$eg);   
}

 $res['interests']= $group_field; 
 $res['tags']=array('name'=>'tags','label'=>'Tags','type'=>'text or comma separated');  
}else if(!empty($fields['detail'])){
$res=$fields['detail'];  
}

return $res;
}
  /**
  * Get users from mailchimp
  * @return array users
  */
public function get_groups($object){ 
$arr=$this->post_crm('lists/'.$object.'/interest-categories?count=200','get');
$users=array();   
$msg='No Stage Found';
if(!empty($arr['categories']) && is_array($arr['categories']) ){
          foreach($arr['categories'] as $v){
              if(!empty($v['title'])){
$arr_i=$this->post_crm('lists/'.$object.'/interest-categories/'.$v['id'].'/interests?count=200','get');
$items=array();
if(!empty($arr_i['interests'])){
    foreach($arr_i['interests'] as $val){
 $items[$val['id']]=$val['name'];       
    }
}    
 $users[$v['id']]=array('title'=>$v['title'],'type'=>$v['type'],'items'=>$items);
              }
          }
      }else if(!empty($arr['error'])){
 $msg=$arr['error'];   
}

  return empty($users) ? $msg : $users;
}


public function push_object($module,$fields,$meta){ 
//check primary key
 $extra=array();

  $debug = isset($_GET['vx_debug']) && current_user_can('manage_options');
  $event= isset($meta['event']) ? $meta['event'] : '';
  $id= isset($meta['crm_id']) ? $meta['crm_id'] : '';
  if($debug){ ob_start();}
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'];

$search_response=$this->post_crm('search-members?list_id='.$module.'&query='.urlencode($search),'get');

if(!empty($search_response['exact_matches']['members']) && is_array($search_response['exact_matches']['members']) && count($search_response['exact_matches']['members']) > 0){
  $items=$search_response['exact_matches']['members'];
  //$item=end($items);
  if(!empty($items[0]['id'])){
  $id=$items[0]['id'];  
  $search_response =$items[0]; 
  }  
}

  if($debug){
  ?>
  <h3>Search field</h3>
  <p><?php print_r($field) ?></p>
  <h3>Search term</h3>
  <p><?php print_r($search) ?></p>
    <h3>POST Body</h3>
  <p><?php print_r($body) ?></p>
  <h3>Search response</h3>
  <p><?php print_r($res) ?></p>  
  <?php
  }

      $extra["body"]=$search;
      $extra["response"]=$search_response;
  }
if(!empty($meta['vx_unsub'])){
    if(empty($id)){ 
   return '';     
    }else{
   $event='delete';     
    }
}

     if(in_array($event,array('delete_note','add_note'))){    
  if(isset($meta['related_object'])){
    $extra['Note Object']= $meta['related_object'];
  }
  if(isset($meta['note_object_link'])){
    $extra['note_object_link']=$meta['note_object_link'];
  }
}

 $status=$action=$method=""; $send_body=true;
 $entry_exists=false;

$object_url='';
$is_main=false;
$post=array();
if($id == ""){
    //insert new object
$action="Added";  $status="1"; $method='post';
$object_url='lists/'.$module.'/members';
$is_main=true;
}else{
 $entry_exists=true;
    if($event == 'add_note'){
        if(!empty($fields['body']['value'])){
         $post['note']=$fields['body']['value'];   
        }

$action="Note Added"; $status="1";
$object_url='lists/'.$meta['related_object'].'/members/'.$id.'/notes';
$method='post';  
}else if(in_array($event,array('delete','delete_note'))){
 $send_body=false;
 $method='delete'; 
 $object_url='';
     if($event == 'delete_note' && !empty($meta['note_object_link'])){ 
  $object_url='lists/'.$meta['related_object'].'/members/'.$meta['note_object_link'].'/notes/'.$id;
     }else{
     $object_url='lists/'.$meta['object'].'/members/'.$id;
     }
     $action="Deleted";
  $status="5";  

  }else{
$action="Updated"; $status="2";
if(empty($meta['update'])){     
 $is_main=true;
$object_url='lists/'.$module.'/members/'.$id;
 $method='patch';
 } }
}

if($is_main){

$crm_fields=array();
if(!empty($meta['fields'])){
  $crm_fields=$meta['fields'];  
}

if(is_array($fields) && count($fields)>0){
    $merge_fields=array();
    foreach($fields as $k=>$v){
  if(!empty($crm_fields[$k]['type'])){     
    $type=$crm_fields[$k]['type']; 
$val=$v['value'];

if($type == 'birthday'){ $temp_val=strtotime($val); if(!empty($temp_val)){ $val=date('m/d',$temp_val); } }
if($type == 'address'){
if(strpos($k,'-') !== false){
     $key_arr=explode('-',$k);
$merge_fields[$key_arr[0]][$key_arr[1]]=$val;
}
}else if($k == 'email_address'){
$post[$k]=$val;   
}else if(in_array($k,array('tags','interests'))){
if(!empty($val)){
 if(is_string($val)){
 $val=array_map('trim',explode(',',$val));
 }
 if(is_array($val)){
 if($k == 'interests'){
     foreach($val as $g){
     $post[$k][$g]=true;    
     }
 }else{
  $post[$k]=$val;    
 } }
}
}else{
$merge_fields[$k]=$val;      
}   }
}
if(!empty($merge_fields)){
$post['merge_fields']=$merge_fields;
}
$post['status']=!empty($meta['status']) ? $meta['status'] : 'subscribed';
$post['email_type']=!empty($meta['email_type']) ? $meta['email_type'] : 'html';
$post['language']=!empty($meta['language']) ? $meta['language'] : 'en';
if(!empty($meta['vip'])){
 $post['vip']=true;   
}
if(!empty($meta['assign_group']) && !empty($meta['groups'])){
    if(!isset($post['interests'])){ $post['interests']=array(); }
    foreach($meta['groups'] as $k=>$g){
    $post['interests'][$k]=true;    
    }
}

} } 
///var_dump($post,$meta['groups']); die();
$link=""; $error="";
if(!empty($method) && !empty($object_url) ){
$arr= $this->post_crm($object_url, $method,$post);
}
//var_dump($object_url,$arr,$post,$method); die();

if(!empty($arr['detail'])){
       $status=''; $error=$arr['detail'];
    }else if(!empty($arr['id'])){
$id=$arr['id'];        
//apply tags , when updating  a member
if($status == '2' && !empty($post['tags'])){
  $tags=array();
  foreach($post['tags'] as $v){
  $tags[]=array('name'=>$v,'status'=>'active');    
  }

$extra['Tags Response']=$this->post_crm($object_url.'/tags','post',array('tags'=>$tags));   
}
    }
  if($debug){
  ?>
  <h3>Account Information</h3>
  <p><?php //print_r($this->info) ?></p>
  <h3>Data Sent</h3>
  <p><?php print_r($post) ?></p>
  <h3>Fields</h3>
  <p><?php echo json_encode($fields) ?></p>
  <h3>Response</h3>
  <p><?php print_r($response) ?></p>
  <h3>Object</h3>
  <p><?php print_r($module."--------".$action) ?></p>
  <?php
 echo  $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'];
       if(!empty($entry_note['body'])){
      $note_post=array('note'=>$entry_note['body']);
$object_url='lists/'.$module.'/members/'.$id.'/notes';
$note_response= $this->post_crm( $object_url,'post',$note_post);
  $extra['Note Body']=$entry_note['body'];
  $extra['Note Response']=$note_response;
       }
   }  
 }

return array("error"=>$error,"id"=>$id,"link"=>$link,"action"=>$action,"status"=>$status,"data"=>$fields,"response"=>$arr,"extra"=>$extra);
}
public function create_fields_section($fields){ 
$arr=array(); 
if(!isset($fields['object'])){
        $objects=array(''=>'Select Object');
        $objs=$this->get_crm_objects();
        if(is_array($objs) && count($objs)>0){
         $objects=array_merge($objects,$objs);   
        }
 $arr['gen_sel']['object']=array('label'=>'Select Object','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 field_types($data){
    return array('text'=>'Text','email'=>'Email',"number"=>'Number', "phone"=>'Phone',"date"=>'Date', "url"=>'Url', "imageurl"=>'Image URL', "birthday"=>'BirthDay');
}
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'=>$label,'type'=>$type);    
$url='lists/'.$object.'/merge-fields';    
$arr=$this->post_crm($url,'post',$body);
    $error='ok';
if(!empty($arr['error']) ){

 $error=$arr['error'];       
}
}
return $error;    
}

public function post_crm($path,$method,$body=''){
       
      $url=$this->url.$path;   
    if(is_array($body)&& count($body)>0)
   { 
       $body=json_encode($body);
   }
       


     $head=array('Authorization'=> ' apikey ' .$this->api_key); 
       if($method == 'post'){
       $head['Content-Type']='application/json';   
       }
     
       $args = array(
  'body' => $body,
  'headers'=> $head,
  'method' => strtoupper($method), // GET, POST, PUT, DELETE, etc.
  'sslverify' => false,
  'timeout' => 30,
  );
  
  $response = wp_remote_request($url, $args);
  if(is_wp_error($response)) { 
  $error = $response->get_error_message();
  return array('detail'=>$error);
  }
$body=json_decode($response['body'],true);

return $body;
}
public function get_entry($module,$id){


$arr=$this->post_crm('lists/'.$module.'/members/'.$id,'get');
if(!empty($arr['merge_fields']) && is_array($arr['merge_fields'])){
    foreach($arr['merge_fields'] as $k=>$v){
     if(is_array($v)){
    foreach($v as $key=>$val){     
     $arr[$k.'-'.$key]=$val;    
    } }else{
         $arr[$k]=$v;   
     }   
    }
}

      return $arr;     
}
}
}
?>

Zerion Mini Shell 1.0