This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | /** |
||
3 | * @package IvyCat AJAX Testimonials |
||
4 | * @author Eric Amundson <[email protected]> |
||
5 | * @copyright 2017 IvyCat, Inc. |
||
6 | * @license GPL-2.0+ |
||
7 | * |
||
8 | * @wordpress-plugin |
||
9 | * Plugin Name: IvyCat AJAX Testimonials |
||
10 | * Plugin URI: https://ivycat.com/wordpress/wordpress-plugins/ivycat-ajax-testimonials/ |
||
11 | * Description: Simply add dynamic testimonials to your site. |
||
12 | * Author: IvyCat, Inc. |
||
13 | * Author URI: https://ivycat.com |
||
14 | * Version: 1.5.2 |
||
15 | * Text Domain: ivycat-ajax-testimonials |
||
16 | * Domain Path: /languages |
||
17 | * License: GPL-2.0+ |
||
18 | * License URI: http://www.gnu.org/licenses/gpl-2.0.txt |
||
19 | */ |
||
20 | |||
21 | if ( ! defined( 'ICTESTI_DIR' ) ) { |
||
22 | define( 'ICTESTI_DIR', plugin_dir_path( __FILE__ ) ); |
||
23 | } |
||
24 | if ( ! defined( 'ICTESTI_URL' ) ) { |
||
25 | define( 'ICTESTI_URL', plugin_dir_url( __FILE__ ) ); |
||
26 | } |
||
27 | |||
28 | // Load the class for displaying testimonials_in_page |
||
29 | if ( ! class_exists( 'ICTestimonialPosts' ) ) { |
||
30 | require_once( 'lib/IvyCatTestimonialsPosts.php' ); |
||
31 | } |
||
32 | |||
33 | $GLOBALS['ivycat_testimonials'] = new IvyCatTestimonials(); |
||
34 | add_action( 'plugins_loaded', array( $GLOBALS['ivycat_testimonials'], 'start' ) ); |
||
35 | load_plugin_textdomain( 'ivycat-ajax-testimonials', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' ); |
||
36 | |||
37 | class IvyCatTestimonials { |
||
38 | |||
39 | public $more_tag; |
||
40 | public $num_words; |
||
41 | |||
42 | public function start() { |
||
43 | add_action( 'init', array( $this, 'init' ) ); |
||
44 | add_action( 'widgets_init', array( $this, 'register_widgets' ) ); |
||
45 | } |
||
46 | |||
47 | public function init() { |
||
48 | $labels = array( |
||
49 | 'name' => _x( 'Testimonials', 'post format general name', 'ivycat-ajax-testimonials' ), |
||
50 | 'singular_name' => _x( 'Testimonial', 'post format singular name', 'ivycat-ajax-testimonials' ), |
||
51 | 'add_new' => _x( 'Add New', 'testimonials', 'ivycat-ajax-testimonials' ), |
||
52 | 'add_new_item' => __( 'Add New Testimonial', 'ivycat-ajax-testimonials' ), |
||
53 | 'edit_item' => __( 'Edit Testimonial', 'ivycat-ajax-testimonials' ), |
||
54 | 'new_item' => __( 'New Testimonial', 'ivycat-ajax-testimonials' ), |
||
55 | 'view_item' => __( 'View Testimonial', 'ivycat-ajax-testimonials' ), |
||
56 | 'search_items' => __( 'Search Testimonials', 'ivycat-ajax-testimonials' ), |
||
57 | 'not_found' => __( 'No testimonials found.', 'ivycat-ajax-testimonials' ), |
||
58 | 'not_found_in_trash' => __( 'No testimonials found in Trash.', 'ivycat-ajax-testimonials' ), |
||
59 | 'all_items' => __( 'All Testimonials', 'ivycat-ajax-testimonials' ), |
||
60 | 'menu_name' => __( 'Testimonials', 'ivycat-ajax-testimonials' ) |
||
61 | ); |
||
62 | |||
63 | $args = apply_filters( 'ic_testimonials_post_type_args', array( |
||
64 | 'labels' => $labels, |
||
65 | 'public' => true, |
||
66 | 'publicly_queryable' => true, |
||
67 | 'show_ui' => true, |
||
68 | 'query_var' => true, |
||
69 | 'register_meta_box_cb' => array( $this, 'register_testimonial_meta_boxes' ), |
||
70 | 'rewrite' => true, |
||
71 | 'capability_type' => 'post', |
||
72 | 'hierarchical' => false, |
||
73 | 'menu_position' => 4, |
||
74 | 'supports' => array( 'title', 'editor', 'excerpt', 'thumbnail' ) |
||
75 | ) ); |
||
76 | |||
77 | register_post_type( 'testimonials', $args ); |
||
78 | |||
79 | $tax_labels = array( |
||
80 | 'name' => _x( 'Testimonial Groups', 'taxonomy general name', 'ivycat-ajax-testimonials' ), |
||
81 | 'singular_name' => _x( 'Testimonial Group', 'taxonomy singular name', 'ivycat-ajax-testimonials' ), |
||
82 | 'search_items' => __( 'Search Testimonial Groups', 'ivycat-ajax-testimonials' ), |
||
83 | 'popular_items' => __( 'Popular Testimonial Groups', 'ivycat-ajax-testimonials' ), |
||
84 | 'all_items' => __( 'All Testimonial Groups', 'ivycat-ajax-testimonials' ), |
||
85 | 'parent_item' => __( 'Parent Testimonial Groups', 'ivycat-ajax-testimonials' ), |
||
86 | 'parent_item_colon' => __( 'Parent Testimonial Group:', 'ivycat-ajax-testimonials' ), |
||
87 | 'edit_item' => __( 'Edit Testimonial Group', 'ivycat-ajax-testimonials' ), |
||
88 | 'view_item' => __( 'View Testimonial Group', 'ivycat-ajax-testimonials' ), |
||
89 | 'update_item' => __( 'Update Testimonial Group', 'ivycat-ajax-testimonials' ), |
||
90 | 'add_new_item' => __( 'Add New Testimonial Group', 'ivycat-ajax-testimonials' ), |
||
91 | 'new_item_name' => __( 'New Testimonial Group Name', 'ivycat-ajax-testimonials' ), |
||
92 | 'separate_items_with_commas' => __( 'Separate testimonial groups with commas', 'ivycat-ajax-testimonials' ), |
||
93 | 'add_or_remove_items' => __( 'Add or remove testimonial groups', 'ivycat-ajax-testimonials' ), |
||
94 | 'choose_from_most_used' => __( 'Choose from most used testimonial groups', 'ivycat-ajax-testimonials' ) |
||
95 | ); |
||
96 | |||
97 | $tax_args = apply_filters( 'ic_testimonials_register_tax_args', array( |
||
98 | 'hierarchical' => true, |
||
99 | 'labels' => $tax_labels, |
||
100 | 'rewrite' => true, |
||
101 | 'show_admin_column' => true, |
||
102 | ) ); |
||
103 | |||
104 | register_taxonomy( 'testimonial-group', 'testimonials', $tax_args ); |
||
105 | |||
106 | add_action( 'wp_ajax_nopriv_get-testimonials', array( $this, 'more_testimonials' ) ); |
||
107 | add_action( 'wp_ajax_get-testimonials', array( $this, 'more_testimonials' ) ); |
||
108 | add_action( 'save_post', array( $this, 'save_testimonial_metadata' ), 10, 2 ); |
||
109 | add_filter( 'post_updated_messages', array( $this, 'testimonial_update_messages' ) ); |
||
110 | |||
111 | add_shortcode( 'ic_do_testimonials', array( $this, 'do_testimonials' ) ); |
||
112 | |||
113 | wp_register_script( 'ict-ajax-scripts', ICTESTI_URL . 'assets/ivycat-testimonials-scripts.js', array( |
||
114 | 'jquery', |
||
115 | 'jquery-migrate' |
||
116 | ) ); |
||
117 | } |
||
118 | |||
119 | public function register_widgets() { |
||
120 | require_once( ICTESTI_DIR . 'lib/IvyCatTestimonialsWidget.php' ); |
||
121 | register_widget( 'IvyCatTestimonialsWidget' ); |
||
122 | } |
||
123 | |||
124 | public function testimonial_update_messages( $messages ) { |
||
125 | global $post; |
||
126 | |||
127 | $messages['testimonials'] = array( |
||
128 | 0 => '', // Unused. Messages start at index 1. |
||
129 | 1 => sprintf( __( 'Testimonial updated. <a href="%s">View Testimonial</a>', 'ivycat-ajax-testimonials' ), esc_url( get_permalink( $post->ID ) ) ), |
||
130 | 2 => __( 'Custom field updated.', 'ivycat-ajax-testimonials' ), |
||
131 | 3 => __( 'Custom field deleted.', 'ivycat-ajax-testimonials' ), |
||
132 | 4 => __( 'Testimonial updated.', 'ivycat-ajax-testimonials' ), |
||
133 | /* translators: %s: date and time of the revision */ |
||
134 | 5 => isset( $_GET['revision'] ) ? sprintf( __( 'Testimonial restored to revision from %s', 'ivycat-ajax-testimonials' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false, |
||
135 | 6 => sprintf( __( 'Testimonial published. <a href="%s">View Testimonial</a>', 'ivycat-ajax-testimonials' ), esc_url( get_permalink( $post->ID ) ) ), |
||
136 | 7 => __( 'Testimonial saved.', 'ivycat-ajax-testimonials' ), |
||
137 | 8 => sprintf( __( 'Testimonial submitted. <a target="_blank" href="%s">Preview Testimonial</a>', 'ivycat-ajax-testimonials' ), esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) ), |
||
138 | 9 => sprintf( __( 'Testimonial scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview Testimonial</a>', 'ivycat-ajax-testimonials' ), |
||
139 | // translators: Publish box date format, see http://php.net/date |
||
140 | date_i18n( __( 'M j, Y @ G:i', 'ivycat-ajax-testimonials' ), strtotime( $post->post_date ) ), esc_url( get_permalink( $post->ID ) ) ), |
||
141 | 10 => sprintf( __( 'Testimonial draft updated. <a target="_blank" href="%s">Preview Testimonial</a>', 'ivycat-ajax-testimonials' ), esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) ), |
||
142 | ); |
||
143 | |||
144 | return apply_filters( 'ic_testimonials_update_messages', $messages ); |
||
145 | } |
||
146 | |||
147 | public function register_testimonial_meta_boxes() { |
||
148 | add_meta_box( |
||
149 | 'Testimonialinfo-meta', |
||
150 | __( 'Testimonial Data', 'ivycat-ajax-testimonials' ), |
||
151 | array( $this, 'testimonial_metabox' ), |
||
152 | 'testimonials', |
||
153 | 'side', |
||
154 | 'high' |
||
155 | ); |
||
156 | } |
||
157 | |||
158 | public function testimonial_metabox( $post ) { |
||
159 | $testimonial_order = get_post_meta( $post->ID, 'ivycat_testimonial_order', true ); |
||
160 | wp_nonce_field( 'save-testimonial-order_' . $post->ID, 'ivycat_testimonial_order_nonce' ); |
||
161 | ?> |
||
162 | <p> |
||
163 | <label for="test-order"><?php _e( 'Order:', 'ivycat-ajax-testimonials' ); ?></label> |
||
164 | <input id="test-order" type="text" name="testimonial_order" |
||
165 | value="<?php echo absint( $testimonial_order ); ?>"/> |
||
166 | </p> |
||
167 | <?php |
||
168 | do_action( 'ic_testimonials_testimonial_metabox', $post ); |
||
169 | } |
||
170 | |||
171 | public function save_testimonial_metadata( $post_id, $post ) { |
||
172 | if ( ! isset( $_POST['ivycat_testimonial_order_nonce'] ) || ! wp_verify_nonce( $_POST['ivycat_testimonial_order_nonce'], 'save-testimonial-order_' . $post_id ) ) { |
||
173 | return; |
||
174 | } |
||
175 | do_action( 'ic_testimonials_save_metadata', $post_id, $post ); |
||
176 | update_post_meta( $post_id, 'ivycat_testimonial_order', $_POST['testimonial_order'] ); |
||
177 | } |
||
178 | |||
179 | public function do_testimonials( $args, $content = null ) { |
||
0 ignored issues
–
show
|
|||
180 | // fix for camel case previous verions |
||
181 | if ( isset( $args['fadein'] ) ) { |
||
182 | $args['fade_in'] = $args['fadein']; |
||
183 | } |
||
184 | if ( isset( $args['fadeout'] ) ) { |
||
185 | $args['fade_out'] = $args['fadeout']; |
||
186 | } |
||
187 | $atts = wp_parse_args( $args, array( |
||
188 | 'quantity' => 3, |
||
189 | 'title' => false, |
||
190 | 'link_testimonials' => false, |
||
191 | 'group' => false, |
||
192 | 'num_words' => false, |
||
193 | 'more_tag' => false, |
||
194 | 'ajax_on' => 'yes', |
||
195 | 'all_title' => false, |
||
196 | 'all_url' => false, |
||
197 | 'fade_in' => 500, |
||
198 | 'fade_out' => 300, |
||
199 | 'speed' => 8000, |
||
200 | 'display' => 'single' |
||
201 | ) ); |
||
202 | extract( apply_filters( 'ic_testimonials_args', $atts ) ); |
||
0 ignored issues
–
show
|
|||
203 | $testimonials = apply_filters( |
||
204 | 'ic_testimonials_data', |
||
205 | $this->get_testimonials( 1, $group, $num_words, $more_tag, $ajax_on, $link_testimonials ) |
||
206 | ); |
||
207 | $this->more_tag = $atts['more_tag']; |
||
208 | $this->num_words = $atts['num_words']; |
||
209 | |||
210 | if ( count( $testimonials ) == 0 ) { |
||
211 | return ''; |
||
212 | } |
||
213 | // check for display option set to list |
||
214 | if ( 'list' == $display ) : |
||
215 | // turn off ajax |
||
216 | $ajax_on = 'no'; |
||
0 ignored issues
–
show
$ajax_on is not used, you could remove the assignment.
This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently. $myVar = 'Value';
$higher = false;
if (rand(1, 6) > 3) {
$higher = true;
} else {
$higher = false;
}
Both the ![]() |
|||
217 | // pagination |
||
218 | $atts['paginate'] = true; |
||
219 | // if user set a number of posts to show pass it on |
||
220 | if ( '3' != $atts['quantity'] ) : |
||
221 | $atts['showposts'] = $atts['quantity']; |
||
222 | endif; |
||
223 | |||
224 | // if more tag is set add the filter |
||
225 | if ( false !== $more_tag ) : |
||
226 | add_filter( 'excerpt_more', array( $this, 'ivycat_custom_excerpt_more' ) ); |
||
227 | endif; |
||
228 | |||
229 | // if num words is set add the filter |
||
230 | if ( false !== $num_words ) : |
||
231 | add_filter( 'excerpt_length', array( $this, 'ivycat_custom_excerpt_length' ), 999 ); |
||
232 | endif; |
||
233 | |||
234 | // call the class |
||
235 | $new_output = new ICTestimonialPosts( $atts ); |
||
236 | |||
237 | // display loop in our page/post |
||
238 | return $new_output->output_testimonials(); |
||
239 | endif; |
||
240 | |||
241 | if ( 'yes' == $ajax_on ): |
||
242 | wp_enqueue_script( 'ict-ajax-scripts' ); |
||
243 | wp_localize_script( 'ict-ajax-scripts', 'ICTaconn', |
||
244 | apply_filters( 'ICTaconn-variables', array( |
||
245 | 'ajaxurl' => admin_url( 'admin-ajax.php' ), |
||
246 | 'themeurl' => get_bloginfo( 'stylesheet_directory' ) . '/', |
||
247 | 'pluginurl' => ICTESTI_URL, |
||
248 | 'ict_quantity' => $quantity, |
||
249 | 'ict_group' => $group, |
||
250 | 'num_words' => $num_words, |
||
251 | 'more_tag' => $more_tag, |
||
252 | 'all_title' => $all_title, |
||
253 | 'all_url' => $all_url, |
||
254 | 'fade_in' => $fade_in, |
||
255 | 'fade_out' => $fade_out, |
||
256 | 'speed' => $speed, |
||
257 | 'link_testimonials' => $link_testimonials, |
||
258 | ) ) |
||
259 | ); |
||
260 | endif; |
||
261 | $testimonial_id = ( 'yes' == $ajax_on ) ? 'ivycat-testimonial' : 'ivycat-testimonial-static'; |
||
262 | $contents = '<div id="' . $testimonial_id . '">'; |
||
263 | $contents .= ( $title ) ? '<h3>' . $title . '</h3>' : ''; |
||
264 | $contents .= '<blockquote class="testimonial-content"> |
||
265 | <div class="ict-content">' . $testimonials[0]['testimonial_content'] . '</div> |
||
266 | <footer> |
||
267 | <cite>'; |
||
268 | $contents .= ( $link_testimonials ) |
||
269 | ? '<a href="' . $testimonials[0]['testimonial_link'] . '">' . $testimonials[0]['testimonial_title'] . '</a>' |
||
270 | : $testimonials[0]['testimonial_title']; |
||
271 | $contents .= '</cite> |
||
272 | </footer>'; |
||
273 | $contents .= ( strlen( $all_url ) > 1 ) ? '<p><a href="' . $all_url . '">' . $all_title . '</a></p>' : ''; |
||
274 | $contents .= '</blockquote>'; |
||
275 | $contents .= '</div>'; |
||
276 | |||
277 | return apply_filters( 'ic_testimonials_contents', $contents ); |
||
278 | } |
||
279 | |||
280 | public function more_testimonials() { |
||
281 | $quantity = absint( $_POST['ict_quantity'] ); |
||
282 | $group = $_POST['ict_group']; |
||
283 | $num_words = absint( $_POST['num_words'] ); |
||
284 | $more_tag = $_POST['more_tag']; |
||
285 | $testimonials = $this->get_testimonials( $quantity, $group, $num_words, $more_tag, 'yes', $_POST['link_testimonials'] ); |
||
286 | if ( $testimonials ) { |
||
287 | echo json_encode( $testimonials ); |
||
288 | } |
||
289 | wp_die(); |
||
290 | } |
||
291 | |||
292 | public function get_testimonials( $quantity, $group, $num_words, $more_tag, $ajax_on, $link_testimonials ) { |
||
293 | $args = array( |
||
294 | 'post_type' => 'testimonials', |
||
295 | 'orderby' => ( 'yes' == $ajax_on ) ? 'meta_value_num' : 'rand', |
||
296 | 'meta_key' => 'ivycat_testimonial_order', |
||
297 | 'order' => 'ASC', |
||
298 | 'posts_per_page' => $quantity, |
||
299 | ); |
||
300 | |||
301 | if ( $group ) { |
||
302 | $args['tax_query'] = array( |
||
303 | array( |
||
304 | 'taxonomy' => 'testimonial-group', |
||
305 | 'field' => is_numeric( $group ) ? 'id' : 'slug', |
||
306 | 'terms' => $group |
||
307 | ) |
||
308 | ); |
||
309 | } |
||
310 | |||
311 | $more = ( $more_tag ) ? $more_tag : 'Read More'; |
||
312 | $testimonials = get_posts( $args ); |
||
313 | $testimonial_data = array(); |
||
314 | do_action( 'ica_pre_loop_testimonials', $testimonials ); |
||
315 | if ( $testimonials ) { |
||
316 | foreach ( $testimonials as $row ) { |
||
317 | |||
318 | $post_more = ( $more_tag ) ? ' <a class="ict-rm-link" href="' . home_url( '/testimonials/' . $row->post_name . '/' ) . '">' . $more . '</a>' : ''; |
||
319 | $post_content = ( $num_words ) ? |
||
320 | wp_trim_words( $row->post_content, $num_words, $post_more ) |
||
321 | : $row->post_content; |
||
322 | |||
323 | $testimonial_data[] = array( |
||
324 | 'testimonial_id' => $row->ID, |
||
325 | 'testimonial_title' => $row->post_title, |
||
326 | 'testimonial_link' => ( $link_testimonials ) ? get_permalink( $row->ID ) : false, |
||
327 | 'testimonial_content' => ( strlen( $row->post_excerpt ) > 1 ) |
||
328 | ? $row->post_excerpt |
||
329 | : apply_filters( 'the_content', $post_content ) |
||
330 | ); |
||
331 | } |
||
332 | } |
||
333 | |||
334 | return apply_filters( 'ic_testimonials_data_array', $testimonial_data ); |
||
335 | } |
||
336 | |||
337 | public function ivycat_custom_excerpt_more( $more ) { |
||
0 ignored issues
–
show
|
|||
338 | $more_tag = $this->more_tag; |
||
339 | |||
340 | return ' <a class="read-more" href="' . get_permalink( get_the_ID() ) . '">' . $more_tag . '</a>'; |
||
341 | } |
||
342 | |||
343 | public function ivycat_custom_excerpt_length( $length ) { |
||
0 ignored issues
–
show
|
|||
344 | $num_words = $this->num_words; |
||
345 | |||
346 | return $num_words; |
||
347 | } |
||
348 | } |
||
349 |
This check looks from parameters that have been defined for a function or method, but which are not used in the method body.