$description));
}
protected function defaults() {
$translations = array(
'hlimit' => 'limit',
'showimages' => 'show-images',
'showblank' => 'show-blank',
);
$defaults = array(
'title' => __('Latest Ads', 'another-wordpress-classifieds-plugin'),
'show-title' => 1,
'show-excerpt' => 1,
'show-images' => 1,
'show-blank' => 1,
'thumbnail-position-in-desktop' => 'left',
'thumbnail-position-in-mobile' => 'above',
'limit' => 10,
);
// TODO: get rid of the widget_awpcplatestads option in 3.1 or 3.0.1
$options = get_option('widget_awpcplatestads');
$options = is_array($options) ? $options : array();
foreach ($translations as $old => $new) {
if (isset($options[$old])) {
$options[$new] = $options[$old];
}
}
return array_intersect_key(array_merge($defaults, $options), $defaults);
}
/**
* [render description]
* @param [type] $items [description]
* @param [type] $instance [description]
* @param string $html_class CSS class for each LI element.
* @since 3.0-beta
* @return string HTML
*/
protected function render($items, $instance, $html_class='') {
$instance = array_merge( $this->defaults(), $instance );
if ( empty( $items ) ) {
return $this->render_empty_widget( $html_class );
} else {
return $this->render_widget( $items, $instance, $html_class );
}
}
private function render_empty_widget( $html_class ) {
return sprintf( '
%s', $html_class, __( 'There are currently no Ads to show.', 'another-wordpress-classifieds-plugin' ) );
}
private function render_widget( $items, $instance, $html_class ) {
$html_class = implode( ' ', array(
$this->get_item_thumbnail_position_css_class( $instance['thumbnail-position-in-desktop'], 'desktop' ),
$this->get_item_thumbnail_position_css_class( $instance['thumbnail-position-in-mobile'], 'mobile' ),
$html_class,
) );
foreach ($items as $item) {
$html[] = $this->render_item( $item, $instance, $html_class );
}
return join("\n", $html);
}
private function get_item_thumbnail_position_css_class( $thumbnail_position, $version ) {
if ( $thumbnail_position == 'left' || $thumbnail_position == 'right' ) {
$css_class = sprintf( 'awpcp-listings-widget-item-with-%s-thumbnail-in-%s', $thumbnail_position, $version );
} else {
$css_class = sprintf( 'awpcp-listings-widget-item-with-thumbnail-above-in-%s', $version );
}
return $css_class;
}
private function render_item( $item, $instance, $html_class ) {
$item_url = url_showad( $item->ad_id );
$item_title = sprintf( '%s', $item_url, stripslashes( $item->ad_title ) );
if ($instance['show-title']) {
$html_title = sprintf( '%s
', $item_title );
} else {
$html_title = '';
}
if ($instance['show-excerpt']) {
$excerpt = stripslashes( awpcp_utf8_substr( $item->ad_details, 0, 50 ) ) . "...";
$read_more = sprintf( '[%s]', $item_url, __( 'Read more', 'another-wordpress-classifieds-plugin' ) );
$html_excerpt = sprintf( '%s%s
', $excerpt, $read_more );
} else {
$html_excerpt = '';
}
$html_image = $this->render_item_image( $item, $instance );
if ( ! empty( $html_image ) ) {
$template = '';
} else {
$template = '%3$s %4$s
';
}
return sprintf( $template, $html_class, $html_image, $html_title, $html_excerpt );
}
protected function render_item_image( $item, $instance ) {
global $awpcp_imagesurl;
$show_images = $instance['show-images'] && awpcp_are_images_allowed();
$image = awpcp_media_api()->get_ad_primary_image( $item );
if ( ! is_null( $image ) && $show_images ) {
$image_url = $image->get_url();
} else if ( $instance['show-blank'] && $show_images ) {
$image_url = "$awpcp_imagesurl/adhasnoimage.png";
} else {
$image_url = '';
}
if ( empty( $image_url ) ) {
$html_image = '';
} else {
$image_dimensions = awpcp_media_api()->get_metadata( $image, 'image-dimensions', array() );
$image_dimensions = awpcp_array_data( 'thumbnail', array(), $image_dimensions );
$image_attributes = array(
'attributes' => array(
'alt' => esc_attr( $item->get_title() ),
'src' => $image_url,
'width' => awpcp_array_data( 'width', null, $image_dimensions ),
'height' => awpcp_array_data( 'height', null, $image_dimensions ),
),
);
$html_image = sprintf(
'%s',
url_showad( $item->ad_id ),
awpcp_html_image( $image_attributes )
);
}
return apply_filters( 'awpcp-listings-widget-listing-thumbnail', $html_image, $item );
}
protected function query($instance) {
return array(
'context' => array( 'public-listings', 'latest-listings-widget' ),
'orderby' => 'renewed-date',
'limit' => $instance['limit'],
);
}
public function widget($args, $instance) {
extract($args);
$title = apply_filters( 'widget_title', $instance['title'] );
echo $before_widget;
// do not show empty titles
echo !empty( $title ) ? $before_title . $title . $after_title : '';
echo '';
echo $after_widget;
}
public function form($instance) {
$instance = array_merge($this->defaults(), $instance);
include(AWPCP_DIR . '/frontend/templates/widget-latest-ads-form.tpl.php');
}
public function update($new_instance, $old_instance) {
$instance['title'] = sanitize_text_field( $new_instance['title'] );
$instance['limit'] = sanitize_text_field( $new_instance['limit'] );
$instance['show-title'] = absint($new_instance['show-title']);
$instance['show-excerpt'] = absint($new_instance['show-excerpt']);
$instance['show-images'] = absint($new_instance['show-images']);
$instance['show-blank'] = absint($new_instance['show-blank']);
$instance['thumbnail-position-in-desktop'] = sanitize_text_field( $new_instance['thumbnail-position-in-desktop'] );
$instance['thumbnail-position-in-mobile'] = sanitize_text_field( $new_instance['thumbnail-position-in-mobile'] );
return $instance;
}
}