1 <?php
2 3 4 5 6 7 8 9
10
11
12 if ( ! defined( 'ABSPATH' ) ) exit;
13
14 if ( ! class_exists( 'EDD_Reviews_Widget_Reviews' ) ) :
15
16 17 18 19 20 21 22 23 24
25 final class EDD_Reviews_Widget_Reviews extends WP_Widget {
26 27 28 29 30 31 32
33 public function __construct() {
34 parent::__construct(
35 false,
36 __( 'EDD Reviews', 'edd-reviews' ),
37 apply_filters( 'edd_reviews_widget_options', array(
38 'classname' => 'widget_edd_reviews',
39 'description' => __( 'Display the latest reviews posted on your store.', 'edd-reviews' )
40 ) )
41 );
42
43 $this->alt_option_name = 'widget_edd_reviews';
44
45 add_action( 'comment_post', array( $this, 'flush_widget_cache' ) );
46 add_action( 'transition_comment_status', array( $this, 'flush_widget_cache' ) );
47 }
48
49 50 51 52 53 54 55 56
57 public function flush_widget_cache() {
58 wp_cache_delete( 'widget_edd_recent_reviews', 'widget' );
59 }
60
61 62 63 64 65 66 67
68 public function widget( $args, $instance ) {
69 extract( $args, EXTR_SKIP );
70
71
72 $output = '';
73
74
75 $cache = wp_cache_get( 'widget_edd_recent_reviews', 'widget' );
76
77
78 if ( ! is_array( $cache ) )
79 $cache = array();
80
81 $title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : __( 'Recent Reviews', 'edd-reviews' );
82 $title = apply_filters( 'widget_title', $title, $instance, $this->id_base );
83
84 $number = ( ! empty( $instance['number'] ) ) ? absint( $instance['number'] ) : 5;
85
86 if ( ! $number )
87 $number = 5;
88
89 $reviews = get_comments( apply_filters( 'widget_edd_reviews_args', array( 'number' => $number, 'status' => 'approve', 'post_status' => 'publish', 'post_type' => 'download' ) ) );
90
91 $output .= $before_widget;
92
93 if ( ! empty( $title ) )
94 $output .= $before_title . $title . $after_title;
95
96 if ( $reviews ) {
97 $output .= '<ul id="edd_recent_reviews" class="edd_reviews_list edd_widget_list">';
98
99 foreach ( (array) $reviews as $review ) {
100 $rating = get_comment_meta( $review->comment_ID, 'edd_rating', true );
101
102 $output .= '<li class="edd_recent_review">';
103 $output .= sprintf( _x( '%1$s on %2$s', 'widgets', 'edd-reviews' ), get_comment_author_link(), '<a href="' . esc_url( get_comment_link( $review->comment_ID ) ) . '">' . get_the_title( $review->comment_post_ID ) . '</a>' );
104 $output .= '</li>';
105 }
106
107 $output .= '</ul>';
108 }
109
110 $output .= $after_widget;
111
112 echo $output;
113
114
115 $ouput = $cache[ $args['widget_id'] ];
116
117
118 wp_cache_set( 'widget_edd_recent_reviews', $cache, 'widget' );
119 }
120
121 122 123 124 125 126 127 128
129 public function update( $new_instance, $old_instance ) {
130 $instance = $old_instance;
131
132 $instance['title'] = strip_tags( $new_instance['title'] );
133
134 $instance['number'] = absint( $new_instance['number'] );
135
136 $this->flush_widget_cache();
137
138 $alloptions = wp_cache_get( 'alloptions', 'options' );
139
140 if ( isset( $alloptions['widget_edd_reviews'] ) )
141 delete_option( 'widget_edd_reviews' );
142
143 return $instance;
144 }
145
146 147 148 149 150 151 152 153
154 public function form( $instance ) {
155 $title = isset( $instance['title'] ) ? esc_attr( $instance['title'] ) : '';
156 $number = isset( $instance['number'] ) ? esc_attr( $instance['number'] ) : 5;
157 ?>
158 <p>
159 <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', 'edd-reviews' ); ?></label>
160 <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
161 </p>
162
163 <p>
164 <label for="<?php echo $this->get_field_id( 'number' ); ?>"><?php _e( 'Number of reviews to show:', 'edd-reviews' ); ?></label>
165 <input id="<?php echo $this->get_field_id( 'number' ); ?>" name="<?php echo $this->get_field_name( 'number' ); ?>" type="text" value="<?php echo $number; ?>" size="3" /></p>
166 </p>
167 <?php
168 }
169 }
170
171 endif;