From 7538258c874fad3eb13834b10ddac1d209231d01 Mon Sep 17 00:00:00 2001 From: Steve Sutton Date: Mon, 24 Apr 2017 11:32:16 -0400 Subject: [PATCH] Update to have admin_search field for the fields Adding new field to custom field table for admin_search. If this is set then the fields (checkbox or text) will show up in the member list as an additional filter that can be used for searching members. --- classes/data/dataCustomFields.php | 8 ++++ index.php | 2 +- setup/adminHooks.php | 31 ++++++++++++++-- ..._V0.0.2.sql => create_database_V0.0.3.sql} | 1 + setup/databaseScripts/dbVersions.php | 1 + .../update_database_V0.0.2.sql | 2 +- .../update_database_V0.0.3.sql | 9 +++++ views/admin/management/fields.html | 37 ++++++++++++++++--- 8 files changed, 79 insertions(+), 12 deletions(-) rename setup/databaseScripts/{create_database_V0.0.2.sql => create_database_V0.0.3.sql} (92%) create mode 100644 setup/databaseScripts/update_database_V0.0.3.sql diff --git a/classes/data/dataCustomFields.php b/classes/data/dataCustomFields.php index c2746ea..25f29ef 100644 --- a/classes/data/dataCustomFields.php +++ b/classes/data/dataCustomFields.php @@ -139,6 +139,14 @@ class GlmDataFieldsCustomFields extends GlmDataAbstract 'use' => 'a' ), + // admin_search flag + 'admin_search' => array ( + 'field' => 'admin_search', + 'type' => 'checkbox', + 'default' => false, + 'use' => 'a' + ), + ); } diff --git a/index.php b/index.php index 9873cee..9d6970a 100644 --- a/index.php +++ b/index.php @@ -38,7 +38,7 @@ * version from this plugin. */ define('GLM_MEMBERS_FIELDS_PLUGIN_VERSION', '0.0.1'); -define('GLM_MEMBERS_FIELDS_PLUGIN_DB_VERSION', '0.0.2'); +define('GLM_MEMBERS_FIELDS_PLUGIN_DB_VERSION', '0.0.3'); // This is the minimum version of the GLM Members DB plugin require for this plugin. define('GLM_MEMBERS_FIELDS_PLUGIN_MIN_MEMBERS_REQUIRED_VERSION', '2.8.0'); diff --git a/setup/adminHooks.php b/setup/adminHooks.php index 8d803e0..c020b98 100644 --- a/setup/adminHooks.php +++ b/setup/adminHooks.php @@ -39,14 +39,23 @@ 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", + FROM " . GLM_MEMBERS_FIELDS_PLUGIN_DB_PREFIX . "custom_fields + WHERE admin_search = 1", ARRAY_A ); if ( isset( $customFields ) && count( $customFields ) > 0 ) { foreach ( $customFields as $key => $field ) { switch ( $field['field_type'] ) { - case 'text': case 'textarea': + break; + case 'text': + // convert name to lower case and replace spaces with _ + $field_name = preg_replace( '/[ -]/', '_', strtolower( $field['field_name'] ) ); + $parts[$field['id']] = '' . $field['field_name'] . ': wpdb->get_results( "SELECT * - FROM " . GLM_MEMBERS_FIELDS_PLUGIN_DB_PREFIX . "custom_fields", + FROM " . GLM_MEMBERS_FIELDS_PLUGIN_DB_PREFIX . "custom_fields + WHERE admin_search = 1", ARRAY_A ); if ( isset( $customFields ) && count( $customFields ) > 0 ) { foreach ( $customFields as $key => $field ) { switch ( $field['field_type'] ) { - case 'text': case 'textarea': + break; + case 'text': + // convert name to lower case and replace spaces with _ + $field_name = preg_replace( '/[ -]/', '_', strtolower( $field['field_name'] ) ); + if ( isset( $_REQUEST[$field_name] ) && $fieldValue = filter_var( $_REQUEST[$field_name], FILTER_SANITIZE_STRING ) ) { + $queryParts[] = " T.id IN ( + SELECT mi.member + FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "member_info mi, " . GLM_MEMBERS_FIELDS_PLUGIN_DB_PREFIX . "custom_field_data cfd + WHERE cfd.ref_dest = mi.id + AND cfd.field_data like '%" . esc_sql( $fieldValue ) . "%' + AND cfd.field_id = (SELECT id + FROM " . GLM_MEMBERS_FIELDS_PLUGIN_DB_PREFIX . "custom_fields + WHERE field_name = '" . esc_sql( $field['field_name'] ) . "'))"; + } break; case 'checkbox': diff --git a/setup/databaseScripts/create_database_V0.0.2.sql b/setup/databaseScripts/create_database_V0.0.3.sql similarity index 92% rename from setup/databaseScripts/create_database_V0.0.2.sql rename to setup/databaseScripts/create_database_V0.0.3.sql index 293f7c4..d3ec574 100644 --- a/setup/databaseScripts/create_database_V0.0.2.sql +++ b/setup/databaseScripts/create_database_V0.0.3.sql @@ -18,6 +18,7 @@ CREATE TABLE {prefix}custom_fields ( field_name TINYTEXT NOT NULL DEFAULT '', -- Field Name field_type TINYTEXT NOT NULL DEFAULT '', -- Field Type field_order SMALLINT NOT NULL DEFAULT 0, -- Order for Field + admin_search BOOLEAN NOT NULL DEFAULT '0', -- If the field is added to member list filters. PRIMARY KEY (id), INDEX(field_name(20)) ); diff --git a/setup/databaseScripts/dbVersions.php b/setup/databaseScripts/dbVersions.php index 29c7bd4..68df00c 100644 --- a/setup/databaseScripts/dbVersions.php +++ b/setup/databaseScripts/dbVersions.php @@ -16,5 +16,6 @@ $glmMembersFieldsDbVersions = array( '0.0.1' => array('version' => '0.0.1', 'tables' => 2, 'date' => '03/27/2017'), '0.0.2' => array('version' => '0.0.2', 'tables' => 2, 'date' => '04/14/2017'), + '0.0.3' => array('version' => '0.0.3', 'tables' => 2, 'date' => '04/24/2017'), ); diff --git a/setup/databaseScripts/update_database_V0.0.2.sql b/setup/databaseScripts/update_database_V0.0.2.sql index d1cef4c..939a44c 100644 --- a/setup/databaseScripts/update_database_V0.0.2.sql +++ b/setup/databaseScripts/update_database_V0.0.2.sql @@ -4,7 +4,7 @@ -- Database Update From Previous Version Script -- -- To permit each query below to be executed separately, --- all queries must be separated by a line with four dashses +-- all queries must be separated by a line with four dashes CREATE INDEX field_name ON {prefix}custom_fields(field_name(20)); diff --git a/setup/databaseScripts/update_database_V0.0.3.sql b/setup/databaseScripts/update_database_V0.0.3.sql new file mode 100644 index 0000000..6862b46 --- /dev/null +++ b/setup/databaseScripts/update_database_V0.0.3.sql @@ -0,0 +1,9 @@ +-- Gaslit Media Members Database +-- File Created: 2017-04-14 +-- Database Version: 0.0.2 +-- Database Update From Previous Version Script +-- +-- To permit each query below to be executed separately, +-- all queries must be separated by a line with four dashes + +ALTER TABLE {prefix}custom_fields ADD COLUMN admin_search BOOLEAN DEFAULT '0'; diff --git a/views/admin/management/fields.html b/views/admin/management/fields.html index e958477..831bc91 100644 --- a/views/admin/management/fields.html +++ b/views/admin/management/fields.html @@ -19,7 +19,7 @@ - Field Type: + Field Type: + + Admin Searchable + + + + (text or checkbox only) + +

* Required

Cancel @@ -58,7 +66,7 @@ - Field Type: + Field Type: + + Admin Searchable + + + + (text or checkbox only) + +

* Required

Cancel @@ -103,7 +119,7 @@ {$t.id}
- {$t.field_name} + {$t.field_name}
@@ -160,12 +176,21 @@ jQuery(document).ready(function($) { $("#newFieldDialog").dialog("open"); }); $('.editField').click( function() { - var fieldID = $(this).attr('data-fieldID'); - var fieldName = $(this).text(); - var fieldType = $(this).attr('data-fieldType'); + var fieldID = $(this).attr('data-fieldID'); + var fieldName = $(this).text(); + var fieldType = $(this).attr('data-fieldType'); + var adminSearch = $(this).attr('data-adminSearch'); $('#editFieldID').val(fieldID); $('#editFieldName').val(fieldName.trim()); $('#editFieldType').val(fieldType); + console.log(adminSearch); + if (adminSearch === '1') { + console.log('setting the checked to true'); + $('#editAdminSearch').prop('checked', true); + } else { + console.log('setting the checked to false'); + $('#editAdminSearch').prop('checked', false); + } $("#editFieldDialog").dialog("open"); }); $('#editFieldCancel').click( function() { -- 2.17.1