Add filter to allow member info fields to be individually queried
authorLaury GvR <laury@gaslightmedia.com>
Tue, 12 Feb 2019 18:18:00 +0000 (13:18 -0500)
committerLaury GvR <laury@gaslightmedia.com>
Tue, 12 Feb 2019 18:18:00 +0000 (13:18 -0500)
setup/frontHooks.php

index 1abbd1b..42419ee 100644 (file)
@@ -88,6 +88,46 @@ add_filter('getActiveInfoIdForMember', function($member, $where = 'true') {
     return false;
 });
 
+/*
+* Find the active member info record ID for a specific member slug
+* Very similar to the above function for finding the member info id by the member id - can probably be combined
+*
+* @param integer $member slug of the member name
+* @param string $where Optional WHERE clause for query
+*
+* @return integer Member info record ID or false if not found
+*/
+add_filter('getActiveInfoIdForMemberSlug', function($memberSlug, $where = 'true') {
+
+    $sql = "
+        SELECT T.id
+          FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX. "member_info T
+         WHERE $where
+           AND member = (
+                SELECT id
+                FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX."members
+                WHERE member_slug LIKE '$memberSlug'
+            )
+           AND status = ".$this->config['status_numb']['Active']."
+           AND  (
+                 SELECT access
+                 FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX."members
+                 WHERE id = T.member
+           ) IN (
+                 ".$this->config['access_numb']['NoAccess'].",
+                 ".$this->config['access_numb']['Moderated'].",
+                 ".$this->config['access_numb']['Full']."
+           )
+    ";
+    $memberInfo = $this->wpdb->get_var($sql);
+
+    if ($memberInfo) {
+        return $memberInfo;
+    }
+
+    return false;
+});
+
     /*
  * Add a filter to correct rel_canonical header entries
  *
@@ -670,6 +710,40 @@ add_filter(
     2
 );
 
+// Get a single field from the member info record of the current detail page
+// Can only be used on a page where the glmDetailSlug is set, and requires a $field parameter
+// This can probably be combined with the glm-get-memberinfo-data filter above, though will return 
+//   e.g. a region's ID instead of a region's name.
+add_filter( "get-current-memberinfo-field", 
+    function($field = false ) {
+        if ( $field ) {
+            echo "field is now $field";
+            global $wpdb;
+            if ( !isset($GLOBALS['glmDetailSlug']) || !$GLOBALS['glmDetailSlug'] ) {
+                return false;
+            } else {
+                $memberSlug = $GLOBALS['glmDetailSlug'];
+                echo "memberslug is now $memberSlug";
+            }
+            // echo '<pre>$member: ' . print_r( $member, true ) . '</pre>';
+            // Get the member info id using the current member detail slug
+            $member_info_id = apply_filters( 'getActiveInfoIdForMemberSlug', $memberSlug );
+            echo "The member info: $member_info_id";
+            echo '<pre>$member_info_id: ' . print_r( $member_info_id, true ) . '</pre>';
+            if ( $member_info_id ) {
+                $sql = "
+                SELECT $field
+                FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "member_info MI
+                WHERE MI.id = $member_info_id";
+                return $this->wpdb->get_var( $sql );
+            }
+        }
+        return false;
+    },
+    10,
+    2
+);
+
 // If no session then start one.
 add_action( 'init', function(){
     if ( !session_id() ) {