<?php
/**
* Property Attributes widget.
*
* @author potanin@UD
* @since 1.32.0
*/
class Property_Attributes_Widget extends WP_Widget {
/**
* Initialize the widget.
*
* @since 1.31.0
*/
function __construct() {
$property_label = strtolower( WPP_F::property_label() );
parent::__construct(
'wpp_property_attributes',
sprintf( __( '%1s Attributes', 'wpp' ), WPP_F::property_label() ),
array(
'classname' => 'wpp_property_attributes',
'description' => sprintf( __( 'Display a list of selected %1s attributes when loaded on a single %2s page.', 'wpp' ), $property_label, $property_label )
),
array(
'width' => 300
)
);
}
/**
* Handles any special functions when the widget is being updated.
*
* @since 1.31.0
*/
function update( $new_instance ) {
return $new_instance;
}
/**
* Renders the widget on the front-end.
*
* @since 1.31.0
*/
function widget( $args, $instance ) {
extract( $args );
if ( empty( $instance ) ) {
return;
}
$html[ ] = $before_widget;
if ( $instance[ 'title' ] ) {
$html[ ] = $before_title . $instance[ 'title' ] . $after_title;
}
if ( $instance[ 'show_labels' ] == 'true' ) {
$show_labels = true;
}
unset( $instance[ 'show_labels' ] );
unset( $instance[ 'title' ] );
foreach ( $instance as $slug => $option ) {
if ( $option != 'true' ) {
continue;
}
$value = get_attribute( $slug, array( 'return' => 'true' ) );
if ( empty( $value ) ) {
continue;
}
if ( $show_labels ) {
$attribute = WPP_F::get_attribute_data( $slug );
}
$attributes[ ] = '<li class="' . $slug . '">' . ( $show_labels ? '<span class="attribute">' . $attribute[ 'label' ] . '<span class="separator">:</span> </span>' : '' ) . '</span><span class="value">' . $value . '</span></li>';
}
if ( !empty( $attributes ) ) {
$html[ 'attributes' ] = '<ul class="wpp_widget_attribute_list">' . implode( '', $attributes ) . '</ul>';
}
$html[ ] = $after_widget;
if ( !empty( $html[ 'attributes' ] ) ) {
echo implode( '', $html );
} else {
return false;
}
}
/**
* Renders widget UI in control panel.
*
*
* @todo Needs to make use of sortable attributes.
* @uses $current_screen global variable
* @since 1.31.0
*/
function form( $instance ) {
global $wp_properties;
$main_options = array();
$widget_options = ( is_array( $instance ) ? $instance : array() );
foreach ( WPP_F::get_total_attribute_array() as $slug => $label ) {
$main_options[ $slug ] = WPP_F::get_attribute_data( $slug );
}
//** We don't want to mix in the title into our array */
unset( $widget_options[ 'title' ] );
unset( $widget_options[ 'show_labels' ] );
//** Cycle through saved attributes, to maintain order, and remove any that are no longer in main list */
foreach ( $widget_options as $slug => $selected ) {
if ( !in_array( $slug, array_keys( $main_options ) ) ) {
unset( $widget_options[ $slug ] );
} else {
$widget_options[ $slug ] = $main_options[ $slug ];
}
}
//** Cycle through main options, and add any to array that are not already there */
foreach ( $main_options as $slug => $data ) {
if ( !in_array( $slug, array_keys( $widget_options ) ) ) {
$widget_options[ $slug ] = $data;
}
}
?>
<div class="wpp_widget" data-widget="property_attributes_widget" data-widget_number="<?php echo $this->number; ?>">
<p>
<label for="<?php echo $this->get_field_id( 'widget_title' ); ?>"><?php _e( 'Title:' ); ?>
<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>"
name="<?php echo $this->get_field_name( 'title' ); ?>" type="text"
value="<?php echo esc_attr( $instance[ 'title' ] ); ?>"/></label>
</p>
<p><?php _e( 'Attributes to Display:', 'wpp' ); ?></p>
<div class="wpp_subtle_tabs wp-tab-panel">
<ul class="wpp_sortable_attributes">
<?php foreach ( $widget_options as $slug => $data ) { ?>
<li class="wpp_attribute_wrapper">
<input type="hidden" name="<?php echo $this->get_field_name( $slug ); ?>" value="false"/>
<input class="checkbox" type="checkbox" <?php checked( $instance[ $slug ], 'true' ) ?>
id="<?php echo $this->get_field_id( $slug ); ?>"
name="<?php echo $this->get_field_name( $slug ); ?>" value="true"/>
<label for="<?php echo $this->get_field_id( $slug ); ?>"><?php echo $data[ 'label' ]; ?></label>
</li>
<?php } ?>
</ul>
</div>
<ul>
<li>
<input class="checkbox" type="checkbox" <?php checked( $instance[ 'show_labels' ], 'true' ) ?>
id="<?php echo $this->get_field_id( 'show_labels' ); ?>"
name="<?php echo $this->get_field_name( 'show_labels' ); ?>" value="true"/>
<label
for="<?php echo $this->get_field_id( 'show_labels' ); ?>"><?php _e( 'Display attributes labels.', 'wpp' ); ?></label>
</li>
</ul>
</div>
<?php
}
}
/**
Other Properties Widget
*/
class OtherPropertiesWidget extends WP_Widget {
function OtherPropertiesWidget() {
$property_label = strtolower( WPP_F::property_label( 'plural' ) );
parent::__construct(
false,
sprintf( __( 'Other %1s', 'wpp' ), WPP_F::property_label( 'plural' ) ),
array(
'description' => sprintf( __( 'Display a list of %1s that share a parent with the currently displayed property.', 'wpp' ), $property_label )
),
array(
'width' => 300
)
);
}
/** @see WP_Widget::widget */
function widget( $args, $instance ) {
global $post, $wp_properties, $property;
extract( $args );
$title = apply_filters( 'widget_title', $instance[ 'title' ] );
$instance = apply_filters( 'OtherPropertiesWidget', $instance );
$show_title = $instance[ 'show_title' ];
$image_type = $instance[ 'image_type' ];
$hide_image = $instance[ 'hide_image' ];
$stats = $instance[ 'stats' ];
$address_format = $instance[ 'address_format' ];
$amount_items = $instance[ 'amount_items' ];
$show_properties_of_type = $instance[ 'show_properties_of_type' ];
$shuffle_order = $instance[ 'shuffle_order' ];
if ( !isset( $post->ID ) || ( $post->post_parent == 0 && $show_properties_of_type != 'on' ) ) {
return;
}
if ( is_object( $property ) ) {
$this_property = (array)$property;
} else {
$this_property = $property;
}
if ( $post->post_parent ) {
$properties = get_posts( array(
'numberposts' => !empty( $amount_items ) ? $amount_items : 0,
'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 = wpp_get_image_link( $this_property->featured_image, $image_type, array( 'return' => 'array' ) );
?>
<div class="property_widget_block apartment_entry clearfix"
style="<?php echo( $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="<?php echo sprintf( __( '%s at %s for %s', 'wpp' ), $this_property->post_title, $this_property->location, $this_property->price ); ?>"/>
</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 ) {
$content = $this_property->$stat;
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', 'wpp' ) . '</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', 'wpp' ) . '</a></p>';
}
$html[ ] = '</div>';
$html[ ] = $after_widget;
if ( !empty( $html[ 'widget_content' ] ) ) {
echo implode( '', $html );
}
}
/** @see WP_Widget::update */
function update( $new_instance ) {
return $new_instance;
}
/** @see WP_Widget::form */
function form( $instance ) {
global $wp_properties;
$title = esc_attr( $instance[ 'title' ] );
$show_title = $instance[ 'show_title' ];
$amount_items = esc_attr( $instance[ 'amount_items' ] );
$address_format = esc_attr( $instance[ 'address_format' ] );
$image_type = esc_attr( $instance[ 'image_type' ] );
$property_stats = $instance[ 'stats' ];
$hide_image = $instance[ 'hide_image' ];
$enable_more = $instance[ 'enable_more' ];
$enable_view_all = $instance[ 'enable_view_all' ];
$show_properties_of_type = $instance[ 'show_properties_of_type' ];
$shuffle_order = $instance[ 'shuffle_order' ];
$address_format = !empty( $address_format ) ? $address_format : '[street_number] [street_name], [city], [state]';
?>
<script type="text/javascript">
jQuery( document ).ready( function ( $ ) {
jQuery( 'input.check_me_other' ).live( 'change', function () {
var parent = jQuery( this ).closest( '.widget-content' );
if ( jQuery( this ).is( ':checked' ) ) {
jQuery( 'p.choose_thumb_other', parent ).hide();
} else {
jQuery( 'p.choose_thumb_other', parent ).show();
}
} )
} );
</script>
<p><?php _e( 'The widget will show other properties that share a parent with the currently displayed property.', 'wpp' ); ?></p>
<p>
<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', 'wpp' ); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>"
name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo $title; ?>"/>
</p>
<p>
<input id="<?php echo $this->get_field_id( 'hide_image' ); ?>" class="check_me_other"
name="<?php echo $this->get_field_name( 'hide_image' ); ?>" type="checkbox"
value="on" <?php if ( $hide_image == 'on' ) echo "checked='checked'"; ?> />
<label for="<?php echo $this->get_field_id( 'hide_image' ); ?>"><?php _e( 'Hide images.', 'wpp' ); ?></label>
</p>
<p
class="choose_thumb_other" <?php echo ( $hide_image !== 'on' ) ? 'style="display:block;"' : 'style="display:none;"'; ?>>
<label for="<?php echo $this->get_field_id( 'image_type' ); ?>"><?php _e( 'Image Size:', 'wpp' ); ?></label>
<?php WPP_F::image_sizes_dropdown( "name=" . $this->get_field_name( 'image_type' ) . "&selected=" . $image_type ); ?>
</p>
<p>
<label
for="<?php echo $this->get_field_id( 'amount_items' ); ?>"><?php _e( 'Listings to display?', 'wpp' ); ?></label>
<input style="width:30px" id="<?php echo $this->get_field_id( 'amount_items' ); ?>"
name="<?php echo $this->get_field_name( 'amount_items' ); ?>" type="text"
value="<?php echo ( empty( $amount_items ) ) ? 5 : $amount_items; ?>"/>
</p>
<p><?php _e( 'Select the attributes you want to display: ', 'wpp' ); ?></p>
<ul class="wp-tab-panel">
<li>
<input id="<?php echo $this->get_field_id( 'show_title' ); ?>"
name="<?php echo $this->get_field_name( 'show_title' ); ?>" type="checkbox"
value="on" <?php if ( $show_title == 'on' ) echo " checked='checked';"; ?> />
<label for="<?php echo $this->get_field_id( 'show_title' ); ?>"><?php _e( 'Title', 'wpp' ); ?></label>
</li>
<?php foreach ( $wp_properties[ 'property_stats' ] as $stat => $label ) { ?>
<li>
<input id="<?php echo $this->get_field_id( 'stats' ); ?>_<?php echo $stat; ?>"
name="<?php echo $this->get_field_name( 'stats' ); ?>[]" type="checkbox"
value="<?php echo $stat; ?>" <?php if ( is_array( $property_stats ) && in_array( $stat, $property_stats ) ) echo ' checked="checked" '; ?> />
<label for="<?php echo $this->get_field_id( 'stats' ); ?>_<?php echo $stat; ?>"><?php echo $label; ?></label>
</li>
<?php } ?>
</ul>
<div>
<label for="<?php echo $this->get_field_id( 'address_format' ); ?>"><?php _e( 'Address Format:', 'wpp' ); ?>
<textarea style="width: 100%" id="<?php echo $this->get_field_id( 'address_format' ); ?>"
name="<?php echo $this->get_field_name( 'address_format' ); ?>"><?php echo $address_format; ?></textarea>
</label>
</div>
<ul>
<li>
<input id="<?php echo $this->get_field_id( 'enable_more' ); ?>"
name="<?php echo $this->get_field_name( 'enable_more' ); ?>" type="checkbox"
value="on" <?php if ( $enable_more == 'on' ) echo " checked='checked';"; ?> />
<label
for="<?php echo $this->get_field_id( 'enable_more' ); ?>"><?php _e( 'Show "More" link?', 'wpp' ); ?></label>
</li>
<li>
<input id="<?php echo $this->get_field_id( 'enable_view_all' ); ?>"
name="<?php echo $this->get_field_name( 'enable_view_all' ); ?>" type="checkbox"
value="on" <?php if ( $enable_view_all == 'on' ) echo " checked='checked';"; ?> />
<label
for="<?php echo $this->get_field_id( 'enable_view_all' ); ?>"><?php _e( 'Show "View All" link?', 'wpp' ); ?></label>
</li>
<li>
<input id="<?php echo $this->get_field_id( 'show_properties_of_type' ); ?>"
name="<?php echo $this->get_field_name( 'show_properties_of_type' ); ?>" type="checkbox"
value="on" <?php checked( 'on', $show_properties_of_type ); ?> />
<label
for="<?php echo $this->get_field_id( 'show_properties_of_type' ); ?>"><?php _e( 'If property has no parent, show other properties of same type.', 'wpp' ); ?></label>
</li>
<li>
<input id="<?php echo $this->get_field_id( 'shuffle_order' ); ?>"
name="<?php echo $this->get_field_name( 'shuffle_order' ); ?>" type="checkbox"
value="on" <?php checked( 'on', $shuffle_order ); ?> />
<label
for="<?php echo $this->get_field_id( 'shuffle_order' ); ?>"><?php _e( 'Randomize order of displayed properties.', 'wpp' ); ?></label>
</li>
</ul>
<?php
}
}
/**
* Child Properties Widget
*/
class ChildPropertiesWidget extends WP_Widget {
/**
* Constructor
*/
function ChildPropertiesWidget() {
parent::WP_Widget( false, $name = sprintf( __( 'Child %1s', 'wpp' ), WPP_F::property_label( 'plural' ) ), array( 'description' => __( 'Show child properties (if any) for currently displayed property', 'wpp' ) ) );
}
/**
* @see WP_Widget::widget
*/
function widget( $args, $instance ) {
global $post, $wp_properties;
extract( $args );
$title = apply_filters( 'widget_title', $instance[ 'title' ] );
$instance = apply_filters( 'ChildPropertiesWidget', $instance );
$show_title = $instance[ 'show_title' ];
$image_type = $instance[ 'image_type' ];
$hide_image = $instance[ 'hide_image' ];
$stats = $instance[ 'stats' ];
$address_format = $instance[ 'address_format' ];
$amount_items = $instance[ 'amount_items' ];
if ( !isset( $post->ID ) ) {
return;
}
if ( !$image_type ) {
$image_type = '';
} else {
$image_size = WPP_F::image_sizes( $image_type );
}
$argus = array(
'post_type' => 'property',
'numberposts' => $amount_items,
'post_status' => 'publish',
'post_parent' => $post->ID,
);
$attachments = get_posts( $argus );
// Bail out if no children
if ( count( $attachments ) < 1 ) {
return;
}
echo $before_widget;
echo "<div class='wpp_child_properties_widget'>";
if ( $title ) {
echo $before_title . $title . $after_title;
}
foreach ( $attachments as $attached ) {
$this_property = WPP_F::get_property( $attached->ID, 'return_object=true' );
$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 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; ?>">
<img width="<?php echo $image[ 'width' ]; ?>" height="<?php echo $image[ 'height' ]; ?>"
src="<?php echo $image[ 'link' ]; ?>"
alt="<?php echo sprintf( __( '%s at %s for %s', 'wpp' ), $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 endif; ?>
<?php endif; ?>
<?php if ( $show_title == 'on' ): ?>
<p class="title"><a
href="<?php echo $this_property->permalink; ?>"><?php echo $this_property->post_title; ?></a></p>
<?php endif; ?>
<ul class="wpp_widget_attribute_list">
<?php if ( is_array( $stats ) ): ?>
<?php foreach ( $stats as $stat ): ?>
<?php $content = nl2br( apply_filters( "wpp_stat_filter_{$stat}", $this_property->$stat ) ); ?>
<?php 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 endforeach; ?>
<?php endif; ?>
</ul>
<?php if ( $instance[ 'enable_more' ] == 'on' ) : ?>
<p class="more"><a href="<?php echo $this_property->permalink; ?>"
class="btn btn-info"><?php _e( 'More', 'wpp' ); ?></a></p>
<?php endif; ?>
</div>
<?php
unset( $this_property );
}
if ( $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', 'wpp' ) . '</a></p>';
}
echo '<div class="clear"></div>';
echo '</div>';
echo $after_widget;
}
/** @see WP_Widget::update */
function update( $new_instance, $old_instance ) {
return $new_instance;
}
/** @see WP_Widget::form */
function form( $instance ) {
global $wp_properties;
$title = esc_attr( $instance[ 'title' ] );
$show_title = $instance[ 'show_title' ];
$address_format = esc_attr( $instance[ 'address_format' ] );
$image_type = esc_attr( $instance[ 'image_type' ] );
$amount_items = esc_attr( $instance[ 'amount_items' ] );
$property_stats = $instance[ 'stats' ];
$hide_image = $instance[ 'hide_image' ];
$enable_more = $instance[ 'enable_more' ];
$enable_view_all = $instance[ 'enable_view_all' ];
if ( empty( $address_format ) )
$address_format = "[street_number] [street_name], [city], [state]";
?>
<script type="text/javascript">
//hide and show dropdown whith thumb settings
jQuery( document ).ready( function ( $ ) {
$( 'input.check_me_child' ).change( function () {
if ( $( this ).attr( 'checked' ) !== true ) {
$( 'p#choose_thumb_child' ).css( 'display', 'block' );
} else {
$( 'p#choose_thumb_child' ).css( 'display', 'none' );
}
} )
} );
</script>
<p><?php _e( 'The widget will not be displayed if the currently viewed property has no children.', 'wpp' ); ?></p>
<p>
<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', 'wpp' ); ?>
<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>"
name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo $title; ?>"/>
</label>
</p>
<p>
<label for="<?php echo $this->get_field_id( 'hide_image' ); ?>">
<input id="<?php echo $this->get_field_id( 'hide_image' ); ?>" class="check_me_child"
name="<?php echo $this->get_field_name( 'hide_image' ); ?>" type="checkbox"
value="on" <?php if ( $hide_image == 'on' ) echo " checked='checked';"; ?> />
<?php _e( 'Hide Images?', 'wpp' ); ?>
</label>
</p>
<p id="choose_thumb_child" <?php
if ( $hide_image !== 'on' )
echo 'style="display:block;"';
else
echo 'style="display:none;"';
?>>
<label for="<?php echo $this->get_field_id( 'image_type' ); ?>"><?php _e( 'Image Size:', 'wpp' ); ?>
<?php WPP_F::image_sizes_dropdown( "name=" . $this->get_field_name( 'image_type' ) . "&selected=" . $image_type ); ?>
</label>
<p>
<label for="<?php echo $this->get_field_id( 'amount_items' ); ?>"><?php _e( 'Listings to display?', 'wpp' ); ?>
<input style="width:30px" id="<?php echo $this->get_field_id( 'amount_items' ); ?>"
name="<?php echo $this->get_field_name( 'amount_items' ); ?>" type="text"
value="<?php echo ( empty( $amount_items ) ) ? 5 : $amount_items; ?>"/>
</label>
</p>
<p><?php _e( 'Select the stats you want to display', 'wpp' ); ?></p>
<p>
<label for="<?php echo $this->get_field_id( 'show_title' ); ?>">
<input id="<?php echo $this->get_field_id( 'show_title' ); ?>"
name="<?php echo $this->get_field_name( 'show_title' ); ?>" type="checkbox"
value="on" <?php if ( $show_title == 'on' ) echo " checked='checked';"; ?> />
<?php _e( 'Title', 'wpp' ); ?>
</label>
</p>
<?php foreach ( $wp_properties[ 'property_stats' ] as $stat => $label ): ?>
<label for="<?php echo $this->get_field_id( 'stats' ); ?>_<?php echo $stat; ?>">
<input id="<?php echo $this->get_field_id( 'stats' ); ?>_<?php echo $stat; ?>"
name="<?php echo $this->get_field_name( 'stats' ); ?>[]" type="checkbox" value="<?php echo $stat; ?>"
<?php if ( is_array( $property_stats ) && in_array( $stat, $property_stats ) ) echo " checked "; ?> />
<?php echo $label; ?>
</label><br/>
<?php endforeach; ?>
<p>
<label for="<?php echo $this->get_field_id( 'address_format' ); ?>"><?php _e( 'Address Format:', 'wpp' ); ?>
<textarea style="width: 100%" id="<?php echo $this->get_field_id( 'address_format' ); ?>"
name="<?php echo $this->get_field_name( 'address_format' ); ?>"><?php echo $address_format; ?></textarea>
</label>
</p>
<p>
<label for="<?php echo $this->get_field_id( 'enable_more' ); ?>">
<input id="<?php echo $this->get_field_id( 'enable_more' ); ?>"
name="<?php echo $this->get_field_name( 'enable_more' ); ?>" type="checkbox"
value="on" <?php if ( $enable_more == 'on' ) echo " checked='checked';"; ?> />
<?php _e( 'Show "More" link?', 'wpp' ); ?>
</label>
</p>
<p>
<label for="<?php echo $this->get_field_id( 'enable_view_all' ); ?>">
<input id="<?php echo $this->get_field_id( 'enable_view_all' ); ?>"
name="<?php echo $this->get_field_name( 'enable_view_all' ); ?>" type="checkbox"
value="on" <?php if ( $enable_view_all == 'on' ) echo " checked='checked';"; ?> />
<?php _e( 'Show "View All" link?', 'wpp' ); ?>
</label>
</p>
<?php
}
}
/**
* Lookup Widget
*/
class FeaturedPropertiesWidget extends WP_Widget {
/**
* constructor
*/
function FeaturedPropertiesWidget() {
parent::WP_Widget( false, $name = sprintf( __( 'Featured %1s', 'wpp' ), WPP_F::property_label( 'plural' ) ), array( 'description' => __( 'List of properties that were marked as Featured', 'wpp' ) ) );
}
/**
* @see WP_Widget::widget
*
*/
function widget( $args, $instance ) {
global $wp_properties;
extract( $args );
$title = apply_filters( 'widget_title', $instance[ 'title' ] );
$instance = apply_filters( 'FeaturedPropertiesWidget', $instance );
$show_title = $instance[ 'show_title' ];
$image_type = $instance[ 'image_type' ];
$amount_items = $instance[ 'amount_items' ];
$stats = $instance[ 'stats' ];
$address_format = $instance[ 'address_format' ];
$hide_image = $instance[ 'hide_image' ];
$amount_items = $instance[ 'amount_items' ];
$random_items = $instance[ 'random_items' ];
$property_stats = $wp_properties[ 'property_stats' ];
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' ] = __( 'Property Type', 'wpp' );
}
$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' );
$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="<?php echo sprintf( __( '%s at %s for %s', 'wpp' ), $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 endif; ?>
<?php endif; ?>
<?php if ( $show_title == 'on' ): ?>
<p class="title"><a
href="<?php echo $this_property->permalink; ?>"><?php echo $this_property->post_title; ?></a></p>
<?php endif; ?>
<ul class="wpp_widget_attribute_list">
<?php if ( is_array( $stats ) ): ?>
<?php foreach ( $stats as $stat ):
$pstat = $stat;
/** Determine if stat is property_type we switch it to property_type_label */
if ( $pstat == 'property_type' ) {
$pstat = 'property_type_label';
}
$content = nl2br( apply_filters( "wpp_stat_filter_{$pstat}", $this_property->$pstat ) );
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 endforeach; ?>
<?php endif; ?>
</ul>
<?php if ( $instance[ 'enable_more' ] == 'on' ) : ?>
<p class="more"><a href="<?php echo $this_property->permalink; ?>"
class="btn btn-info"><?php _e( 'More', 'wpp' ); ?></a></p>
<?php endif; ?>
</div>
<?php
unset( $this_property );
}
if ( $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', 'wpp' ) . '</a></p>';
}
echo '<div class="clear"></div>';
echo '</div>';
echo $after_widget;
}
/**
* @see WP_Widget::update
*/
function update( $new_instance, $old_instance ) {
return $new_instance;
}
/**
* @see WP_Widget::form
*/
function form( $instance ) {
global $wp_properties;
$title = esc_attr( $instance[ 'title' ] );
$image_type = esc_attr( $instance[ 'image_type' ] );
$amount_items = esc_attr( $instance[ 'amount_items' ] );
$instance_stats = $instance[ 'stats' ];
$show_title = $instance[ 'show_title' ];
$hide_image = $instance[ 'hide_image' ];
$address_format = esc_attr( $instance[ 'address_format' ] );
$enable_more = $instance[ 'enable_more' ];
$enable_view_all = $instance[ 'enable_view_all' ];
$random_items = $instance[ 'random_items' ];
$property_stats = $wp_properties[ 'property_stats' ];
if ( empty( $address_format ) ) {
$address_format = "[street_number] [street_name],[city], [state]";
}
if ( !isset( $property_stats[ 'property_type' ] ) ) {
$property_stats[ 'property_type' ] = __( 'Property Type', 'wpp' );
}
?>
<script type="text/javascript">
//hide and show dropdown whith thumb settings
jQuery( document ).ready( function ( $ ) {
jQuery( 'input.check_me_featured' ).change( function () {
if ( jQuery( this ).attr( 'checked' ) !== true ) {
jQuery( 'p#choose_thumb_featured' ).css( 'display', 'block' );
} else {
jQuery( 'p#choose_thumb_featured' ).css( 'display', 'none' );
}
} );
} );
</script>
<p>
<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', 'wpp' ); ?>
<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>"
name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo $title; ?>"/>
</label>
</p>
<p>
<label for="<?php echo $this->get_field_id( 'hide_image' ); ?>">
<input id="<?php echo $this->get_field_id( 'hide_image' ); ?>" class="check_me_featured"
name="<?php echo $this->get_field_name( 'hide_image' ); ?>" type="checkbox"
value="on" <?php if ( $hide_image == 'on' ) echo " checked='checked';"; ?> />
<?php _e( 'Hide Images?', 'wpp' ); ?>
</label>
</p>
<p
id="choose_thumb_featured" <?php echo( $hide_image !== 'on' ? 'style="display:block;"' : 'style="display:none;"' ); ?>>
<label for="<?php echo $this->get_field_id( 'image_type' ); ?>"><?php _e( 'Image Size:', 'wpp' ); ?>
<?php WPP_F::image_sizes_dropdown( "name=" . $this->get_field_name( 'image_type' ) . "&selected=" . $image_type ); ?>
</label>
</p>
<p>
<label for="<?php echo $this->get_field_id( 'amount_items' ); ?>"><?php _e( 'Listings to display?', 'wpp' ); ?>
<input style="width:30px" id="<?php echo $this->get_field_id( 'amount_items' ); ?>"
name="<?php echo $this->get_field_name( 'amount_items' ); ?>" type="text"
value="<?php echo ( empty( $amount_items ) ) ? 5 : $amount_items; ?>"/>
</label>
</p>
<p>
<label for="<?php echo $this->get_field_id( 'random_items' ); ?>">
<input id="<?php echo $this->get_field_id( 'random_items' ); ?>"
name="<?php echo $this->get_field_name( 'random_items' ); ?>" type="checkbox"
value="1" <?php if ( !empty( $random_items ) ) echo ' checked="checked"'; ?> />
<?php _e( 'Display properties in random order?', 'wpp' ); ?>
</label>
</p>
<p><?php _e( 'Select the stats you want to display', 'wpp' ) ?></p>
<p>
<label for="<?php echo $this->get_field_id( 'show_title' ); ?>">
<input id="<?php echo $this->get_field_id( 'show_title' ); ?>"
name="<?php echo $this->get_field_name( 'show_title' ); ?>" type="checkbox"
value="on" <?php if ( $show_title == 'on' ) echo " checked='checked';"; ?> />
<?php _e( 'Title', 'wpp' ); ?>
</label>
<?php foreach ( $property_stats as $stat => $label ): ?>
<br/>
<label for="<?php echo $this->get_field_id( 'stats' ); ?>_<?php echo $stat; ?>">
<input id="<?php echo $this->get_field_id( 'stats' ); ?>_<?php echo $stat; ?>"
name="<?php echo $this->get_field_name( 'stats' ); ?>[]" type="checkbox" value="<?php echo $stat; ?>"
<?php if ( is_array( $instance_stats ) && in_array( $stat, $instance_stats ) ) echo " checked "; ?>">
<?php echo $label; ?>
</label>
<?php endforeach; ?>
</p>
<p>
<label for="<?php echo $this->get_field_id( 'address_format' ); ?>"><?php _e( 'Address Format:', 'wpp' ); ?>
<textarea style="width: 100%" id="<?php echo $this->get_field_id( 'address_format' ); ?>"
name="<?php echo $this->get_field_name( 'address_format' ); ?>"><?php echo $address_format; ?></textarea>
</label>
</p>
<p>
<label for="<?php echo $this->get_field_id( 'enable_more' ); ?>">
<input id="<?php echo $this->get_field_id( 'enable_more' ); ?>"
name="<?php echo $this->get_field_name( 'enable_more' ); ?>" type="checkbox"
value="on" <?php if ( $enable_more == 'on' ) echo " checked='checked';"; ?> />
<?php _e( 'Show "More" link?', 'wpp' ); ?>
</label>
</p>
<p>
<label for="<?php echo $this->get_field_id( 'enable_view_all' ); ?>">
<input id="<?php echo $this->get_field_id( 'enable_view_all' ); ?>"
name="<?php echo $this->get_field_name( 'enable_view_all' ); ?>" type="checkbox"
value="on" <?php if ( $enable_view_all == 'on' ) echo " checked='checked';"; ?> />
<?php _e( 'Show "View All" link?', 'wpp' ); ?>
</label>
</p>
<?php
}
}
/**
* Default function to use in template directly
*
* @param $args
* @param $custom
*/
function wpp_featured_properties( $args = false, $custom = false ) {
if ( !$args ) {
$args = array(
'before_title' => '<h3>',
'after_title' => '</h3>',
'before_widget' => '',
'after_widget' => ''
);
}
$default = array(
'title' => __( 'Featured Properies', 'wpp' ),
'image_type' => 'thumbnail',
'stats' => array( 'bedrooms', 'location', 'price' ),
'address_format' => '[street_number] [street_name], [city], [state]'
);
if ( $custom ) {
$default = array_merge( $default, (array)$custom );
}
FeaturedPropertiesWidget::widget( $args, $default );
}
/**
* Latest properties Widget
*/
class LatestPropertiesWidget extends WP_Widget {
/**
* constructor
*/
function LatestPropertiesWidget() {
parent::WP_Widget( false, $name = sprintf( __( 'Latest %1s', 'wpp' ), WPP_F::property_label( 'plural' ) ), array( 'description' => __( 'List of the latest properties created on this site', 'wpp' ) ) );
}
/**
* @see WP_Widget::widget
*/
function widget( $args, $instance ) {
global $wp_properties;
extract( $args );
$title = apply_filters( 'widget_title', $instance[ 'title' ] );
$instance = apply_filters( 'LatestPropertiesWidget', $instance );
$stats = $instance[ 'stats' ];
$image_type = $instance[ 'image_type' ];
$hide_image = $instance[ 'hide_image' ];
$show_title = $instance[ 'show_title' ];
$address_format = $instance[ 'address_format' ];
$property_stats = $wp_properties[ 'property_stats' ];
if ( !$image_type ) {
$image_type = '';
} else {
$image_size = WPP_F::image_sizes( $image_type );
}
if ( !isset( $property_stats[ 'property_type' ] ) ) {
$property_stats[ 'property_type' ] = __( 'Property Type', 'wpp' );
}
$arg = array(
'post_type' => 'property',
'numberposts' => $instance[ 'amount_items' ],
'post_status' => 'publish',
'post_parent' => null, // any parent
'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 = 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 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', 'wpp' ), $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 endif; ?>
<?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 ) {
$pstat = $stat;
/** Determine if stat is property_type we switch it to property_type_label */
if ( $pstat == 'property_type' ) {
$pstat = 'property_type_label';
}
$content = nl2br( apply_filters( "wpp_stat_filter_{$pstat}", $this_property->$pstat ) );
if ( empty( $content ) ) {
continue;
}
echo '<li class="' . $stat . '"><span class="attribute">' . $property_stats[ $stat ] . ':</span> <span class="value">' . $content . '</span></li>';
}
}
echo '</ul>';
if ( $instance[ 'enable_more' ] == 'on' ) {
echo '<p class="more"><a href="' . $this_property->permalink . '" class="btn btn-info">' . __( 'More', 'wpp' ) . '</a></p>';
}
?>
</div>
<?php
unset( $this_property );
}
if ( $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', 'wpp' ) . '</a></p>';
}
echo '<div class="clear"></div>';
echo '</div>';
echo $after_widget;
}
/**
* @see WP_Widget::update
*/
function update( $new_instance, $old_instance ) {
return $new_instance;
}
/**
* @see WP_Widget::form
*/
function form( $instance ) {
global $wp_properties;
$title = esc_attr( $instance[ 'title' ] );
$amount_items = esc_attr( $instance[ 'amount_items' ] );
$address_format = esc_attr( $instance[ 'address_format' ] );
$instance_stats = $instance[ 'stats' ];
$image_type = esc_attr( $instance[ 'image_type' ] );
$hide_image = $instance[ 'hide_image' ];
$show_title = $instance[ 'show_title' ];
$enable_more = $instance[ 'enable_more' ];
$enable_view_all = $instance[ 'enable_view_all' ];
$property_stats = $wp_properties[ 'property_stats' ];
if ( empty( $address_format ) ) {
$address_format = "[street_number] [street_name],[city], [state]";
}
if ( !isset( $property_stats[ 'property_type' ] ) ) {
$property_stats[ 'property_type' ] = __( 'Property Type', 'wpp' );
}
?>
<script type="text/javascript">
//hide and show dropdown whith thumb settings
jQuery( document ).ready( function ( $ ) {
jQuery( 'input.check_me' ).change( function () {
if ( $( this ).attr( 'checked' ) !== true ) {
jQuery( 'p#choose_thumb' ).css( 'display', 'block' );
} else {
jQuery( 'p#choose_thumb' ).css( 'display', 'none' );
}
} );
} );
</script>
<p>
<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', 'wpp' ); ?>
<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>"
name="<?php echo $this->get_field_name( 'title' ); ?>" type="text"
value="<?php echo ( !empty( $title ) ) ? $title : __( 'Latest Properties', 'wpp' ); ?>"/>
</label>
</p>
<p>
<label for="<?php echo $this->get_field_id( 'hide_image' ); ?>">
<input id="<?php echo $this->get_field_id( 'hide_image' ); ?>" class="check_me"
name="<?php echo $this->get_field_name( 'hide_image' ); ?>" type="checkbox"
value="on" <?php if ( $hide_image == 'on' ) echo " checked='checked';"; ?> />
<?php _e( 'Hide Images?', 'wpp' ); ?>
</label>
</p>
<p id="choose_thumb" <?php echo( $hide_image !== 'on' ? 'style="display:block;"' : 'style="display:none;"' ); ?>>
<label for="<?php echo $this->get_field_id( 'image_type' ); ?>"><?php _e( 'Image Size:', 'wpp' ); ?>
<?php WPP_F::image_sizes_dropdown( "name=" . $this->get_field_name( 'image_type' ) . "&selected=" . $image_type ); ?>
</label>
</p>
<p>
<label for="<?php echo $this->get_field_id( 'per_page' ); ?>"><?php _e( 'Listings to display?', 'wpp' ); ?>
<input style="width:30px" id="<?php echo $this->get_field_id( 'amount_items' ); ?>"
name="<?php echo $this->get_field_name( 'amount_items' ); ?>" type="text"
value="<?php echo ( empty( $amount_items ) ) ? 5 : $amount_items; ?>"/>
</label>
</p>
<p><?php _e( 'Select stats you want to display', 'wpp' ) ?></p>
<p>
<label for="<?php echo $this->get_field_id( 'show_title' ); ?>">
<input id="<?php echo $this->get_field_id( 'show_title' ); ?>"
name="<?php echo $this->get_field_name( 'show_title' ); ?>" type="checkbox"
value="on" <?php if ( $show_title == 'on' ) echo " checked='checked';"; ?> />
<?php _e( 'Title', 'wpp' ); ?>
</label>
<?php foreach ( $property_stats as $stat => $label ): ?>
<br/>
<label for="<?php echo $this->get_field_id( 'stats' ); ?>_<?php echo $stat; ?>">
<input id="<?php echo $this->get_field_id( 'stats' ); ?>_<?php echo $stat; ?>"
name="<?php echo $this->get_field_name( 'stats' ); ?>[]" type="checkbox" value="<?php echo $stat; ?>"
<?php if ( is_array( $instance_stats ) && in_array( $stat, $instance_stats ) ) echo " checked "; ?>">
<?php echo $label; ?>
</label>
<?php endforeach; ?>
</p>
<p>
<label for="<?php echo $this->get_field_id( 'address_format' ); ?>"><?php _e( 'Address Format:', 'wpp' ); ?>
<textarea style="width: 100%" id="<?php echo $this->get_field_id( 'address_format' ); ?>"
name="<?php echo $this->get_field_name( 'address_format' ); ?>"><?php echo $address_format; ?></textarea>
</label>
</p>
<p>
<label for="<?php echo $this->get_field_id( 'enable_more' ); ?>">
<input id="<?php echo $this->get_field_id( 'enable_more' ); ?>"
name="<?php echo $this->get_field_name( 'enable_more' ); ?>" type="checkbox"
value="on" <?php if ( $enable_more == 'on' ) echo " checked='checked';"; ?> />
<?php _e( 'Show "More" link?', 'wpp' ); ?>
</label>
</p>
<p>
<label for="<?php echo $this->get_field_id( 'enable_view_all' ); ?>">
<input id="<?php echo $this->get_field_id( 'enable_view_all' ); ?>"
name="<?php echo $this->get_field_name( 'enable_view_all' ); ?>" type="checkbox"
value="on" <?php if ( $enable_view_all == 'on' ) echo " checked='checked';"; ?> />
<?php _e( 'Show "View All" link?', 'wpp' ); ?>
</label>
</p>
<?php
}
}
/**
* Property Search Widget
*/
class SearchPropertiesWidget extends WP_Widget {
var $id = false;
/** constructor */
function SearchPropertiesWidget() {
$property_label = strtolower( WPP_F::property_label() );
parent::__construct(
false,
sprintf( __( '%1s Search', 'wpp' ), WPP_F::property_label() ),
array(
'classname' => 'wpp_property_attributes',
'description' => sprintf( __( 'Display a highly customizable %1s search form.', 'wpp' ), $property_label )
),
array(
'width' => 300
)
);
}
/** @see WP_Widget::widget */
function widget( $args, $instance ) {
global $wp_properties;
extract( $args );
$title = apply_filters( 'widget_title', $instance[ 'title' ] );
$instance = apply_filters( 'SearchPropertiesWidget', $instance );
$search_attributes = $instance[ 'searchable_attributes' ];
$sort_by = $instance[ 'sort_by' ];
$sort_order = $instance[ 'sort_order' ];
$searchable_property_types = $instance[ 'searchable_property_types' ];
$grouped_searchable_attributes = $instance[ 'grouped_searchable_attributes' ];
if ( !is_array( $search_attributes ) ) {
return;
}
if ( !function_exists( 'draw_property_search_form' ) ) {
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_search_properties_widget">';
if ( $title ) {
echo $before_title . $title . $after_title;
} else {
echo '<span class="wpp_widget_no_title"></span>';
}
//** Load different attribute list depending on group selection */
if ( $instance[ 'group_attributes' ] == 'true' ) {
$search_args[ 'group_attributes' ] = true;
$search_args[ 'search_attributes' ] = $instance[ 'grouped_searchable_attributes' ];
} else {
$search_args[ 'search_attributes' ] = $search_attributes;
}
//* Clean searchable attributes: remove unavailable ones */
$all_searchable_attributes = array_unique( $wp_properties[ 'searchable_attributes' ] );
foreach ( $search_args[ 'search_attributes' ] as $k => $v ) {
if ( !in_array( $v, $all_searchable_attributes ) ) {
//* Don't remove hardcoded attributes (property_type,city) */
if ( $v != 'property_type' && $v != 'city' ) {
unset( $search_args[ 'search_attributes' ][ $k ] );
}
}
}
$search_args[ 'searchable_property_types' ] = $searchable_property_types;
if ( isset( $instance[ 'use_pagi' ] ) && $instance[ 'use_pagi' ] == 'on' ) {
if ( empty( $instance[ 'per_page' ] ) ) {
$instance[ 'per_page' ] = 10;
}
$search_args[ 'per_page' ] = $instance[ 'per_page' ];
$search_args[ 'use_pagination' ] = 'on';
} else {
$search_args[ 'use_pagination' ] = 'off';
$search_args[ 'per_page' ] = $instance[ 'per_page' ];
}
$search_args[ 'instance_id' ] = $widget_id;
$search_args[ 'sort_by' ] = $sort_by;
$search_args[ 'sort_order' ] = $sort_order;
draw_property_search_form( $search_args );
echo "<div class='cboth'></div></div>";
echo $after_widget;
}
/** @see WP_Widget::update */
function update( $new_instance, $old_instance ) {
//Recache searchable values for search widget form
$searchable_attributes = $new_instance[ 'searchable_attributes' ];
$grouped_searchable_attributes = $new_instance[ 'grouped_searchable_attributes' ];
$searchable_property_types = $new_instance[ 'searchable_property_types' ];
$group_attributes = $new_instance[ 'group_attributes' ];
if ( $group_attributes == 'true' ) {
WPP_F::get_search_values( $grouped_searchable_attributes, $searchable_property_types, false, $this->id );
} else {
WPP_F::get_search_values( $searchable_attributes, $searchable_property_types, false, $this->id );
}
return $new_instance;
}
/**
*
* Renders back-end property search widget tools.
*
* @complexity 8
* @author potanin@UD
*
*/
function form( $instance ) {
global $wp_properties;
//** Get widget-specific data */
$title = ( $instance[ 'title' ] );
$searchable_attributes = $instance[ 'searchable_attributes' ];
$grouped_searchable_attributes = $instance[ 'grouped_searchable_attributes' ];
$use_pagi = $instance[ 'use_pagi' ];
$per_page = $instance[ 'per_page' ];
$sort_by = $instance[ 'sort_by' ];
$sort_order = $instance[ 'sort_order' ];
$group_attributes = $instance[ 'group_attributes' ];
$searchable_property_types = $instance[ 'searchable_property_types' ];
$property_stats = $wp_properties[ 'property_stats' ];
//** Get WPP data */
$all_searchable_property_types = array_unique( $wp_properties[ 'searchable_property_types' ] );
$all_searchable_attributes = array_unique( $wp_properties[ 'searchable_attributes' ] );
$groups = $wp_properties[ 'property_groups' ];
$main_stats_group = $wp_properties[ 'configuration' ][ 'main_stats_group' ];
if ( !is_array( $all_searchable_property_types ) ) {
$error[ 'no_searchable_types' ] = true;
}
if ( !is_array( $all_searchable_property_types ) ) {
$error[ 'no_searchable_attributes' ] = true;
}
/** Set label for list below only */
if ( !isset( $property_stats[ 'property_type' ] ) ) {
$property_stats[ 'property_type' ] = __( 'Property Type', 'wpp' );
}
if ( is_array( $all_searchable_property_types ) && count( $all_searchable_property_types ) > 1 ) {
//** Add property type to the beginning of the attribute list, even though it's not a typical attribute */
array_unshift( $all_searchable_attributes, 'property_type' );
}
//** Find the difference between selected attributes and all attributes, i.e. unselected attributes */
if ( is_array( $searchable_attributes ) && is_array( $all_searchable_attributes ) ) {
$unselected_attributes = array_diff( $all_searchable_attributes, $searchable_attributes );
//* Clean searchable attributes: remove unavailable ones */
foreach ( $searchable_attributes as $k => $v ) {
if ( !in_array( $v, $all_searchable_attributes ) ) {
//* Don't remove hardcoded attributes (property_type,city) */
if ( $v != 'property_type' && $v != 'city' ) {
unset( $searchable_attributes[ $k ] );
}
}
}
// Build new array beginning with selected attributes, in order, follow by all other attributes
$ungrouped_searchable_attributes = array_merge( $searchable_attributes, $unselected_attributes );
} else {
$ungrouped_searchable_attributes = $all_searchable_attributes;
}
$ungrouped_searchable_attributes = array_unique( $ungrouped_searchable_attributes );
//* Perpare $all_searchable_attributes for using by sort function */
$temp_attrs = array();
foreach ( $all_searchable_attributes as $slug ) {
$attribute_label = $property_stats[ 'property_stats' ][ $slug ];
if ( empty( $attribute_label ) ) {
$attribute_label = WPP_F::de_slug( $slug );
}
$temp_attrs[ $attribute_label ] = $slug;
}
//* Sort stats by groups */
$stats_by_groups = sort_stats_by_groups( $temp_attrs );
//** If the search widget cannot be created without some data, we bail */
if ( $error ) {
echo '<p>' . _e( 'No searchable property types were found.', 'wpp' ) . '</p>';
return;
}
?>
<ul data-widget_number="<?php echo $this->number; ?>" data-widget="search_properties_widget"
class="wpp_widget wpp_property_search_wrapper">
<li class="<?php echo $this->get_field_id( 'title' ); ?>">
<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', 'wpp' ); ?>
<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>"
name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo $title; ?>"/>
</label>
</li>
<li class="wpp_property_types">
<p><?php _e( 'Property types to search:', 'wpp' ); ?></p>
<ul>
<?php foreach ( $all_searchable_property_types as $property_type ) { ?>
<li>
<label
for="<?php echo $this->get_field_id( 'searchable_property_types' ); ?>_<?php echo $property_type; ?>">
<input class="wpp_property_types"
id="<?php echo $this->get_field_id( 'searchable_property_types' ); ?>_<?php echo $property_type; ?>"
name="<?php echo $this->get_field_name( 'searchable_property_types' ); ?>[]"
type="checkbox" <?php if ( empty( $searchable_property_types ) ) {
echo 'checked="checked"';
} ?>
value="<?php echo $property_type; ?>" <?php if ( is_array( $searchable_property_types ) && in_array( $property_type, $searchable_property_types ) ) {
echo " checked ";
} ?> />
<?php echo( !empty( $wp_properties[ 'property_types' ][ $property_type ] ) ? $wp_properties[ 'property_types' ][ $property_type ] : ucwords( $property_type ) ); ?>
</label>
</li>
<?php } ?>
</ul>
</li>
<li class="wpp_attribute_selection">
<p><?php _e( 'Select the attributes you want to search.', 'wpp' ); ?></p>
<div class="wpp_search_widget_tab wpp_subtle_tabs ">
<ul class="wpp_section_tabs tabs">
<li><a href="#all_atributes_<?php echo $this->id; ?>"><?php _e( 'All Attributes', 'wpp' ); ?></a></li>
<?php if ( $stats_by_groups ) { ?>
<li><a href="#grouped_attributes_<?php echo $this->id; ?>"><?php _e( 'Grouped Attributes', 'wpp' ); ?></a>
</li>
<?php } ?>
</ul>
<div id="all_atributes_<?php echo $this->id; ?>" class="wp-tab-panel wpp_all_attributes">
<ul class="wpp_sortable_attributes">
<?php foreach ( $ungrouped_searchable_attributes as $attribute ) { ?>
<li class="wpp_attribute_wrapper <?php echo $attribute; ?>">
<input id="<?php echo $this->get_field_id( 'searchable_attributes' ); ?>_<?php echo $attribute; ?>"
name="<?php echo $this->get_field_name( 'searchable_attributes' ); ?>[]"
type="checkbox" <?php if ( empty( $searchable_attributes ) ) {
echo 'checked="checked"';
} ?>
value="<?php echo $attribute; ?>" <?php echo( ( is_array( $searchable_attributes ) && in_array( $attribute, $searchable_attributes ) ) ? " checked " : "" ); ?> />
<label
for="<?php echo $this->get_field_id( 'searchable_attributes' ); ?>_<?php echo $attribute; ?>"><?php echo( !empty( $property_stats[ $attribute ] ) ? $property_stats[ $attribute ] : ucwords( $attribute ) ); ?></label>
</li>
<?php } ?>
</ul>
</div><?php /* end all (ungrouped) attribute selection */ ?>
<?php if ( $stats_by_groups ) { ?>
<div id="grouped_attributes_<?php echo $this->id; ?>" class="wpp_grouped_attributes_container wp-tab-panel">
<?php foreach ( $stats_by_groups as $gslug => $gstats ) { ?>
<?php if ( $main_stats_group != $gslug || !key_exists( $gslug, $groups ) ) { ?>
<?php $group_name = ( key_exists( $gslug, $groups ) ? $groups[ $gslug ][ 'name' ] : "<span style=\"color:#8C8989\">" . __( 'Ungrouped', 'wpp' ) . "</span>" ); ?>
<h2 class="wpp_stats_group"><?php echo $group_name; ?></h2>
<?php } ?>
<ul>
<?php foreach ( $gstats as $attribute ) { ?>
<li>
<input
id="<?php echo $this->get_field_id( 'grouped_searchable_attributes' ); ?>_<?php echo $attribute; ?>"
name="<?php echo $this->get_field_name( 'grouped_searchable_attributes' ); ?>[]"
type="checkbox" <?php if ( empty( $grouped_searchable_attributes ) ) {
echo 'checked="checked"';
} ?>
value="<?php echo $attribute; ?>" <?php echo( ( is_array( $grouped_searchable_attributes ) && in_array( $attribute, $grouped_searchable_attributes ) ) ? " checked " : "" ); ?> />
<label
for="<?php echo $this->get_field_id( 'grouped_searchable_attributes' ); ?>_<?php echo $attribute; ?>"><?php echo( !empty( $property_stats[ $attribute ] ) ? $property_stats[ $attribute ] : ucwords( $attribute ) ); ?></label>
</li>
<?php } ?>
</ul>
<?php } /* End cycle through $stats_by_groups */ ?>
</div>
<?php } ?>
</div>
</li>
<li>
<?php if ($stats_by_groups) { ?>
<div>
<input id="<?php echo $this->get_field_id( 'group_attributes' ); ?>" class="wpp_toggle_attribute_grouping"
type="checkbox" value="true"
name="<?php echo $this->get_field_name( 'group_attributes' ); ?>" <?php checked( $group_attributes, 'true' ); ?> />
<label
for="<?php echo $this->get_field_id( 'group_attributes' ); ?>"><?php _e( 'Group attributes together.' ); ?></label>
</div>
</li>
<?php } ?>
<li>
<div class="wpp_something_advanced_wrapper" style="margin-top: 10px;">
<ul>
<?php if ( is_array( $wp_properties[ 'sortable_attributes' ] ) ) { ?>
<li class="wpp_development_advanced_option">
<div><label
for="<?php echo $this->get_field_id( 'sort_by' ); ?>"><?php _e( 'Default Sort Order', 'wpp' ); ?></label>
</div>
<select id="<?php echo $this->get_field_id( 'sort_by' ); ?>"
name="<?php echo $this->get_field_name( 'sort_by' ); ?>">
<option></option>
<?php foreach ( $wp_properties[ 'sortable_attributes' ] as $attribute ) { ?>
<option
value="<?php echo esc_attr( $attribute ); ?>" <?php selected( $sort_by, $attribute ); ?> ><?php echo $property_stats[ $attribute ]; ?></option>
<?php } ?>
</select>
<select id="<?php echo $this->get_field_id( 'sort_order' ); ?>"
name="<?php echo $this->get_field_name( 'sort_order' ); ?>">
<option></option>
<option value="DESC" <?php selected( $sort_order, 'DESC' ); ?> ><?php _e( 'Descending' ); ?></option>
<option value="ASC" <?php selected( $sort_order, 'ASC' ); ?> ><?php _e( 'Acending' ); ?></option>
</select>
</li>
<?php } ?>
<li class="wpp_development_advanced_option">
<label for="<?php echo $this->get_field_id( 'use_pagi' ); ?>">
<input id="<?php echo $this->get_field_id( 'use_pagi' ); ?>"
name="<?php echo $this->get_field_name( 'use_pagi' ); ?>" type="checkbox"
value="on" <?php if ( $use_pagi == 'on' ) echo " checked='checked';"; ?> />
<?php _e( 'Use pagination', 'wpp' ); ?>
</label>
</li>
<li class="wpp_development_advanced_option">
<label for="<?php echo $this->get_field_id( 'per_page' ); ?>"><?php _e( 'Items per page', 'wpp' ); ?>
<input style="width:30px" id="<?php echo $this->get_field_id( 'per_page' ); ?>"
name="<?php echo $this->get_field_name( 'per_page' ); ?>" type="text"
value="<?php echo $per_page; ?>"/>
</label>
</li>
<li>
<span class="wpp_show_advanced"><?php _e( 'Toggle Advanced Search Options', 'wpp' ); ?></span>
</li>
</ul>
</div>
</li>
</ul>
<?php
}
}
// Default function to use in template directly
function wpp_search_widget( $args = false, $custom = false ) {
global $wp_properties;
if ( !$args ) {
$args = array(
'before_title' => '<h3>',
'after_title' => '</h3>',
'before_widget' => '',
'after_widget' => ''
);
}
// $searchable_attributes = array('bedrooms','bathrooms','area','city', 'price');
$searchable_attributes = $custom;
$searchable_property_types = $wp_properties[ 'searchable_property_types' ];
$default = array(
'title' => __( 'Search Properies', 'wpp' ),
'use_pagi' => 'on',
'per_page' => 10,
'searchable_attributes' => $searchable_attributes,
'searchable_property_types' => $searchable_property_types
);
if ( $custom ) {
$default = array_merge( $default, (array)$custom );
}
$count = strlen( implode( '-', $default[ 'searchable_attributes' ] ) ) . strlen( implode( '-', $default[ 'searchable_property_types' ] ) );
WPP_F::get_search_values( $searchable_attributes, $searchable_property_types, false, 'searchpropertieswidget-' . $count );
SearchPropertiesWidget::widget( $args, $default );
}
/**
Property Gallery Widget
*/
class GalleryPropertiesWidget extends WP_Widget {
/** constructor */
function GalleryPropertiesWidget() {
parent::WP_Widget( false, $name = sprintf( __( '%1s Gallery', 'wpp' ), WPP_F::property_label() ), array( 'description' => __( 'List of all images attached to the current property', 'wpp' ) ) );
}
/** @see WP_Widget::widget */
function widget( $args, $instance ) {
global $wp_properties, $post, $property;
extract( $args );
$title = apply_filters( 'widget_title', $instance[ 'title' ] );
$image_type = esc_attr( $instance[ 'image_type' ] );
$big_image_type = esc_attr( $instance[ 'big_image_type' ] );
$gallery_count = esc_attr( $instance[ 'gallery_count' ] );
$show_caption = esc_attr( $instance[ 'show_caption' ] );
$show_description = esc_attr( $instance[ 'show_description' ] );
$gallery = (array)( ( $post->gallery ) ? $post->gallery : $property[ 'gallery' ] );
$slideshow_order = maybe_unserialize( ( $post->slideshow_images ) ? $post->slideshow_images : $property[ 'slideshow_images' ] );
$gallery_order = maybe_unserialize( ( $post->gallery_images ) ? $post->gallery_images : $property[ 'gallery_images' ] );
//** Calculate order of images */
if ( is_array( $slideshow_order ) && is_array( $gallery_order ) ) {
$order = array_merge( $slideshow_order, $gallery_order );
$prepared_gallery_images = array();
//** Get images from the list of images by order */
foreach ( $order as $order_id ) {
foreach ( $gallery as $image_slug => $gallery_image_data ) {
if ( $gallery_image_data[ 'attachment_id' ] == $order_id ) {
$prepared_gallery_images[ $image_slug ] = $gallery_image_data;
}
}
}
//** Be sure we show ALL property images in gallery */
$gallery = array_merge( $prepared_gallery_images, $gallery );
}
if ( empty( $image_type ) ) {
$image_type = 'thumbnail';
}
if ( !is_array( $gallery ) ) {
return;
}
$thumbnail_dimensions = WPP_F::image_sizes( $image_type );
//** 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);
*/
$html[ ] = $before_widget;
$html[ ] = "<div class='wpp_gallery_widget'>";
if ( $title ) {
$html[ ] = $before_title . $title . $after_title;
}
ob_start();
if ( is_array( $gallery ) ) {
$real_count = 0;
foreach ( $gallery as $image ) {
$thumb_image = wpp_get_image_link( $image[ 'attachment_id' ], $image_type );
?>
<div class="sidebar_gallery_item">
<?php if ( !empty( $big_image_type ) ) : ?>
<?php $big_image = wpp_get_image_link( $image[ 'attachment_id' ], $big_image_type ); ?>
<a href="<?php echo $big_image; ?>" class="fancybox_image thumbnail" rel="property_gallery">
<img src="<?php echo $thumb_image; ?>"
title="<?php echo esc_attr( $image[ 'post_excerpt' ] ? $image[ 'post_excerpt' ] : $image[ 'post_title' ] . ' - ' . $post->post_title ); ?>"
alt="<?php echo esc_attr( $image[ 'post_excerpt' ] ? $image[ 'post_excerpt' ] : $image[ 'post_title' ] ); ?>"
class="wpp_gallery_widget_image size-thumbnail "
width="<?php echo $thumbnail_dimensions[ 'width' ]; ?>"
height="<?php echo $thumbnail_dimensions[ 'height' ]; ?>"/>
</a>
<?php else : ?>
<img src="<?php echo $thumb_image; ?>"
title="<?php echo esc_attr( $image[ 'post_excerpt' ] ? $image[ 'post_excerpt' ] : $image[ 'post_title' ] . ' - ' . $post->post_title ); ?>"
alt="<?php echo esc_attr( $image[ 'post_excerpt' ] ? $image[ 'post_excerpt' ] : $image[ 'post_title' ] ); ?>"
class="wpp_gallery_widget_image size-thumbnail "
width="<?php echo $thumbnail_dimensions[ 'width' ]; ?>"
height="<?php echo $thumbnail_dimensions[ 'height' ]; ?>"/> <?php endif; ?>
<?php if ( $show_caption == 'on' && !empty( $image[ 'post_excerpt' ] ) ) { ?>
<div class="wpp_image_widget_caption"><?php echo $image[ 'post_excerpt' ]; ?></div>
<?php } ?>
<?php if ( $show_description == 'on' ) { ?>
<div class="wpp_image_widget_description"><?php echo $image[ 'post_content' ]; ?></div>
<?php } ?>
</div>
<?php
$real_count++;
if ( !empty( $gallery_count ) && $gallery_count == $real_count ) {
break;
}
}
}
$html[ 'images' ] = ob_get_contents();
ob_end_clean();
$html[ ] = "</div>";
$html[ ] = $after_widget;
$html = apply_filters( 'wpp_widget_property_gallery', $html, array( 'args' => $args, 'instance' => $instance, 'post' => $post ) );
if ( !empty( $html[ 'images' ] ) && is_array( $html ) ) {
echo implode( '', $html );
}
return;
}
/** @see WP_Widget::update */
function update( $new_instance ) {
return $new_instance;
}
/** @see WP_Widget::form */
function form( $instance ) {
global $wp_properties;
$title = esc_attr( $instance[ 'title' ] );
$image_type = $instance[ 'image_type' ];
$big_image_type = $instance[ 'big_image_type' ];
$show_caption = $instance[ 'show_caption' ];
$show_description = $instance[ 'show_description' ];
$gallery_count = $instance[ 'gallery_count' ]; ?>
<p>
<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>"
name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo $title; ?>"/>
</p>
<p>
<label for="<?php echo $this->get_field_id( 'image_type' ); ?>"><?php _e( 'Regular Size:' ); ?></label>
<?php WPP_F::image_sizes_dropdown( "name=" . $this->get_field_name( 'image_type' ) . "&selected=" . $image_type ); ?>
</p>
<p class="wpp_gallery_big_image_type">
<label for="<?php echo $this->get_field_id( 'big_image_type' ); ?>"><?php _e( 'Large Image Size:' ); ?></label>
<?php WPP_F::image_sizes_dropdown( "name=" . $this->get_field_name( 'big_image_type' ) . "&selected=" . $big_image_type ); ?>
</p>
<p>
<label for="<?php echo $this->get_field_id( 'gallery_count' ) ?>"></label>
<?php $number_of_images = '<input size="3" type="text" id="' . $this->get_field_id( 'gallery_count' ) . '" name="' . $this->get_field_name( 'gallery_count' ) . '" value="' . $gallery_count . '" />'; ?>
<?php echo sprintf( __( 'Show %s Images', 'wpp' ), $number_of_images ); ?>
</p>
<p>
<input name="<?php echo $this->get_field_name( 'show_caption' ); ?>"
id="<?php echo $this->get_field_id( 'show_caption' ) ?>"
type="checkbox" <?php checked( 'on', $show_caption ); ?> value="on"/>
<label
for="<?php echo $this->get_field_id( 'show_caption' ) ?>"><?php _e( 'Show Image Captions', 'wpp' ); ?></label>
</p>
<p class="wpp_gallery_show_description">
<input name="<?php echo $this->get_field_name( 'show_description' ); ?>"
id="<?php echo $this->get_field_id( 'show_description' ) ?>"
type="checkbox" <?php checked( 'on', $show_description ); ?> value="on"/>
<label
for="<?php echo $this->get_field_id( 'show_description' ) ?>"><?php _e( 'Show Image Descriptions.', 'wpp' ); ?></label>
</p>
<?php do_action( 'wpp_widget_slideshow_bottom', array( 'this_object' => $this, 'instance' => $instance ) ); ?>
<?php
}
}