'POST',
'callback' => 'accumulus_new_customer_handler'
) );
register_rest_route( 'accumulus/v1', 'customers',array(
'methods' => 'PUT',
'callback' => 'accumulus_update_customer_handler'
) );
} );
// retrieve the accumulus customer id for the current user
function accumulus_get_current_customer_id() {
if ( ! function_exists( 'wp_get_current_user' ) )
return 0;
$user = wp_get_current_user();
return ( isset( $user->accumulus_id) ? (int) $user->accumulus_id : 0 );
}
// show the accumulus customer id field in the profile editor for admin users
function accumulus_custom_user_profile_fields( $user )
{
echo '
Accumulus
';
?>
false, 'error' => 'Wrong content type selected'));
exit;
}
$accumulus_webhook_endpoint_enabled = get_option('accumulus_webhook_endpoint_enabled');
if (empty($accumulus_webhook_endpoint_enabled) || $accumulus_webhook_endpoint_enabled === false) {
echo json_encode(array('success' => false, 'error' => 'Accumulus webhooks are not enabled'));
exit;
}
$webhook_auth_user = get_option('accumulus_webhook_auth_user');
$webhook_auth_password = get_option('accumulus_webhook_auth_password');
if (!empty($webhook_auth_user) &&
!empty($webhook_auth_password) &&
($webhook_auth_user !== $_SERVER['PHP_AUTH_USER']) ||
$webhook_auth_password !== $_SERVER['PHP_AUTH_PW']) {
echo json_encode(array('success' => false, 'error' => 'authentication failed'));
exit;
}
}
function accumulus_new_customer_handler()
{
accumulus_authenticate_webhook();
$raw_data = file_get_contents('php://input');
$data = json_decode($raw_data);
$customer = accumulus_add_customer($data);
echo json_encode(array('success' => true, 'customer' => $customer));
exit;
}
function accumulus_update_customer_handler()
{
accumulus_authenticate_webhook();
$raw_data = file_get_contents('php://input');
$data = json_decode($raw_data);
$customer = accumulus_update_customer($data);
echo json_encode(array('success' => true, 'customer' => $customer));
exit;
}
function accumulus_get_user_by_id( $id ) {
// Query for users based on the meta data
$user_query = new WP_User_Query(
array(
'meta_key' => 'accumulus_id',
'meta_value' => $id
)
);
// Get the results from the query, returning the first user
$users = $user_query->get_results();
return $user = empty ( $users[0] ) ? null : $users[0];
}
function accumulus_update_customer($customer) {
$user = accumulus_get_user_by_id($customer->id);
if (empty($user)) {
echo json_encode(array('success' => false, 'error' => 'Customer not found '.$customer->id));
exit;
}
$user_id = wp_update_user( array(
'ID' => $user->id,
'user_email' => $customer->primaryContact->email,
'first_name' => $customer->primaryContact->firstName,
'last_name' => $customer->primaryContact->lastName
) );
$active_customer_role = get_option('accumulus_active_customer_role');
if ($customer->status === "active") {
$user->add_role( $active_customer_role );
} else {
$user->remove_role( $active_customer_role );
}
return $customer;
}
function accumulus_add_customer($customer) {
$user_name = $customer->primaryContact->email;
$user_email = $customer->primaryContact->email;
$user_id = username_exists( $user_name );
if ( !$user_id and email_exists($user_email) == false ) {
$random_password = wp_generate_password( $length=12, $include_standard_special_chars=false );
$user_id = wp_create_user( $user_name, $random_password, $user_email );
wp_update_user( array(
'ID' => $user_id,
'first_name' => $customer->primaryContact->firstName,
'last_name' => $customer->primaryContact->lastName
) );
wp_new_user_notification($user_id, $random_password);
} else {
$user = accumulus_get_user_by_id($customer->id);
if (empty($user)) {
echo json_encode(array('success' => false, 'error' => 'Customer email already exists '.$customer->primaryContact->email));
exit;
} else {
return accumulus_update_customer($customer);
}
}
update_user_meta($user_id, 'accumulus_id', $customer->id);
if ($customer->status === "active") {
$user = new WP_User( $user_id );
$user->set_role( get_option('accumulus_active_customer_role') );
}
return $customer;
}