184 lines
5.4 KiB
PHP
184 lines
5.4 KiB
PHP
<?php
|
|
|
|
defined('ABSPATH') or exit;
|
|
|
|
/**
|
|
* Class MC4WP_BuddyPress_Integration
|
|
*
|
|
* @ignore
|
|
*/
|
|
class MC4WP_BuddyPress_Integration extends MC4WP_User_Integration
|
|
{
|
|
/**
|
|
* @var string
|
|
*/
|
|
public $name = 'BuddyPress';
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
public $description = 'Subscribes users from BuddyPress registration forms.';
|
|
|
|
|
|
/**
|
|
* Add hooks
|
|
*/
|
|
public function add_hooks()
|
|
{
|
|
if (! $this->options['implicit']) {
|
|
add_action('bp_before_registration_submit_buttons', array( $this, 'output_checkbox' ), 20);
|
|
}
|
|
|
|
if (is_multisite()) {
|
|
|
|
/**
|
|
* Multisite signups are a two-stage process - the data is first added to
|
|
* the 'signups' table and then converted into an actual user during the
|
|
* activation process.
|
|
*
|
|
* To avoid all signups being subscribed to the Mailchimp list until they
|
|
* have responded to the activation email, a value is stored in the signup
|
|
* usermeta data which is retrieved on activation and acted upon.
|
|
*/
|
|
add_filter('bp_signup_usermeta', array( $this, 'store_usermeta' ), 10, 1);
|
|
add_action('bp_core_activated_user', array( $this, 'subscribe_from_usermeta' ), 10, 3);
|
|
} else {
|
|
add_action('bp_core_signup_user', array( $this, 'subscribe_from_form' ), 10, 4);
|
|
}
|
|
|
|
/**
|
|
* There is one further issue to consider, which is that many BuddyPress
|
|
* installs have a user moderation plugin (e.g. BP Registration Options)
|
|
* installed. This is because email activation on itself is sometimes not enough to ensure
|
|
* that user signups are not spammers. There should therefore be a way for
|
|
* plugins to delay the Mailchimp signup process.
|
|
*
|
|
* Plugins can hook into the 'mc4wp_integration_buddypress_should_subscribe' filter to prevent
|
|
* subscriptions from taking place:
|
|
*
|
|
* add_filter( 'mc4wp_integration_buddypress_should_subscribe', '__return_false' );
|
|
*
|
|
* The plugin would then then call:
|
|
*
|
|
* do_action( 'mc4wp_integration_buddypress_subscribe_user', $user_id );
|
|
*
|
|
* to perform the subscription at a later point.
|
|
*/
|
|
add_action('mc4wp_integration_buddypress_subscribe_user', array( $this, 'subscribe_buddypress_user' ), 10, 1);
|
|
}
|
|
|
|
/**
|
|
* Subscribes from BuddyPress Registration Form.
|
|
*
|
|
* @param int $user_id
|
|
* @param string $user_login
|
|
* @param string $user_password
|
|
* @param string $user_email
|
|
* @return bool
|
|
*/
|
|
public function subscribe_from_form($user_id, $user_login, $user_password, $user_email)
|
|
{
|
|
if (! $this->triggered()) {
|
|
return false;
|
|
}
|
|
|
|
$subscribe = true;
|
|
|
|
/**
|
|
* Allow other plugins to prevent the Mailchimp sign-up.
|
|
*
|
|
* @param bool $subscribe False does not subscribe the user.
|
|
* @param int $user_id The user ID to subscribe
|
|
*/
|
|
$subscribe = apply_filters('mc4wp_integration_buddypress_should_subscribe', $subscribe, $user_id);
|
|
|
|
if (! $subscribe) {
|
|
return false;
|
|
}
|
|
|
|
return $this->subscribe_buddypress_user($user_id);
|
|
}
|
|
|
|
/**
|
|
* Stores subscription data from BuddyPress Registration Form.
|
|
*
|
|
* @param array $usermeta The existing usermeta
|
|
* @return array $usermeta The modified usermeta
|
|
*/
|
|
public function store_usermeta($usermeta)
|
|
{
|
|
|
|
// only add meta if triggered (checked)
|
|
if ($this->triggered()) {
|
|
$usermeta['mc4wp_subscribe'] = '1';
|
|
}
|
|
|
|
return $usermeta;
|
|
}
|
|
|
|
/**
|
|
* Subscribes from BuddyPress Activation.
|
|
*
|
|
* @param int $user_id The activated user ID
|
|
* @param string $key the activation key (not used)
|
|
* @param array $userdata An array containing the activated user data
|
|
* @return bool
|
|
*/
|
|
public function subscribe_from_usermeta($user_id, $key, $userdata)
|
|
{
|
|
|
|
// sanity check
|
|
if (empty($user_id)) {
|
|
return false;
|
|
}
|
|
|
|
// bail if our usermeta key is not switched on
|
|
$meta = ( isset($userdata['meta']) ) ? $userdata['meta'] : array();
|
|
if (empty($meta['mc4wp_subscribe'])) {
|
|
return false;
|
|
}
|
|
|
|
$subscribe = true;
|
|
|
|
/**
|
|
* @ignore Documented elsewhere, see MC4WP_BuddyPress_Integration::subscribe_from_form.
|
|
*/
|
|
$subscribe = apply_filters('mc4wp_integration_buddypress_should_subscribe', $subscribe, $user_id);
|
|
if (! $subscribe) {
|
|
return false;
|
|
}
|
|
|
|
return $this->subscribe_buddypress_user($user_id);
|
|
}
|
|
|
|
/**
|
|
* Subscribes a user to Mailchimp list(s).
|
|
*
|
|
* @param int $user_id The user ID to subscribe
|
|
* @return bool
|
|
*/
|
|
public function subscribe_buddypress_user($user_id)
|
|
{
|
|
$user = get_userdata($user_id);
|
|
|
|
// was a user found with the given ID?
|
|
if (! $user instanceof WP_User) {
|
|
return false;
|
|
}
|
|
|
|
// gather email address and name from user
|
|
$data = $this->user_merge_vars($user);
|
|
|
|
return $this->subscribe($data, $user_id);
|
|
}
|
|
/* End BuddyPress functions */
|
|
|
|
/**
|
|
* @return bool
|
|
*/
|
|
public function is_installed()
|
|
{
|
|
return class_exists('BuddyPress');
|
|
}
|
|
}
|