1
|
|
|
<?php |
|
|
|
|
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'] ) ); |
|
|
|
|
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; |
|
|
|
|
80
|
56 |
|
if ( $post && get_post_type( $post ) == 'gravityview' ) { |
|
|
|
|
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; |
|
|
|
|
140
|
|
|
} else { |
141
|
6 |
|
$get = $_GET; |
|
|
|
|
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 ) ) { |
|
|
|
|
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
|
|
|
|
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.