Adding filters for the admin searching
authorSteve Sutton <steve@gaslightmedia.com>
Fri, 14 Apr 2017 18:43:34 +0000 (14:43 -0400)
committerSteve Sutton <steve@gaslightmedia.com>
Fri, 14 Apr 2017 18:43:34 +0000 (14:43 -0400)
Adding the checkboxes to admin side for custom fields.
Only checkboxes so far.

setup/adminHooks.php

index 1756f6d..a5c26ae 100644 (file)
@@ -35,6 +35,71 @@ add_filter( 'glm-member-db-member-info-custom-tab', function( $content, $memberI
     $content = $this->controller( 'memberinfo', 'fields', $memberId );
     return $content;
 },1,2);
+add_filter( 'glm-member-db-custom-filter-search', function ( $content ) {
+$parts = array();
+    $customFields = $this->wpdb->get_results(
+        "SELECT *
+           FROM " . GLM_MEMBERS_FIELDS_PLUGIN_DB_PREFIX .  "custom_fields",
+        ARRAY_A
+    );
+    if ( isset( $customFields ) && count( $customFields ) > 0 ) {
+        foreach ( $customFields as $key => $field ) {
+            switch ( $field['field_type'] ) {
+            case 'text':
+            case 'textarea':
+
+                break;
+            case 'checkbox':
+                // convert name to lower case and replace spaces with _
+                $field_name = preg_replace( '/[ -]/', '_', strtolower( $field['field_name'] ) );
+                $parts[$field['id']] = '<b>' . $field['field_name'] . ':</b> <input type="checkbox" name="' . $field_name . '" value="1"';
+                if ( isset( $_REQUEST[$field_name] ) && filter_var( $_REQUEST[$field_name], FILTER_VALIDATE_BOOLEAN ) ) {
+                    $parts[$field['id']] .= ' checked';
+                }
+                $parts[$field['id']] .= '></b>';
+                break;
+            }
+        }
+    }
+    return implode( ' ', $parts );
+});
+add_filter('glm-member-db-admin-search-query', function() {
+    $queryParts = array();
+    // Get all custom fields
+    $customFields = $this->wpdb->get_results(
+        "SELECT *
+           FROM " . GLM_MEMBERS_FIELDS_PLUGIN_DB_PREFIX .  "custom_fields",
+        ARRAY_A
+    );
+    if ( isset( $customFields ) && count( $customFields ) > 0 ) {
+        foreach ( $customFields as $key => $field ) {
+            switch ( $field['field_type'] ) {
+            case 'text':
+            case 'textarea':
+
+                break;
+            case 'checkbox':
+                // convert name to lower case and replace spaces with _
+                $field_name = preg_replace( '/[ -]/', '_', strtolower( $field['field_name'] ) );
+                if ( isset( $_REQUEST[$field_name] ) && filter_var( $_REQUEST[$field_name], FILTER_VALIDATE_BOOLEAN ) ) {
+                    $queryParts[] = " T.id IN (
+                        SELECT member
+                          FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "member_info
+                         WHERE id IN (
+                        SELECT ref_dest
+                          FROM " . GLM_MEMBERS_FIELDS_PLUGIN_DB_PREFIX . "custom_field_data
+                         WHERE field_data = 'Yes'
+                           AND field_id = (SELECT id
+                                             FROM " . GLM_MEMBERS_FIELDS_PLUGIN_DB_PREFIX . "custom_fields
+                                            WHERE field_name = '" . esc_sql( $field['field_name'] ) . "')
+                    ) )";
+                }
+                break;
+            }
+        }
+    }
+    return $queryParts;
+});
 add_action(
     'glm-member-db-member-info-save-custom-fields',
     function( $memberInfoId ){