From 4a40729858d333b6ae7d62657bc63ee28a975b55 Mon Sep 17 00:00:00 2001 From: Chuck Scott Date: Thu, 7 Jun 2018 10:47:32 -0400 Subject: [PATCH] Fixes for problem with contacts list not always displaying the correct list for the contact/user type. Added code to make sure that if arrived at the index.php model from "Contacts" menu and user is a "Members" manager that they get a full list of contacts. --- models/admin/contacts/index.php | 100 ++++++++++-------- .../{list.php => list_PENDING_DELETE.php} | 0 2 files changed, 53 insertions(+), 47 deletions(-) rename models/admin/contacts/{list.php => list_PENDING_DELETE.php} (100%) diff --git a/models/admin/contacts/index.php b/models/admin/contacts/index.php index a96072e..bc2b328 100644 --- a/models/admin/contacts/index.php +++ b/models/admin/contacts/index.php @@ -598,55 +598,61 @@ class GlmMembersAdmin_contacts_index extends GlmDataContacts $where = ' 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 . "%'" + + // 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; + } } - $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; - } - } + + } // member contact list or not members manager // Filter by text string supplied if (isset($_REQUEST['filterText'])) { diff --git a/models/admin/contacts/list.php b/models/admin/contacts/list_PENDING_DELETE.php similarity index 100% rename from models/admin/contacts/list.php rename to models/admin/contacts/list_PENDING_DELETE.php -- 2.17.1