Completed
Push — master ( cf8268...397f5b )
by Zack
24:22 queued 11:06
created

Request::_has_field_key()   B

Complexity

Conditions 5
Paths 9

Size

Total Lines 22
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 5.3906

Importance

Changes 0
Metric Value
cc 5
eloc 12
nc 9
nop 1
dl 0
loc 22
ccs 9
cts 12
cp 0.75
crap 5.3906
rs 8.6737
c 0
b 0
f 0
1
<?php
0 ignored issues
show
Coding Style Compatibility introduced by
For compatibility and reusability of your code, PSR1 recommends that a file should introduce either new symbols (like classes, functions, etc.) or have side-effects (like outputting something, or including other files), but not both at the same time. The first symbol is defined on line 14 and the first side effect is on line 6.

The PSR-1: Basic Coding Standard recommends that a file should either introduce new symbols, that is classes, functions, constants or similar, or have side effects. Side effects are anything that executes logic, like for example printing output, changing ini settings or writing to a file.

The idea behind this recommendation is that merely auto-loading a class should not change the state of an application. It also promotes a cleaner style of programming and makes your code less prone to errors, because the logic is not spread out all over the place.

To learn more about the PSR-1, please see the PHP-FIG site on the PSR-1.

Loading history...
2
namespace GV;
3
4
/** If this file is called directly, abort. */
5
if ( ! defined( 'GRAVITYVIEW_DIR' ) ) {
6
	die();
7
}
8
9
/**
10
 * The Request abstract class.
11
 *
12
 * Knows more about the request than anyone else.
13
 */
14
abstract class Request {
15 64
	public function __construct() {
16 64
	}
17
18
	/**
19
	 * Check if WordPress is_admin(), and make sure not DOING_AJAX.
20
	 *
21
	 * @return boolean
22
	 */
23 15
	public static function is_admin() {
24 15
		$doing_ajax = defined( 'DOING_AJAX' ) ? DOING_AJAX : false;
25 15
		$load_scripts_styles = preg_match( '#^/wp-admin/load-(scripts|styles).php$#', Utils::_SERVER( 'SCRIPT_NAME' ) );
26
27 15
		return is_admin() && ! ( $doing_ajax || $load_scripts_styles );
28
	}
29
30
	/**
31
	 * This is the frontend.
32
	 *
33
	 * @return boolean True or false.
34
	 */
35
	public static function is_frontend() {
36
		return ! is_admin();
37
	}
38
39
	/**
40
	 * Is this the Add Media / From URL preview request?
41
	 *
42
	 * Will not work in WordPress 4.8+
43
	 *
44
	 * @return boolean
45
	 */
46 2
	public static function is_add_oembed_preview() {
47
		/** The preview request is a parse-embed AJAX call without a type set. */
48 2
		return ( self::is_ajax() && ! empty( $_POST['action'] ) && $_POST['action'] == 'parse-embed' && ! isset( $_POST['type'] ) );
0 ignored issues
show
introduced by
Detected access of super global var $_POST, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-sanitized input variable: $_POST
Loading history...
49
	}
50
51
	/**
52
	 * Is this an AJAX call in progress?
53
	 *
54
	 * @return boolean
55
	 */
56 2
	public static function is_ajax() {
57 2
		return defined( 'DOING_AJAX' ) && DOING_AJAX;
58
	}
59
60
	/**
61
	 * Is this a REST request? Call after parse_request.
62
	 *
63
	 * @return boolean
64
	 */
65
	public static function is_rest() {
66
		return ! empty( $GLOBALS['wp']->query_vars['rest_route'] );
67
	}
68
69
	/**
70
	 * The current $post is a View, no?
71
	 *
72
	 * @api
73
	 * @since 2.0
74
	 * @todo tests
75
	 *
76
	 * @return \GV\View|false The view requested or false
77
	 */
78 56
	public function is_view() {
79 56
		global $post;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
80 56
		if ( $post && get_post_type( $post ) == 'gravityview' ) {
0 ignored issues
show
introduced by
Found "== '". Use Yoda Condition checks, you must
Loading history...
81 7
			return \GV\View::from_post( $post );
82
		}
83 51
		return false;
84
	}
85
86
	/**
87
	 * Is this an edit entry request?
88
	 *
89
	 * @api
90
	 * @since 2.0
91
	 * @todo tests
92
	 *
93
	 * @return \GV\GF_Entry|false The entry requested or false.
94
	 */
95 7
	public function is_entry() {
96 7
		if ( $id = get_query_var( \GV\Entry::get_endpoint_name() ) ) {
97
			if ( $entry = \GV\GF_Entry::by_id( $id ) ) {
98
				return $entry;
99
			}
100
		}
101 7
		return false;
102
	}
103
104
	/**
105
	 * Check whether this an edit entry request.
106
	 *
107
	 * @api
108
	 * @since 2.0
109
	 * @todo tests
110
	 *
111
	 * @return \GV\Entry|false The entry requested or false.
112
	 */
113 5
	public function is_edit_entry() {
114
		/**
115
		* @filter `gravityview_is_edit_entry` Whether we're currently on the Edit Entry screen \n
116
		* The Edit Entry functionality overrides this value.
117
		* @param boolean $is_edit_entry
118
		*/
119 5
		if ( ( $entry = $this->is_entry() ) && apply_filters( 'gravityview_is_edit_entry', false ) ) {
120
			return $entry;
121
		}
122 5
		return false;
123
	}
124
125
	/**
126
	 * Check whether this an entry search request.
127
	 *
128
	 * @api
129
	 * @since 2.0
130
	 * @todo implementation
131
	 *
132
	 * @return boolean True if this is a search request.
133
	 */
134 6
	public function is_search() {
135
136 6
		$search_method = apply_filters( 'gravityview/search/method', 'get' );
137
138 6
		if ( 'post' === $search_method ) {
139 1
			$get = $_POST;
0 ignored issues
show
introduced by
Detected access of super global var $_POST, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-sanitized input variable: $_POST
Loading history...
140
		} else {
141 6
			$get = $_GET;
0 ignored issues
show
introduced by
Detected access of super global var $_GET, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-sanitized input variable: $_GET
Loading history...
142
		}
143
144 6
		$has_field_key = $this->_has_field_key( $get );
145
146 6
		return $this->is_view() && ( $has_field_key || isset( $get['gv_search'] ) || isset( $get['gv_start'] ) || isset( $get['gv_end'] ) || isset( $get['gv_by'] ) || isset( $get['gv_id'] ) );
147
	}
148
149
	/**
150
	 * Calculate whether the $_REQUEST has a GravityView field
151
	 *
152
	 * @internal
153
	 * @todo Roll into the future Search refactor
154
	 *
155
	 * @since 2.0.7
156
	 *
157
	 * @param array $get $_POST or $_GET array
158
	 *
159
	 * @return bool True: GravityView-formatted field detected; False: not detected
160
	 */
161 5
	private function _has_field_key( $get ) {
162
163 5
		$has_field_key = false;
164
165 5
		$fields = \GravityView_Fields::get_all();
166
167 5
		$meta = array();
168 5
		foreach ( $fields as $field ) {
169 5
			if( empty( $field->_gf_field_class_name ) ) {
170 5
				$meta[] = preg_quote( $field->name );
171
			}
172
		}
173
174 5
		foreach ( $get as $key => $value ) {
175
			if ( preg_match('/^filter_(([0-9_]+)|'. implode( '|', $meta ) .')$/ism', $key ) ) {
0 ignored issues
show
Coding Style introduced by
Expected 1 spaces after opening bracket; 0 found
Loading history...
176
				$has_field_key = true;
177
				break;
178
			}
179
		}
180
181 5
		return $has_field_key;
182
	}
183
}
184
185
/** Load implementations. */
186
require gravityview()->plugin->dir( 'future/includes/class-gv-request-frontend.php' );
187
require gravityview()->plugin->dir( 'future/includes/class-gv-request-admin.php' );
188
require gravityview()->plugin->dir( 'future/includes/rest/class-gv-request-rest.php' );
189
require gravityview()->plugin->dir( 'future/includes/class-gv-request-mock.php' );
190