bp_ps_xprofile_search( $f )
Return results from BuddyBoss Profile Search Extended.
Description
Source
File: bp-core/profile-search/bps-xprofile.php
function bp_ps_xprofile_search ($f)
{
global $bp, $wpdb;
$value = $f->value;
$filter = $f->format. '_'. ($f->filter == ''? 'is': $f->filter);
$sql = array ('select' => '', 'where' => array ());
$sql['select'] = "SELECT user_id FROM {$bp->profile->table_name_data}";
$sql['where']['field_id'] = $wpdb->prepare ("field_id = %d", $f->id);
switch ($filter)
{
case 'integer_range':
if (isset ($value['min'])) $sql['where']['min'] = $wpdb->prepare ("value >= %d", $value['min']);
if (isset ($value['max'])) $sql['where']['max'] = $wpdb->prepare ("value <= %d", $value['max']);
break;
case 'decimal_range':
if (isset ($value['min'])) $sql['where']['min'] = $wpdb->prepare ("value >= %f", $value['min']);
if (isset ($value['max'])) $sql['where']['max'] = $wpdb->prepare ("value <= %f", $value['max']);
break;
case 'date_date_range':
$range_types = array( 'min', 'max' );
foreach ( $range_types as $range_type ) {
if ( isset( $value[ $range_type ]['year'] ) && !empty( $value[ $range_type ]['year'] ) ) {
$year = $f->value[ $range_type ]['year'];
$month = !empty( $f->value[ $range_type ]['month'] ) ? $f->value[ $range_type ]['month'] : '00';
$day = !empty( $f->value[ $range_type ]['day'] ) ? $f->value[ $range_type ]['day'] : '00';
$date = $year . '-' . $month . '-' . $day;
$operator = 'min' == $range_type ? '>=' : '<=';
$sql['where'][ $range_type ] = $wpdb->prepare ( "DATE(value) $operator %s", $date );
}
}
break;
case 'date_age_range':
$day = date ('j');
$month = date ('n');
$year = date ('Y');
if (isset ($value['max']))
{
$ymin = $year - $value['max'] - 1;
$sql['where']['age_min'] = $wpdb->prepare ("DATE(value) > %s", "$ymin-$month-$day");
}
if (isset ($value['min']))
{
$ymax = $year - $value['min'];
$sql['where']['age_max'] = $wpdb->prepare ("DATE(value) <= %s", "$ymax-$month-$day");
}
break;
case 'text_contains':
case 'location_contains':
if ( is_array( $value ) ) {
$values = (array)$value;
$parts = array ();
foreach ( $values as $v ) {
$v = str_replace ( '&', '&', $v );
$escaped = '%'. bp_ps_esc_like ( $v ). '%';
$parts[] = $wpdb->prepare ( "value LIKE %s", $escaped);
}
$match = ' OR ';
$sql['where'][$filter] = '('. implode ($match, $parts). ')';
} else {
$value = str_replace ('&', '&', $value);
$escaped = '%'. bp_ps_esc_like ($value). '%';
$sql['where'][$filter] = $wpdb->prepare ("value LIKE %s", $escaped);
}
break;
case 'text_like':
case 'location_like':
$value = str_replace ('&', '&', $value);
$value = str_replace ('\\\\%', '\\%', $value);
$value = str_replace ('\\\\_', '\\_', $value);
$sql['where'][$filter] = $wpdb->prepare ("value LIKE %s", $value);
break;
case 'text_is':
case 'location_is':
$value = str_replace ('&', '&', $value);
$sql['where'][$filter] = $wpdb->prepare ("value = %s", $value);
break;
case 'integer_is':
$sql['where'][$filter] = $wpdb->prepare ("value = %d", $value);
break;
case 'decimal_is':
$sql['where'][$filter] = $wpdb->prepare ("value = %f", $value);
break;
case 'date_is':
$sql['where'][$filter] = $wpdb->prepare ("DATE(value) = %s", $value);
break;
case 'text_one_of':
$values = (array)$value;
$parts = array ();
foreach ($values as $value)
{
$value = str_replace ('&', '&', $value);
$parts[] = $wpdb->prepare ("value = %s", $value);
}
$sql['where'][$filter] = '('. implode (' OR ', $parts). ')';
break;
case 'set_match_any':
case 'set_match_all':
$values = (array)$value;
$parts = array ();
foreach ($values as $value)
{
$value = str_replace ('&', '&', $value);
$escaped = '%:"'. bp_ps_esc_like ($value). '";%';
$parts[] = $wpdb->prepare ("value LIKE %s", $escaped);
}
$match = ($filter == 'set_match_any')? ' OR ': ' AND ';
$sql['where'][$filter] = '('. implode ($match, $parts). ')';
break;
default:
return array ();
}
$sql = apply_filters ('bp_ps_field_sql', $sql, $f);
$query = $sql['select']. ' WHERE '. implode (' AND ', $sql['where']);
$results = $wpdb->get_col ($query);
return $results;
}
Changelog
| Version | Description |
|---|---|
| BuddyBoss 1.0.0 | Introduced. |
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.