/** * Performs front-end pre-header functionality * * - This function is not called on admin side. * - Loads conditional CSS styles. * - Determines if page is single property or property overview. * * @since 1.11 */ public function template_redirect() { global $post, $property, $wp_query, $wp_properties, $wp_styles, $wpp_query; /** * HACK. * @see self::parse_request(); * @author peshkov@UD */ if (get_query_var('_fix_to_page_template')) { $wp_query->is_single = false; $wp_query->is_page = true; } wp_localize_script('wpp-localization', 'wpp', array('instance' => $this->get_instance())); //** Load global wp-property script on all frontend pages */ wp_enqueue_script('wp-property-global'); if (apply_filters('wpp::custom_styles', false) === false) { //** Possibly load essential styles that are used in widgets */ wp_enqueue_style('wp-property-frontend'); //** Possibly load theme specific styles */ wp_enqueue_style('wp-property-theme-specific'); } if (!isset($wp_properties['configuration']['do_not_enable_text_widget_shortcodes']) || $wp_properties['configuration']['do_not_enable_text_widget_shortcodes'] != 'true') { add_filter('widget_text', 'do_shortcode'); } do_action('wpp_template_redirect'); //** Handle single property page previews */ if (!empty($wp_query->query_vars['preview']) && $post->post_type == "property" && $post->post_status == "publish") { wp_redirect(get_permalink($post->ID)); die; } /* (count($wp_query->posts) < 2) added post 1.31.1 release */ /* to avoid taxonomy archives from being broken by single property pages */ if (isset($post) && count($wp_query->posts) < 2 && ($post->post_type == "property" || isset($wp_query->is_child_property))) { $wp_query->single_property_page = true; //** This is a hack and should be done better */ if (!$post) { $post = get_post($wp_query->queried_object_id); $wp_query->posts[0] = $post; $wp_query->post = $post; } } //** If viewing root property page that is the default dynamic page. */ if (isset($wp_query->wpp_default_property_page)) { $wp_query->is_property_overview = true; } //** If this is the root page with a manually inserted shortcode, or any page with a PO shortcode */ if (isset($post) && strpos($post->post_content, "property_overview")) { $wp_query->is_property_overview = true; } //** If this is the root page and the shortcode is automatically inserted */ if (isset($wp_query->wpp_root_property_page) && $wp_properties['configuration']['automatically_insert_overview'] == 'true') { $wp_query->is_property_overview = true; } //** If search result page, and system not explicitly configured to not include PO on search result page automatically */ if (isset($wp_query->wpp_search_page) && (!isset($wp_properties['configuration']['do_not_override_search_result_page']) || $wp_properties['configuration']['do_not_override_search_result_page'] != 'true')) { $wp_query->is_property_overview = true; } //** Scripts and styles to load on all overview and single listing pages */ if (isset($wp_query->single_property_page) || isset($wp_query->is_property_overview)) { // Check for and load conditional browser styles $conditional_styles = apply_filters('wpp_conditional_style_slugs', array('IE', 'IE 7', 'msie')); foreach ($conditional_styles as $type) { // Fix slug for URL $url_slug = strtolower(str_replace(" ", "_", $type)); if (file_exists(STYLESHEETPATH . "/wp_properties-{$url_slug}.css")) { wp_register_style('wp-property-frontend-' . $url_slug, get_bloginfo('stylesheet_directory') . "/wp_properties-{$url_slug}.css", array('wp-property-frontend'), '1.13'); } elseif (file_exists(TEMPLATEPATH . "/wp_properties-{$url_slug}.css")) { wp_register_style('wp-property-frontend-' . $url_slug, get_bloginfo('template_url') . "/wp_properties-{$url_slug}.css", array('wp-property-frontend'), '1.13'); } elseif (file_exists(WPP_URL . "styles/wp_properties-{$url_slug}.css") && $wp_properties['configuration']['autoload_css'] == 'true') { wp_register_style('wp-property-frontend-' . $url_slug, WPP_URL . "styles/wp_properties-{$url_slug}.css", array('wp-property-frontend'), WPP_Version); } // Mark every style as conditional $wp_styles->add_data('wp-property-frontend-' . $url_slug, 'conditional', $type); wp_enqueue_style('wp-property-frontend-' . $url_slug); } } //** Scripts loaded only on single property pages */ if (isset($wp_query->single_property_page)) { WPP_F::console_log('Including scripts for all single property pages.'); WPP_F::load_assets(array('single')); do_action('template_redirect_single_property'); add_action('wp_head', create_function('', "do_action('wp_head_single_property'); ")); $property = (array) WPP_F::get_property($post->ID, "load_gallery=true"); $property_type = !empty($property['property_type']) ? $property['property_type'] : false; // Redirect to parent if property type is non-public. if (isset($wp_properties['redirect_to_parent']) && is_array($wp_properties['redirect_to_parent']) && in_array($property_type, $wp_properties['redirect_to_parent']) && $property['post_parent']) { die(wp_redirect(get_permalink($property['post_parent']))); } $property = prepare_property_for_display($property); //** Make certain variables available to be used within the single listing page */ $single_page_vars = apply_filters('wpp_property_page_vars', array('property' => $property, 'wp_properties' => $wp_properties)); //** By merging our extra variables into $wp_query->query_vars they will be extracted in load_template() */ if (is_array($single_page_vars)) { $wp_query->query_vars = array_merge($wp_query->query_vars, $single_page_vars); } } //** Current requests includes a property overview. PO may be via shortcode, search result, or due to this being the Default Dynamic Property page */ if (isset($wp_query->is_property_overview)) { WPP_F::console_log('Including scripts for all property overview pages.'); WPP_F::load_assets(array('overview')); if (isset($wp_query->wpp_default_property_page)) { WPP_F::console_log('Dynamic Default Property page detected, will load custom template.'); } else { WPP_F::console_log('Custom Default Property page detected, property overview content may be rendered via shortcode.'); } //** Make certain variables available to be used within the single listing page */ $overview_page_vars = apply_filters('wpp_overview_page_vars', array('wp_properties' => $wp_properties, 'wpp_query' => $wpp_query)); //** By merging our extra variables into $wp_query->query_vars they will be extracted in load_template() */ if (is_array($overview_page_vars)) { $wp_query->query_vars = array_merge($wp_query->query_vars, $overview_page_vars); } do_action('template_redirect_property_overview'); add_action('wp_head', create_function('', "do_action('wp_head_property_overview'); ")); } do_action('wpp_template_redirect_post_scripts'); }
/** * This function takes all your properties and exports it as an XML feed * * @todo Improve efficiency of function, times out quickly for feeds of 500 properties. memory_limit and set_time_limit should be removed once efficiency is improved * */ public function wpp_export_properties() { global $wp_properties; ini_set('memory_limit', -1); $mtime = microtime(); $mtime = explode(" ", $mtime); $mtime = $mtime[1] + $mtime[0]; $starttime = $mtime; // Set a new path set_include_path(get_include_path() . PATH_SEPARATOR . WPP_Path . 'lib/third-party/XML/'); // Include our necessary libaries require_once 'Serializer.php'; require_once 'Unserializer.php'; $api_key = \WPP_F::get_api_key(); $taxonomies = $wp_properties['taxonomies']; // If the API key isn't valid, we quit if (!isset($_REQUEST['api']) || $_REQUEST['api'] != $api_key) { die(__('Invalid API key.', ud_get_wp_property()->domain)); } if (isset($_REQUEST['limit'])) { $per_page = $_REQUEST['limit']; $starting_row = 0; } if (isset($_REQUEST['per_page'])) { $per_page = $_REQUEST['per_page']; } if (isset($_REQUEST['starting_row'])) { $starting_row = $_REQUEST['starting_row']; } if (isset($_REQUEST['property_type'])) { $property_type = $_REQUEST['property_type']; } else { $property_type = 'all'; } if (strtolower($_REQUEST['format']) == 'xml') { $xml_format = true; } else { $xml_format = false; } $wpp_query['query']['pagi'] = $starting_row . '--' . $per_page; $wpp_query['query']['sort_by'] = isset($_REQUEST['sort_by']) ? $_REQUEST['sort_by'] : 'post_date'; $wpp_query['query']['sort_order'] = isset($_REQUEST['sort_order']) ? $_REQUEST['sort_order'] : 'ASC'; $wpp_query['query']['property_type'] = $property_type; $wpp_query['query'] = apply_filters('wpp::xml::export::query', $wpp_query['query']); $wpp_query = \WPP_F::get_properties($wpp_query['query'], true); $results = $wpp_query['results']; if (count($results) == 0) { die(__('No published properties.', ud_get_wp_property()->domain)); } if ($xml_format) { } else { } $properties = array(); foreach ($results as $count => $id) { //** Reserve time on every iteration. */ set_time_limit(0); $property = \WPP_F::get_property($id, "return_object=false&load_parent=false&get_children=false"); if ($property['post_parent'] && !$property['parent_gpid']) { $property['parent_gpid'] = \WPP_F::maybe_set_gpid($property['post_parent']); } // Unset unnecessary data unset($property['comment_count'], $property['post_modified_gmt'], $property['comment_status'], $property['post_password'], $property['guid'], $property['filter'], $property['post_author'], $property['permalink'], $property['ping_status'], $property['post_modified'], $property['post_mime_type']); // Set unique site ID $property['wpp_unique_id'] = md5($api_key . $property['ID']); //** Get taxonomies */ if ($taxonomies) { foreach ($taxonomies as $taxonomy_slug => $taxonomy_data) { if ($these_terms = wp_get_object_terms($property['ID'], $taxonomy_slug, array('fields' => 'names'))) { $property['taxonomies'][$taxonomy_slug] = $these_terms; } } } $fixed_property = array(); foreach ($property as $meta_key => $meta_value) { // Maybe Unserialize $meta_value = maybe_unserialize($meta_value); if (is_array($meta_value) || is_object($meta_value)) { $fixed_property[$meta_key] = $meta_value; continue; } $fixed_property[$meta_key] = $meta_value; } $properties[$id] = $fixed_property; } $properties = apply_filters('wpp::xml::export::data', $properties); if ($xml_format) { $result = $this->convert_to_xml($properties, apply_filters('wpp::xml::export::serializer_options', array())); /** Deprecated. peshkov@UD $result = json_encode( $properties ); $result = WPP_F::json_to_xml( $result, apply_filters( 'wpp::xml::export::serializer_options', array() ) ); //*/ if (!$result) { die(__('There is an Error on trying to create XML feed.', ud_get_wp_property()->domain)); } header('Content-type: text/xml'); header('Content-Disposition: inline; filename="wpp_xml_data.xml"'); } else { $result = json_encode($properties); header('Content-type: application/json'); header('Content-Disposition: inline; filename="wpp_xml_data.json"'); } header("Cache-Control: no-cache"); header("Pragma: no-cache"); die($result); }
<?php /** * Template Child Properties Widget * * */ global $wp_properties; echo "<div class='wpp_child_properties_widget'>"; if ($title) { echo $before_title . $title . $after_title; } foreach ($properties as $property) { $this_property = WPP_F::get_property($property->ID, 'return_object=true'); $image = isset($this_property->featured_image) ? wpp_get_image_link($this_property->featured_image, $image_type, array('return' => 'array')) : false; $width = !empty($image_size['width']) ? $image_size['width'] : (!empty($image['width']) ? $image['width'] : ''); $height = !empty($image_size['height']) ? $image_size['height'] : (!empty($image['height']) ? $image['height'] : ''); ?> <div class="property_widget_block apartment_entry clearfix" style="<?php echo $width ? 'width: ' . ($width + 5) . 'px;' : ''; ?> "> <?php if ($hide_image !== 'on') { ?> <?php if (!empty($image)) { ?> <a class="sidebar_property_thumbnail thumbnail" href="<?php echo $this_property->permalink;
/** * @param string $atts * @return string|void */ public function call($atts = "") { global $post, $property; $this_property = $property; if (empty($this_property) && $post->post_type == 'property') { $this_property = $post; } $this_property = (array) $this_property; if (!$atts) { $atts = array(); } $defaults = array('property_id' => $this_property['ID'], 'attribute' => '', 'before' => '', 'after' => '', 'if_empty' => '', 'do_not_format' => '', 'make_terms_links' => 'false', 'separator' => ' ', 'strip_tags' => ''); $args = array_merge($defaults, $atts); if (empty($args['attribute'])) { return false; } $attribute = $args['attribute']; if ($args['property_id'] != $this_property['ID']) { $this_property = WPP_F::get_property($args['property_id']); if ($args['do_not_format'] != "true") { $this_property = prepare_property_for_display($this_property); } } if (taxonomy_exists($attribute) && is_object_in_taxonomy('property', $attribute)) { foreach (wp_get_object_terms($this_property['ID'], $attribute) as $term_data) { if ($args['make_terms_links'] == 'true') { $terms[] = '<a class="wpp_term_link" href="' . get_term_link($term_data, $attribute) . '"><span class="wpp_term">' . $term_data->name . '</span></a>'; } else { $terms[] = '<span class="wpp_term">' . $term_data->name . '</span>'; } } if (isset($terms) && is_array($terms) && !empty($terms)) { $value = implode($args['separator'], $terms); } } //** Try to get value using get get_attribute() function */ if (!isset($value) || !$value && function_exists('get_attribute')) { $value = get_attribute($attribute, array('return' => 'true', 'property_object' => $this_property)); } if (!empty($args['before'])) { $return['before'] = html_entity_decode($args['before']); } $return['value'] = apply_filters('wpp_property_attribute_shortcode', $value, $this_property); if ($args['strip_tags'] == "true" && !empty($return['value'])) { $return['value'] = strip_tags($return['value']); } if (!empty($args['after'])) { $return['after'] = html_entity_decode($args['after']); } //** When no value is found */ if (empty($return['value'])) { if (!empty($args['if_empty'])) { return $args['if_empty']; } else { return false; } } if (is_array($return)) { return implode('', $return); } return false; }
/** * Runs all filters through property variables * * Main function for preparing the property object to be displayed on the front-end. * Same args are applied to main object, and child objects that are loade. So if gallery is not loaded for parent, it will not be loaded for children. * * Called in the_post() via WPP_F::the_post() * * @todo There is an issue with quotes being converted to " and not working well when value has a shortcode. * @since 1.4 * */ function prepare_property_for_display($property, $args = false) { global $wp_properties; if (empty($property)) { return; } $_args = is_array($args) ? http_build_query($args) : (string) $args; /* Used to apply different filters depending on where the attribute is displayed. i.e. google_map_infobox */ $attribute_scope = !empty($args['scope']) ? $args['scope'] : false; $return_type = is_object($property) ? 'object' : 'array'; if (is_numeric($property)) { $property_id = $property; } elseif (is_object($property)) { $property = (array) $property; $property_id = $property['ID']; } elseif (is_array($property)) { $property_id = $property['ID']; } //** Check if this function has already been done */ if (is_array($property) && isset($property['system']['prepared_for_display'])) { return $property; } //** Load property from cache, or function, if not passed */ if (!is_array($property)) { if ($cache_property = wp_cache_get(md5('display_' . $property_id . $_args))) { return $cache_property; } //** Cache not found, load property */ $property = (array) WPP_F::get_property($property_id, $args); } // Go through children properties if (isset($property['children']) && is_array($property['children'])) { foreach ($property['children'] as $child => $child_data) { $property['children'][$child] = prepare_property_for_display($child_data, $args); } } $attributes = ud_get_wp_property('property_stats', array()); foreach ($property as $meta_key => $attribute_value) { //** Only execute shortcodes for defined property attributes to prevent different issues */ if (!array_key_exists($meta_key, (array) $attributes)) { continue; } //** Only executed shortcodes if the value isn't an array */ if (!is_array($attribute_value)) { if (!empty($args['do_not_execute_shortcodes']) && $args['do_not_execute_shortcodes'] == 'true' || $meta_key == 'post_content') { continue; } //** Determine if the current attribute is address and set it as display address */ if ($meta_key == $wp_properties['configuration']['address_attribute'] && !empty($property['display_address'])) { $attribute_value = $property['display_address']; } $attribute_value = do_shortcode(html_entity_decode($attribute_value)); $attribute_value = str_replace("\n", "", nl2br($attribute_value)); } $attribute_value = apply_filters("wpp::attribute::display", $attribute_value, $meta_key); $property[$meta_key] = apply_filters("wpp_stat_filter_{$meta_key}", $attribute_value, $attribute_scope); } $property['system']['prepared_for_display'] = true; wp_cache_add(md5('display_' . $property_id . $_args), $property); if ($return_type == 'object') { return (object) $property; } else { return $property; } }
/** * Updates numeric and currency attribute of parent property on child property saving. * Sets attribute's value based on children values ( sets aggregated value ). * * * Tries to figure out which attributes can be handled as a "range". (legacy-logic) * * Iterates over all children of the parent and writes any computed ranges directly to parents meta. * * @param integer $post_id * @used WPP_F::save_property(); * @author peshkov@UD * @return null */ function wpp_save_property_aggregated_data($post_id) { global $wpdb, $wp_properties; if (empty($_REQUEST['parent_id'])) { return null; } //** Get all children */ $children = $wpdb->get_col($wpdb->prepare("\n SELECT ID\n FROM {$wpdb->posts}\n WHERE post_type = 'property'\n AND post_status = 'publish'\n AND post_parent = %s\n ORDER BY menu_order ASC\n ", $_REQUEST['parent_id'])); if (count($children) > 0) { $range = array(); //** Cycle through children and get necessary variables */ foreach ($children as $child_id) { $child_object = WPP_F::get_property($child_id, "load_parent=false"); //** Exclude variables from searchable attributes (to prevent ranges) */ $excluded_attributes = $wp_properties['geo_type_attributes']; $excluded_attributes[] = $wp_properties['configuration']['address_attribute']; foreach ($wp_properties['searchable_attributes'] as $searchable_attribute) { $attribute_data = UsabilityDynamics\WPP\Attributes::get_attribute_data($searchable_attribute); if (!empty($attribute_data['numeric']) || !empty($attribute_data['currency'])) { if (!empty($child_object[$searchable_attribute]) && !in_array($searchable_attribute, $excluded_attributes)) { if (!isset($range[$searchable_attribute])) { $range[$searchable_attribute] = array(); } $range[$searchable_attribute][] = $child_object[$searchable_attribute]; } } } } foreach ($range as $range_attribute => $range_values) { //* Cycle through all values of this range (attribute), and fix any ranges that use dashes */ foreach ($range_values as $key => $single_value) { //* Remove dollar signs */ $single_value = str_replace("\$", '', $single_value); //* Fix ranges */ if (strpos($single_value, '–')) { $split = explode('–', $single_value); foreach ($split as $new_single_value) { if (!empty($new_single_value)) { array_push($range_values, trim($new_single_value)); } } //* Unset original value with dash */ unset($range_values[$key]); } } $average = isset($wp_properties['configuration']['show_aggregated_value_as_average']) ? $wp_properties['configuration']['show_aggregated_value_as_average'] : false; $val = @array_sum($range_values); $val = is_numeric($val) && $val > 0 ? $average == 'true' ? ceil($val / count($range_values)) : $val : 0; update_post_meta($_REQUEST['parent_id'], $range_attribute, $val); } } }
?> _slider"></div> </div> <?php } ?> </div> </div> <div id="content" class="<?php wpp_css('property_search::content', "page type-page hentry"); ?> " > <div style="width: 890px; float: left;"> <?php $searchable_properties = WPP_F::get_searchable_properties(); if ($searchable_properties) { foreach ($searchable_properties as $property_id) { $property = WPP_F::get_property($property_id); // 1. Try template in theme folder $template_found = WPP_F::get_template_part(array("property-search-block"), array(WPP_Templates)); if ($template_found) { include $template_found; } } } ?> </div> </div>
/** * * @author peshkov@UD * @since 1.38 */ public static function feps_post_created($post_id, $args = array()) { global $wp_post_statuses; $notification = self::_notification_template(); $_property = WPP_F::get_property($post_id, array('get_children' => 'false')); $user_id = $_property['post_author']; $user = get_user_by('id', $user_id); $notification['trigger_action'] = 'pending_property_added'; $notification['user'] = $user; $notification['subject'] = __('Submission Received', ud_get_wp_property()->domain); $notification['message'] = sprintf(__('Hello.%1$s%1$sYour %2$s has been received.%1$s%1$sYou can view it using this URL:%1$s[pending_url]', ud_get_wp_property()->domain), PHP_EOL, WPP_F::property_label('singular')); $notification['crm_log_message'] = sprintf(__('User submitted %1$s ([property_title]) using FEPS.', ud_get_wp_property()->domain), WPP_F::property_label('singular')); $notification['data']['notification_type'] = __('Submission Received', ud_get_wp_property()->domain); $notification['data']['display_name'] = $user->data->display_name; $notification['data']['user_email'] = $user->data->user_email; $notification['data']['site_url'] = site_url(); $notification['data']['pending_url'] = class_wpp_feps::get_feps_permalink($_property, false); $notification['data']['title'] = $notification['data']['property_title'] = $_property['post_title']; $notification['data']['status'] = @$wp_post_statuses[$_property['post_status']]->label; $notification = WPP_F::array_merge_recursive_distinct($notification, $args); self::_send_notification($notification); }
/** * @see WP_Widget::widget */ function widget($args, $instance) { global $wp_properties; $before_widget = ''; $before_title = ''; $after_title = ''; $after_widget = ''; extract($args); $instance = apply_filters('LatestPropertiesWidget', $instance); $title = isset($instance['title']) ? $instance['title'] : ''; $stats = isset($instance['stats']) ? $instance['stats'] : array(); $image_type = !empty($instance['image_type']) ? $instance['image_type'] : ''; $hide_image = isset($instance['hide_image']) ? $instance['hide_image'] : false; $show_title = isset($instance['show_title']) ? $instance['show_title'] : false; $address_format = isset($instance['address_format']) ? $instance['address_format'] : ''; $property_stats = isset($wp_properties['property_stats']) ? $wp_properties['property_stats'] : array(); if (!empty($image_type)) { $image_size = WPP_F::image_sizes($image_type); } if (!isset($property_stats['property_type'])) { $property_stats['property_type'] = sprintf(__('%s Type', ud_get_wp_property()->domain), WPP_F::property_label()); } $arg = array('post_type' => 'property', 'numberposts' => !empty($instance['amount_items']) ? $instance['amount_items'] : 5, 'post_status' => 'publish', 'post_parent' => null, 'order' => 'DESC', 'orderby' => 'post_date'); $postslist = get_posts($arg); echo $before_widget; echo "<div class='wpp_latest_properties_widget'>"; if ($title) { echo $before_title . $title . $after_title; } foreach ($postslist as $post) { $this_property = WPP_F::get_property($post->ID, 'return_object=true'); $image = isset($this_property->featured_image) ? wpp_get_image_link($this_property->featured_image, $image_type, array('return' => 'array')) : false; $width = !empty($image_size['width']) ? $image_size['width'] : (!empty($image['width']) ? $image['width'] : ''); $height = !empty($image_size['height']) ? $image_size['height'] : (!empty($image['height']) ? $image['height'] : ''); ?> <div class="property_widget_block latest_entry clearfix" style="<?php echo $width ? 'width: ' . ($width + 5) . 'px;' : ''; ?> "> <?php if ($hide_image !== 'on') { ?> <?php if (!empty($image)) { ?> <a class="sidebar_property_thumbnail latest_property_thumbnail thumbnail" href="<?php echo $this_property->permalink; ?> "> <img width="<?php echo $image['width']; ?> " height="<?php echo $image['height']; ?> " src="<?php echo $image['url']; ?> " alt="<?php echo sprintf(__('%s at %s for %s', ud_get_wp_property()->domain), $this_property->post_title, $this_property->location, $this_property->price); ?> "/> </a> <?php } else { ?> <div class="wpp_no_image" style="width:<?php echo $width; ?> px;height:<?php echo $height; ?> px;"></div> <?php } ?> <?php } if ($show_title == 'on') { echo '<p class="title"><a href="' . $this_property->permalink . '">' . $post->post_title . '</a></p>'; } echo '<ul class="wpp_widget_attribute_list">'; if (is_array($stats)) { foreach ($stats as $stat) { if (!isset($this_property->{$stat})) { continue; } switch (true) { case !empty($wp_properties['configuration']['address_attribute']) && $wp_properties['configuration']['address_attribute'] == $stat: $content = wpp_format_address_attribute($this_property->{$stat}, $this_property, $address_format); break; case $stat == 'property_type': $content = nl2br(apply_filters("wpp_stat_filter_property_type_label", $this_property->property_type_label)); break; default: $content = nl2br(apply_filters("wpp_stat_filter_{$stat}", $this_property->{$stat})); break; } if (empty($content)) { continue; } echo '<li class="' . $stat . '"><span class="attribute">' . $property_stats[$stat] . ':</span> <span class="value">' . $content . '</span></li>'; } } echo '</ul>'; if (isset($instance['enable_more']) && $instance['enable_more'] == 'on') { echo '<p class="more"><a href="' . $this_property->permalink . '" class="btn btn-info">' . __('More', ud_get_wp_property()->domain) . '</a></p>'; } ?> </div> <?php unset($this_property); } if (isset($instance['enable_view_all']) && $instance['enable_view_all'] == 'on') { echo '<p class="view-all"><a href="' . site_url() . '/' . $wp_properties['configuration']['base_slug'] . '" class="btn btn-large">' . __('View All', ud_get_wp_property()->domain) . '</a></p>'; } echo '<div class="clear"></div>'; echo '</div>'; echo $after_widget; }
/** * Widget body * * @param array $args * @param array $instance */ function widget($args, $instance) { global $post, $wp_properties, $property; $before_widget = ''; $before_title = ''; $after_title = ''; $after_widget = ''; extract($args); $instance = apply_filters('OtherPropertiesWidget', $instance); $title = isset($instance['title']) ? $instance['title'] : ''; $show_title = isset($instance['show_title']) ? $instance['show_title'] : false; $image_type = isset($instance['image_type']) ? $instance['image_type'] : false; $hide_image = isset($instance['hide_image']) ? $instance['hide_image'] : false; $stats = isset($instance['stats']) ? $instance['stats'] : false; $address_format = isset($instance['address_format']) ? $instance['address_format'] : ''; $amount_items = !empty($instance['amount_items']) ? $instance['amount_items'] : 0; $show_properties_of_type = isset($instance['show_properties_of_type']) ? $instance['show_properties_of_type'] : false; $shuffle_order = isset($instance['shuffle_order']) ? $instance['shuffle_order'] : false; if (!isset($post->ID) || $post->post_parent == 0 && $show_properties_of_type != 'on') { return; } $this_property = (array) $property; if ($post->post_parent) { $properties = get_posts(array('numberposts' => $amount_items, 'post_type' => 'property', 'post_status' => 'publish', 'post_parent' => $post->post_parent, 'exclude' => $post->ID)); } else { $properties = WPP_F::get_properties("property_type={$this_property['property_type']}&pagi=0--{$amount_items}"); } if (empty($properties)) { return; } $html[] = $before_widget; $html[] = "<div class='wpp_other_properties_widget'>"; if ($title) { $html[] = $before_title . $title . $after_title; } if ($shuffle_order == 'on') { shuffle($properties); } ob_start(); foreach ($properties as $single) { $property_id = is_object($single) ? $single->ID : $single; $this_property = WPP_F::get_property($property_id, 'return_object=true'); $this_property = prepare_property_for_display($this_property); $image = isset($this_property->featured_image) && !empty($image_type) ? wpp_get_image_link($this_property->featured_image, $image_type, array('return' => 'array')) : false; ?> <div class="property_widget_block apartment_entry clearfix" style="<?php echo !empty($image['width']) ? 'width: ' . ($image['width'] + 5) . 'px;' : ''; ?> "> <?php if ($hide_image !== 'on' && !empty($image)) { ?> <a class="sidebar_property_thumbnail thumbnail" href="<?php echo $this_property->permalink; ?> "> <img width="<?php echo $image['width']; ?> " height="<?php echo $image['height']; ?> " src="<?php echo $image['link']; ?> " alt=""/> </a> <?php } ?> <?php if ($show_title == 'on') { ?> <p class="title"><a href="<?php echo $this_property->permalink; ?> "><?php echo $this_property->post_title; ?> </a></p> <?php } ?> <ul class="wpp_widget_attribute_list"> <?php if (is_array($stats)) { foreach ($stats as $stat) { if (!isset($this_property->{$stat})) { continue; } switch (true) { case !empty($wp_properties['configuration']['address_attribute']) && $wp_properties['configuration']['address_attribute'] == $stat: $content = wpp_format_address_attribute($this_property->{$stat}, $this_property, $address_format); break; case $stat == 'property_type': $content = nl2br(apply_filters("wpp_stat_filter_property_type_label", $this_property->property_type_label)); break; default: $content = nl2br(apply_filters("wpp_stat_filter_{$stat}", $this_property->{$stat})); break; } if (empty($content)) { continue; } ?> <li class="<?php echo $stat; ?> "> <span class="attribute"><?php echo $wp_properties['property_stats'][$stat]; ?> :</span> <span class="value"><?php echo $content; ?> </span> </li> <?php } } ?> </ul> <?php if ($instance['enable_more'] == 'on') { echo '<p class="more"><a href="' . $this_property->permalink . '" class="btn btn-info">' . __('More', ud_get_wp_property()->domain) . '</a></p>'; } ?> </div> <?php unset($this_property); } $html['widget_content'] = ob_get_contents(); ob_end_clean(); if ($instance['enable_view_all'] == 'on') { $html[] = '<p class="view-all"><a href="' . site_url() . '/' . $wp_properties['configuration']['base_slug'] . '" class="btn btn-large">' . __('View All', ud_get_wp_property()->domain) . '</a></p>'; } $html[] = '</div>'; $html[] = $after_widget; if (!empty($html['widget_content'])) { echo implode('', $html); } }
/** * Get advanced details about an image (mostly for troubleshooting) * * @todo add some sort of light validating that the the passed item here is in fact an image * */ public static function get_property_image_data($requested_id) { global $wpdb; if (empty($requested_id)) { return false; } ob_start(); if (is_numeric($requested_id)) { $post_type = $wpdb->get_var("SELECT post_type FROM {$wpdb->posts} WHERE ID = '{$requested_id}'"); } else { //** Try and image search */ $image_id = $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE post_title LIKE '%{$requested_id}%' "); if ($image_id) { $post_type = 'image'; $requested_id = $image_id; } } if ($post_type == 'property') { //** Get Property Images */ $property = WPP_F::get_property($requested_id); echo 'Requested Property: ' . $property['post_title']; $data = get_children(array('post_parent' => $requested_id, 'post_type' => 'attachment', 'post_mime_type' => 'image', 'orderby' => 'menu_order ASC, ID', 'order' => 'DESC')); echo "\nProperty has: " . count($data) . ' images.'; foreach ($data as $img) { $image_data['ID'] = $img->ID; $image_data['post_title'] = $img->post_title; $img_meta = $wpdb->get_results("SELECT meta_key, meta_value FROM {$wpdb->postmeta} WHERE post_id = '{$img->ID}'"); foreach ($img_meta as $i_m) { $image_data[$i_m->meta_key] = maybe_unserialize($i_m->meta_value); } print_r($image_data); } } else { $data = $wpdb->get_row("SELECT * FROM {$wpdb->posts} WHERE ID = '{$requested_id}'"); $image_meta = $wpdb->get_results("SELECT meta_id, meta_key, meta_value FROM {$wpdb->postmeta} WHERE post_id = '{$requested_id}'"); foreach ($image_meta as $m_data) { print_r($m_data->meta_id); echo "<br />"; print_r($m_data->meta_key); echo "<br />"; print_r(maybe_unserialize($m_data->meta_value)); } } $return_data = ob_get_contents(); ob_end_clean(); return $return_data; }
/** * @see WP_Widget::widget * */ function widget($args, $instance) { global $wp_properties; $before_widget = ''; $before_title = ''; $after_title = ''; $after_widget = ''; extract($args); $title = apply_filters('widget_title', !empty($instance['title']) ? $instance['title'] : ''); $instance = apply_filters('FeaturedPropertiesWidget', $instance); $show_title = isset($instance['show_title']) ? $instance['show_title'] : false; $image_type = isset($instance['image_type']) ? $instance['image_type'] : false; $amount_items = isset($instance['amount_items']) ? $instance['amount_items'] : false; $stats = isset($instance['stats']) ? $instance['stats'] : false; $address_format = isset($instance['address_format']) ? $instance['address_format'] : false; $hide_image = isset($instance['hide_image']) ? $instance['hide_image'] : false; $amount_items = isset($instance['amount_items']) ? $instance['amount_items'] : false; $random_items = isset($instance['random_items']) ? $instance['random_items'] : false; $property_stats = isset($wp_properties['property_stats']) ? $wp_properties['property_stats'] : array(); if (empty($address_format)) { $address_format = "[street_number] [street_name], [city], [state]"; } if (!$image_type) { $image_type = ''; } else { $image_size = WPP_F::image_sizes($image_type); } if (!isset($property_stats['property_type'])) { $property_stats['property_type'] = sprintf(__('%s Type', ud_get_wp_property()->domain), WPP_F::property_label()); } $random_sort = $random_items == 1 ? '&sort_by=random' : ''; $all_featured = WPP_F::get_properties("featured=true&property_type=all&pagi=0--{$amount_items}{$random_sort}"); /** Bail out if no children */ if (!$all_featured) { return; } //** The current widget can be used on the page twice. So ID of the current DOM element (widget) has to be unique */ /* //Removed since this will cause problems with jQuery Tabs in Denali. $before_widget = preg_replace('/id="([^\s]*)"/', 'id="$1_'.rand().'"', $before_widget); //*/ echo $before_widget; echo "<div class='wpp_featured_properties_widget'>"; if ($title) { echo $before_title . $title . $after_title; } $count = 0; foreach ($all_featured as $featured) { if ($amount_items == $count) { continue; } $count++; $this_property = WPP_F::get_property($featured, 'return_object=true'); if (!empty($this_property->featured_image)) { $image = wpp_get_image_link($this_property->featured_image, $image_type, array('return' => 'array')); $width = !empty($image_size['width']) ? $image_size['width'] : (!empty($image['width']) ? $image['width'] : ''); $height = !empty($image_size['height']) ? $image_size['height'] : (!empty($image['height']) ? $image['height'] : ''); } ?> <div class="property_widget_block clearfix" style="<?php echo $width ? 'width: ' . ($width + 5) . 'px;' : ''; ?> min-height: <?php echo $height; ?> px;"> <?php if ($hide_image !== 'on') { ?> <?php if (!empty($image)) { ?> <a class="sidebar_property_thumbnail thumbnail" href="<?php echo $this_property->permalink; ?> "> <img width="<?php echo $image['width']; ?> " height="<?php echo $image['height']; ?> " src="<?php echo $image['link']; ?> " alt=""/></a> <?php } else { ?> <div class="wpp_no_image" style="width:<?php echo $width; ?> px;height:<?php echo $height; ?> px;"></div> <?php } ?> <?php } ?> <?php if ($show_title == 'on') { ?> <p class="title"><a href="<?php echo $this_property->permalink; ?> "><?php echo $this_property->post_title; ?> </a></p> <?php } ?> <ul class="wpp_widget_attribute_list"> <?php if (is_array($stats)) { ?> <?php foreach ($stats as $stat) { if (!isset($this_property->{$stat})) { continue; } switch (true) { case !empty($wp_properties['configuration']['address_attribute']) && $wp_properties['configuration']['address_attribute'] == $stat: $content = wpp_format_address_attribute($this_property->{$stat}, $this_property, $address_format); break; case $stat == 'property_type': $content = nl2br(apply_filters("wpp_stat_filter_property_type_label", $this_property->property_type_label)); break; default: $content = nl2br(apply_filters("wpp_stat_filter_{$stat}", $this_property->{$stat})); break; } if (empty($content)) { continue; } ?> <li class="<?php echo $stat; ?> "><span class='attribute'><?php echo $property_stats[$stat]; ?> :</span> <span class='value'><?php echo $content; ?> </span></li> <?php } ?> <?php } ?> </ul> <?php if (isset($instance['enable_more']) && $instance['enable_more'] == 'on') { ?> <p class="more"><a href="<?php echo $this_property->permalink; ?> " class="btn btn-info"><?php _e('More', ud_get_wp_property()->domain); ?> </a></p> <?php } ?> </div> <?php unset($this_property); } if (isset($instance['enable_view_all']) && $instance['enable_view_all'] == 'on') { echo '<p class="view-all"><a href="' . site_url() . '/' . $wp_properties['configuration']['base_slug'] . '" class="btn btn-large">' . __('View All', ud_get_wp_property()->domain) . '</a></p>'; } echo '<div class="clear"></div>'; echo '</div>'; echo $after_widget; }