From a8bec5de2f8cd08184c21acc39eed35e8ce33bf4 Mon Sep 17 00:00:00 2001 From: Laury GvR Date: Tue, 12 Feb 2019 13:18:00 -0500 Subject: [PATCH] Add filter to allow member info fields to be individually queried --- setup/frontHooks.php | 74 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/setup/frontHooks.php b/setup/frontHooks.php index 1abbd1b5..42419eec 100644 --- a/setup/frontHooks.php +++ b/setup/frontHooks.php @@ -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 '
$member: ' . print_r( $member, true ) . '
'; + // 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 '
$member_info_id: ' . print_r( $member_info_id, true ) . '
'; + 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() ) { -- 2.17.1