From: Chuck Scott Date: Fri, 15 Jun 2018 20:04:40 +0000 (-0400) Subject: Fixed problems with listing of contacts for member managers that manage a list of... X-Git-Tag: v1.1.9^2~1 X-Git-Url: http://cvs2.gaslightmedia.com/gitweb/index.cgi?a=commitdiff_plain;h=494b5da3869b98706fb58320b670d0413d17ccf7;p=WP-Plugins%2Fglm-member-db-contacts.git Fixed problems with listing of contacts for member managers that manage a list of members. --- diff --git a/models/admin/contacts/index.php b/models/admin/contacts/index.php index bc2b328..1cde26d 100644 --- a/models/admin/contacts/index.php +++ b/models/admin/contacts/index.php @@ -598,61 +598,43 @@ class GlmMembersAdmin_contacts_index extends GlmDataContacts $where = ' TRUE '; - - // If this is a member contact list or the user is not a members manager - if ($this->config['menuItem'] == 'member' || !apply_filters('glm_members_menu_members', true)) { - - // Only list member contacts for the selected member - if ($haveMember) { - $other_members_refs = false; - // Have to query the meta data before sending it back into - // db query. Would work but it's getting back a string - // instead of an array of ints. - // Should only be getting the meta data for the real contact. - // Get userID for original member contact. - $originalMemberContact = $this->wpdb->get_row( - $this->wpdb->prepare( - "SELECT id,email,username - FROM " . GLM_MEMBERS_CONTACTS_PLUGIN_DB_PREFIX . "contacts - WHERE ref_dest = %d", - $this->memberID - ), - ARRAY_A - ); - if ( isset( $originalMemberContact ) ) { - $wpUser = $this->checkContact( $originalMemberContact['email'], $originalMemberContact['username'] ); - // echo '
$wpUser: ' . print_r( $wpUser, true ) . '
'; - $other_members_refs = $this->wpdb->get_var( - "SELECT meta_value - FROM " . $this->wpdb->prefix . "usermeta - WHERE meta_key = 'glmMembersContactMembers' - AND meta_value LIKE '%" . $this->memberID . "%' - AND user_id = " . $wpUser['wpUserEmail']->ID - ); - // echo '
$other_members_refs: ' . print_r( $other_members_refs, true ) . '
'; - // Get wordpress user - } else { - $other_members_refs = $this->wpdb->get_var( - "SELECT meta_value - FROM " . $this->wpdb->prefix . "usermeta - WHERE meta_key = 'glmMembersContactMembers' - AND meta_value LIKE '%" . $this->memberID . "%'" - ); - } - $where .= " AND ref_type = " . $this->config['ref_type_numb']['Member']; - if ( $other_members_refs ) { - // Make sure the $other_members_refs is correct - $exploded_refs = explode( ',', $other_members_refs ); - // Clean array of empties - $clean_refs = array_filter( $exploded_refs ); - $where .= " AND ( ref_dest = " . $this->memberID . " - OR ref_dest IN ( " . implode( ',', $clean_refs ) . " ) )"; - } else { - $where .= " AND ref_dest = " . $this->memberID; - } + // If the user selected the "Contacts" tab for a member, only show contacts for that member + if ($this->config['menuItem'] == 'member') { + + $where .= " + AND ref_type = ".$this->config['ref_type_numb']['Member']." + AND ref_dest = ".$this->memberID." + "; + + // Otherwise this is the main "Contacts" menu item, so if this is not a members manager + } elseif (!apply_filters('glm_members_menu_members', true)) { + + // We need to check if they manage multiple members + $other_members_refs = $this->wpdb->get_var( + "SELECT meta_value + FROM " . $this->wpdb->prefix . "usermeta + WHERE meta_key = 'glmMembersContactMembers' + AND user_id = " . $this->config['loggedInUser']['wpUser']['ID'] + ); + + // If there's member IDs in the user's meta data + if ($other_members_refs) { + + // Find contacts belonging to all of those member IDs + $where .= " + AND ref_type = ".$this->config['ref_type_numb']['Member']." + AND ref_dest IN ($other_members_refs) + "; + + // Otherwise we only want the contacts for the user's member ID + } else { + $where .= " + AND ref_type = ".$this->config['ref_type_numb']['Member']." + AND ref_dest = ".$this->config['loggedInUser']['contactUser']['ref_dest']." + "; } - } // member contact list or not members manager + } // main "contacts" menu // Filter by text string supplied if (isset($_REQUEST['filterText'])) { diff --git a/setup/adminTabs.php b/setup/adminTabs.php index 127031d..52a0947 100644 --- a/setup/adminTabs.php +++ b/setup/adminTabs.php @@ -50,6 +50,46 @@ add_filter('glm-member-db-add-tab-for-members', ); */ +// If user can manage all members +if (current_user_can('glm_members_member')) { + + // We need to check if they manage multiple members + $other_members_refs = $this->wpdb->get_var( + "SELECT meta_value + FROM " . $this->wpdb->prefix . "usermeta + WHERE meta_key = 'glmMembersContactMembers' + AND user_id = " . $this->config['loggedInUser']['wpUser']['ID'] + ); + + // If there's more than 1 member ID in the user's meta data + if ($other_members_refs) { + + $refs = explode(',', $other_members_refs); + + if (count($refs) > 1) { + + // Admin Member Contacts Tab + if (apply_filters('glm_members_permit_admin_member_contacts_tab', true)) { + add_filter('glm-member-db-add-tab-for-member', + function($addOnTabs) { + $newTabs = array( + array( + 'text' => 'Contacts', + 'menu' => 'member', + 'action' => 'contacts' + ) + ); + $addOnTabs = array_merge($addOnTabs, $newTabs); + return $addOnTabs; + } + ); + } + + } + } + +} + // If user can manage all members if (current_user_can('glm_members_members')) {