Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * Add a member to a group. If the user does not exist then create a new user.
- *
- * @param $args
- *
- * @return int|WP_Error
- */
- function rcpga_add_member_to_group( $args ) {
- $default = array(
- 'user_email' => '',
- 'group_id' => 0,
- 'send_invite' => true,
- );
- // default new user notification is opposite of send invite notification
- // also check to make sure new user notificatino is not disabled
- $default['new_user_notification'] = empty( $args['send_invite'] ) && empty( $rcp_options['disable_new_user_notices'] );
- $args = wp_parse_args( $args, $default );
- // if we are sending an invite, use the Invited role
- if ( empty( $args['role'] ) && ! empty( $args['send_invite'] ) ) {
- $args['role'] = 'rcp-invited';
- }
- $args = apply_filters( 'rcpga_invite_user_args', $args );
- // make sure we have required information
- if ( empty( $args['user_email'] ) ) {
- return new WP_Error( 'empty-email', __( 'Please enter a valid email address.', 'rcp-group-account' ) );
- }
- if ( empty( $args['group_id'] ) ) {
- return new WP_Error( 'no-group', __( 'Please specify a group ID.', 'rcp-group-account' ) );
- }
- // use the email as the new user's login if it is not already set
- if ( empty( $args['user_login'] ) ) {
- $args['user_login'] = $args['user_email'];
- }
- // create a new user if one does not already exist
- if ( $user = get_user_by( 'email', $args['user_email'] ) ) {
- $user_id = $user->ID;
- } else {
- $user_id = wp_insert_user( $args );
- }
- // make sure we don't have any errors
- if ( is_wp_error( $user_id ) ) {
- return $user_id;
- }
- $member_add_args = apply_filters( 'rcpga_add_member_to_group_args', array(
- 'user_id' => $user_id,
- 'group_id' => $args['group_id'],
- 'role' => ( isset( $args['role'] ) && 'rcp-invited' == $args['role'] ) ? 'invited' : 'member',
- ) );
- // add the member to the group
- rcpga_group_accounts()->members->add( $member_add_args );
- if ( ! empty( $args['new_user_notification'] ) ) {
- wp_send_new_user_notifications( $user_id );
- }
- if ( ! empty( $args['send_invite'] ) ) {
- rcpga_send_group_invite( $user_id );
- } else {
- // if this user is not invited, then update their user_role to the group role
- rcpga_maybe_update_member_role( $user_id );
- }
- do_action( 'rcpga_add_member_to_group_after' );
- return $user_id;
- }
- /**
- * Handle sending invites to group members
- *
- * @param $user_id
- *
- * @return bool
- */
- function rcpga_send_group_invite( $user_id ) {
- global $rcp_options;
- if ( ! $user = get_user_by( 'id', $user_id ) ) {
- return false;
- }
- $site_name = stripslashes_deep( html_entity_decode( get_bloginfo('name'), ENT_COMPAT, 'UTF-8' ) );
- $from_name = isset( $rcp_options['from_name'] ) ? $rcp_options['from_name'] : $site_name;
- $from_name = apply_filters( 'rcp_emails_from_name', $from_name, $user_id, 'group_invite' );
- $from_email = isset( $rcp_options['from_email'] ) ? $rcp_options['from_email'] : get_option( 'admin_email' );
- $from_email = apply_filters( 'rcp_emails_from_address', $from_email );
- $headers = "From: " . stripslashes_deep( html_entity_decode( $from_name, ENT_COMPAT, 'UTF-8' ) ) . " <$from_email>\r\n";
- $headers .= "Reply-To: ". $from_email . "\r\n";
- $headers = apply_filters( 'rcp_email_headers', $headers, $user_id, 'group_invite' );
- $email['to'] = $user->user_email;
- $email['subject'] = ( isset( $rcp_options['group_invite_subject'] ) ) ? $rcp_options['group_invite_subject'] : '';
- $email['message'] = ( isset( $rcp_options['group_invite_email'] ) ) ? $rcp_options['group_invite_email'] : '';
- $email['headers'] = $headers;
- $email['subject'] = rcp_filter_email_tags( $email['subject'], $user->ID, $user->display_name );
- $email['message'] = rcp_filter_email_tags( $email['message'], $user->ID, $user->display_name );
- $email = apply_filters( 'rcpga_send_group_invite_args', $email, $user_id );
- if ( empty( $email['subject'] ) || empty( $email['message'] ) || empty( $email['to'] ) ) {
- return false;
- }
- do_action( 'rcpga_send_group_invite', $user_id, $email );
- return wp_mail( $email['to'], $email['subject'], $email['message'], $email['headers'] );
- }
- /**
- * Generate the link used for group member invites
- *
- * @param $user_id
- *
- * @return bool|mixed|void
- */
- function rcpga_group_invite_link( $user_id ) {
- // user must exist, at least as a pending user
- if ( ! $user = get_user_by( 'id', $user_id ) ) {
- return false;
- }
- // the user should already be added to the group as an invited member
- if ( ! 'invited' === rcpga_group_accounts()->members->get_role( $user_id ) ) {
- return false;
- }
- $login_link = add_query_arg( array(
- 'rcpga-invite-key' => urlencode( $user->user_pass ),
- 'user' => urlencode( $user->user_email )
- ), home_url() );
- return apply_filters( 'rcpga_group_invite_link', $login_link, $user_id );
- }
- /**
- * Handle group email template tags
- *
- * @param $message
- * @param $user_id
- *
- * @return mixed
- */
- function rcpga_filter_email_tags( $message, $user_id ) {
- $group_id = rcpga_group_accounts()->members->get_group_id( $user_id );
- if ( ! $name = rcpga_group_accounts()->groups->get_name( $group_id ) ) {
- $name = '';
- }
- if ( ! $desc = rcpga_group_accounts()->groups->get_description( $group_id ) ) {
- $desc = '';
- }
- if ( ! $invite_link = rcpga_group_invite_link( $user_id ) ) {
- $invite_link = '';
- }
- $message = str_replace( '%groupname%', $name, $message );
- $message = str_replace( '%groupdesc%', $desc, $message );
- $message = str_replace( '%invitelink%', $invite_link, $message );
- return $message;
- }
- add_filter( 'rcp_email_tags', 'rcpga_filter_email_tags', 10, 2 );
- /**
- * Update a user's role to match the group account role
- *
- * @param $user_id
- *
- * @return bool
- */
- function rcpga_maybe_update_member_role( $user_id ) {
- $member = new RCP_Member( $user_id );
- // make sure this user has a group
- if ( ! $group_id = rcpga_group_accounts()->members->get_group_id( $user_id ) ) {
- return false;
- }
- // get the role for this group
- if ( ! $role = rcpga_group_accounts()->groups->get_group_role( $group_id ) ) {
- return false;
- }
- $role = apply_filters( 'rcpga_group_account_role', $role, $user_id );
- // Check for the invited role
- if ( false !== array_search( 'rcp-invited', (array) $member->roles ) ) {
- $member->remove_role( 'rcp-invited' );
- $member->add_role( $role );
- // This is a new user, send the welcome email unless disabled
- $send_invite_welcome = empty( $rcp_options['disable_new_user_notices'] ) && empty( $rcp_options['disable_group_welcome_email'] );
- if ( apply_filters( 'rcpga_send_invite_welcome_email', $send_invite_welcome, $member ) ) {
- wp_new_user_notification( $member->ID );
- }
- } else {
- // get the sites default role
- $old_role = get_option( 'default_role', 'subscriber' );
- // check for an existing subscription role
- if ( $level_id = rcp_get_subscription_id( $member->ID ) ) {
- $level = rcp_get_subscription_details( $level_id );
- $old_role = ! empty( $level->role ) ? $level->role : $old_role;
- }
- $member->remove_role( $old_role );
- $member->add_role( $role );
- }
- return true;
- }
- /**
- * Determine if this user should have a group and create one if it doesn't exist
- *
- * @param $user_id
- *
- * @return bool|false|int
- */
- function rcpga_maybe_create_member_group( $user_id ) {
- if ( rcpga_group_accounts()->members->get_group_id( $user_id ) ) {
- return false;
- }
- $create_group = true;
- // make sure member has an active account
- if ( 'free' != rcp_get_status( $user_id ) && ! rcp_is_active( $user_id ) ) {
- $create_group = false;
- }
- $level_id = rcp_get_subscription_id( $user_id );
- $seat_count = rcpga_get_level_group_seats_allowed( $level_id );
- // make sure the user's subscription level supports groups
- if ( empty( $seat_count ) ) {
- $create_group = false;
- }
- if ( ! apply_filters( 'rcpga_maybe_create_member_group', $create_group, $user_id ) ) {
- return false;
- }
- $args = array(
- 'owner_id' => $user_id,
- 'seats' => $seat_count,
- );
- return rcpga_group_accounts()->groups->add( $args );
- }
- /**
- * Removes the group seats metadata for the specified subscription level.
- *
- * @param int $subscription_id The subscription level ID.
- */
- function rcpga_remove_level_seat_count( $subscription_id ) {
- global $rcp_levels_db;
- $rcp_levels_db->delete_meta( $level_id, 'group_seats_allowed' );
- do_action( 'rcpga_remove_level_seat_count', $subscription_id );
- }
- add_action( 'rcp_remove_subscription_level', 'rcpga_remove_level_seat_count' );
- /**
- * Gets the number of seats allowed for the specified subscription level.
- *
- * @param int $level_id The subscription level ID.
- *
- * @return integer The number of seats allowed for the specified subscription level.
- */
- function rcpga_get_level_group_seats_allowed( $level_id ) {
- global $rcp_levels_db;
- $count = $rcp_levels_db->get_meta( $level_id, 'group_seats_allowed', true );
- return apply_filters( 'rcpga_get_level_group_seats_allowed', absint( $count ), $level_id );
- }
- /**
- * Check if group accounts are disabled for this level.
- * Note, this does not check the number of seats for this level, which could be 0.
- *
- * @param $level_id
- *
- * @return bool True if the level is group enabled, false if not.
- */
- function rcpga_is_level_group_accounts_enabled( $level_id ) {
- global $rcp_levels_db;
- $enabled = (bool) $rcp_levels_db->get_meta( $level_id, 'group_seats_enabled', true );
- return apply_filters( 'rcpga_is_level_group_accounts_enabled', $enabled, $level_id );
- }
- /**
- * Sets the number of group seats allowed for the specified subscription level.
- *
- * @param int $level_id The subscription level ID.
- * @param int $seats_allowed The number of seats allowed.
- */
- function rcpga_set_level_group_seats_allowed( $level_id, $seats_allowed ) {
- global $rcp_levels_db;
- $rcp_levels_db->update_meta( $level_id, 'group_seats_allowed', absint( $seats_allowed ) );
- do_action( 'rcpga_set_level_group_seats_allowed', $level_id, absint( $seats_allowed ) );
- }
- /**
- * Disable group accounts for this level
- *
- * @param $level_id
- */
- function rcpga_disable_level_group_accounts( $level_id ) {
- global $rcp_levels_db;
- $rcp_levels_db->delete_meta( $level_id, 'group_seats_enabled' );
- do_action( 'rcpga_disable_level_group_accounts', $level_id );
- }
- /**
- * Disable group accounts for this level
- *
- * @param $level_id
- */
- function rcpga_enable_level_group_accounts( $level_id ) {
- global $rcp_levels_db;
- $rcp_levels_db->update_meta( $level_id, 'group_seats_enabled', true );
- do_action( 'rcpga_enable_level_group_accounts', $level_id );
- }
- /**
- * Return all levels that are enabled for group accounts
- *
- * @return mixed|void
- */
- function rcpga_get_group_enabled_levels() {
- global $rcp_levels_db, $wpdb;
- $enabled_levels = $wpdb->get_results( $wpdb->prepare( "SELECT level_id FROM {$wpdb->levelmeta} WHERE meta_key = %s", 'group_seats_enabled' ), ARRAY_A );
- return apply_filters( 'rcpga_get_group_enabled_levels', wp_list_pluck( $enabled_levels, 'level_id' ) );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement