PluginProbe
Redirection / 4.0.1
Redirection v4.0.1
5.10.0 5.9.0 5.8.1 5.8.0 3.7.2 3.7.3 4.0 4.0.1 4.1 4.1.1 4.2 4.2.1 4.2.2 4.2.3 4.3 4.3.1 4.3.2 4.3.3 4.4 4.4.1 4.4.2 4.5 4.5.1 4.6.2 4.7.1 All 130 releases
redirection / api / api-404.php

api-404.php in Redirection 4.0.1, at api/api-404.php

84 lines 2.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 class Redirection_Api_404 extends Redirection_Api_Filter_Route {
4 public function __construct( $namespace ) {
5 $filters = array( 'ip', 'url', 'url-exact', 'total' );
6
7 register_rest_route( $namespace, '/404', array(
8 'args' => $this->get_filter_args( $filters, $filters ),
9 $this->get_route( WP_REST_Server::READABLE, 'route_404' ),
10 $this->get_route( WP_REST_Server::EDITABLE, 'route_delete_all' ),
11 ) );
12
13 $this->register_bulk( $namespace, '/bulk/404/(?P<bulk>delete)', $filters, $filters, 'route_bulk' );
14 }
15
16 public function route_404( WP_REST_Request $request ) {
17 return $this->get_404( $request->get_params() );
18 }
19
20 public function route_bulk( WP_REST_Request $request ) {
21 $params = $request->get_params();
22 $items = explode( ',', $request['items'] );
23
24 if ( is_array( $items ) ) {
25 foreach ( $items as $item ) {
26 if ( is_numeric( $item ) ) {
27 RE_404::delete( intval( $item, 10 ) );
28 } else {
29 RE_404::delete_all( $this->get_delete_group( $params ), $item );
30 }
31 }
32
33 return $this->route_404( $request );
34 }
35
36 return $this->add_error_details( new WP_Error( 'redirect', 'Invalid array of items' ), __LINE__ );
37 }
38
39 private function get_delete_group( array $params ) {
40 if ( isset( $params['groupBy'] ) && $params['groupBy'] === 'ip' ) {
41 return 'ip';
42 }
43
44 return 'url-exact';
45 }
46
47 public function route_delete_all( WP_REST_Request $request ) {
48 $params = $request->get_params();
49 $filter = false;
50 $filter_by = false;
51
52 if ( isset( $params['items'] ) && is_array( $params['items'] ) ) {
53 foreach ( $params['items'] as $url ) {
54 RE_404::delete_all( $this->get_delete_group( $params ), $url );
55 }
56 } else {
57 if ( isset( $params['filter'] ) ) {
58 $filter = $params['filter'];
59 }
60
61 if ( isset( $params['filterBy'] ) ) {
62 $filter_by = $params['filterBy'];
63 }
64
65 RE_404::delete_all( $filter_by, $filter );
66
67 unset( $params['filterBy'] );
68 unset( $params['filter'] );
69 }
70
71 unset( $params['page'] );
72
73 return $this->get_404( $params );
74 }
75
76 private function get_404( array $params ) {
77 if ( isset( $params['groupBy'] ) && in_array( $params['groupBy'], array( 'ip', 'url' ), true ) ) {
78 return RE_Filter_Log::get_grouped( 'redirection_404', $params['groupBy'], $params );
79 }
80
81 return RE_Filter_Log::get( 'redirection_404', 'RE_404', $params );
82 }
83 }
84