Last active
June 26, 2022 12:25
-
-
Save vfontjr/85136cf1fe0fa4a1febdf401d4c20e4a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* directory search form custom where filter */ | |
add_filter('frm_view_order', 'masterminds_directory_search_filter', 10, 2); | |
/** | |
* masterminds_directory_search_filter() callback for frm_view_order filter | |
* | |
* this function is where you create custom SQL for any view | |
* | |
* @param array $query contains the SQL query created by Formidable | |
* @param array $args contains the view | |
* | |
* @return $query with the rewritten custom query | |
*/ | |
function masterminds_directory_search_filter( $query, $args ) { | |
/* developers directory search view */ | |
if ( isset( $args['display']->post_name ) && $args['display']->post_name == "developers-directory-search-results" ) { | |
/* initialize variables for the sql */ | |
global $wpdb; | |
$wpdb_prefix = $wpdb->prefix; | |
$frm_items_table = $wpdb_prefix . 'frm_items'; | |
$frm_item_metas_table = $wpdb_prefix . 'frm_item_metas'; | |
/* get the number of parameters passed */ | |
$parameters = count($_GET); | |
$wautop = ( isset( $_GET[ 'wautop' ] ) ) ? 1 : 0; | |
$query_string_parameters = $parameters-$wautop; | |
$query_string_parameters_hold = $query_string_parameters; | |
/* get the directory field ids */ | |
$devdir_directory_listing = FrmField::get_id_by_key( "devdir_directory_listing" ); | |
$devdir_registration_type = FrmField::get_id_by_key( "devdir_registration_type" ); | |
$devdir_first_name = FrmField::get_id_by_key( "devdir_first_name" ); | |
$devdir_display_name = FrmField::get_id_by_key( "devdir_display_name" ); | |
$devdir_price_range = FrmField::get_id_by_key( "devdir_price_range" ); | |
$devdir_country = FrmField::get_id_by_key( "devdir_country" ); | |
$form_id = $query['where']['it.form_id']; | |
/* Start the SQL statement */ | |
$sql = "SELECT it.id FROM `{$frm_items_table}` it LEFT JOIN `{$frm_item_metas_table}` t2 ON t2.item_id=it.id AND t2.field_id={$devdir_directory_listing} LEFT JOIN `{$frm_item_metas_table}` t4 ON t4.item_id=it.id AND t4.field_id={$devdir_display_name} LEFT JOIN `{$frm_item_metas_table}` fn ON fn.item_id=it.id AND fn.field_id={$devdir_first_name}"; | |
$where = "WHERE it.is_draft = 0 AND it.form_id = {$form_id} AND t2.meta_value = 'Yes'"; | |
$order = "ORDER BY (CASE WHEN t4.meta_value IS NULL THEN fn.meta_value ELSE t4.meta_value END) ASC"; | |
$query['select'] = $sql . " " . $where; | |
/* empty $query['where'] to prevent conflicts with the view */ | |
$query['where'] = ''; | |
$query['order'] = $order; | |
if ( ( isset( $_GET[ 'resource_type' ] ) || | |
isset( $_GET[ 'display_name' ] ) || | |
isset( $_GET[ 'country' ] ) || | |
isset( $_GET[ 'price_range' ] ) ) ) { | |
$where .= " AND "; | |
$where .= ( $query_string_parameters_hold > 1 ) ? "( " : ""; | |
/* get the field ids for search fields */ | |
if ( isset( $_GET[ 'resource_type' ] ) ) { | |
$sql .= " LEFT JOIN `{$frm_item_metas_table}` t3 ON t3.item_id=it.id AND t3.field_id={$devdir_registration_type}"; | |
$where .= "t3.meta_value = '" . $_GET[ 'resource_type' ] . "'"; | |
if ( $query_string_parameters > 1 ) { | |
$where .= " OR "; | |
--$query_string_parameters; | |
} | |
} | |
if ( isset( $_GET[ 'display_name' ] ) ) { | |
/* the display name LEFT JOIN is included in the main SQL for the ORDER BY clause */ | |
// $sql .= " LEFT JOIN `{$frm_item_metas_table}` t4 ON t4.item_id=t1.id AND t4.field_id={$devdir_display_name}"; | |
$where .= "t4.meta_value = '" . $_GET[ 'display_name' ] . "'"; | |
if ( $query_string_parameters > 1 ) { | |
$where .= " OR "; | |
--$query_string_parameters; | |
} | |
} | |
if ( isset( $_GET[ 'price_range' ] ) ) { | |
$sql .= " LEFT JOIN `{$frm_item_metas_table}` t5 ON t5.item_id=it.id AND t5.field_id={$devdir_price_range}"; | |
if( $query_string_parameters_hold == 1 ) { | |
$where .= "t5.meta_value = '" . $_GET[ 'price_range' ] . "'"; | |
} else { | |
$where .= "t5.meta_value <= '" . $_GET[ 'price_range' ] . "'"; | |
} | |
if ( $query_string_parameters > 1 ) { | |
$where .= " OR "; | |
--$query_string_parameters; | |
} | |
} | |
if ( isset( $_GET[ 'country' ] ) ) { | |
$sql .= " LEFT JOIN `{$frm_item_metas_table}` t6 ON t6.item_id=it.id AND t6.field_id={$devdir_country}"; | |
$where .= "t6.meta_value = '" . $_GET[ 'country' ] . "'"; | |
} | |
$where .= ( $query_string_parameters_hold > 1 ) ? " )" : ""; | |
$query['select'] = $sql . " " . $where; | |
} | |
} | |
return $query; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment