Advertisement
Guest User

Untitled

a guest
Mar 28th, 2017
292
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 11.15 KB | None | 0 0
  1. <?php
  2.  
  3. /**
  4.  * Add a member to a group. If the user does not exist then create a new user.
  5.  *
  6.  * @param $args
  7.  *
  8.  * @return int|WP_Error
  9.  */
  10. function rcpga_add_member_to_group( $args ) {
  11.  
  12.     $default = array(
  13.         'user_email'            => '',
  14.         'group_id'              => 0,
  15.         'send_invite'           => true,
  16.     );
  17.  
  18.     // default new user notification is opposite of send invite notification
  19.     // also check to make sure new user notificatino is not disabled
  20.     $default['new_user_notification'] = empty( $args['send_invite'] ) && empty( $rcp_options['disable_new_user_notices'] );
  21.  
  22.     $args = wp_parse_args( $args, $default );
  23.  
  24.     // if we are sending an invite, use the Invited role
  25.     if ( empty( $args['role'] ) && ! empty( $args['send_invite'] ) ) {
  26.         $args['role'] = 'rcp-invited';
  27.     }
  28.  
  29.     $args = apply_filters( 'rcpga_invite_user_args', $args );
  30.  
  31.     // make sure we have required information
  32.     if ( empty( $args['user_email'] ) ) {
  33.         return new WP_Error( 'empty-email', __( 'Please enter a valid email address.', 'rcp-group-account' ) );
  34.     }
  35.  
  36.     if ( empty( $args['group_id'] ) ) {
  37.         return new WP_Error( 'no-group', __( 'Please specify a group ID.', 'rcp-group-account' ) );
  38.     }
  39.  
  40.     // use the email as the new user's login if it is not already set
  41.     if ( empty( $args['user_login'] ) ) {
  42.         $args['user_login'] = $args['user_email'];
  43.     }
  44.  
  45.     // create a new user if one does not already exist
  46.     if ( $user = get_user_by( 'email', $args['user_email'] ) ) {
  47.         $user_id = $user->ID;
  48.     } else {
  49.         $user_id = wp_insert_user( $args );
  50.     }
  51.  
  52.     // make sure we don't have any errors
  53.     if ( is_wp_error( $user_id ) ) {
  54.         return $user_id;
  55.     }
  56.  
  57.  
  58.     $member_add_args = apply_filters( 'rcpga_add_member_to_group_args', array(
  59.         'user_id'  => $user_id,
  60.         'group_id' => $args['group_id'],
  61.         'role'     => ( isset( $args['role'] ) && 'rcp-invited' == $args['role'] ) ? 'invited' : 'member',
  62.     ) );
  63.  
  64.     // add the member to the group
  65.     rcpga_group_accounts()->members->add( $member_add_args );
  66.  
  67.     if ( ! empty( $args['new_user_notification'] ) ) {
  68.         wp_send_new_user_notifications( $user_id );
  69.     }
  70.  
  71.     if ( ! empty( $args['send_invite'] ) ) {
  72.         rcpga_send_group_invite( $user_id );
  73.     } else {
  74.         // if this user is not invited, then update their user_role to the group role
  75.         rcpga_maybe_update_member_role( $user_id );
  76.     }
  77.  
  78.     do_action( 'rcpga_add_member_to_group_after' );
  79.  
  80.     return $user_id;
  81.  
  82. }
  83.  
  84. /**
  85.  * Handle sending invites to group members
  86.  *
  87.  * @param $user_id
  88.  *
  89.  * @return bool
  90.  */
  91. function rcpga_send_group_invite( $user_id ) {
  92.     global $rcp_options;
  93.  
  94.     if ( ! $user = get_user_by( 'id', $user_id ) ) {
  95.         return false;
  96.     }
  97.  
  98.     $site_name      = stripslashes_deep( html_entity_decode( get_bloginfo('name'), ENT_COMPAT, 'UTF-8' ) );
  99.  
  100.     $from_name      = isset( $rcp_options['from_name'] ) ? $rcp_options['from_name'] : $site_name;
  101.     $from_name      = apply_filters( 'rcp_emails_from_name', $from_name, $user_id, 'group_invite' );
  102.  
  103.     $from_email     = isset( $rcp_options['from_email'] ) ? $rcp_options['from_email'] : get_option( 'admin_email' );
  104.     $from_email     = apply_filters( 'rcp_emails_from_address', $from_email );
  105.  
  106.     $headers        = "From: " . stripslashes_deep( html_entity_decode( $from_name, ENT_COMPAT, 'UTF-8' ) ) . " <$from_email>\r\n";
  107.     $headers       .= "Reply-To: ". $from_email . "\r\n";
  108.     $headers        = apply_filters( 'rcp_email_headers', $headers, $user_id, 'group_invite' );
  109.  
  110.     $email['to'] = $user->user_email;
  111.     $email['subject'] = ( isset( $rcp_options['group_invite_subject'] ) ) ? $rcp_options['group_invite_subject'] : '';
  112.     $email['message'] = ( isset( $rcp_options['group_invite_email'] ) ) ? $rcp_options['group_invite_email'] : '';
  113.     $email['headers'] = $headers;
  114.  
  115.     $email['subject'] = rcp_filter_email_tags( $email['subject'], $user->ID, $user->display_name );
  116.     $email['message'] = rcp_filter_email_tags( $email['message'], $user->ID, $user->display_name );
  117.  
  118.     $email = apply_filters( 'rcpga_send_group_invite_args', $email, $user_id );
  119.  
  120.     if ( empty( $email['subject'] ) || empty( $email['message'] ) || empty( $email['to'] ) ) {
  121.         return false;
  122.     }
  123.  
  124.     do_action( 'rcpga_send_group_invite', $user_id, $email );
  125.  
  126.     return wp_mail( $email['to'], $email['subject'], $email['message'], $email['headers'] );
  127.  
  128. }
  129.  
  130. /**
  131.  * Generate the link used for group member invites
  132.  *
  133.  * @param $user_id
  134.  *
  135.  * @return bool|mixed|void
  136.  */
  137. function rcpga_group_invite_link( $user_id ) {
  138.  
  139.     // user must exist, at least as a pending user
  140.     if ( ! $user = get_user_by( 'id', $user_id ) ) {
  141.         return false;
  142.     }
  143.  
  144.     // the user should already be added to the group as an invited member
  145.     if ( ! 'invited' === rcpga_group_accounts()->members->get_role( $user_id ) ) {
  146.         return false;
  147.     }
  148.  
  149.     $login_link = add_query_arg( array(
  150.         'rcpga-invite-key' => urlencode( $user->user_pass ),
  151.         'user'             => urlencode( $user->user_email )
  152.     ), home_url() );
  153.  
  154.     return apply_filters( 'rcpga_group_invite_link', $login_link, $user_id );
  155.  
  156. }
  157.  
  158. /**
  159.  * Handle group email template tags
  160.  *
  161.  * @param $message
  162.  * @param $user_id
  163.  *
  164.  * @return mixed
  165.  */
  166. function rcpga_filter_email_tags( $message, $user_id ) {
  167.  
  168.     $group_id = rcpga_group_accounts()->members->get_group_id( $user_id );
  169.  
  170.     if ( ! $name = rcpga_group_accounts()->groups->get_name( $group_id ) ) {
  171.         $name = '';
  172.     }
  173.  
  174.     if ( ! $desc = rcpga_group_accounts()->groups->get_description( $group_id ) ) {
  175.         $desc = '';
  176.     }
  177.  
  178.     if ( ! $invite_link = rcpga_group_invite_link( $user_id ) ) {
  179.         $invite_link = '';
  180.     }
  181.  
  182.     $message = str_replace( '%groupname%', $name, $message );
  183.     $message = str_replace( '%groupdesc%', $desc, $message );
  184.     $message = str_replace( '%invitelink%', $invite_link, $message );
  185.  
  186.     return $message;
  187.  
  188. }
  189. add_filter( 'rcp_email_tags', 'rcpga_filter_email_tags', 10, 2 );
  190.  
  191. /**
  192.  * Update a user's role to match the group account role
  193.  *
  194.  * @param $user_id
  195.  *
  196.  * @return bool
  197.  */
  198. function rcpga_maybe_update_member_role( $user_id ) {
  199.     $member = new RCP_Member( $user_id );
  200.  
  201.     // make sure this user has a group
  202.     if ( ! $group_id = rcpga_group_accounts()->members->get_group_id( $user_id ) ) {
  203.         return false;
  204.     }
  205.  
  206.     // get the role for this group
  207.     if ( ! $role = rcpga_group_accounts()->groups->get_group_role( $group_id ) ) {
  208.         return false;
  209.     }
  210.  
  211.     $role = apply_filters( 'rcpga_group_account_role', $role, $user_id );
  212.  
  213.     // Check for the invited role
  214.     if ( false !== array_search( 'rcp-invited', (array) $member->roles ) ) {
  215.  
  216.         $member->remove_role( 'rcp-invited' );
  217.         $member->add_role( $role );
  218.  
  219.         // This is a new user, send the welcome email unless disabled
  220.         $send_invite_welcome = empty( $rcp_options['disable_new_user_notices'] ) && empty( $rcp_options['disable_group_welcome_email'] );
  221.         if ( apply_filters( 'rcpga_send_invite_welcome_email', $send_invite_welcome, $member ) ) {
  222.             wp_new_user_notification( $member->ID );
  223.         }
  224.  
  225.     } else {
  226.  
  227.         // get the sites default role
  228.         $old_role = get_option( 'default_role', 'subscriber' );
  229.  
  230.         // check for an existing subscription role
  231.         if ( $level_id = rcp_get_subscription_id( $member->ID ) ) {
  232.             $level    = rcp_get_subscription_details( $level_id );
  233.             $old_role = ! empty( $level->role ) ? $level->role : $old_role;
  234.         }
  235.  
  236.         $member->remove_role( $old_role );
  237.         $member->add_role( $role );
  238.  
  239.     }
  240.  
  241.     return true;
  242.  
  243. }
  244.  
  245. /**
  246.  * Determine if this user should have a group and create one if it doesn't exist
  247.  *
  248.  * @param $user_id
  249.  *
  250.  * @return bool|false|int
  251.  */
  252. function rcpga_maybe_create_member_group( $user_id ) {
  253.  
  254.     if ( rcpga_group_accounts()->members->get_group_id( $user_id ) ) {
  255.         return false;
  256.     }
  257.  
  258.     $create_group = true;
  259.  
  260.     // make sure member has an active account
  261.     if ( 'free' != rcp_get_status( $user_id ) && ! rcp_is_active( $user_id ) ) {
  262.         $create_group = false;
  263.     }
  264.  
  265.     $level_id   = rcp_get_subscription_id( $user_id );
  266.     $seat_count = rcpga_get_level_group_seats_allowed( $level_id );
  267.  
  268.     // make sure the user's subscription level supports groups
  269.     if ( empty( $seat_count ) ) {
  270.         $create_group = false;
  271.     }
  272.  
  273.     if ( ! apply_filters( 'rcpga_maybe_create_member_group', $create_group, $user_id ) ) {
  274.         return false;
  275.     }
  276.  
  277.     $args = array(
  278.         'owner_id' => $user_id,
  279.         'seats'    => $seat_count,
  280.     );
  281.  
  282.     return rcpga_group_accounts()->groups->add( $args );
  283.  
  284. }
  285.  
  286. /**
  287.  * Removes the group seats metadata for the specified subscription level.
  288.  *
  289.  * @param int $subscription_id The subscription level ID.
  290.  */
  291. function rcpga_remove_level_seat_count( $subscription_id ) {
  292.  
  293.     global $rcp_levels_db;
  294.  
  295.     $rcp_levels_db->delete_meta( $level_id, 'group_seats_allowed' );
  296.  
  297.     do_action( 'rcpga_remove_level_seat_count', $subscription_id );
  298.  
  299. }
  300. add_action( 'rcp_remove_subscription_level', 'rcpga_remove_level_seat_count' );
  301.  
  302. /**
  303.  * Gets the number of seats allowed for the specified subscription level.
  304.  *
  305.  * @param int $level_id The subscription level ID.
  306.  *
  307.  * @return integer The number of seats allowed for the specified subscription level.
  308.  */
  309. function rcpga_get_level_group_seats_allowed( $level_id ) {
  310.  
  311.     global $rcp_levels_db;
  312.  
  313.     $count = $rcp_levels_db->get_meta( $level_id, 'group_seats_allowed', true );
  314.  
  315.     return apply_filters( 'rcpga_get_level_group_seats_allowed', absint( $count ), $level_id );
  316.  
  317. }
  318.  
  319. /**
  320.  * Check if group accounts are disabled for this level.
  321.  * Note, this does not check the number of seats for this level, which could be 0.
  322.  *
  323.  * @param $level_id
  324.  *
  325.  * @return bool True if the level is group enabled, false if not.
  326.  */
  327. function rcpga_is_level_group_accounts_enabled( $level_id ) {
  328.  
  329.     global $rcp_levels_db;
  330.  
  331.     $enabled = (bool) $rcp_levels_db->get_meta( $level_id, 'group_seats_enabled', true );
  332.  
  333.     return apply_filters( 'rcpga_is_level_group_accounts_enabled', $enabled, $level_id );
  334. }
  335.  
  336. /**
  337.  * Sets the number of group seats allowed for the specified subscription level.
  338.  *
  339.  * @param int $level_id The subscription level ID.
  340.  * @param int $seats_allowed The number of seats allowed.
  341.  */
  342. function rcpga_set_level_group_seats_allowed( $level_id, $seats_allowed ) {
  343.  
  344.     global $rcp_levels_db;
  345.  
  346.     $rcp_levels_db->update_meta( $level_id, 'group_seats_allowed', absint( $seats_allowed ) );
  347.  
  348.     do_action( 'rcpga_set_level_group_seats_allowed', $level_id, absint( $seats_allowed ) );
  349.  
  350. }
  351.  
  352. /**
  353.  * Disable group accounts for this level
  354.  *
  355.  * @param $level_id
  356.  */
  357. function rcpga_disable_level_group_accounts( $level_id ) {
  358.  
  359.     global $rcp_levels_db;
  360.  
  361.     $rcp_levels_db->delete_meta( $level_id, 'group_seats_enabled' );
  362.  
  363.     do_action( 'rcpga_disable_level_group_accounts', $level_id );
  364.  
  365. }
  366.  
  367. /**
  368.  * Disable group accounts for this level
  369.  *
  370.  * @param $level_id
  371.  */
  372. function rcpga_enable_level_group_accounts( $level_id ) {
  373.  
  374.     global $rcp_levels_db;
  375.  
  376.     $rcp_levels_db->update_meta( $level_id, 'group_seats_enabled', true );
  377.  
  378.     do_action( 'rcpga_enable_level_group_accounts', $level_id );
  379.  
  380. }
  381.  
  382. /**
  383.  * Return all levels that are enabled for group accounts
  384.  *
  385.  * @return mixed|void
  386.  */
  387. function rcpga_get_group_enabled_levels() {
  388.  
  389.     global $rcp_levels_db, $wpdb;
  390.  
  391.     $enabled_levels = $wpdb->get_results( $wpdb->prepare( "SELECT level_id FROM {$wpdb->levelmeta} WHERE meta_key = %s", 'group_seats_enabled' ), ARRAY_A );
  392.  
  393.     return apply_filters( 'rcpga_get_group_enabled_levels', wp_list_pluck( $enabled_levels, 'level_id' ) );
  394. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement