automatewoo/includes/Actions/Active_Campaign_Update_Contact_Field.php
fei-source 47d3c9a8b6 Update to v6.2.2
Source: GrootMade/Festinger Vault
2026-03-15 08:31:15 +08:00

79 lines
1.8 KiB
PHP

<?php
namespace AutomateWoo;
defined( 'ABSPATH' ) || exit;
use Exception;
/**
* @class Action_Active_Campaign_Update_Contact_Field
*/
class Action_Active_Campaign_Update_Contact_Field extends Action_Active_Campaign_Abstract {
/**
* Load admin details and set Action title
*
* @return void
*/
public function load_admin_details() {
parent::load_admin_details();
$this->title = __( 'Update Contact Custom Field', 'automatewoo' );
}
/**
* Load Action fields
*
* @return void
*/
public function load_fields() {
$field_options = [];
foreach ( Integrations::activecampaign()->get_contact_custom_fields() as $field ) {
$field_options[ $field['id'] ] = $field['title'];
}
$field = ( new Fields\Select() )
->set_name( 'field' )
->set_title( __( 'Field', 'automatewoo' ) )
->set_options( $field_options )
->set_required();
$value = ( new Fields\Text() )
->set_name( 'value' )
->set_title( __( 'Value', 'automatewoo' ) )
->set_variable_validation();
$this->add_contact_email_field();
$this->add_field( $field );
$this->add_field( $value );
}
/**
* Run the action to update a custom field for a contact
*
* @throws Exception Thrown if the given email address is not a valid contact.
*/
public function run(): void {
$email = Clean::email( $this->get_option( 'email', true ) );
$field_id = $this->get_option( 'field' );
$value = $this->get_option( 'value', true );
if ( ! $this->activecampaign()->is_contact( $email ) ) {
throw new Exception( esc_html__( 'Failed because contact did not exist.', 'automatewoo' ) );
}
$data = [
'contact' => array(
'email' => $email,
'fieldValues' => array(
array(
'field' => $field_id,
'value' => $value,
),
),
),
];
$this->activecampaign()->request( 'contact/sync', $data, 'POST' )->get_body();
}
}