Completed
Push — develop ( d6e54c...488d60 )
by Zack
17:10
created

View::content()   D

Complexity

Conditions 22
Paths 18

Size

Total Lines 134
Code Lines 51

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 19
CRAP Score 22

Importance

Changes 0
Metric Value
cc 22
eloc 51
nc 18
nop 1
dl 0
loc 134
ccs 19
cts 19
cp 1
crap 22
rs 4.6625
c 0
b 0
f 0

How to fix   Long Method    Complexity   

Long Method

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:

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 17 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 default GravityView View class.
11
 *
12
 * Houses all base View functionality.
13
 *
14
 * Can be accessed as an array for old compatibility's sake
15
 *  in line with the elements inside the \GravityView_View_Data::$views array.
16
 */
17
class View implements \ArrayAccess {
18
19
	/**
20
	 * @var \WP_Post The backing post instance.
21
	 */
22
	private $post;
23
24
	/**
25
	 * @var \GV\View_Settings The settings.
26
	 *
27
	 * @api
28
	 * @since 2.0
29
	 */
30
	public $settings;
31
32
	/**
33
	 * @var \GV\Widget_Collection The widets attached here.
34
	 *
35
	 * @api
36
	 * @since 2.0
37
	 */
38
	public $widgets;
39
40
	/**
41
	 * @var \GV\GF_Form|\GV\Form The backing form for this view.
42
	 *
43
	 * Contains the form that is sourced for entries in this view.
44
	 *
45
	 * @api
46
	 * @since 2.0
47
	 */
48
	public $form;
49
50
	/**
51
	 * @var \GV\Field_Collection The fields for this view.
52
	 *
53
	 * Contains all the fields that are attached to this view.
54
	 *
55
	 * @api
56
	 * @since 2.0
57
	 */
58
	public $fields;
59
60 3
	/**
61 3
	 * @var array
62 3
	 *
63 3
	 * Internal static cache for gets, and whatnot.
64
	 * This is not persistent, resets across requests.
65
66
	 * @internal
67
	 */
68
	private static $cache = array();
69
70
	/**
71
	 * @var \GV\Join[] The joins for all sources in this view.
72
	 *
73
	 * @api
74
	 * @since future
75
	 */
76
	public $joins = array();
77
78
	/**
79
	 * The constructor.
80
	 */
81
	public function __construct() {
82
		$this->settings = new View_Settings();
83
		$this->fields = new Field_Collection();
84
		$this->widgets = new Widget_Collection();
85
	}
86
87
	/**
88
	 * Register the gravityview WordPress Custom Post Type.
89
	 *
90
	 * @internal
91
	 * @return void
92
	 */
93
	public static function register_post_type() {
94
95
		/** Register only once */
96
		if ( post_type_exists( 'gravityview' ) ) {
97
			return;
98
		}
99
100
		/**
101
		 * @filter `gravityview_is_hierarchical` Make GravityView Views hierarchical by returning TRUE
102
		 * This will allow for Views to be nested with Parents and also allows for menu order to be set in the Page Attributes metabox
103
		 * @since 1.13
104
		 * @param boolean $is_hierarchical Default: false
105
		 */
106
		$is_hierarchical = (bool)apply_filters( 'gravityview_is_hierarchical', false );
0 ignored issues
show
introduced by
No space after closing casting parenthesis is prohibited
Loading history...
107
108
		$supports = array( 'title', 'revisions' );
109
110
		if ( $is_hierarchical ) {
111
			$supports[] = 'page-attributes';
112
		}
113
114
		/**
115
		 * @filter  `gravityview_post_type_supports` Modify post type support values for `gravityview` post type
116
		 * @see add_post_type_support()
117
		 * @since 1.15.2
118
		 * @param array $supports Array of features associated with a functional area of the edit screen. Default: 'title', 'revisions'. If $is_hierarchical, also 'page-attributes'
119
		 * @param[in] boolean $is_hierarchical Do Views support parent/child relationships? See `gravityview_is_hierarchical` filter.
120
		 */
121
		$supports = apply_filters( 'gravityview_post_type_support', $supports, $is_hierarchical );
122
123
		/** Register Custom Post Type - gravityview */
124
		$labels = array(
125
			'name'                => _x( 'Views', 'Post Type General Name', 'gravityview' ),
126
			'singular_name'       => _x( 'View', 'Post Type Singular Name', 'gravityview' ),
127
			'menu_name'           => _x( 'Views', 'Menu name', 'gravityview' ),
128
			'parent_item_colon'   => __( 'Parent View:', 'gravityview' ),
129
			'all_items'           => __( 'All Views', 'gravityview' ),
130
			'view_item'           => _x( 'View', 'View Item', 'gravityview' ),
131
			'add_new_item'        => __( 'Add New View', 'gravityview' ),
132
			'add_new'             => __( 'New View', 'gravityview' ),
133
			'edit_item'           => __( 'Edit View', 'gravityview' ),
134
			'update_item'         => __( 'Update View', 'gravityview' ),
135
			'search_items'        => __( 'Search Views', 'gravityview' ),
136
			'not_found'           => \GravityView_Admin::no_views_text(),
137
			'not_found_in_trash'  => __( 'No Views found in Trash', 'gravityview' ),
138
			'filter_items_list'     => __( 'Filter Views list', 'gravityview' ),
139
			'items_list_navigation' => __( 'Views list navigation', 'gravityview' ),
140
			'items_list'            => __( 'Views list', 'gravityview' ),
141
			'view_items'            => __( 'See Views', 'gravityview' ),
142
			'attributes'            => __( 'View Attributes', 'gravityview' ),
143
		);
144
		$args = array(
145
			'label'               => __( 'view', 'gravityview' ),
146
			'description'         => __( 'Create views based on a Gravity Forms form', 'gravityview' ),
147
			'labels'              => $labels,
148
			'supports'            => $supports,
149
			'hierarchical'        => $is_hierarchical,
150
			/**
151
			 * @filter `gravityview_direct_access` Should Views be directly accessible, or only visible using the shortcode?
152
			 * @see https://codex.wordpress.org/Function_Reference/register_post_type#public
153
			 * @since 1.15.2
154
			 * @param[in,out] boolean `true`: allow Views to be accessible directly. `false`: Only allow Views to be embedded via shortcode. Default: `true`
155
			 * @param int $view_id The ID of the View currently being requested. `0` for general setting
156
			 */
157
			'public'              => apply_filters( 'gravityview_direct_access', gravityview()->plugin->is_compatible(), 0 ),
158
			'show_ui'             => gravityview()->plugin->is_compatible(),
159
			'show_in_menu'        => gravityview()->plugin->is_compatible(),
160
			'show_in_nav_menus'   => true,
161
			'show_in_admin_bar'   => true,
162
			'menu_position'       => 17,
163
			'menu_icon'           => '',
164
			'can_export'          => true,
165
			/**
166
			 * @filter `gravityview_has_archive` Enable Custom Post Type archive?
167
			 * @since 1.7.3
168
			 * @param boolean False: don't have frontend archive; True: yes, have archive. Default: false
169
			 */
170
			'has_archive'         => apply_filters( 'gravityview_has_archive', false ),
171
			'exclude_from_search' => true,
172
			'rewrite'             => array(
173
				/**
174
				 * @filter `gravityview_slug` Modify the url part for a View.
175
				 * @see https://docs.gravityview.co/article/62-changing-the-view-slug
176
				 * @param string $slug The slug shown in the URL
177
				 */
178
				'slug' => apply_filters( 'gravityview_slug', 'view' ),
179
180
				/**
181
				 * @filter `gravityview/post_type/with_front` Should the permalink structure
182
				 *  be prepended with the front base.
183
				 *  (example: if your permalink structure is /blog/, then your links will be: false->/view/, true->/blog/view/).
184
				 *  Defaults to true.
185
				 * @see https://codex.wordpress.org/Function_Reference/register_post_type
186 4
				 * @since 2.0
187 4
				 * @param bool $with_front
188 1
				 */
189 1
				'with_front' => apply_filters( 'gravityview/post_type/with_front', true ),
190
			),
191
			'capability_type'     => 'gravityview',
192 4
			'map_meta_cap'        => true,
193 4
		);
194
195
		register_post_type( 'gravityview', $args );
196 4
	}
197 4
198
	/**
199
	 * A renderer filter for the View post type content.
200
	 *
201
	 * @param string $content Should be empty, as we don't store anything there.
202
	 *
203
	 * @return string $content The view content as output by the renderers.
204
	 */
205
	public static function content( $content ) {
206
		$request = gravityview()->request;
207
208
		/**
209
		 * This is not a View. Bail.
210
		 *
211 4
		 * Shortcodes and oEmbeds and whatnot will be handled
212
		 *  elsewhere.
213
		 */
214 4
		if ( ! $view = $request->is_view() ) {
215
			return $content;
216
		}
217 4
218
		/**
219
		 * This View is password protected. Nothing to do here.
220 4
		 * WordPress outputs the form automagically inside `get_the_content`.
221
		 */
222
		if ( post_password_required( $view->ID ) ) {
0 ignored issues
show
Documentation introduced by
The property ID does not exist on object<GV\View>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
223
			gravityview()->log->notice( 'Post password is required for View #{view_id}', array( 'view_id' => $view->ID ) );
0 ignored issues
show
Documentation introduced by
The property ID does not exist on object<GV\View>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
224
			return __( 'You are not allowed to view this content.', 'gravityview' );
225
		}
226
227
		if ( ! $view->form ) {
228
			gravityview()->log->notice( 'View #{id} has no form attached to it.', array( 'id' => $view->ID ) );
0 ignored issues
show
Documentation introduced by
The property ID does not exist on object<GV\View>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
229
230
			/**
231
			 * This View has no data source. There's nothing to show really.
232 4
			 * ...apart from a nice message if the user can do anything about it.
233
			 */
234
			if ( \GVCommon::has_cap( array( 'edit_gravityviews', 'edit_gravityview' ), $view->ID ) ) {
0 ignored issues
show
Documentation introduced by
The property ID does not exist on object<GV\View>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
235
				return __( sprintf( 'This View is not configured properly. Start by <a href="%s">selecting a form</a>.', esc_url( get_edit_post_link( $view->ID, false ) ) ), 'gravityview' );
0 ignored issues
show
Documentation introduced by
The property ID does not exist on object<GV\View>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
introduced by
Expected a sanitizing function (see Codex for 'Data Validation'), but instead saw 'sprintf'
Loading history...
236
			}
237
238
			return $content;
239
		}
240
241
		/**
242
		 * Is this View directly accessible via a post URL?
243
		 *
244
		 * @see https://codex.wordpress.org/Function_Reference/register_post_type#public
245
		 */
246
247
		/**
248
		 * @filter `gravityview_direct_access` Should Views be directly accessible, or only visible using the shortcode?
249
		 * @deprecated
250
		 * @param[in,out] boolean `true`: allow Views to be accessible directly. `false`: Only allow Views to be embedded. Default: `true`
251
		 * @param int $view_id The ID of the View currently being requested. `0` for general setting
252
		 */
253
		$direct_access = apply_filters( 'gravityview_direct_access', true, $view->ID );
0 ignored issues
show
Documentation introduced by
The property ID does not exist on object<GV\View>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
254
255
		/**
256
		 * @filter `gravityview/request/output/direct` Should this View be directly accessbile?
257
		 * @since 2.0
258
		 * @param[in,out] boolean Accessible or not. Default: accessbile.
259
		 * @param \GV\View $view The View we're trying to directly render here.
260
		 * @param \GV\Request $request The current request.
261
		 */
262
		if ( ! apply_filters( 'gravityview/view/output/direct', $direct_access, $view, $request ) ) {
263
			return __( 'You are not allowed to view this content.', 'gravityview' );
264
		}
265
266
		/**
267
		 * Is this View an embed-only View? If so, don't allow rendering here,
268
		 *  as this is a direct request.
269
		 */
270
		if ( $view->settings->get( 'embed_only' ) && ! \GVCommon::has_cap( 'read_private_gravityviews' ) ) {
271
			return __( 'You are not allowed to view this content.', 'gravityview' );
272
		}
273
274
		/** Private, pending, draft, etc. */
275 4
		$public_states = get_post_stati( array( 'public' => true ) );
276
		if ( ! in_array( $view->post_status, $public_states ) && ! \GVCommon::has_cap( 'read_gravityview', $view->ID ) ) {
0 ignored issues
show
Documentation introduced by
The property post_status does not exist on object<GV\View>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
Documentation introduced by
The property ID does not exist on object<GV\View>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
277
			gravityview()->log->notice( 'The current user cannot access this View #{view_id}', array( 'view_id' => $view->ID ) );
0 ignored issues
show
Documentation introduced by
The property ID does not exist on object<GV\View>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
278 4
			return __( 'You are not allowed to view this content.', 'gravityview' );
279
		}
280
281
		/**
282
		 * Editing a single entry.
283
		 */
284
		if ( $entry = $request->is_edit_entry() ) {
285
			if ( $entry['status'] != 'active' ) {
0 ignored issues
show
introduced by
Found "!= '". Use Yoda Condition checks, you must
Loading history...
286
				gravityview()->log->notice( 'Entry ID #{entry_id} is not active', array( 'entry_id' => $entry->ID ) );
287
				return __( 'You are not allowed to view this content.', 'gravityview' );
288
			}
289
290 4
			if ( apply_filters( 'gravityview_custom_entry_slug', false ) && $entry->slug != get_query_var( \GV\Entry::get_endpoint_name() ) ) {
0 ignored issues
show
Bug introduced by
The property slug does not seem to exist in GV\Entry.

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
291 4
				gravityview()->log->error( 'Entry ID #{entry_id} was accessed by a bad slug', array( 'entry_id' => $entry->ID ) );
292 1
				return __( 'You are not allowed to view this content.', 'gravityview' );
293
			}
294 4
295
			if ( $view->settings->get( 'show_only_approved' ) ) {
296
				if ( ! \GravityView_Entry_Approval_Status::is_approved( gform_get_meta( $entry->ID, \GravityView_Entry_Approval::meta_key ) )  ) {
297
					gravityview()->log->error( 'Entry ID #{entry_id} is not approved for viewing', array( 'entry_id' => $entry->ID ) );
298
					return __( 'You are not allowed to view this content.', 'gravityview' );
299
				}
300
			}
301
302
			$renderer = new Edit_Entry_Renderer();
303
			return $renderer->render( $entry, $view, $request );
304
305
		/**
306 4
		 * Viewing a single entry.
307 4
		 */
308
		} else if ( $entry = $request->is_entry() ) {
309
			if ( $entry['status'] != 'active' ) {
0 ignored issues
show
introduced by
Found "!= '". Use Yoda Condition checks, you must
Loading history...
310
				gravityview()->log->notice( 'Entry ID #{entry_id} is not active', array( 'entry_id' => $entry->ID ) );
311
				return __( 'You are not allowed to view this content.', 'gravityview' );
312
			}
313
314
			if ( apply_filters( 'gravityview_custom_entry_slug', false ) && $entry->slug != get_query_var( \GV\Entry::get_endpoint_name() ) ) {
315
				gravityview()->log->error( 'Entry ID #{entry_id} was accessed by a bad slug', array( 'entry_id' => $entry->ID ) );
316
				return __( 'You are not allowed to view this content.', 'gravityview' );
317
			}
318 1
319 1
			if ( $view->settings->get( 'show_only_approved' ) ) {
320 1
				if ( ! \GravityView_Entry_Approval_Status::is_approved( gform_get_meta( $entry->ID, \GravityView_Entry_Approval::meta_key ) )  ) {
321
					gravityview()->log->error( 'Entry ID #{entry_id} is not approved for viewing', array( 'entry_id' => $entry->ID ) );
322
					return __( 'You are not allowed to view this content.', 'gravityview' );
323
				}
324
			}
325
326
			$renderer = new Entry_Renderer();
327
			return $renderer->render( $entry, $view, $request );
328
329
		/**
330
		 * Plain old View.
331
		 */
332
		} else {
333
			$renderer = new View_Renderer();
334 1
			return $renderer->render( $view, $request );
335
		}
336 1
		
337
		return $content;
0 ignored issues
show
Unused Code introduced by
return $content; does not seem to be reachable.

This check looks for unreachable code. It uses sophisticated control flow analysis techniques to find statements which will never be executed.

Unreachable code is most often the result of return, die or exit statements that have been added for debug purposes.

function fx() {
    try {
        doSomething();
        return true;
    }
    catch (\Exception $e) {
        return false;
    }

    return false;
}

In the above example, the last return false will never be executed, because a return statement has already been met in every possible execution path.

Loading history...
338 1
	}
339
340
341
	/**
342
	 * Construct a \GV\View instance from a \WP_Post.
343 1
	 *
344 1
	 * @param \WP_Post $post The \WP_Post instance to wrap.
345 1
	 *
346 1
	 * @api
347 1
	 * @since 2.0
348 1
	 * @return \GV\View|null An instance around this \WP_Post if valid, null otherwise.
349 1
	 */
350 1
	public static function from_post( $post ) {
351
		if ( ! $post || get_post_type( $post ) != 'gravityview' ) {
0 ignored issues
show
introduced by
Found "!= '". Use Yoda Condition checks, you must
Loading history...
352 1
			gravityview()->log->error( 'Only gravityview post types can be \GV\View instances.' );
353 1
			return null;
354
		}
355
356
		if ( $view = Utils::get( self::$cache, "View::from_post:{$post->ID}" ) ) {
357
			return $view;
358
		}
359
360
		$view = new self();
361
		$view->post = $post;
362
363
		/** Get connected form. */
364
		$view->form = GF_Form::by_id( $view->_gravityview_form_id );
0 ignored issues
show
Documentation introduced by
The property _gravityview_form_id does not exist on object<GV\View>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
365
		if ( ! $view->form ) {
366
			gravityview()->log->error( 'View #{view_id} tried attaching non-existent Form #{form_id} to it.', array(
367
				'view_id' => $view->ID,
0 ignored issues
show
Documentation introduced by
The property ID does not exist on object<GV\View>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
368
				'form_id' => $view->_gravityview_form_id ? : 0,
0 ignored issues
show
Documentation introduced by
The property _gravityview_form_id does not exist on object<GV\View>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
369 1
			) );
370 1
		} else if ( gravityview()->plugin->supports( Plugin::FEATURE_JOINS ) ) {
371 1
			/** And the connected joins. */
372
			foreach( (array)get_post_meta( $view->ID, '_gravityview_form_joins', true ) as $_join ) {
0 ignored issues
show
introduced by
No space after closing casting parenthesis is prohibited
Loading history...
373
				if ( ! is_array( $_join ) || count( $_join ) != 4 ) {
0 ignored issues
show
introduced by
Found "!= 4". Use Yoda Condition checks, you must
Loading history...
374
					continue;
375
				}
376
				list( $join, $join_column, $join_on, $join_on_column ) = $_join;
377
378
				$join = GF_Form::by_id( $join );
379
				$join_on = GF_Form::by_id( $join_on );
380
381 1
				$join_column = is_numeric( $join_column ) ? GF_Field::by_id( $join, $join_column ) : Internal_Field( $join_column );
382 1
				$join_on_column = is_numeric( $join_on_column ) ? GF_Field::by_id( $join_on, $join_on_column ) : Internal_Field( $join_on_column );
383 1
384
				$view->joins []= new Join( $join, $join_column, $join_on, $join_on_column );
0 ignored issues
show
introduced by
Expected 1 space before "="; 0 found
Loading history...
385
			}
386
		}
387
388
		/**
389
		 * @filter `gravityview/configuration/fields` Filter the View fields' configuration array.
390
		 * @since 1.6.5
391
		 *
392
		 * @deprecated Use `gravityview/view/configuration/fields` or `gravityview/view/fields` filters.
393
		 *
394
		 * @param $fields array Multi-array of fields with first level being the field zones.
395
		 * @param $view_id int The View the fields are being pulled for.
396
		 */
397 1
		$configuration = apply_filters( 'gravityview/configuration/fields', (array)$view->_gravityview_directory_fields, $view->ID );
0 ignored issues
show
Documentation introduced by
The property ID does not exist on object<GV\View>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
introduced by
No space after closing casting parenthesis is prohibited
Loading history...
398 1
399 1
		/**
400 1
		 * @filter `gravityview/view/configuration/fields` Filter the View fields' configuration array.
401 1
		 * @since 2.0
402 1
		 *
403 1
		 * @param array $fields Multi-array of fields with first level being the field zones.
404 1
		 * @param \GV\View $view The View the fields are being pulled for.
405 1
		 */
406 1
		$configuration = apply_filters( 'gravityview/view/configuration/fields', $configuration, $view );
407
408
		/**
409
		 * @filter `gravityview/view/fields` Filter the Field Collection for this View.
410 3
		 * @since 2.0
411 3
		 *
412
		 * @param \GV\Field_Collection $fields A collection of fields.
413
		 * @param \GV\View $view The View the fields are being pulled for.
414
		 */
415
		$view->fields = apply_filters( 'gravityview/view/fields', Field_Collection::from_configuration( $configuration ), $view );
416
417
		/**
418
		 * @filter `gravityview/view/configuration/widgets` Filter the View widgets' configuration array.
419
		 * @since 2.0
420
		 *
421
		 * @param array $fields Multi-array of widgets with first level being the field zones.
422
		 * @param \GV\View $view The View the widgets are being pulled for.
423
		 */
424
		$configuration = apply_filters( 'gravityview/view/configuration/widgets', (array)$view->_gravityview_directory_widgets, $view );
0 ignored issues
show
introduced by
No space after closing casting parenthesis is prohibited
Loading history...
425
426
		/**
427
		 * @filter `gravityview/view/widgets` Filter the Widget Collection for this View.
428
		 * @since 2.0
429
		 *
430
		 * @param \GV\Widget_Collection $widgets A collection of widgets.
431
		 * @param \GV\View $view The View the widgets are being pulled for.
432
		 */
433
		$view->widgets = apply_filters( 'gravityview/view/widgets', Widget_Collection::from_configuration( $configuration ), $view );
434
435
		/** View configuration. */
436
		$view->settings->update( gravityview_get_template_settings( $view->ID ) );
0 ignored issues
show
Documentation introduced by
The property ID does not exist on object<GV\View>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
437
438
		/** Add the template name into the settings. */
439
		$view->settings->update( array( 'template' => gravityview_get_template_id( $view->ID ) ) );
0 ignored issues
show
Documentation introduced by
The property ID does not exist on object<GV\View>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
440
441
		/** View basics. */
442
		$view->settings->update( array(
443
			'id' => $view->ID,
0 ignored issues
show
Documentation introduced by
The property ID does not exist on object<GV\View>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
444
		) );
445
446
		self::$cache[ "View::from_post:{$post->ID}" ] = &$view;
447
448
		return $view;
449
	}
450
451
	/**
452
	 * Flush the view cache.
453
	 *
454
	 * @param int $view_id The View to reset cache for. Optional. Default: resets everything.
455
	 *
456
	 * @internal
457
	 */
458
	public static function _flush_cache( $view_id = null ) {
459
		if ( $view_id ) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $view_id of type integer|null is loosely compared to true; this is ambiguous if the integer can be zero. You might want to explicitly use !== null instead.

In PHP, under loose comparison (like ==, or !=, or switch conditions), values of different types might be equal.

For integer values, zero is a special case, in particular the following results might be unexpected:

0   == false // true
0   == null  // true
123 == false // false
123 == null  // false

// It is often better to use strict comparison
0 === false // false
0 === null  // false
Loading history...
460
			unset( self::$cache[ "View::from_post:$view_id" ] );
461
			return;
462
		}
463
		self::$cache = array();
464
	}
465
466
	/**
467
	 * Construct a \GV\View instance from a post ID.
468
	 *
469
	 * @param int|string $post_id The post ID.
470
	 *
471
	 * @api
472
	 * @since 2.0
473
	 * @return \GV\View|null An instance around this \WP_Post or null if not found.
474
	 */
475
	public static function by_id( $post_id ) {
476
		if ( ! $post_id || ! $post = get_post( $post_id ) ) {
477
			return null;
478
		}
479
		return self::from_post( $post );
480
	}
481
482
	/**
483
	 * Determines if a view exists to begin with.
484
	 *
485
	 * @param int|\WP_Post|null $view The WordPress post ID, a \WP_Post object or null for global $post;
486
	 *
487
	 * @api
488
	 * @since 2.0
489
	 * @return bool Whether the post exists or not.
490
	 */
491
	public static function exists( $view ) {
492
		return get_post_type( $view ) == 'gravityview';
493
	}
494
495
	/**
496
	 * ArrayAccess compatibility layer with GravityView_View_Data::$views
497
	 *
498
	 * @internal
499
	 * @deprecated
500
	 * @since 2.0
501
	 * @return bool Whether the offset exists or not, limited to GravityView_View_Data::$views element keys.
502
	 */
503
	public function offsetExists( $offset ) {
0 ignored issues
show
Coding Style introduced by
The function name offsetExists is in camel caps, but expected offset_exists instead as per the coding standard.
Loading history...
504
		$data_keys = array( 'id', 'view_id', 'form_id', 'template_id', 'atts', 'fields', 'widgets', 'form' );
505
		return in_array( $offset, $data_keys );
506
	}
507
508
	/**
509
	 * ArrayAccess compatibility layer with GravityView_View_Data::$views
510
	 *
511
	 * Maps the old keys to the new data;
512
	 *
513
	 * @internal
514
	 * @deprecated
515
	 * @since 2.0
516
	 *
517
	 * @return mixed The value of the requested view data key limited to GravityView_View_Data::$views element keys.
518
	 */
519
	public function offsetGet( $offset ) {
0 ignored issues
show
Coding Style introduced by
The function name offsetGet is in camel caps, but expected offset_get instead as per the coding standard.
Loading history...
520
		
521
		gravityview()->log->notice( 'This is a \GV\View object should not be accessed as an array.' );
522
523
		if ( ! isset( $this[ $offset ] ) ) {
524
			return null;
525
		}
526
527
		switch ( $offset ) {
528
			case 'id':
529
			case 'view_id':
530
				return $this->ID;
0 ignored issues
show
Documentation introduced by
The property ID does not exist on object<GV\View>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
531
			case 'form':
532
				return $this->form;
533
			case 'form_id':
534
				return $this->form ? $this->form->ID : null;
535
			case 'atts':
536
				return $this->settings->as_atts();
0 ignored issues
show
Deprecated Code introduced by
The method GV\View_Settings::as_atts() has been deprecated.

This method has been deprecated.

Loading history...
537
			case 'template_id':
538
				return $this->settings->get( 'template' );
539
			case 'widgets':
540
				return $this->widgets->to_configuration();
0 ignored issues
show
Bug introduced by
The method to_configuration() does not seem to exist on object<GV\Widget_Collection>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
541
		}
542
	}
543
544
	/**
545
	 * ArrayAccess compatibility layer with GravityView_View_Data::$views
546
	 *
547
	 * @internal
548
	 * @deprecated
549
	 * @since 2.0
550
	 *
551
	 * @return void
552
	 */
553
	public function offsetSet( $offset, $value ) {
0 ignored issues
show
Coding Style introduced by
The function name offsetSet is in camel caps, but expected offset_set instead as per the coding standard.
Loading history...
554
		gravityview()->log->error( 'The old view data is no longer mutable. This is a \GV\View object should not be accessed as an array.' );
555
	}
556
557
	/**
558
	 * ArrayAccess compatibility layer with GravityView_View_Data::$views
559
	 *
560
	 * @internal
561
	 * @deprecated
562
	 * @since 2.0
563
	 * @return void
564
	 */
565
	public function offsetUnset( $offset ) {
0 ignored issues
show
Coding Style introduced by
The function name offsetUnset is in camel caps, but expected offset_unset instead as per the coding standard.
Loading history...
566
		gravityview()->log->error( 'The old view data is no longer mutable. This is a \GV\View object should not be accessed as an array.' );
567
	}
568
569
	/**
570
	 * Be compatible with the old data object.
571
	 *
572
	 * Some external code expects an array (doing things like foreach on this, or array_keys)
573
	 *  so let's return an array in the old format for such cases. Do not use unless using
574
	 *  for back-compatibility.
575
	 *
576
	 * @internal
577
	 * @deprecated
578
	 * @since 2.0
579
	 * @return array
580
	 */
581
	public function as_data() {
582
		return array(
583
			'id' => $this->ID,
0 ignored issues
show
Documentation introduced by
The property ID does not exist on object<GV\View>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
584
			'view_id' => $this->ID,
0 ignored issues
show
Documentation introduced by
The property ID does not exist on object<GV\View>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
585
			'form_id' => $this->form ? $this->form->ID : null,
586
			'form' => $this->form ? gravityview_get_form( $this->form->ID ) : null,
587
			'atts' => $this->settings->as_atts(),
0 ignored issues
show
Deprecated Code introduced by
The method GV\View_Settings::as_atts() has been deprecated.

This method has been deprecated.

Loading history...
588
			'fields' => $this->fields->by_visible()->as_configuration(),
589
			'template_id' => $this->settings->get( 'template' ),
590
			'widgets' => $this->widgets->as_configuration(),
591
		);
592
	}
593
594
	/** 
595
	 * Retrieve the entries for the current view and request.
596
	 *
597
	 * @param \GV\Request The request. Usued for now.
598
	 *
599
	 * @return \GV\Entry_Collection The entries.
600
	 */
601
	public function get_entries( $request ) {
602
		$entries = new \GV\Entry_Collection();
603
		if ( $this->form ) {
604
			/**
605
			 * @todo: Stop using _frontend and use something like $request->get_search_criteria() instead
606
			 */
607
			$parameters = \GravityView_frontend::get_view_entries_parameters( $this->settings->as_atts(), $this->form->ID );
0 ignored issues
show
Deprecated Code introduced by
The method GV\View_Settings::as_atts() has been deprecated.

This method has been deprecated.

Loading history...
608
609
			if ( $request instanceof REST\Request ) {
610
				$atts = $this->settings->as_atts();
0 ignored issues
show
Deprecated Code introduced by
The method GV\View_Settings::as_atts() has been deprecated.

This method has been deprecated.

Loading history...
611
				$paging_parameters = wp_parse_args( $request->get_paging(), array(
612
						'paging' => array( 'page_size' => $atts['page_size'] ),
613
					) );
0 ignored issues
show
Coding Style introduced by
This line of the multi-line function call does not seem to be indented correctly. Expected 16 spaces, but found 20.
Loading history...
614
				$parameters['paging'] = $paging_parameters['paging'];
615
			}
616
617
			$page = Utils::get( $parameters['paging'], 'current_page' ) ?
618
				: ( ( ( $parameters['paging']['offset'] - $this->settings->get( 'offset' ) ) / $parameters['paging']['page_size'] ) + 1 );
619
620
			if ( gravityview()->plugin->supports( Plugin::FEATURE_JOINS ) ) {
621
				/**
622
				 * New \GF_Query stuff :)
623
				 */
624
				$query = new \GF_Query( $this->form->ID, $parameters['search_criteria'], $parameters['sorting'] );
625
626
				$query->limit( $parameters['paging']['page_size'] )
627
					->page( $page );
628
629
				/**
630
				 * Any joins?
631
				 */
632
				if ( count( $this->joins ) ) {
633
					foreach ( $this->joins as $join ) {
634
						$query = $join->as_query_join( $query );
635
					}
636
				}
637
638
				/**
639
				 * @action `gravityview/view/query` Override the \GF_Query before the get() call.
640
				 * @param \GF_Query $query The current query object
641
				 * @param \GV\View $this The current view object
642
				 * @param \GV\Request $request The request object
643
				 */
644
				do_action( 'gravityview/view/query', $query, $this, $request );
645
646
				/**
647
				 * Map from Gravity Forms entries arrays to an Entry_Collection.
648
				 */
649
				if ( count( $this->joins ) ) {
650
					foreach ( $query->get() as $entry ) {
651
						$entries->add(
652
							Multi_Entry::from_entries( array_map( '\GV\GF_Entry::from_entry', $entry ) )
653
						);
654
					}
655
				} else {
656
					array_map( array( $entries, 'add' ), array_map( '\GV\GF_Entry::from_entry', $query->get() ) );
657
				}
658
659
				/**
660
				 * Add total count callback.
661
				 */
662
				$entries->add_count_callback( function() use ( $query ) {
663
					return $query->total_found;
664
				} );
665
			} else {
666
				$entries = $this->form->entries
0 ignored issues
show
Documentation introduced by
The property entries does not exist on object<GV\Form>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
667
					->filter( \GV\GF_Entry_Filter::from_search_criteria( $parameters['search_criteria'] ) )
668
					->offset( $this->settings->get( 'offset' ) )
669
					->limit( $parameters['paging']['page_size'] )
670
					->page( $page );
671
672
				if ( ! empty( $parameters['sorting'] ) ) {
673
					$field = new \GV\Field();
674
					$field->ID = $parameters['sorting']['key'];
675
					$direction = strtolower( $parameters['sorting']['direction'] ) == 'asc' ? \GV\Entry_Sort::ASC : \GV\Entry_Sort::DESC;
676
					$entries = $entries->sort( new \GV\Entry_Sort( $field, $direction ) );
677
				}
678
			}
679
		}
680
681
		/**
682
		 * @filter `gravityview/view/entries` Modify the entry fetching filters, sorts, offsets, limits.
683
		 * @param \GV\Entry_Collection $entries The entries for this view.
684
		 * @param \GV\View $view The view.
685
		 * @param \GV\Request $request The request.
686
		 */
687
		return apply_filters( 'gravityview/view/entries', $entries, $this, $request );
688
	}
689
690
	public function __get( $key ) {
691
		if ( $this->post ) {
692
			$raw_post = $this->post->filter( 'raw' );
693
			return $raw_post->{$key};
694
		}
695
		return isset( $this->{$key} ) ? $this->{$key} : null;
696
	}
697
}
698