Conditions | 12 |
Paths | 41 |
Total Lines | 132 |
Code Lines | 92 |
Lines | 0 |
Ratio | 0 % |
Changes | 1 | ||
Bugs | 0 | Features | 0 |
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
1 | <?php |
||
20 | public function display_logs() { |
||
21 | // Check user capabilities |
||
22 | if ( ! current_user_can( 'manage_options' ) ) { |
||
23 | return; |
||
24 | } |
||
25 | |||
26 | // Get current page number |
||
27 | $page = isset( $_GET['paged'] ) ? absint( $_GET['paged'] ) : 1; |
||
28 | $per_page = 20; |
||
29 | |||
30 | // Fetch logs |
||
31 | $logs = $this->get_logs( $page, $per_page ); |
||
32 | $total_logs = $this->get_total_logs(); |
||
33 | |||
34 | // Prepare pagination |
||
35 | $pagination = paginate_links( |
||
36 | array( |
||
|
|||
37 | 'base' => add_query_arg( 'paged', '%#%' ), |
||
38 | 'format' => '', |
||
39 | 'prev_text' => __( '«', 'invoicing' ), |
||
40 | 'next_text' => __( '»', 'invoicing' ), |
||
41 | 'total' => ceil( $total_logs / $per_page ), |
||
42 | 'current' => $page, |
||
43 | ) |
||
44 | ); |
||
45 | |||
46 | ?> |
||
47 | <div class="wrap getpaid-anonymization-logs"> |
||
48 | <h1><?php echo esc_html( get_admin_page_title() ); ?></h1> |
||
49 | <div class="tablenav top"> |
||
50 | <div class="alignleft actions"> |
||
51 | <form method="get"> |
||
52 | <input type="hidden" name="page" value="wpinv-anonymization-logs"> |
||
53 | <label for="filter-by-date" class="screen-reader-text"><?php _e( 'Filter by date', 'invoicing' ); ?></label> |
||
54 | <select name="m" id="filter-by-date"> |
||
55 | <option value="0"><?php _e( 'All dates', 'invoicing' ); ?></option> |
||
56 | <?php |
||
57 | $months = $this->get_log_months(); |
||
58 | foreach ( $months as $month ) { |
||
59 | $selected = ( isset( $_GET['m'] ) && $_GET['m'] == $month->month ) ? ' selected="selected"' : ''; |
||
60 | echo '<option value="' . esc_attr( $month->month ) . '"' . $selected . '>' . esc_html( $month->month_name . ' ' . $month->year ) . '</option>'; |
||
61 | } |
||
62 | ?> |
||
63 | </select> |
||
64 | <?php submit_button( __( 'Filter', 'invoicing' ), '', 'filter_action', false ); ?> |
||
65 | </form> |
||
66 | </div> |
||
67 | </div> |
||
68 | <table class="wp-list-table widefat fixed striped"> |
||
69 | <thead> |
||
70 | <tr> |
||
71 | <th><?php _e( 'Log ID', 'invoicing' ); ?></th> |
||
72 | <th><?php _e( 'User', 'invoicing' ); ?></th> |
||
73 | <th><?php _e( 'Action', 'invoicing' ); ?></th> |
||
74 | <th><?php _e( 'Date', 'invoicing' ); ?></th> |
||
75 | <th><?php _e( 'Details', 'invoicing' ); ?></th> |
||
76 | </tr> |
||
77 | </thead> |
||
78 | <tbody> |
||
79 | <?php if ( empty( $logs ) ) : ?> |
||
80 | <tr> |
||
81 | <td colspan="5"><?php _e( 'No anonymization logs found.', 'invoicing' ); ?></td> |
||
82 | </tr> |
||
83 | <?php else : ?> |
||
84 | <?php |
||
85 | foreach ( $logs as $log ) : |
||
86 | $additional_info = json_decode( $log->additional_info, true ); |
||
87 | ?> |
||
88 | <tr> |
||
89 | <td><?php echo esc_html( $log->log_id ); ?></td> |
||
90 | <td> |
||
91 | <?php |
||
92 | $user_edit_link = get_edit_user_link( $log->user_id ); |
||
93 | if ( $user_edit_link ) { |
||
94 | echo '<a href="' . esc_url( $user_edit_link ) . '">' . esc_html( $log->user_id ) . '</a>'; |
||
95 | } else { |
||
96 | echo esc_html( $log->user_id ); |
||
97 | } |
||
98 | ?> |
||
99 | </td> |
||
100 | <td><?php echo esc_html( ucfirst( $log->action ) ); ?></td> |
||
101 | <td><?php echo esc_html( get_date_from_gmt( $log->timestamp, 'F j, Y g:i a' ) ); ?></td> |
||
102 | <td> |
||
103 | <button class="button-link toggle-details" type="button" aria-expanded="false"> |
||
104 | <span class="screen-reader-text"><?php _e( 'Show more details', 'invoicing' ); ?></span> |
||
105 | <span class="dashicons dashicons-arrow-down-alt2"></span> |
||
106 | </button> |
||
107 | </td> |
||
108 | </tr> |
||
109 | <tr class="log-details" style="display:none;"> |
||
110 | <td colspan="5"> |
||
111 | <div class="log-details-content"> |
||
112 | <table class="widefat fixed"> |
||
113 | <tbody> |
||
114 | <tr> |
||
115 | <th><?php _e( 'Data Type', 'invoicing' ); ?></th> |
||
116 | <td><?php echo esc_html( $log->data_type ); ?></td> |
||
117 | </tr> |
||
118 | <?php if ( is_array( $additional_info ) ) : ?> |
||
119 | <tr> |
||
120 | <th><?php _e( 'Additional Information', 'invoicing' ); ?></th> |
||
121 | <td> |
||
122 | <table class="widefat fixed"> |
||
123 | <tbody> |
||
124 | <?php foreach ( $additional_info as $key => $value ) : ?> |
||
125 | <tr> |
||
126 | <th><?php echo esc_html( $key ); ?></th> |
||
127 | <td><?php echo esc_html( $value ); ?></td> |
||
128 | </tr> |
||
129 | <?php endforeach; ?> |
||
130 | </tbody> |
||
131 | </table> |
||
132 | </td> |
||
133 | </tr> |
||
134 | <?php endif; ?> |
||
135 | </tbody> |
||
136 | </table> |
||
137 | </div> |
||
138 | </td> |
||
139 | </tr> |
||
140 | <?php endforeach; ?> |
||
141 | <?php endif; ?> |
||
142 | </tbody> |
||
143 | </table> |
||
144 | <?php if ( $pagination ) : ?> |
||
145 | <div class="tablenav bottom"> |
||
146 | <div class="tablenav-pages"> |
||
147 | <?php echo $pagination; ?> |
||
148 | </div> |
||
149 | </div> |
||
150 | <?php endif; ?> |
||
151 | </div> |
||
152 | <?php |
||
206 | } |
array('base' => add_quer...e), 'current' => $page)
can contain request data and is used in variable name context(s) leading to a potential security vulnerability.2 paths for user data to reach this point
$_SERVER['REQUEST_URI']
is assigned to$uri
in wordpress/wp-includes/functions.php on line 1132$_SERVER['REQUEST_URI']
is assigned to$uri
in wordpress/wp-includes/functions.php on line 1132
$uri . '?'
is assigned to$base
in wordpress/wp-includes/functions.php on line 1165
$protocol . $base . $ret . $frag
is assigned to$ret
in wordpress/wp-includes/functions.php on line 1191
rtrim()
, andrtrim($ret, '?')
is assigned to$ret
in wordpress/wp-includes/functions.php on line 1192
str_replace()
, andstr_replace('?#', '#', $ret)
is assigned to$ret
in wordpress/wp-includes/functions.php on line 1193
$ret
is returnedin wordpress/wp-includes/functions.php on line 1194
$_SERVER['REQUEST_URI']
is assigned to$uri
in wordpress/wp-includes/functions.php on line 1138$_SERVER['REQUEST_URI']
is assigned to$uri
in wordpress/wp-includes/functions.php on line 1138
$uri . '?'
is assigned to$base
in wordpress/wp-includes/functions.php on line 1165
$protocol . $base . $ret . $frag
is assigned to$ret
in wordpress/wp-includes/functions.php on line 1191
rtrim()
, andrtrim($ret, '?')
is assigned to$ret
in wordpress/wp-includes/functions.php on line 1192
str_replace()
, andstr_replace('?#', '#', $ret)
is assigned to$ret
in wordpress/wp-includes/functions.php on line 1193
$ret
is returnedin wordpress/wp-includes/functions.php on line 1194
Used in variable context
paginate_links()
is calledin includes/admin/class-getpaid-anonymization-logs.php on line 36
$args
in wordpress/wp-includes/general-template.php on line 4469
wp_parse_args()
is calledin wordpress/wp-includes/general-template.php on line 4506
$args
in wordpress/wp-includes/functions.php on line 4821
wp_parse_str()
is calledin wordpress/wp-includes/functions.php on line 4827
$input_string
in wordpress/wp-includes/formatting.php on line 5148
parse_str()
is calledin wordpress/wp-includes/formatting.php on line 5149
General Strategies to prevent injection
In general, it is advisable to prevent any user-data to reach this point. This can be done by white-listing certain values:
For numeric data, we recommend to explicitly cast the data: