| Conditions | 17 |
| Paths | 3456 |
| Total Lines | 101 |
| Code Lines | 52 |
| Lines | 26 |
| Ratio | 25.74 % |
| Changes | 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 |
||
| 272 | public function get_sql( $args = array() ) { |
||
| 273 | /* @var WPDB $wpdb */ |
||
| 274 | global $wpdb; |
||
| 275 | |||
| 276 | $defaults = array( |
||
| 277 | 'number' => 20, |
||
| 278 | 'offset' => 0, |
||
| 279 | 'paged' => 0, |
||
| 280 | 'orderby' => 'date', |
||
| 281 | 'order' => 'DESC', |
||
| 282 | 'fields' => 'all', |
||
| 283 | 'count' => false, |
||
| 284 | ); |
||
| 285 | |||
| 286 | $args = wp_parse_args( $args, $defaults ); |
||
| 287 | |||
| 288 | // validate params. |
||
| 289 | $this->validate_params( $args ); |
||
| 290 | |||
| 291 | if ( $args['number'] < 1 ) { |
||
| 292 | $args['number'] = 999999999999; |
||
| 293 | } |
||
| 294 | |||
| 295 | // Where clause for primary table. |
||
| 296 | $where = ''; |
||
| 297 | |||
| 298 | // Get sql query for meta. |
||
| 299 | if ( ! empty( $args['meta_query'] ) ) { |
||
| 300 | $meta_query_object = new WP_Meta_Query( $args['meta_query'] ); |
||
| 301 | $meta_query = $meta_query_object->get_sql( 'log', $this->table_name, 'id' ); |
||
| 302 | $where = implode( '', $meta_query ); |
||
| 303 | } |
||
| 304 | |||
| 305 | $where .= ' WHERE 1=1 '; |
||
| 306 | |||
| 307 | // Set offset. |
||
| 308 | if ( empty( $args['offset'] ) && ( 0 < $args['paged'] ) ) { |
||
| 309 | $args['offset'] = $args['number'] * ( $args['paged'] - 1 ); |
||
| 310 | } |
||
| 311 | |||
| 312 | // Set fields. |
||
| 313 | $fields = "{$this->table_name}.*"; |
||
| 314 | if ( is_string( $args['fields'] ) && ( 'all' !== $args['fields'] ) ) { |
||
| 315 | $fields = "{$this->table_name}.{$args['fields']}"; |
||
| 316 | } |
||
| 317 | |||
| 318 | // Set count. |
||
| 319 | if ( $args['count'] ) { |
||
| 320 | $fields = "COUNT({$fields})"; |
||
| 321 | } |
||
| 322 | |||
| 323 | // Specific logs. |
||
| 324 | View Code Duplication | if ( ! empty( $args['ID'] ) ) { |
|
| 325 | |||
| 326 | if ( ! is_array( $args['ID'] ) ) { |
||
| 327 | $args['ID'] = explode( ',', $args['ID'] ); |
||
| 328 | } |
||
| 329 | $log_ids = implode( ',', array_map( 'intval', $args['ID'] ) ); |
||
| 330 | |||
| 331 | $where .= " AND {$this->table_name}.ID IN( {$log_ids} ) "; |
||
| 332 | } |
||
| 333 | |||
| 334 | // Logs created for a specific date or in a date range |
||
| 335 | if ( ! empty( $args['date_query'] ) ) { |
||
| 336 | $date_query_object = new WP_Date_Query( $args['date_query'], "{$this->table_name}.log_date" ); |
||
| 337 | $where .= $date_query_object->get_sql(); |
||
| 338 | } |
||
| 339 | |||
| 340 | // Logs create for specific parent. |
||
| 341 | View Code Duplication | if ( ! empty( $args['log_parent'] ) ) { |
|
| 342 | if ( ! is_array( $args['log_parent'] ) ) { |
||
| 343 | $args['log_parent'] = explode( ',', $args['log_parent'] ); |
||
| 344 | } |
||
| 345 | $parent_ids = implode( ',', array_map( 'intval', $args['log_parent'] ) ); |
||
| 346 | |||
| 347 | $where .= " AND {$this->table_name}.log_parent IN( {$parent_ids} ) "; |
||
| 348 | } |
||
| 349 | |||
| 350 | // Logs create for specific type. |
||
| 351 | // is_array check is for backward compatibility. |
||
| 352 | View Code Duplication | if ( ! empty( $args['log_type'] ) && ! is_array( $args['log_type'] ) ) { |
|
| 353 | if ( ! is_array( $args['log_type'] ) ) { |
||
| 354 | $args['log_type'] = explode( ',', $args['log_type'] ); |
||
| 355 | } |
||
| 356 | |||
| 357 | $log_types = implode( '\',\'', array_map( 'trim', $args['log_type'] ) ); |
||
| 358 | |||
| 359 | $where .= " AND {$this->table_name}.log_type IN( '{$log_types}' ) "; |
||
| 360 | } |
||
| 361 | |||
| 362 | $args['orderby'] = ! array_key_exists( $args['orderby'], $this->get_columns() ) ? 'log_date' : $args['orderby']; |
||
| 363 | |||
| 364 | $args['orderby'] = esc_sql( $args['orderby'] ); |
||
| 365 | $args['order'] = esc_sql( $args['order'] ); |
||
| 366 | |||
| 367 | return $wpdb->prepare( |
||
| 368 | "SELECT {$fields} FROM {$this->table_name} {$where} ORDER BY {$this->table_name}.{$args['orderby']} {$args['order']} LIMIT %d,%d;", |
||
| 369 | absint( $args['offset'] ), |
||
| 370 | absint( $args['number'] ) |
||
| 371 | ); |
||
| 372 | } |
||
| 373 | |||
| 395 |