function widget($args, $instance)
 {
     $price_min = PropertiesManager::getPriceMin();
     $price_max = PropertiesManager::getPriceMax();
     $types = PropertiesManager::getAllTypes();
     $types_selected = array();
     $types_filtered = array();
     $features = PropertiesManager::getAllFeatures();
     $features_selected = array();
     $features_filtered = array();
     if (isset($_GET['feature'])) {
         $features_selected = explode(',', $_GET['feature']);
     }
     $features_filtered = PropertiesManager::getFeaturesFiltered($_GET);
     if (isset($_GET['type'])) {
         $types_selected = explode(',', $_GET['type']);
     }
     $types_filtered = PropertiesManager::getTypesFiltered($_GET);
     if (isset($_GET['price'])) {
         $price = explode(',', $_GET['price']);
         $price_min_value = $price[0];
         $price_max_value = $price[1];
     } else {
         if (isset($_GET['min_price'])) {
             $price_min_value = $_GET['min_price'];
         } else {
             $price_min_value = $price_min;
         }
         if (isset($_GET['max_price'])) {
             $price_max_value = $_GET['max_price'];
         } else {
             $price_max_value = $price_max;
         }
     }
     $bedrooms_min = $bedrooms_min_value = 0;
     $bedrooms_max = $bedrooms_max_value = 20;
     if (isset($_GET['bedrooms'])) {
         if (strpos($_GET['bedrooms'], ',') !== false) {
             $bedrooms = explode(',', $_GET['bedrooms']);
             $bedrooms_min_value = $bedrooms[0];
             $bedrooms_max_value = $bedrooms[1];
         } else {
             $bedrooms_min_value = $_GET['bedrooms'];
         }
     }
     $bathrooms_min = $bathrooms_min_value = 0;
     $bathrooms_max = $bathrooms_max_value = 20;
     if (isset($_GET['bathrooms'])) {
         if (strpos($_GET['bathrooms'], ',') !== false) {
             $bathrooms = explode(',', $_GET['bathrooms']);
             $bathrooms_min_value = $bathrooms[0];
             $bathrooms_max_value = $bathrooms[1];
         } else {
             $bathrooms_min_value = $_GET['bathrooms'];
         }
     }
     $sq_feet_min = $sq_feet_min_value = 0;
     $sq_feet_max = $sq_feet_max_value = PropertiesManager::getSqFeetMax();
     if (isset($_GET['sq_feet'])) {
         if (strpos($_GET['sq_feet'], ',') !== false) {
             $sq_feet = explode(',', $_GET['sq_feet']);
             $sq_feet_min_value = $sq_feet[0];
             $sq_feet_max_value = $sq_feet[1];
         } else {
             $sq_feet_min_value = $_GET['sq_feet'];
         }
     }
     $year_built_min = $year_built_min_value = PropertiesManager::getYearBuiltMin();
     $year_built_max = $year_built_max_value = date('Y');
     if (isset($_GET['year_built'])) {
         $years = explode(',', $_GET['year_built']);
         $year_built_min_value = $years[0];
         $year_built_max_value = $years[1];
     }
     $main_properties_page = estetico_get_properties_page_id();
     $reset_url = estetico_get_properties_page_url_wpml($main_properties_page);
     $args = array('price_min' => $price_min, 'price_max' => $price_max, 'price_min_value' => $price_min_value, 'price_max_value' => $price_max_value, 'bedrooms_min' => $bedrooms_min, 'bedrooms_max' => $bedrooms_max, 'bedrooms_min_value' => $bedrooms_min_value, 'bedrooms_max_value' => $bedrooms_max_value, 'bathrooms_min' => $bathrooms_min, 'bathrooms_max' => $bathrooms_max, 'bathrooms_min_value' => $bathrooms_min_value, 'bathrooms_max_value' => $bathrooms_max_value, 'year_built_min' => $year_built_min, 'year_built_max' => $year_built_max, 'year_built_min_value' => $year_built_min_value, 'year_built_max_value' => $year_built_max_value, 'sq_feet_min' => $sq_feet_min, 'sq_feet_max' => $sq_feet_max, 'sq_feet_min_value' => $sq_feet_min_value, 'sq_feet_max_value' => $sq_feet_max_value, 'types' => $types, 'types_filtered' => $types_filtered, 'types_selected' => $types_selected, 'features' => $features, 'features_selected' => $features_selected, 'features_filtered' => $features_filtered, 'distance' => isset($_GET['distance']) ? $_GET['distance'] : 0, 'city' => isset($_GET['city']) ? $_GET['city'] : '', 'beds' => isset($_GET['beds']) ? $_GET['beds'] : 0, 'location_latitude' => isset($_GET['lat']) ? $_GET['lat'] : '', 'location_longitude' => isset($_GET['lng']) ? $_GET['lng'] : '', 'location' => isset($_GET['location']) ? $_GET['location'] : '', 'distances_config' => explode(',', estetico_get_setting('distances')), 'keywords' => isset($_GET['keywords']) ? $_GET['keywords'] : '', 'for_sale_rent' => isset($_GET['for_sale_rent']) ? $_GET['for_sale_rent'] : 'both', 'property_status' => isset($_GET['property_status']) ? $_GET['property_status'] : '', 'pets_allowed' => isset($_GET['pets_allowed']) ? $_GET['pets_allowed'] : '', 'reset_url' => $reset_url);
     estetico_load_component('widgets/properties_filter', $args);
 }
function add_shortcodes_post_init()
{
    $features = PropertiesManager::getAllFeatures();
    $features_array = array();
    foreach ($features as $feature) {
        $features_array[$feature->name] = $feature->slug;
    }
    $types = PropertiesManager::getAllTypes();
    $types_array = array();
    foreach ($types as $type) {
        $types_array[$type->name] = $type->slug;
    }
    $cities = array('-' => '');
    $_cities = estetico_get_all_cities();
    foreach ($_cities as $_city) {
        $cities[$_city] = $_city;
    }
    unset($_cities, $_city);
    if (function_exists('vc_map')) {
        vc_map(array("name" => __('Properties', THEME_NAME), "base" => 'properties', 'category' => __('Estetico'), 'params' => array(array("type" => 'dropdown', 'param_name' => 'list_style', 'heading' => __('Style', THEME_NAME), "value" => array(__('Grid', THEME_NAME) => 'grid', __('List', THEME_NAME) => 'list', __('Carousel', THEME_NAME) => 'carousel', __('Map', THEME_NAME) => 'map', __('List + Map', THEME_NAME) => 'list_map', __('Grid + Map', THEME_NAME) => 'grid_map'), "description" => __('Choose the style your properties will be visualized to the visitors', THEME_NAME)), array("type" => 'dropdown', 'param_name' => 'sort_by', 'heading' => __('Sort by', THEME_NAME), "value" => array(__('None', THEME_NAME) => 'none', __('Price (low to high)', THEME_NAME) => 'price_low_to_high', __('Price (high to low)', THEME_NAME) => 'price_high_to_low', __('View count (low to high)', THEME_NAME) => 'view_count_low_to_high', __('View count (high to low)', THEME_NAME) => 'view_count_high_to_low', __('Date (low to high)', THEME_NAME) => 'date_low_to_high', __('Date (high to low)', THEME_NAME) => 'date_low_to_high'), "description" => __('Choose how to sort properties', THEME_NAME)), array("type" => 'textfield', 'param_name' => 'min_price', 'heading' => __('Price minimum', THEME_NAME)), array("type" => 'textfield', 'param_name' => 'max_price', 'heading' => __('Price maximum', THEME_NAME)), array("type" => 'textfield', 'param_name' => 'bedrooms_min', 'heading' => __('Bedrooms minimum', THEME_NAME)), array("type" => 'textfield', 'param_name' => 'bedrooms_max', 'heading' => __('Bedrooms maximum', THEME_NAME)), array("type" => 'textfield', 'param_name' => 'bathrooms_min', 'heading' => __('Bathrooms minimum', THEME_NAME)), array("type" => 'textfield', 'param_name' => 'bathrooms_max', 'heading' => __('Bathrooms maximum', THEME_NAME)), array("type" => 'textfield', 'param_name' => 'sq_feet', 'heading' => __('Sq. feet', THEME_NAME), 'description' => __('Will display properties will area equal or larger than this value', THEME_NAME)), array("type" => 'checkbox', 'param_name' => 'pets_allowed', 'heading' => __('Pets allowed', THEME_NAME), 'value' => array(__('Yes') => 'yes'), 'description' => __('Will show properties that have either pets allowed or not.', THEME_NAME)), array("type" => 'checkbox', 'param_name' => 'type', 'heading' => __('Type', THEME_NAME), 'value' => $types_array), array("type" => 'checkbox', 'param_name' => 'feature', 'heading' => __('Feature', THEME_NAME), 'value' => $features_array), array("type" => 'dropdown', 'param_name' => 'city', 'heading' => __('City', THEME_NAME), 'value' => $cities), array("type" => 'dropdown', 'param_name' => 'for_sale_rent', 'heading' => __('For sale or rent', THEME_NAME), 'value' => array('-' => '', __('Sale', THEME_NAME) => 'sale', __('Rent', THEME_NAME) => 'rent'), 'description' => __('If you don\'t choose an option both will be shown', THEME_NAME)), array("type" => 'dropdown', 'param_name' => 'property_status', 'heading' => __('Property status', THEME_NAME), 'value' => array('' => '', __('Sold', THEME_NAME) => 'sold', __('Rented', THEME_NAME) => 'rented', __('Let agreed', THEME_NAME) => 'let_agreed', __('Sale agreed', THEME_NAME) => 'sale_agreed')), array("type" => 'textfield', 'param_name' => 'lat', 'heading' => __('Latitude', THEME_NAME)), array("type" => 'textfield', 'param_name' => 'lng', 'heading' => __('Longitude', THEME_NAME)), array("type" => 'textfield', 'param_name' => 'distance', 'heading' => __('Distance', THEME_NAME)), array("type" => 'checkbox', 'param_name' => 'auto_slide', 'heading' => __('Auto slide', THEME_NAME), 'value' => array(__('Yes') => 'yes'), 'description' => __('Automatically slide properties in the carousel. It applies only for carousel style.', THEME_NAME)), array("type" => 'checkbox', 'param_name' => 'infinite_loop', 'heading' => __('Infinite slide', THEME_NAME), 'value' => array(__('Yes') => 'yes'), 'description' => __('Infinitely slide properties in the carousel. It applies only for carousel style.', THEME_NAME)))));
    }
}