Fixed problems with listing of contacts for member managers that manage a list of...
authorChuck Scott <cscott@gaslightmedia.com>
Fri, 15 Jun 2018 20:04:40 +0000 (16:04 -0400)
committerChuck Scott <cscott@gaslightmedia.com>
Fri, 15 Jun 2018 20:04:40 +0000 (16:04 -0400)
models/admin/contacts/index.php
setup/adminTabs.php

index bc2b328..1cde26d 100644 (file)
@@ -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 '<pre>$wpUser: ' . print_r( $wpUser, true ) . '</pre>';
-                            $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 '<pre>$other_members_refs: ' . print_r( $other_members_refs, true ) . '</pre>';
-                            // 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'])) {
index 127031d..52a0947 100644 (file)
@@ -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')) {