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 | * Page Posts Class, main workhorse for the ic_add_testimonials shortcode. |
||
4 | * |
||
5 | * @package IvyCat AJAX Testimonials |
||
6 | * @author Eric Amundson <[email protected]> |
||
7 | * @copyright 2017 IvyCat, Inc. |
||
8 | * @license GPL-2.0+ |
||
9 | */ |
||
10 | |||
11 | if ( ! function_exists( 'add_action' ) ) { |
||
12 | wp_die( __( 'You are trying to access this file in a manner not allowed.', 'ivycat-ajax-testimonials' ), __( 'Direct Access Forbidden', 'ivycat-ajax-testimonials' ), array( 'response' => '403' ) ); |
||
13 | } |
||
14 | |||
15 | class ICTestimonialPosts { |
||
16 | |||
17 | protected $args = array( |
||
18 | 'post_type' => 'testimonials', |
||
19 | 'post_status' => 'publish', |
||
20 | 'orderby' => 'date', |
||
21 | 'order' => 'DESC', |
||
22 | 'paginate' => false, |
||
23 | 'template' => false, |
||
24 | ); // set defaults for wp_parse_args |
||
25 | |||
26 | public function __construct( $atts ) { |
||
27 | self::set_args( $atts ); |
||
28 | } |
||
29 | |||
30 | /** |
||
31 | * Output's the testimonials |
||
32 | * |
||
33 | * @return string output of template file |
||
34 | */ |
||
35 | public function output_testimonials() { |
||
36 | if ( ! $this->args ) { |
||
0 ignored issues
–
show
|
|||
37 | return ''; |
||
38 | } |
||
39 | $page_testimonials = apply_filters( 'testimonials_in_page_results', new WP_Query( $this->args ) ); // New WP_Query object |
||
40 | $output = ''; |
||
41 | if ( $page_testimonials->have_posts() ): |
||
42 | while ( $page_testimonials->have_posts() ): |
||
43 | $output .= self::add_template_part( $page_testimonials ); |
||
44 | endwhile; |
||
45 | $output .= ( $this->args['paginate'] ) ? '<div class="pip-nav">' . apply_filters( 'testimonials_in_page_paginate', |
||
46 | $this->paginate_links( $page_testimonials ) |
||
47 | ) . '</div>' : ''; |
||
48 | endif; |
||
49 | wp_reset_postdata(); |
||
50 | |||
51 | // remove our filters for excerpt more and length |
||
52 | remove_filter( 'excerpt_more', array( 'IvyCatTestimonials', 'ivycat_custom_excerpt_more' ) ); |
||
53 | remove_filter( 'excerpt_length', array( 'IvyCatTestimonials', 'ivycat_custom_excerpt_length' ) ); |
||
54 | |||
55 | return $output; |
||
56 | } |
||
57 | |||
58 | protected function paginate_links( $posts ) { |
||
59 | global $wp_query; |
||
60 | $page_url = home_url( '/' . $wp_query->post->post_name . '/' ); |
||
61 | $page = isset( $_GET['page'] ) ? $_GET['page'] : 1; |
||
0 ignored issues
–
show
$page 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 ![]() |
|||
62 | $total_pages = $posts->max_num_pages; |
||
63 | $per_page = $posts->query_vars['posts_per_page']; |
||
0 ignored issues
–
show
$per_page 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 ![]() |
|||
64 | $curr_page = ( isset( $posts->query_vars['paged'] ) && $posts->query_vars['paged'] > 0 ) ? $posts->query_vars['paged'] : 1; |
||
65 | $prev = ( $curr_page && $curr_page > 1 ) ? '<li><a href="' . $page_url . '?page=' . ( $curr_page - 1 ) . '">Previous</a></li>' : ''; |
||
66 | $next = ( $curr_page && $curr_page < $total_pages ) ? '<li><a href="' . $page_url . '?page=' . ( $curr_page + 1 ) . '">Next</a></li>' : ''; |
||
67 | |||
68 | return '<ul>' . $prev . $next . '</ul>'; |
||
69 | } |
||
70 | |||
71 | /** |
||
72 | * Build additional Arguments for the WP_Query object |
||
73 | * |
||
74 | * @param array $atts Attritubes for building the $args array. |
||
75 | */ |
||
76 | protected function set_args( $atts ) { |
||
77 | global $wp_query; |
||
78 | $this->args['posts_per_page'] = get_option( 'posts_per_page' ); |
||
79 | // parse the arguments using the defaults |
||
80 | $this->args = wp_parse_args( $atts, $this->args ); |
||
81 | |||
82 | // Use a specified template |
||
83 | if ( isset( $atts['template'] ) ) { |
||
84 | $this->args['template'] = $atts['template']; |
||
85 | } |
||
86 | |||
87 | // show number of posts (default is 10, showposts or posts_per_page are both valid, only one is needed) |
||
88 | if ( isset( $atts['showposts'] ) ) { |
||
89 | $this->args['posts_per_page'] = $atts['showposts']; |
||
90 | } |
||
91 | |||
92 | // handle pagination (for code, template pagination is in the template) |
||
93 | if ( isset( $wp_query->query_vars['page'] ) && $wp_query->query_vars['page'] > 1 ) { |
||
94 | $this->args['paged'] = $wp_query->query_vars['page']; |
||
95 | } |
||
96 | if ( false !== $atts['group'] ) { |
||
97 | $this->args['tax_query'] = array( |
||
98 | array( |
||
99 | 'taxonomy' => 'testimonial-group', |
||
100 | 'field' => is_numeric( $atts['group'] ) ? 'id' : 'slug', |
||
101 | 'terms' => $atts['group'], |
||
102 | ) |
||
103 | ); |
||
104 | } |
||
105 | $this->args = apply_filters( 'testimonials_in_page_args', $this->args ); |
||
106 | } |
||
107 | |||
108 | /** |
||
109 | * Tests if a theme has a theme template file that exists |
||
110 | * |
||
111 | * @return string|false if template exists, false otherwise. |
||
112 | */ |
||
113 | protected function has_theme_template() { |
||
114 | $template_file = ( $this->args['template'] ) |
||
115 | ? get_stylesheet_directory() . '/' . $this->args['template'] // use specified template file |
||
116 | : get_stylesheet_directory() . '/testimonials-loop-template.php'; // use default template file |
||
117 | |||
118 | return ( file_exists( $template_file ) ) ? $template_file : false; |
||
119 | } |
||
120 | |||
121 | /** |
||
122 | * Retrieves the post loop template and returns the output |
||
123 | * |
||
124 | * @return string results of the output |
||
125 | */ |
||
126 | protected function add_template_part( $ic_testimonials, $singles = false ) { |
||
127 | if ( $singles ) { |
||
128 | setup_postdata( $ic_testimonials ); |
||
129 | } else { |
||
130 | $ic_testimonials->the_post(); |
||
131 | } |
||
132 | $output = ''; |
||
133 | ob_start(); |
||
134 | $output .= apply_filters( 'testimonials_in_page_pre_loop', '' ); |
||
135 | require( $file_path = self::has_theme_template() ) |
||
136 | ? $file_path // use template file in theme |
||
137 | : ICTESTI_DIR . '/testimonials-loop-template.php'; // use default plugin template file |
||
138 | $output .= ob_get_contents(); |
||
139 | $output .= apply_filters( 'testimonials_in_page_post_loop', '' ); |
||
140 | |||
141 | return ob_get_clean(); |
||
142 | } |
||
143 | |||
144 | } |
||
145 |
This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.
Consider making the comparison explicit by using
empty(..)
or! empty(...)
instead.