field_type;
$field_view_path = WPDIRECTORYKIT_PATH.'application/views/fields_edit/'.$field_type.'.php';
if(file_exists($field_view_path))
{
include $field_view_path;
}
else
{
echo __('Missing VIEW file:', 'wpdirectorykit').' '.esc_html($field_type).'.php';
}
}
}
if ( ! function_exists('wdk_generate_search_form'))
{
function wdk_generate_search_form($form_id=1, $subfolder='', $print = TRUE, $predefinedfields_query = array())
{
/* load WMVC data */
$WMVC = &wdk_get_instance();
$WMVC->model('searchform_m');
$WMVC->model('field_m');
$output = '';
/* get WMVC form data */
$fields = $WMVC->searchform_m->get($form_id, TRUE);
$user_fields = NULL;
/* get WMVC form fields */
if(is_object($fields))
$user_fields = json_decode($fields->searchform_json);
/* generate WMVC form fields html */
if(is_array($user_fields))
foreach($user_fields as $used_field)
{
if($used_field->field_id == 'cat') {
$field = array(
"idfield" => 'category',
"field_type" => 'CATEGORY',
"field_label" => __('Category', 'wpdirectorykit'),
"prefix" => '',
"suffix" => '',
"values_list" => '',
"placeholder" => '',
);
}else if($used_field->field_id == 'loc') {
$field = array(
"idfield" => 'location',
"field_type" => 'LOCATION',
"field_label" => __('Location', 'wpdirectorykit'),
"prefix" => '',
"suffix" => '',
"values_list" => '',
"placeholder" => '',
);
}else if($used_field->field_id == 'address') {
$field = array(
"idfield" => 'address',
"field_type" => 'INPUTBOX',
"field_label" => __('Address', 'wpdirectorykit'),
"prefix" => '',
"suffix" => '',
"values_list" => '',
"placeholder" => '',
);
}else if($used_field->field_id == 'post_title') {
$field = array(
"idfield" => 'post_title',
"field_type" => 'INPUTBOX',
"field_label" => __('Title', 'wpdirectorykit'),
"prefix" => '',
"suffix" => '',
"values_list" => '',
"placeholder" => '',
);
}else if($used_field->field_id == 'search') {
$field = array(
"idfield" => 'search',
"field_type" => 'INPUTBOX',
"field_label" => __('Search', 'wpdirectorykit'),
"prefix" => '',
"suffix" => '',
"values_list" => '',
"placeholder" => '',
);
}else if(function_exists('run_wdk_bookings') && $used_field->field_id == 'booking_date') {
$field = array(
"idfield" => 'booking_date',
"field_type" => 'BOOKINGS_DATE',
"field_label" => __('Booking Date', 'wpdirectorykit'),
"prefix" => '',
"suffix" => '',
"values_list" => '',
"placeholder" => '',
);
}else if(function_exists('run_wdk_bookings') && $used_field->field_id == 'booking_guest') {
$field = array(
"idfield" => 'booking_guest',
"field_type" => 'NUMBER',
"field_label" => __('Booking Max Guests', 'wpdirectorykit'),
"prefix" => '',
"suffix" => '',
"values_list" => '',
"placeholder" => '',
);
}else if($used_field->field_id == 'more') {
$field = array(
"idfield" => 'MORE',
"field_type" => 'MORE',
"field_label" => __('MORE', 'wpdirectorykit'),
"prefix" => '',
"suffix" => '',
"values_list" => '',
"placeholder" => '',
);
} else {
$field_data = $WMVC->field_m->get_fields_data($used_field->field_id);
if($field_data) {
if($used_field->query_type == 'slider_range') {
$field = array(
"idfield" => wmvc_show_data('idfield', $field_data),
"field_type" => 'SLIDER_RANGE',
"field_label" =>wmvc_show_data('field_label', $field_data),
"prefix" => wmvc_show_data('prefix', $field_data),
"suffix" => wmvc_show_data('suffix', $field_data),
"value_min" => wmvc_show_data('value_min', $used_field),
"value_max" => wmvc_show_data('value_max', $used_field),
"values_list" => wmvc_show_data('values_list', $field_data),
"placeholder" => wmvc_show_data('placeholder', $field_data)
);
} else {
$field = array(
"idfield" => wmvc_show_data('idfield', $field_data),
"field_type" => wmvc_show_data('field_type', $field_data),
"field_label" =>wmvc_show_data('field_label', $field_data),
"prefix" => wmvc_show_data('prefix', $field_data),
"suffix" => wmvc_show_data('suffix', $field_data),
"values_list" => wmvc_show_data('values_list', $field_data),
"placeholder" => wmvc_show_data('placeholder', $field_data),
"is_select_2_ajax_field_db_suggestion" => wmvc_show_data('is_select_2_ajax_field_db_suggestion', $used_field),
);
}
}
}
/* if field not detected or remove from fields list, skip field in search */
if(empty($field)) continue;
/* add from user fields data */
$field['field_id'] = wmvc_show_data('field_id', $used_field);
$field['class'] = wmvc_show_data('class', $used_field);
$field['query_type'] = wmvc_show_data('query_type', $used_field);
$field['columns'] = wmvc_show_data('columns', $used_field);
$field_data = array();
$field_data ['field_data'] = $field;
$field_data ['predefinedfields_query'] = $predefinedfields_query;
if(in_array(wmvc_show_data('field_type', $field),array('SECTION'))) {
continue;
}
$field_view_path = WPDIRECTORYKIT_PATH.'application/views/search_fields/'.$subfolder.(wmvc_show_data('field_type', $field)).'.php';
if(file_exists($field_view_path))
{
$output .= $WMVC->view('search_fields/'.$subfolder.(wmvc_show_data('field_type', $field)), $field_data, FALSE);
}
else
{
/* show missing view file of field, only if print enable */
if($print)
$output .= __('Missing VIEW file:', 'wpdirectorykit').' '.esc_html($subfolder).(wmvc_show_data('field_type', $field)).'.php';
}
}
if($print){
echo $output;
return FALSE;
}
return $output;
}
}
if ( ! function_exists('wdk_generate_search_form_fields_elementor'))
{
function wdk_generate_search_form_fields_elementor($fields_array = array(), $subfolder='', $print = TRUE, $predefinedfields_query = array())
{
/* load WMVC data */
$WMVC = &wdk_get_instance();
$WMVC->model('searchform_m');
$WMVC->model('field_m');
$output = '';
foreach ($fields_array as $key => $el_field_data) {
$field_id = wmvc_show_data('field_id', $el_field_data, '');
if(empty($field_id)) continue;
if(strpos($field_id,'__') !== FALSE){
$field_id = substr($field_id, strpos($field_id,'__')+2);
}
$field = NULL;
if($field_id == 'category_id') {
$field = array(
"idfield" => 'category',
"field_type" => 'CATEGORY',
"field_label" => __('Category', 'wpdirectorykit'),
"prefix" => '',
"suffix" => '',
"values_list" => '',
"placeholder" => '',
);
}else if($field_id == 'location_id') {
$field = array(
"idfield" => 'location',
"field_type" => 'LOCATION',
"field_label" => __('Location', 'wpdirectorykit'),
"prefix" => '',
"suffix" => '',
"values_list" => '',
"placeholder" => '',
);
}else if($field_id == 'address') {
$field = array(
"idfield" => 'address',
"field_type" => 'INPUTBOX',
"field_label" => __('Address', 'wpdirectorykit'),
"prefix" => '',
"suffix" => '',
"values_list" => '',
"placeholder" => '',
);
}else if($field_id == 'post_title') {
$field = array(
"idfield" => 'post_title',
"field_type" => 'INPUTBOX',
"field_label" => __('Title', 'wpdirectorykit'),
"prefix" => '',
"suffix" => '',
"values_list" => '',
"placeholder" => '',
);
}else if($field_id == 'search') {
$field = array(
"idfield" => 'search',
"field_type" => 'INPUTBOX',
"field_label" => __('Search', 'wpdirectorykit'),
"prefix" => '',
"suffix" => '',
"values_list" => '',
"placeholder" => '',
);
}else if(function_exists('run_wdk_bookings') && $field_id == 'booking_date') {
$field = array(
"idfield" => 'booking_date',
"field_type" => 'BOOKINGS_DATE',
"field_label" => __('Booking Date', 'wpdirectorykit'),
"prefix" => '',
"suffix" => '',
"values_list" => '',
"placeholder" => '',
);
}else if($field_id == 'more') {
$field = array(
"idfield" => 'MORE',
"field_type" => 'MORE',
"field_label" => __('MORE', 'wpdirectorykit'),
"prefix" => '',
"suffix" => '',
"values_list" => '',
"placeholder" => '',
);
} else {
$field_data = $WMVC->field_m->get_fields_data($field_id);
if($field_data) {
if(wmvc_show_data('search_type', $el_field_data, '') == 'slider_range') {
$field = array(
"idfield" => wmvc_show_data('idfield', $field_data),
"field_type" => 'SLIDER_RANGE',
"field_label" =>wmvc_show_data('field_label', $field_data),
"prefix" => wmvc_show_data('prefix', $field_data),
"suffix" => wmvc_show_data('suffix', $field_data),
"value_min" => wmvc_show_data('value_min', $el_field_data),
"value_max" => wmvc_show_data('value_max', $el_field_data),
"values_list" => wmvc_show_data('values_list', $field_data),
"placeholder" => wmvc_show_data('placeholder', $field_data)
);
} else {
$field = array(
"idfield" => wmvc_show_data('idfield', $field_data),
"field_type" => wmvc_show_data('field_type', $field_data),
"field_label" =>wmvc_show_data('field_label', $field_data),
"prefix" => wmvc_show_data('prefix', $field_data),
"suffix" => wmvc_show_data('suffix', $field_data),
"values_list" => wmvc_show_data('values_list', $field_data),
"placeholder" => wmvc_show_data('placeholder', $field_data)
);
}
}
}
if(wmvc_show_data('field_placeholder', $el_field_data, false)) {
$field['placeholder'] = wmvc_show_data('field_placeholder', $el_field_data, false);
}
if(wmvc_show_data('search_type_tree_hide', $el_field_data, false)) {
$field['search_type_tree_hide'] = wmvc_show_data('search_type_tree_hide', $el_field_data, false);
}
/* if field not detected or remove from fields list, skip field in search */
if(empty($field)) continue;
/* add from user fields data */
$field['field_id'] = wmvc_show_data('idfield', $field);
$field['class'] = wmvc_show_data('field_css_class', $el_field_data);
$field['query_type'] = wmvc_show_data('search_type', $el_field_data);
$field['columns'] = wmvc_show_data('field_columns_number', $el_field_data);
$field_data = array();
$field_data ['field_data'] = $field;
$field_data ['predefinedfields_query'] = $predefinedfields_query;
if(in_array(wmvc_show_data('field_type', $field),array('SECTION'))) {
continue;
}
$field_suffix = strtoupper(wmvc_show_data('search_type_tree', $el_field_data,''));
$field_view_path = WPDIRECTORYKIT_PATH.'application/views/search_fields/'.$subfolder.(wmvc_show_data('field_type', $field)).$field_suffix.'.php';
if(file_exists($field_view_path))
{
$output .= $WMVC->view('search_fields/'.$subfolder.(wmvc_show_data('field_type', $field)).$field_suffix, $field_data, FALSE);
}
else
{
/* show missing view file of field, only if print enable */
if($print)
$output .= __('Missing VIEW file:', 'wpdirectorykit').' '.esc_html($subfolder).(wmvc_show_data('field_type', $field)).$field_suffix.'.php';
}
}
if($print){
echo $output;
return FALSE;
}
return $output;
}
}
function &wdk_get_instance()
{
global $Winter_MVC_WDK;
if(empty($Winter_MVC_WDK))
{
$Winter_MVC_WDK = new MVC_Loader(plugin_dir_path( __FILE__ ).'../../');
$Winter_MVC_WDK->load_helper('basic');
}
return $Winter_MVC_WDK;
}
function wdk_prepare_search_query_GET($columns = array(), $model_name = NULL, $external_columns = array(), $custom_parameters = array(), $skip_postget = FALSE)
{
global $Winter_MVC_WDK;
$WMVC = &$Winter_MVC_WDK;
$wdk_bookings_joinded = false;
static $available_fields_listings = NULL;
static $available_fields_static = array();
static $list_fields_static = NULL;
$fields_type = array();
/* add if missing columns */
if(!in_array('post_id', $columns)) {
$columns[] = $Winter_MVC_WDK->db->prefix.'wdk_listings.post_id';
}
$_GET_clone = array();
if(!$skip_postget)
$_GET_clone = array_merge($_GET, $_POST);
if(isset($_GET_clone['order_by']) && $_GET_clone['order_by'] =='undefined') {
unset($_GET_clone['order_by']);
}
if(isset($custom_parameters['order_by'])) {
if(isset($_GET_clone['order_by']) && !empty($_GET_clone['order_by'])) {
$_GET_clone['order_by'] = ((!empty($custom_parameters['order_by'])) ? $custom_parameters['order_by'].', ':'').sanitize_text_field($_GET_clone['order_by']);
} elseif(!empty( $custom_parameters['order_by'])) {
$_GET_clone['order_by'] = $custom_parameters['order_by'];
}
unset($custom_parameters['order_by']);
}
if(!empty($custom_parameters))
$_GET_clone = array_merge($_GET_clone, $custom_parameters);
$WMVC->model('listing_m');
$WMVC->model('field_m');
$WMVC->model('listingfield_m');
$smart_search = '';
if(isset($_GET_clone['search']))
$smart_search = wdk_esc_sql(sanitize_text_field($_GET_clone['search']));
if(isset($_GET_clone['field_search']))
$smart_search = wdk_esc_sql(sanitize_text_field($_GET_clone['field_search']));
if(!isset($available_fields_static[$model_name]))
{
$available_fields = $WMVC->$model_name->get_available_fields();
$available_fields_static[$model_name] = $available_fields;
}
else
{
$available_fields = $available_fields_static[$model_name];
}
if($available_fields_listings === NULL)
$available_fields_listings = $WMVC->listingfield_m->get_available_fields();
/* Пet column names from wdk_listings_fields and add to allow search +
in _GET_clone replace field_#id to field_id_TYPE*/
if($list_fields_static === NULL)
{
$WMVC->db->where(array('field_type !='=> 'SECTION'));
$list_fields = $WMVC->field_m->get();
$list_fields_static = $list_fields;
}
else
{
$list_fields = $list_fields_static;
}
foreach($list_fields as $field_data) {
$field_id = wmvc_show_data('idfield',$field_data);
$field_type = wmvc_show_data('field_type',$field_data);
$fields_type[$field_id] = $field_type;
$column_name ='field_'.$field_id.'_'.$field_type;
if(!isset($available_fields_listings[$column_name])) continue;
if(isset($_GET_clone['field_'.$field_id])) {
if($field_type == 'DROPDOWNMULTIPLE') {
$_GET_clone['field_'.$field_id.'_'.$field_type] = $_GET_clone['field_'.$field_id];
} else {
$_GET_clone['field_'.$field_id.'_'.$field_type] = apply_filters( 'wdk-currency-conversion/convert/default_value',sanitize_text_field($_GET_clone['field_'.$field_id]), $field_id);
}
}
if(isset($_GET_clone['field_'.$field_id.'_max'])) {
$_GET_clone['field_'.$field_id.'_'.$field_type.'_max'] = apply_filters( 'wdk-currency-conversion/convert/default_value',sanitize_text_field($_GET_clone['field_'.$field_id.'_max']), $field_id);
}
if(isset($_GET_clone['field_'.$field_id.'_min'])) {
$_GET_clone['field_'.$field_id.'_'.$field_type.'_min'] = apply_filters( 'wdk-currency-conversion/convert/default_value',sanitize_text_field($_GET_clone['field_'.$field_id.'_min']), $field_id);
}
if(isset($_GET_clone['field_'.$field_id.'_exactly'])) {
$_GET_clone['field_'.$field_id.'_'.$field_type.'_exactly'] = wdk_clean_mixed($_GET_clone['field_'.$field_id.'_exactly']);
}
$columns[] = $column_name;
$columns[] = $column_name.'_max';
$columns[] = $column_name.'_min';
$columns[] = $column_name.'_exactly';
$external_columns[] = $column_name;
$external_columns[] = $column_name.'_max';
$external_columns[] = $column_name.'_min';
$external_columns[] = $column_name.'_exactly';
}
if(isset($_GET_clone['search_agents_ids'])) {
$column_name ='agents_ids';
$_GET_clone[$column_name] = $_GET_clone['search_agents_ids'];
$columns[] = $column_name;
$external_columns[] = $column_name;
}
if(isset($_GET_clone['search_user_editor_ids'])) {
$column_name ='user_editor_ids';
$_GET_clone[$column_name] = $_GET_clone['search_user_editor_ids'];
$columns[] = $column_name;
$external_columns[] = $column_name;
}
if(isset($_GET_clone['search_location'])) {
$column_name ='location_id';
$_GET_clone[$column_name] = $_GET_clone['search_location'];
$columns[] = $column_name;
$external_columns[] = $column_name;
}
if(isset($_GET_clone['search_category'])) {
$column_name ='category_id';
$_GET_clone[$column_name] = $_GET_clone['search_category'];
$columns[] = $column_name;
$external_columns[] = $column_name;
}
if(isset($_GET_clone['search_gps'])) {
$column_name ='gps';
$_GET_clone[$column_name] = $_GET_clone['search_gps'];
$columns[] = $column_name;
$external_columns[] = $column_name;
}
if(isset($_GET_clone['field_address'])) {
$column_name ='address';
$_GET_clone[$column_name] = $_GET_clone['field_address'];
$columns[] = $column_name;
$external_columns[] = $column_name;
}
if(isset($_GET_clone['field_post_id'])) {
$column_name ='ID_exactly';
$_GET_clone[$column_name] = sanitize_text_field($_GET_clone['field_post_id']);
$columns[] = $column_name;
$external_columns[] = $column_name;
}
if(isset($_GET_clone['field_post_date'])) {
$column_name ='post_DATE';
$_GET_clone[$column_name] = ($_GET_clone['field_post_date']);
$columns[] = $column_name;
$external_columns[] = $column_name;
}
if(isset($_GET_clone['field_post_date_min'])) {
$column_name ='post_DATE_min';
$_GET_clone[$column_name] = ($_GET_clone['field_post_date_min']);
$columns[] = $column_name;
$external_columns[] = $column_name;
}
if(isset($_GET_clone['field_post_date_max'])) {
$column_name ='post_DATE_max';
$_GET_clone[$column_name] = ($_GET_clone['field_post_date_max']);
$columns[] = $column_name;
$external_columns[] = $column_name;
}
if (function_exists('run_wdk_bookings') && isset($_GET_clone['field_booking_date_from'])) {
$column_name ='field_booking_date_from';
$_GET_clone[$column_name] = $_GET_clone['field_booking_date_from'];
$columns[] = $column_name;
$external_columns[] = $column_name;
}
if (function_exists('run_wdk_bookings') && isset($_GET_clone['field_booking_date_to'])) {
$column_name ='field_booking_date_to';
$_GET_clone[$column_name] = $_GET_clone['field_booking_date_to'];
$columns[] = $column_name;
$external_columns[] = $column_name;
}
if (function_exists('run_wdk_bookings') && isset($_GET_clone['field_booking_guest'])) {
$column_name ='field_booking_guest';
$_GET_clone[$column_name] = $_GET_clone['field_booking_guest'];
$columns[] = $column_name;
$external_columns[] = $column_name;
}
if (isset($_GET_clone['search_rank'])) {
$column_name ='`rank`';
$_GET_clone[$column_name] = $_GET_clone['search_rank'];
$columns[] = $column_name;
$external_columns[] = $column_name;
}
if (isset($_GET_clone['search_rank_min'])) {
$column_name ='`rank`_min';
$_GET_clone[$column_name] = $_GET_clone['search_rank_min'];
$columns[] = $column_name;
$external_columns[] = $column_name;
}
if (isset($_GET_clone['search_rank_max'])) {
$column_name ='`rank`_max';
$_GET_clone[$column_name] = $_GET_clone['search_rank_max'];
$columns[] = $column_name;
$external_columns[] = $column_name;
}
//$table_name = substr($model_name, 0, -2);
$columns_original = array();
foreach($columns as $key=>$val)
{
$columns_original[$val] = $val;
// if column contain also "table_name.*"
$splited = explode('.', $val);
if(wmvc_count($splited) == 2)
$val = $splited[1];
if(isset($available_fields[$val]))
{
}
else
{
if(!in_array($columns[$key], $external_columns))
{
unset($columns[$key]);
}
}
}
if(wmvc_count($_GET_clone) > 0)
{
unset($_GET_clone['search']);
unset($_GET_clone['field_search']);
$WMVC->db->join($WMVC->listing_m->_table_name.' ON '.$WMVC->listing_m->_table_name.'.post_id = '.$WMVC->db->prefix.'posts'.'.ID', NULL, 'LEFT');
// For quick/smart search
if(wmvc_count($columns) > 0 && !empty($smart_search))
{
$gen_q = '';
foreach($columns as $key=>$value)
{
if($value == 'field_booking_date_from' || $value == 'field_booking_date_to' || $value == 'agents_ids' || $value == 'gps' || $value == 'is_featured' || $value == 'field_booking_guest') continue;
if(strpos($value, '_CHECKBOX') !== FALSE) continue;
// if smart is number, search only im number fields
if(is_intval($smart_search)) {
if(strpos($value, '_NUMBER') === FALSE /*&& $value != 'category_id' && $value != 'location_id'*/ && strpos($value, 'post_id') === FALSE ) continue;
} else {
if($value == 'category_id' || $value == 'location_id' || strpos($value, 'post_id') !== FALSE) continue;
}
if(substr_count($value, 'id') > 0 && is_numeric($smart_search))
{
$gen_q.="$value = $smart_search OR ";
}
else if(substr_count($value, 'date') > 0)
{
$gen_search = $smart_search;
$gen_q.="$value LIKE '%$gen_search%' OR ";
}
elseif(substr($value, -8) == '_exactly')
{
}
elseif(substr($value, -4) == '_max')
{
}
else if(substr($value, -4) == '_min')
{
}
else if(strpos($value, '_NUMBER') !== FALSE)
{
if(is_intval($smart_search)){
$gen_search = $smart_search;
$gen_q.="$value = $gen_search OR ";
}
}
else
{
$gen_q.="$value LIKE '%$smart_search%' OR ";
}
}
/* location / categories */
if(!is_intval($smart_search)) {
$gen_q.="location_title LIKE '%$smart_search%' OR ";
$gen_q.="category_title LIKE '%$smart_search%' OR ";
}
/* get address and gps */
if(strlen($smart_search) > 5) {
$coordinates_center = wdk_get_gps($smart_search);
$search_radius = 5;
if($coordinates_center && $coordinates_center['lat'] != 0 && is_numeric($search_radius))
{
$distance_unit = 'km';
if(__('km', 'wpdirectorykit') == 'm')
{
$distance_unit = 'm';
}
// calculate rectangle
$rectangle_ne = wdk_getDueCoords($coordinates_center['lat'], $coordinates_center['lng'], 45, $search_radius, $distance_unit);
$rectangle_sw = wdk_getDueCoords($coordinates_center['lat'], $coordinates_center['lng'], 225, $search_radius, $distance_unit);
$gps_ne = explode(', ', $rectangle_ne);
$gps_sw = explode(', ', $rectangle_sw);
$gen_q .="(".$WMVC->db->prefix."wdk_listings.lat < '$gps_ne[0]' AND ".$WMVC->db->prefix."wdk_listings.lat > '$gps_sw[0]' AND
".$WMVC->db->prefix."wdk_listings.lng < '$gps_ne[1]' AND ".$WMVC->db->prefix."wdk_listings.lng > '$gps_sw[1]') OR ";
}
}
/* detect is gps */
if(wdk_is_gps($smart_search)) {
$gps = explode(',',$smart_search);
$coordinates_center = array('lat'=>trim($gps[0]),'lng'=>trim($gps[1]));
$search_radius = 5;
if($coordinates_center && $coordinates_center['lat'] != 0 && is_numeric($search_radius))
{
$distance_unit = 'km';
if(__('km', 'wpdirectorykit') == 'm')
{
$distance_unit = 'm';
}
// calculate rectangle
$rectangle_ne = wdk_getDueCoords($coordinates_center['lat'], $coordinates_center['lng'], 45, $search_radius, $distance_unit);
$rectangle_sw = wdk_getDueCoords($coordinates_center['lat'], $coordinates_center['lng'], 225, $search_radius, $distance_unit);
$gps_ne = explode(', ', $rectangle_ne);
$gps_sw = explode(', ', $rectangle_sw);
$gen_q .="(".$WMVC->db->prefix."wdk_listings.lat < '$gps_ne[0]' AND ".$WMVC->db->prefix."wdk_listings.lat > '$gps_sw[0]' AND
".$WMVC->db->prefix."wdk_listings.lng < '$gps_ne[1]' AND ".$WMVC->db->prefix."wdk_listings.lng > '$gps_sw[1]') OR ";
}
}
$gen_q = substr($gen_q, 0, -4);
if(!empty($gen_q))
$WMVC->db->where("($gen_q)");
}
// For column search
if(isset($_GET_clone))
{
$gen_q = '';
foreach($_GET_clone as $key=>$val)
{
if(!empty($val) && in_array($key, $columns))
{
$col_name = $key;
$val = esc_sql($val);
//if(isset($key))
// $col_name = $key;
if(strpos($key, 'skip') !== FALSE) continue;
if($key == 'field_booking_guest')
{
if(!$wdk_bookings_joinded){
$WMVC->db->join($WMVC->db->prefix.'wdk_booking_price ON '.$WMVC->db->prefix.'posts.ID = '.$WMVC->db->prefix.'wdk_booking_price.post_id', NULL, 'LEFT');
$WMVC->db->distinct($WMVC->db->prefix.'posts.ID');
$WMVC->db->join($WMVC->db->prefix.'wdk_booking_reservation ON '.$WMVC->db->prefix.'posts.ID = '.$WMVC->db->prefix.'wdk_booking_reservation.post_id', NULL, 'LEFT');
$wdk_bookings_joinded = true;
$gen_q.= $WMVC->db->prefix.'wdk_booking_price.is_activated = 1 AND ';
$WMVC->db->join($WMVC->db->prefix.'wdk_booking_calendar ON '.$WMVC->db->prefix.'posts.ID = '.$WMVC->db->prefix.'wdk_booking_calendar.post_id', NULL, 'LEFT');
}
$gen_q.= $WMVC->db->prefix."wdk_booking_calendar.guests >='".intval($val)."' AND ";
}
elseif($key == 'field_booking_date_from')
{
if(!$wdk_bookings_joinded){
$WMVC->db->join($WMVC->db->prefix.'wdk_booking_price ON '.$WMVC->db->prefix.'posts.ID = '.$WMVC->db->prefix.'wdk_booking_price.post_id', NULL, 'LEFT');
$WMVC->db->distinct($WMVC->db->prefix.'posts.ID');
$WMVC->db->join($WMVC->db->prefix.'wdk_booking_reservation ON '.$WMVC->db->prefix.'posts.ID = '.$WMVC->db->prefix.'wdk_booking_reservation.post_id', NULL, 'LEFT');
$wdk_bookings_joinded = true;
$gen_q.= $WMVC->db->prefix.'wdk_booking_price.is_activated = 1 AND ';
$WMVC->db->join($WMVC->db->prefix.'wdk_booking_calendar ON '.$WMVC->db->prefix.'posts.ID = '.$WMVC->db->prefix.'wdk_booking_calendar.post_id', NULL, 'LEFT');
}
if(wdk_is_date($val))
{
if(!get_option('wdk_bookings_is_hours_enabled')) {
$gen_search = wdk_normalize_date_db($val, 'Y-m-d H:i:s', 'Y-m-d');
$gen_q.= "DATE_FORMAT(".$WMVC->db->prefix."wdk_booking_price.date_from, '%Y-%m-%d') <= '".$gen_search."' AND ";
} else {
$gen_search = wdk_normalize_date_db($val);
$gen_q.= $WMVC->db->prefix."wdk_booking_price.date_from >'".$gen_search."' AND ";
}
}
if( isset($_GET_clone['field_booking_date_from']) && isset($_GET_clone['field_booking_date_to'])) {
if(!get_option('wdk_bookings_is_hours_enabled')) {
$gen_search_from = wdk_normalize_date_db($_GET_clone['field_booking_date_from'], 'Y-m-d H:i:s', 'Y-m-d');
$gen_search_to = wdk_normalize_date_db($_GET_clone['field_booking_date_to'], 'Y-m-d H:i:s', 'Y-m-d');
$gen_q.= $WMVC->db->prefix."posts.ID NOT IN (
SELECT post_id
FROM ".$WMVC->db->prefix."wdk_booking_reservation
WHERE
".$WMVC->db->prefix."wdk_booking_reservation.is_approved = 1
AND
DATE_FORMAT(".$WMVC->db->prefix."wdk_booking_reservation.date_from, '%Y-%m-%d') < '".$gen_search_to."'
AND
DATE_FORMAT(".$WMVC->db->prefix."wdk_booking_reservation.date_to, '%Y-%m-%d') > '".$gen_search_from."'
) AND ";
} else {
$gen_search_from = wdk_normalize_date_db($_GET_clone['field_booking_date_from']);
$gen_search_to = wdk_normalize_date_db($_GET_clone['field_booking_date_to']);
$gen_q.= $WMVC->db->prefix."posts.ID NOT IN (
SELECT post_id
FROM ".$WMVC->db->prefix."wdk_booking_reservation
WHERE
".$WMVC->db->prefix."wdk_booking_reservation.is_approved = 1
AND
".$WMVC->db->prefix."wdk_booking_reservation.date_from < '".$gen_search_to."'
AND
".$WMVC->db->prefix."wdk_booking_reservation.date_to > '".$gen_search_from."'
) AND ";
}
}
}
elseif($key == 'field_booking_date_to')
{
if(!$wdk_bookings_joinded){
$WMVC->db->join($WMVC->db->prefix.'wdk_booking_price ON '.$WMVC->db->prefix.'posts.ID = '.$WMVC->db->prefix.'wdk_booking_price.post_id',NULL, 'LEFT');
$WMVC->db->join($WMVC->db->prefix.'wdk_booking_reservation ON '.$WMVC->db->prefix.'posts.ID = '.$WMVC->db->prefix.'wdk_booking_reservation.post_id',NULL, 'LEFT');
$wdk_bookings_joinded = true;
$gen_q.= $WMVC->db->prefix.'wdk_booking_price.is_activated = 1 AND ';
$WMVC->db->join($WMVC->db->prefix.'wdk_booking_calendar ON '.$WMVC->db->prefix.'posts.ID = '.$WMVC->db->prefix.'wdk_booking_calendar.post_id', NULL, 'LEFT');
}
if(wdk_is_date($val))
{
if(!get_option('wdk_bookings_is_hours_enabled')) {
$gen_search = wdk_normalize_date_db($val, 'Y-m-d H:i:s', 'Y-m-d');
$gen_q.= "DATE_FORMAT(".$WMVC->db->prefix."wdk_booking_price.date_to, '%Y-%m-%d') >= '".$gen_search."' AND ";
} else {
$gen_search = wdk_normalize_date_db($val);
$gen_q.= $WMVC->db->prefix."wdk_booking_price.date_to >'".$gen_search."' AND ";
}
}
}
elseif(substr($key, -8) == '_exactly')
{
$col_name = substr($key, 0, -8);
if(is_string($val) && strpos($val, ',') !== FALSE){
$val =explode(',', $val);
} elseif(is_string($val)){
$val =array($val);
}
if(is_array($val))
{
$sql_search = '';
foreach ($val as $v) {
if(empty($v)) continue;
if(!empty($sql_search))
$sql_search .= " OR ";
$sql_search .= " ".$col_name." = '".$v."' ";
}
if(!empty($sql_search))
$gen_q.=" ( ".$sql_search." ) AND ";
} else {
$gen_q.=$col_name." = '".$val."' AND ";
}
}
elseif(substr($key, -4) == '_max')
{
$col_name = substr($key, 0, -4);
if(strpos($key, 'NUMBER') !== FALSE) {
$gen_q.=$col_name." <= ".intval($val)." AND ";
} else if(strpos($key, 'DATE') !== FALSE) {
if(wdk_is_date($val))
{
$gen_search = wdk_normalize_date_db($val, 'Y-m-d H:i:s', 'Y-m-d H:i:s');
$gen_q.=$col_name." <= '".$gen_search."' AND ";
}
} else {
$gen_q.=$col_name." <= '".$val."' AND ";
}
}
else if(substr($key, -4) == '_min')
{
$col_name = substr($key, 0, -4);
if(strpos($key, 'NUMBER') !== FALSE) {
$gen_q.=$col_name." >= ".intval($val)." AND ";
} else if(strpos($key, 'DATE') !== FALSE) {
if(wdk_is_date($val))
{
$gen_search = wdk_normalize_date_db($val, 'Y-m-d H:i:s', 'Y-m-d H:i:s');
$gen_q.=$col_name." >= '".$gen_search."' AND ";
}
} else {
$gen_q.=$col_name." >= '".$val."' AND ";
}
}
elseif(substr_count($key, 'id') > 0 && is_numeric($val) && $key != 'agents_ids' && $key !='user_editor_ids' && $key !='location_id' && $key !='category_id')
{
// ID is always numeric
if($key == 'location_id') {
/* $gen_q .= "(`location_table`.`parent_path` = ".$val." OR ";
$gen_q .= "`location_2`.`parent_path` = ".$val." OR ";*/
$gen_q .= "(`location_table`.`parent_id` = ".$val." OR ";
//$gen_q .= "`".$WMVC->db->prefix."wdk_locations `.`level_0_id` = ".$val." OR ";
$gen_q .= $col_name." = ".$val.") AND ";
} elseif($key == 'category_id') {
$gen_q .= "('parent_path' = ".$val." OR ";
$gen_q .= $col_name." = ".$val.") AND ";
} else {
$gen_q.=$col_name." = ".$val." AND ";
}
}
else if(substr_count($key, '_DATE') > 0)
{
// DATE VALUES
$gen_search = $val;
if(wdk_is_date($val))
{
$gen_search = wdk_normalize_date_db($gen_search, 'Y-m-d H:i:s', 'Y-m-d');
$gen_q.=$col_name." LIKE '%".$gen_search."%' AND ";
}
else
{
$gen_q.=$col_name." LIKE '%".$gen_search."%' AND ";
}
}
else if(substr_count($key, 'is_') > 0)
{
// CHECKBOXES
if($val=='on')
{
$gen_search = 1;
$gen_q.=$col_name." LIKE '%".$gen_search."%' AND ";
}
else if($val=='off')
{
$gen_q.=$col_name." IS NULL AND ";
}
}
elseif($key == 'agents_ids')
{
if(is_string($val) && strpos($val, ',') !== FALSE){
$val =explode(',', $val);
} elseif(is_string($val)){
$val =array($val);
}
if(is_array($val)) {
$WMVC->db->join($WMVC->db->prefix.'wdk_listings_users ON '.$WMVC->db->prefix.'posts.ID = '.$WMVC->db->prefix.'wdk_listings_users.post_id', NULL, 'LEFT');
$WMVC->db->distinct($WMVC->listing_m->_table_name.'.post_id');
$sql_search = '';
foreach ($val as $v) {
if(empty($v)) continue;
if(!empty($sql_search))
$sql_search .= " OR ";
$sql_search .=" ".$WMVC->listing_m->_table_name.".`user_id_editor` = ".intval($v)." OR `".$WMVC->db->prefix."wdk_listings_users`.`user_id` = ".intval($v)." ";
}
if(!empty($sql_search))
$gen_q.=" ( ".$sql_search." ) AND ";
} elseif(is_string($val) && !empty($val)) {
$WMVC->db->join($WMVC->db->prefix.'wdk_listings_users ON '.$WMVC->db->prefix.'posts.post_id = '.$WMVC->db->prefix.'wdk_listings_users.post_id', NULL, 'LEFT');
$WMVC->db->distinct($WMVC->listing_m->_table_name.'.post_id');
$sql_search =" ".$WMVC->listing_m->_table_name.".`user_id_editor` = ".intval($val)." OR `".$WMVC->db->prefix."wdk_listings_users`.`user_id` = ".intval($val)." ";
$gen_q.=" ( ".$sql_search." ) AND ";
}
}
elseif($key == 'user_editor_ids')
{
if(is_array($val)) {
$sql_search = '';
foreach ($val as $v) {
if(empty($v)) continue;
if(!empty($sql_search))
$sql_search .= " OR ";
$sql_search .=" ".$WMVC->listing_m->_table_name.".`user_id_editor` = ".intval($v)." ";
}
if(!empty($sql_search))
$gen_q.=" ( ".$sql_search." ) AND ";
} elseif(is_string($val) && !empty($val)) {
$sql_search =" ".$WMVC->listing_m->_table_name.".`user_id_editor` = ".intval($val)." ";
$gen_q.=" ( ".$sql_search." ) AND ";
}
}
elseif($key == 'location_id')
{
if(empty($val)) continue;
if(is_string($val) && strpos($val, ',') !== FALSE){
$val =explode(',', $val);
} elseif(is_string($val)){
$val =array($val);
}
if(is_array($val)) {
if(false){
$WMVC->db->join($WMVC->db->prefix.'wdk_listings_locations ON '.$WMVC->listing_m->_table_name.'.post_id = '.$WMVC->db->prefix.'wdk_listings_locations.post_id', NULL, 'LEFT');
$WMVC->db->distinct($WMVC->listing_m->_table_name.'.post_id');
}
$sql_search = '';
foreach ($val as $v) {
if(empty($v) || !is_intval($v)) continue;
if(!empty($sql_search))
$sql_search .= " OR ";
$sql_search .= " ".$WMVC->listing_m->_table_name.".`location_id`=".intval($v)."";
$sql_search .= " OR `location_table`.`parent_id`=".intval($v)."";
$sql_search .= " OR CONCAT(',', location_table.parent_path, ',') LIKE CONCAT('%,', ".intval($v).", ',%')";
/* other locations */
/* multi select */
if(false){
$sql_search .= " OR `".$WMVC->db->prefix."wdk_listings`.`post_id` IN (SELECT `post_id` FROM `".$WMVC->db->prefix."wdk_listings_locations` WHERE `location_id` = ".intval($v).") ";
} elseif(false) {
$sql_search .= " OR ".$WMVC->db->prefix."wdk_listings_locations.location_id=".intval($v)."";
} else {
$sql_search .= " OR ".$WMVC->listing_m->_table_name.".locations_list LIKE '%,".intval($v).",%'";
}
}
if(!empty($sql_search))
$gen_q.=" ( ".$sql_search." ) AND ";
}
}
elseif($key == 'category_id')
{
if(empty($val)) continue;
if(is_string($val) && strpos($val, ',') !== FALSE){
$val =explode(',', $val);
} elseif(is_string($val)){
$val =array($val);
}
if(is_array($val)) {
if(false){
$WMVC->db->join($WMVC->db->prefix.'wdk_listings_categories ON '.$WMVC->listing_m->_table_name.'.post_id = '.$WMVC->db->prefix.'wdk_listings_categories.post_id', NULL, 'LEFT');
}
$sql_search = '';
foreach ($val as $v) {
if(empty($v) || !is_intval($v)) continue;
if(!empty($sql_search))
$sql_search .= " OR ";
$sql_search .= " ".$WMVC->db->prefix."wdk_listings.`category_id` = ".intval($v)."";
$sql_search .= " OR `category_table`.`parent_id`=".intval($v)."";
$sql_search .= " OR CONCAT(',', category_table.parent_path, ',') LIKE CONCAT('%,', ".intval($v).", ',%')";
/* other categories */
if(false){
$sql_search .= " OR `".$WMVC->db->prefix."wdk_listings`.`post_id` IN (SELECT `post_id` FROM `".$WMVC->db->prefix."wdk_listings_categories` WHERE `category_id` = ".intval($v).")";
} elseif(false) {
$sql_search .= " OR ".$WMVC->db->prefix."wdk_listings_categories.category_id=".intval($v)."";
} else {
$sql_search .= " OR ".$WMVC->listing_m->_table_name.".categories_list LIKE '%,".intval($v).",%'";
}
}
if(!empty($sql_search))
$gen_q.=" ( ".$sql_search." ) AND ";
}
}
elseif(is_string($val))
{
if(strpos($val, ',') !== FALSE){
$val = explode(',', $val);
}
if(is_array($val)) {
$sql_search = '';
foreach ($val as $v) {
if(empty($v)) continue;
if(!empty($sql_search))
$sql_search .= " OR ";
$sql_search .= $col_name." LIKE '%".$v."%'";
}
if(!empty($sql_search))
$gen_q.=" ( ".$sql_search." ) AND ";
} else {
$gen_q.=$col_name." LIKE '%".$val."%' AND ";
}
}
elseif(is_array($val))
{
$sql_search = '';
foreach ($val as $v) {
if(empty($v)) continue;
if(!empty($sql_search))
$sql_search .= " OR ";
$sql_search .= " ".$col_name." LIKE '%".esc_sql($v)."%' ";
}
if(!empty($sql_search))
$gen_q.=" ( ".$sql_search." ) AND ";
}
} elseif ($val == 0) {
$col_name = $key;
$val = esc_sql($val);
if(in_array($col_name, ['`rank`'])) {
$gen_q.=" ( ".$col_name." = 0 OR ".$col_name." IS NULL ) AND ";
}
}
}
$gen_q = substr($gen_q, 0, -5);
if(!empty($gen_q))
$WMVC->db->where("($gen_q)");
}
//if(defined( 'WP_DEBUG' ) && WP_DEBUG)
if(function_exists('pll_current_language'))
{
$lang_term_id = pll_current_language('term_id');
if(is_numeric($lang_term_id))
{
//echo $lang_term_id.'
';
$WMVC->db->join($WMVC->db->prefix.'term_relationships ON '.$WMVC->db->prefix.'posts.ID = '.$WMVC->db->prefix.'term_relationships.object_id', NULL, NULL);
$WMVC->db->where("({$WMVC->db->prefix}term_relationships.term_taxonomy_id = $lang_term_id)");
}
}
// [RECTANGLE SEARCH]
if(isset($_GET_clone['rectangle_ne']) && isset($_GET_clone['rectangle_sw']))
{
if(wdk_is_gps($_GET_clone['rectangle_ne']) && wdk_is_gps($_GET_clone['rectangle_sw'])) {
$gps_ne = explode(',', $_GET_clone['rectangle_ne']);
$gps_sw = explode(',', $_GET_clone['rectangle_sw']);
$WMVC->db->where("(".$WMVC->db->prefix."wdk_listings.lat < '$gps_ne[0]' AND ".$WMVC->db->prefix."wdk_listings.lat > '$gps_sw[0]' AND
".$WMVC->db->prefix."wdk_listings.lng > '$gps_ne[1]' AND ".$WMVC->db->prefix."wdk_listings.lng < '$gps_sw[1]')");
}
}
// [/RECTANGLE SEARCH]
// order
if (isset($_GET_clone['order_by'])) {
// Merge available fields + system columns
$order_columns = array_fill_keys([
'post_id',
'counter_views',
'date_modified',
'post_title',
'address',
'category_id',
'location_id',
'rank'
], true);
$order_columns = apply_filters('wdk/listings/order_columns', $order_columns);
$_GET_clone['order_by'] = str_replace(
'post_id',
$WMVC->db->prefix . 'wdk_listings.post_id',
sanitize_text_field($_GET_clone['order_by'])
);
// Fix common typos: ask → asc, desk → desc
$_GET_clone['order_by'] = str_ireplace([' ask', ' desk'], [' asc', ' desc'], $_GET_clone['order_by']);
/* we no need field type in get link now */
$_GET_clone['order_by'] = str_ireplace(['_NUMBER', '_SECTION', '_TEXTAREA', '_DATE', '_DROPDOWN', '_DROPDOWNMULTIPLE', '_CHECKBOX'], '', $_GET_clone['order_by']);
// Parse order_by string into parts
$order_by_array = explode(',', $_GET_clone['order_by']);
$final_order_by = [];
foreach ($order_by_array as $order_part) {
$order_part = trim($order_part);
// detect direction asc/desc
$direction = 'DESC';
if (stripos($order_part, ' asc') !== false) {
$direction = 'ASC';
} elseif (stripos($order_part, ' desc') !== false) {
$direction = 'DESC';
}
$order_part = str_ireplace(['desc', 'asc'], '', $order_part);
$order_part = str_replace(' ', '', $order_part);
// Try to detect field_(id)
if (preg_match('/field_(\d+)\b/', $order_part, $matches)) {
$search_field_id = $matches[1];
if (!empty($fields_type[$search_field_id])) {
$field_name = "field_{$search_field_id}_{$fields_type[$search_field_id]}";
// Check if field exists in order_columns
if (isset($available_fields_listings[$field_name])) {
$final_order_by[] = $field_name . ' ' . $direction;
}
}
// else → skip invalid field automatically
} else {
// Extract only the part after the last '.' if exists, else use entire string
$col_field = $order_part;
if (strpos($col_field, '.') !== false) {
$parts = explode('.', $col_field);
$col_field = end($parts);
}
// Check if field exists in order_columns
if (isset($order_columns[$col_field]) || isset($available_fields_listings[$col_field])) {
$final_order_by[] = $order_part . ' ' . $direction;
}
}
}
// Apply final order if any valid fields left
if (!empty($final_order_by)) {
$_GET_clone['order_by'] = implode(', ', $final_order_by);
$WMVC->db->order_by($_GET_clone['order_by']);
} else {
$WMVC->db->order_by('');
}
}
}
}
function wdk_users_prepare_search_query_GET($columns = array(), $model_name = NULL, $external_columns = array(), $custom_parameters = array(), $skip_postget = FALSE)
{
global $Winter_MVC_WDK;
$WMVC = &$Winter_MVC_WDK;
$_GET_clone = array();
if(!$skip_postget)
$_GET_clone = array_merge($_GET, $_POST);
if(isset($custom_parameters['order_by'])) {
if(isset($_GET_clone['order_by']) && !empty($_GET_clone['order_by'])) {
$_GET_clone['order_by'] = $custom_parameters['order_by'].', '.sanitize_text_field($_GET_clone['order_by']);
} else {
$_GET_clone['order_by'] = $custom_parameters['order_by'];
}
unset($custom_parameters['order_by']);
}
if(!empty($custom_parameters))
$_GET_clone = array_merge($_GET_clone, $custom_parameters);
$WMVC->model($model_name);
$smart_search = '';
if(isset($_GET_clone['profile_search']))
$smart_search = wdk_esc_sql(sanitize_text_field($_GET_clone['profile_search']));
$available_fields = array('user_login','user_nicename','user_email','user_url','display_name');
if(isset($_GET_clone['is_activated'])){
$_GET_clone[$WMVC->$model_name->_table_name.'.is_activated'] = sanitize_text_field($_GET_clone['is_activated']);
unset($_GET_clone['is_activated']);
}
if(isset($_GET_clone['is_approved'])){
$_GET_clone[$WMVC->$model_name->_table_name.'.is_approved'] = sanitize_text_field($_GET_clone['is_approved']);
unset($_GET_clone['is_approved']);
}
//$table_name = substr($model_name, 0, -2);
$columns_original = array();
foreach($columns as $key=>$val)
{
$columns_original[$val] = $val;
// if column contain also "table_name.*"
$splited = explode('.', $val);
if(wmvc_count($splited) == 2)
$val = $splited[1];
if(isset($available_fields[$val]))
{
}
else
{
if(!in_array($columns[$key], $external_columns))
{
unset($columns[$key]);
}
}
}
if(wmvc_count($_GET_clone) > 0)
{
unset($_GET_clone['search']);
// For quick/smart search
if(wmvc_count($columns) > 0 && !empty($smart_search))
{
$gen_q = '';
foreach($columns as $key=>$value)
{
if($value == 'post_type')
{
$value = $WMVC->$model_name->_table_name.'.'.$value;
}
if(substr_count($value, 'id') > 0 && is_numeric($smart_search))
{
$gen_q.="$value = $smart_search OR ";
}
else if(substr_count($value, 'date') > 0)
{
//$gen_search = wmvc_generate_slug($smart_search, ' ');
$gen_search = $smart_search;
$gen_q.="$value LIKE '%$gen_search%' OR ";
}
else
{
$gen_q.="$value LIKE '%$smart_search%' OR ";
}
}
$gen_q = substr($gen_q, 0, -4);
if(!empty($gen_q))
$WMVC->db->where("($gen_q)");
}
// For column search
if(isset($_GET_clone))
{
$gen_q = '';
foreach($_GET_clone as $key=>$val)
{
if(!empty($val) && in_array($key, $columns))
{
$col_name = $key;
if($col_name == 'post_type')
{
$col_name = $WMVC->$model_name->_table_name.'.'.$col_name;
}
//if(isset($key))
// $col_name = $key;
if(strpos($key, 'skip') !== FALSE) continue;
if(substr($key, -8) == '_exactly')
{
$col_name = substr($key, 0, -8);
$gen_q.=$col_name." = '".$val."' AND ";
}
elseif(substr($key, -4) == '_max')
{
$col_name = substr($key, 0, -4);
$gen_q.=$col_name." <= '".$val."' AND ";
}
else if(substr($key, -4) == '_min')
{
$col_name = substr($key, 0, -4);
$gen_q.=$col_name." >= '".$val."' AND ";
}
elseif(substr_count($key, 'id') > 0 && is_numeric($val))
{
// ID is always numeric
$gen_q.=$col_name." = ".$val." AND ";
}
else if(substr_count($key, 'date') > 0)
{
// DATE VALUES
$gen_search = $val;
if(wdk_is_date($val))
{
$gen_search = wdk_normalize_date_db($gen_search);
$gen_q.=$col_name." > '".$gen_search."' AND ";
}
else
{
$gen_q.=$col_name." LIKE '%".$gen_search."%' AND ";
}
}
else if(substr_count($key, 'is_') > 0)
{
// CHECKBOXES
if($val=='on')
{
$gen_search = 1;
$gen_q.=$col_name." LIKE '%".$gen_search."%' AND ";
}
else if($val=='off')
{
$gen_q.=$col_name." IS NULL AND ";
}
}
else
{
$gen_q.=$col_name." LIKE '%".$val."%' AND ";
}
}
}
$gen_q = substr($gen_q, 0, -5);
if(!empty($gen_q))
$WMVC->db->where("($gen_q)");
}
// order
if(isset($_GET_clone['order_by']))
{
$_GET_clone['order_by'] = str_replace('post_id', $WMVC->db->prefix.'wdk_favorite.post_id', $_GET_clone['order_by']);
$WMVC->db->order_by(wdk_esc_sql(sanitize_text_field($_GET_clone['order_by'])));
}
}
}
function wdk_messages_prepare_search_query_GET($columns = array(), $model_name = NULL, $external_columns = array())
{
global $Winter_MVC_WDK;
$WMVC = &$Winter_MVC_WDK;
$_GET_clone = array_merge($_GET, $_POST);
$_GET_clone = ($_GET_clone);
//$WMVC->model('listing_m');
$smart_search = '';
if(isset($_GET_clone['search']))
$smart_search = wdk_esc_sql(sanitize_text_field($_GET_clone['search']));
$available_fields = $WMVC->$model_name->get_available_fields();
/* Пet column names from wdk_package and add to allow search +
in _GET_clone replace field_#id to field_id_TYPE*/
$list_fields = $WMVC->db->list_fields( $WMVC->db->prefix.'wdk_messages');
//$table_name = substr($model_name, 0, -2);
$columns_original = array();
foreach($columns as $key=>$val)
{
$columns_original[$val] = $val;
// if column contain also "table_name.*"
$splited = explode('.', $val);
if(wmvc_count($splited) == 2)
$val = $splited[1];
if(isset($available_fields[$val]))
{
}
else
{
if(!in_array($columns[$key], $external_columns))
{
unset($columns[$key]);
}
}
}
if(wmvc_count($_GET_clone) > 0)
{
unset($_GET_clone['search']);
// For quick/smart search
if(wmvc_count($columns) > 0 && !empty($smart_search))
{
$gen_q = '';
foreach($columns as $key=>$value)
{
if(substr_count($value, 'id') > 0 && is_numeric($smart_search))
{
$gen_q.="$value = $smart_search OR ";
}
else if(substr_count($value, 'date') > 0)
{
//$gen_search = wmvc_generate_slug($smart_search, ' ');
$gen_search = $smart_search;
$gen_q.="$value LIKE '%$gen_search%' OR ";
}
else
{
$gen_q.="$value LIKE '%$smart_search%' OR ";
}
}
$gen_q = substr($gen_q, 0, -4);
if(!empty($gen_q))
$WMVC->db->where("($gen_q)");
}
// For column search
if(isset($_GET_clone))
{
$gen_q = '';
foreach($_GET_clone as $key=>$val)
{
if(!empty($val) && in_array($key, $columns))
{
$col_name = $key;
//if(isset($key))
// $col_name = $key;
if(strpos($key, 'skip') !== FALSE) continue;
if(substr($key, -8) == '_exactly')
{
$col_name = substr($key, 0, -8);
$gen_q.=$col_name." = '".$val."' AND ";
}
elseif(substr($key, -4) == '_max')
{
$col_name = substr($key, 0, -4);
$gen_q.=$col_name." <= '".$val."' AND ";
}
else if(substr($key, -4) == '_min')
{
$col_name = substr($key, 0, -4);
$gen_q.=$col_name." >= '".$val."' AND ";
}
elseif(substr_count($key, 'id') > 0 && is_numeric($val))
{
// ID is always numeric
$gen_q.=$col_name." = ".$val." AND ";
}
else if(substr_count($key, 'date') > 0)
{
// DATE VALUES
$gen_search = $val;
$detect_date = strtotime($gen_search);
if(wdk_payments_is_date($val) && $detect_date > 1000)
{
$gen_search = date('Y-m-d H:i:s', $detect_date);
$gen_q.=$col_name." > '".$gen_search."' AND ";
}
else
{
$gen_q.=$col_name." LIKE '%".$gen_search."%' AND ";
}
}
else if(substr_count($key, 'is_') > 0)
{
// CHECKBOXES
if($val=='on')
{
$gen_search = 1;
$gen_q.=$col_name." LIKE '%".$gen_search."%' AND ";
}
else if($val=='off')
{
$gen_q.=$col_name." IS NULL AND ";
}
}
else
{
$gen_q.=$col_name." LIKE '%".$val."%' AND ";
}
}
}
$gen_q = substr($gen_q, 0, -5);
if(!empty($gen_q))
$WMVC->db->where("($gen_q)");
}
// order
if(isset($_GET_clone['order_by']))
{
$_GET_clone['order_by'] = str_replace('post_id', $WMVC->db->prefix.'wdk_messages.post_id', $_GET_clone['order_by']);
$WMVC->db->order_by(wdk_esc_sql(sanitize_text_field($_GET_clone['order_by'])));
}
}
}
function wdk_date() {
$date_format = get_option('date_format');
$time_format = get_option('time_format');
$date = date("{$date_format} {$time_format}", current_time('timestamp'));
return $date;
}
if(!function_exists('wdk_placeholder_image_src')) {
function wdk_placeholder_image_src () {
$i = WPDIRECTORYKIT_URL.'public/img/placeholder.jpg';
if(wdk_get_option('wdk_placeholder')) {
$image = wp_get_attachment_image_src(wdk_get_option('wdk_placeholder'), 'full' );
if(!empty($image) && file_exists(str_replace(WP_CONTENT_URL, WP_CONTENT_DIR, $image[0])))
$i = $image[0];
}
return $i;
}
}
function wdk_wp_frontend_paginate($total_items, $per_page = 10, $page_var = 'wmvc_paged', $texts = array(), $enable_latest_first = TRUE, $enable_count = FALSE, $enable_compact = FALSE, $limit_items = 1)
{
$current_page = 1;
if(isset($_GET[$page_var]))
$current_page = intval(wmvc_xss_clean($_GET[$page_var]));
if(!isset($texts['previous_page']))$texts['previous_page'] = esc_html__('Previous page', 'wpdirectorykit');
if(!isset($texts['next_page']))$texts['next_page'] = esc_html__('Next page', 'wpdirectorykit');
if(!isset($texts['first_page']))$texts['first_page'] = '';
if(!isset($texts['last_page']))$texts['last_page'] = '';
if(!isset($texts['items']))$texts['items'] = esc_html__('items', 'wpdirectorykit');
if(empty($current_page))$current_page = 1;
// get url
$url = strtok(wdk_server_current_url(), '?');
$qs_parameters = wmvc_xss_clean( $_GET );
unset($qs_parameters[$page_var]);
$qs_part = http_build_query($qs_parameters);
$url = wdk_url_suffix($url, $qs_part);
// total pages
$total_pages = intval($total_items/$per_page+0.99);
if($current_page == 1) {
$limit_items = $limit_items * 2;
}
if($current_page == $total_pages) {
$limit_items = $limit_items * 2;
}
$output = '';
return $output;
}
function wdk_viewe($content) {
// @codingStandardsIgnoreStart
echo wp_kses_post($content); // WPCS: XSS ok, sanitization ok.
// @codingStandardsIgnoreEnd
}
if(!function_exists('wdk_search_fields_toggle')){
function wdk_search_fields_toggle ($class_add = NULL){
static $wdk_visible_filters = 0;
global $wdk_visible_filters_limit;
global $wdk_button_search_defined;
global $wdk_enable_search_fields_toggle;
global $wdk_activate_more;
if(!$wdk_enable_search_fields_toggle) return false;
global $wdk_search_fields_toggle_reset;
if($wdk_search_fields_toggle_reset) {
$wdk_visible_filters = 0;
$wdk_search_fields_toggle_reset = false;
}
$wdk_visible_filters++;
if($wdk_activate_more || (!empty($wdk_visible_filters_limit) && !$wdk_button_search_defined && $wdk_visible_filters == $wdk_visible_filters_limit)){
$wdk_button_search_defined=true;
$wdk_activate_more = false;
global $wdk_text_search_button;
if(empty($wdk_text_search_button))
$wdk_text_search_button = esc_html__('Search','wpdirectorykit');
global $wdk_text_reset_button;
if(empty($wdk_text_reset_button))
$wdk_text_reset_button = esc_html__('Reset','wpdirectorykit');
global $wdk_text_more_button;
if(empty($wdk_text_more_button))
$wdk_text_more_button = esc_html__('More','wpdirectorykit');
$form_closed = 'display: none;';
if(isset($_GET['wdk_search_additional_opened']) && wmvc_xss_clean($_GET['wdk_search_additional_opened']) == 1) {
$form_closed = '';
}
?>