Ejemplo n.º 1
0
 /**
  * Adds or removes users to/from groups.
  */
 public static function load_users()
 {
     if (current_user_can(GROUPS_ADMINISTER_GROUPS)) {
         $users = isset($_REQUEST['users']) ? $_REQUEST['users'] : null;
         $action = null;
         if (!empty($_REQUEST['groups'])) {
             if ($_GET['groups-action'] == "add-group") {
                 $action = 'add';
             } else {
                 if ($_GET['groups-action'] == "remove-group") {
                     $action = 'remove';
                 }
             }
         }
         if ($users !== null && $action !== null) {
             if (wp_verify_nonce($_REQUEST['bulk-user-group-nonce'], 'user-group')) {
                 foreach ($users as $user_id) {
                     switch ($action) {
                         case 'add':
                             $group_ids = isset($_GET['group_ids']) ? $_GET['group_ids'] : null;
                             if ($group_ids !== null) {
                                 foreach ($group_ids as $group_id) {
                                     if (!Groups_User_Group::read($user_id, $group_id)) {
                                         Groups_User_Group::create(array('user_id' => $user_id, 'group_id' => $group_id));
                                     }
                                 }
                             }
                             break;
                         case 'remove':
                             $group_ids = isset($_GET['group_ids']) ? $_GET['group_ids'] : null;
                             if ($group_ids !== null) {
                                 foreach ($group_ids as $group_id) {
                                     if (Groups_User_Group::read($user_id, $group_id)) {
                                         Groups_User_Group::delete($user_id, $group_id);
                                     }
                                 }
                             }
                             break;
                     }
                 }
                 $referer = wp_get_referer();
                 if ($referer) {
                     $redirect_to = remove_query_arg(array('action', 'action2', 'add-to-group', 'bulk-user-group-nonce', 'group_id', 'new_role', 'remove-from-group', 'users'), $referer);
                     wp_redirect($redirect_to);
                     exit;
                 }
             }
         }
     }
 }
 /**
  * Adds or removes users to/from groups.
  */
 public static function load_users()
 {
     if (current_user_can(GROUPS_ADMINISTER_GROUPS)) {
         $group_id = isset($_REQUEST['group_id']) ? $_REQUEST['group_id'] : null;
         $users = isset($_REQUEST['users']) ? $_REQUEST['users'] : null;
         $action = null;
         if (!empty($_REQUEST['add-to-group'])) {
             $action = 'add';
         } else {
             if (!empty($_REQUEST['remove-from-group'])) {
                 $action = 'remove';
             }
         }
         if ($group_id !== null && $users !== null && $action !== null) {
             if (wp_verify_nonce($_REQUEST['bulk-user-group-nonce'], 'user-group')) {
                 foreach ($users as $user_id) {
                     switch ($action) {
                         case 'add':
                             if (!Groups_User_Group::read($user_id, $group_id)) {
                                 Groups_User_Group::create(array('user_id' => $user_id, 'group_id' => $group_id));
                             }
                             break;
                         case 'remove':
                             if (Groups_User_Group::read($user_id, $group_id)) {
                                 Groups_User_Group::delete($user_id, $group_id);
                             }
                             break;
                     }
                 }
             }
         }
     }
 }
 /**
  * Renders a form that lets a user leave a group.
  * * Attributes:
  * - "group" : (required) group name or id
  *
  * @param array $atts attributes
  * @param string $content not used
  */
 public static function groups_leave($atts, $content = null)
 {
     $nonce_action = 'groups_action';
     $nonce = 'nonce_leave';
     $output = "";
     $options = shortcode_atts(array('group' => '', 'display_message' => true, 'submit_text' => __('Leave the %s group', GROUPS_PLUGIN_DOMAIN)), $atts);
     extract($options);
     if ($display_message === 'false') {
         $display_message = false;
     }
     $group = trim($options['group']);
     $current_group = Groups_Group::read($group);
     if (!$current_group) {
         $current_group = Groups_Group::read_by_name($group);
     }
     if ($current_group) {
         if ($user_id = get_current_user_id()) {
             $submitted = false;
             $invalid_nonce = false;
             if (!empty($_POST['groups_action']) && $_POST['groups_action'] == 'leave') {
                 $submitted = true;
                 if (!wp_verify_nonce($_POST[$nonce], $nonce_action)) {
                     $invalid_nonce = true;
                 }
             }
             if ($submitted && !$invalid_nonce) {
                 // remove user from group
                 if (isset($_POST['group_id'])) {
                     $leave_group = Groups_Group::read($_POST['group_id']);
                     Groups_User_Group::delete($user_id, $leave_group->group_id);
                 }
             }
             if (Groups_User_Group::read($user_id, $current_group->group_id)) {
                 $submit_text = sprintf($options['submit_text'], wp_filter_nohtml_kses($current_group->name));
                 $output .= '<div class="groups-join">';
                 $output .= '<form action="#" method="post">';
                 $output .= '<input type="hidden" name="groups_action" value="leave" />';
                 $output .= '<input type="hidden" name="group_id" value="' . esc_attr($current_group->group_id) . '" />';
                 $output .= '<input type="submit" value="' . $submit_text . '" />';
                 $output .= wp_nonce_field($nonce_action, $nonce, true, false);
                 $output .= '</form>';
                 $output .= '</div>';
             } else {
                 if ($display_message) {
                     if ($submitted && !$invalid_nonce && isset($leave_group) && $leave_group->group_id === $current_group->group_id) {
                         $output .= '<div class="groups-join left">';
                         $output .= sprintf(__('You have left the %s group.', GROUPS_PLUGIN_DOMAIN), wp_filter_nohtml_kses($leave_group->name));
                         $output .= '</div>';
                     }
                 }
             }
         }
     }
     return $output;
 }
 /**
  * Updates the group membership.
  * @param int $user_id
  */
 public static function edit_user_profile_update($user_id)
 {
     global $wpdb;
     if (current_user_can(GROUPS_ADMINISTER_GROUPS)) {
         $groups_table = _groups_get_tablename('group');
         if ($groups = $wpdb->get_results("SELECT * FROM {$groups_table}")) {
             $user_group_ids = isset($_POST['group_ids']) && is_array($_POST['group_ids']) ? $_POST['group_ids'] : array();
             foreach ($groups as $group) {
                 if (in_array($group->group_id, $user_group_ids)) {
                     if (!Groups_User_Group::read($user_id, $group->group_id)) {
                         Groups_User_Group::create(array('user_id' => $user_id, 'group_id' => $group->group_id));
                     }
                 } else {
                     if (Groups_User_Group::read($user_id, $group->group_id)) {
                         Groups_User_Group::delete($user_id, $group->group_id);
                     }
                 }
             }
         }
     }
 }
 /**
  * Execute membership termination.
  * @param int $user_id
  * @param int $group_id
  */
 public static function terminate_membership($user_id, $group_id)
 {
     if (GROUPS_WS_LOG) {
         error_log(sprintf(__METHOD__ . ' testing for user ID %d with group ID %d', $user_id, $group_id));
     }
     require_once GROUPS_WS_CORE_LIB . '/class-groups-ws-bucket.php';
     $b = new Groups_WS_Bucket($user_id, $group_id);
     $b->acquire();
     $B = $b->content;
     $t1 = time();
     $P = array();
     foreach ($B as $t) {
         if ($t <= $t1 && $t !== self::ETERNITY) {
             $P[] = $t;
         }
     }
     $U_in_G = false;
     $groups_user = new Groups_User($user_id);
     foreach ($groups_user->groups as $group) {
         if ($group->group_id === $group_id) {
             $U_in_G = true;
             break;
         }
     }
     if ($U_in_G) {
         if (count($P) > 0) {
             if (count($B) == count($P)) {
                 Groups_User_Group::delete($user_id, $group_id);
                 if (GROUPS_WS_LOG) {
                     error_log(sprintf(__METHOD__ . ' terminated membership for user ID %d with group ID %d', $user_id, $group_id));
                 }
                 $B = array();
             } else {
                 $B = array_diff($B, $P);
             }
         }
     } else {
         $B = array_diff($B, $P);
     }
     $b->content = $B;
     $b->release();
 }
 /**
  * Same as when a subscription is cancelled.
  * @param int $user_id
  * @param string $subscription_key
  */
 public static function subscription_expired($user_id, $subscription_key)
 {
     $subscription = WC_Subscriptions_Manager::get_users_subscription($user_id, $subscription_key);
     if (isset($subscription['product_id']) && isset($subscription['order_id'])) {
         $product_id = $subscription['product_id'];
         $order_id = $subscription['order_id'];
         $groups_product_groups = get_user_meta($user_id, '_groups_product_groups', true);
         if (isset($groups_product_groups[$order_id]) && isset($groups_product_groups[$order_id][$product_id]) && isset($groups_product_groups[$order_id][$product_id]['groups'])) {
             foreach ($groups_product_groups[$order_id][$product_id]['groups'] as $group_id) {
                 Groups_User_Group::delete($user_id, $group_id);
             }
         }
     }
 }
 /**
  * Deletes the user from the group if no other orders than $order_id
  * currently grant membership to that group.
  * 
  * @param int $user_id
  * @param int $group_id
  * @param int $order_id
  */
 public static function maybe_delete($user_id, $group_id, $order_id)
 {
     $order_ids = self::get_valid_order_ids_granting_group_membership_from_order_items($user_id, $group_id);
     $ids = array_diff($order_ids, array($order_id));
     if (count($ids) == 0) {
         Groups_User_Group::delete($user_id, $group_id);
         if (GROUPS_WS_LOG) {
             error_log(sprintf(__METHOD__ . ' deleted membership for user ID %d with group ID %d', $user_id, $group_id));
         }
     } else {
         if (GROUPS_WS_LOG) {
             error_log(sprintf(__METHOD__ . ' membership for user ID %d with group ID %d has not been deleted due to other orders granting membership, order IDs: %s', $user_id, $group_id, implode(',', $order_ids)));
         }
     }
 }